1. 首先需要引入 Quartz 的依赖.
- <!--quartz-->
- <dependency>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-quartz</artifactId>
- </dependency>
2. 创建 Job 类并继承 QuartzJobBean, 重写 executeInternal() 方法, 该方法用来执行具体的 Job 任务.
- public class WeatherDataSyncJob extends QuartzJobBean {
- private final static Logger logger=LoggerFactory.getLogger(WeatherDataSyncJob.class);
- @Autowired
- private CityDataService cityDataService;
- @Autowired
- private WeatherDataService weatherDataService;
- @Override
- protected void executeInternal(JobExecutionContext jobExecutionContext) {// 执行的动作
- logger.info("Weather data Sync Job start");
- // 获取城市 ID 列表
- List<City> cityList=null;
- try {
- cityList=cityDataService.listCity();
- } catch (Exception e) {
- logger.error("Exception", e);
- }
- // 遍历城市 ID 获取天气
- for(City city:cityList){
- String cityId=city.getCityId();
- logger.info("Weather Data sync job ,cityId:{}",cityId);
- weatherDataService.syncDataByCityId(cityId);
- }
- logger.info("Weather data Sync Job end");
- }
- }
3. 创建 Quartz 的配置类, 在配置类中创建 JobDetail 对象, 然后创建 Trigger 对象来执行 JobDetail 中的 Job, 并且可通过 SimpleScheduleBuilder 对象来配置定时任务的一些参数.
在下述配置中, Job 被设置为每隔半个小时执行一次, 每执行一次就会调用一次 executeInternal() 方法.
- @Configuration
- public class QuartzConfiguration {
- private static final int TIME=1800;// 更新频率
- // 创建 JobDetail
- @Bean
- public JobDetail weatherDataSyncJobDetail(){
- return JobBuilder.newJob(WeatherDataSyncJob.class)
- .withIdentity("weatherDataSyncJob")// 定义 JobDetail 的名称
- .storeDurably().build();
- }
- // 创建 trigger, 执行 JobDetail
- @Bean
- public Trigger weatherDataSyncTrigger(){
- // 每隔 1800 秒重复执行
- SimpleScheduleBuilder schedBuilder=SimpleScheduleBuilder.simpleSchedule()
- .withIntervalInSeconds(TIME).repeatForever();
- return TriggerBuilder.newTrigger().forJob(weatherDataSyncJobDetail())
- .withIdentity("weatherDataSyncTrigger")// 定义 trigger 的名称
- .withSchedule(schedBuilder).build();
- }
- }
来源: http://www.jianshu.com/p/9bd2156c6b85