【发布时间】:2020-08-28 00:13:54
【问题描述】:
我正在使用 Spring Boot,并且我有一项服务可以从 DB 中存储/检索一些数据。我想使用使用我的服务的石英作业。我尝试了互联网上的许多建议将石英与弹簧靴集成,但它不起作用。你能帮我吗?
这是我的代码:
1) 我在 pom.xml 中添加了 org.quartz-scheduler 作为依赖项:
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<dependency>
<groupId>org.quartz-scheduler</groupId>
<artifactId>quartz</artifactId>
</dependency>
</dependencies>
2) 这是我的 application.properties 配置为使用 mysql 作为我的服务的数据库:
3) 这是我的服务:
4) 调度器类:
导入 org.quartz.JobBuilder; 导入 org.quartz.JobDetail; 导入 org.quartz.Scheduler; 导入 org.quartz.SchedulerException; 导入 org.quartz.SchedulerFactory; 导入 org.quartz.SimpleScheduleBuilder; 导入 org.quartz.SimpleTrigger; 导入 org.quartz.TriggerBuilder; 导入 org.quartz.impl.StdSchedulerFactory; 公共类 ReportScheduler { 公共无效scanAndUpdateReports(){ SchedulerFactory sf = new StdSchedulerFactory(); 尝试 { 调度器 scheduler = sf.getScheduler(); 调度程序.start(); JobDetail 作业 = JobBuilder.newJob(ReportsJob.class) .withIdentity("reportsJob") 。建造(); SimpleTrigger 触发器 = (SimpleTrigger) TriggerBuilder.newTrigger() .withIdentity("reportsTrigger") 。现在开始() .withSchedule(SimpleScheduleBuilder.simpleSchedule() .withIntervalInSeconds(60).repeatForever()) 。建造(); scheduler.scheduleJob(作业,触发器); } 捕捉(SchedulerException e){ // TODO 自动生成的 catch 块 e.printStackTrace(); } } }5) 以及我想要自动装配 ReportService 的作业类,但它为空:
公共类 ReportsJob 实现 Job { @自动连线 报告服务报告服务; //这不起作用(它为空) @覆盖 公共无效执行(JobExecutionContext 上下文)抛出 JobExecutionException { 列出报告 = reportService.getPendingReports(); System.out.println("报告:\n"+报告); } }6) 现在我正在从 main 方法调用调度程序:
【问题讨论】:
-
有什么例外吗?
-
您的作业似乎是手动创建的,因此无法进行自动装配。
标签: java spring-boot quartz-scheduler