集成过程可以参照此文章:https://blog.csdn.net/HXNLYW/article/details/95055601
本文要讲的是在集成过程中一个小问题,集成后添加Job时,数据库中未生成记录问题(无记录)
Springboot应用启动过程中会打印以下内容:
2019-09-24 17:26:07.199 INFO 10996 --- [ main] org.quartz.core.QuartzScheduler : Scheduler meta-data: Quartz Scheduler (v2.3.1) 'schedulerFactoryBean' with instanceId 'NON_CLUSTERED'
Scheduler class: 'org.quartz.core.QuartzScheduler' - running locally.
NOT STARTED.
Currently in standby mode.
Number of jobs executed: 0
Using thread pool 'org.quartz.simpl.SimpleThreadPool' - with 10 threads.
Using job-store 'org.springframework.scheduling.quartz.LocalDataSourceJobStore' - which supports persistence. and is not clustered.
问题原因: 如上面打印代码所说,scheduler为开始。虽然添加的Job也能成功执行,但数据库中会无记录,导致持久化失败。
解决方案:在应用启动后执行: scheduler.start();关键代码如下:
@PostConstruct
public void startScheduler() {
try {
scheduler.start();
} catch (SchedulerException e) {
e.printStackTrace();
}
}
可以将上述代码添加到你的QuartzConfig配置类中,也可以添加到自定义的QuartzService实现类中,这两种方式任选其一
代码如下:
方法一:
@Configuration
public class QuartzConfig {
.....
.....
..... //其他代码省略
@Bean
public Scheduler scheduler() {
return schedulerFactoryBean().getScheduler();
}
@PostConstruct
public void startScheduler() {
try {
scheduler().start();
} catch (SchedulerException e) {
e.printStackTrace();
}
}
}
方法二
@Service
public class QuartzServiceImpl implements QuartzService {
@Autowired
private Scheduler scheduler;
@PostConstruct
public void startScheduler() {
try {
scheduler.start();
} catch (SchedulerException e) {
e.printStackTrace();
}
}
}