Spring Boot 实现定时任务之Spring Task
程序员文章站
2022-04-27 18:49:03
...
- 本例中结合了MySQL和Redis使用
1.创建任务类
@Slf4j
@Component
@Async
public class ScheduledService {
private final static Logger logger = LoggerFactory.getLogger(ScheduledService.class);
private IFriendDao iFriendDao;
private IRedisService iRedisService;
@Autowired
public ScheduledService(IFriendDao iFriendDao, IRedisService iRedisService) {
this.iFriendDao = iFriendDao;
this.iRedisService = iRedisService;
}
//每隔1小时执行一次
@Scheduled(cron = "0 0 */10 * * ?")
public void scheduled(){
try {
//从MySQL中获取数据
List<Map<String,Object>> rank=iFriendDao.overallRanking();
//存入Redis
iRedisService.addRank(rank);
logger.info("获取总排名");
}catch (Exception e) {
logger.error(String.valueOf(e));
}
}
}
2.配置类
@Configuration
@EnableAsync
public class AsyncConfig {
/*
此处成员变量应该使用@Value从配置中读取
*/
private int corePoolSize = 10;
private int maxPoolSize = 200;
private int queueCapacity = 10;
@Bean
public Executor taskExecutor() {
ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
executor.setCorePoolSize(corePoolSize);
executor.setMaxPoolSize(maxPoolSize);
executor.setQueueCapacity(queueCapacity);
executor.initialize();
return executor;
}
}
- 配置类使得每一个任务都是在不同的线程中
3.启动类上添加@EnableScheduling注解开启对定时任务的支持