quartz定时任务框架搭建,以及解决service注入为空问题。
在Spring Boot项目中使用Quartz定时任务,你需要做以下几步:
- 添加依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-quartz</artifactId>
</dependency>
- 创建Job实现类:
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.springframework.beans.factory.annotation.Autowired;
public class MyJob implements Job {
@Autowired
private MyService myService;
@Override
public void execute(JobExecutionContext context) throws JobExecutionException {
myService.doSomething();
}
}
- 配置Job和Trigger:
import org.quartz.JobBuilder;
import org.quartz.JobDetail;
import org.quartz.Trigger;
import org.quartz.TriggerBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class QuartzConfig {
@Bean
public JobDetail myJobDetail() {
return JobBuilder.newJob(MyJob.class)
.withIdentity("myJob")
.build();
}
@Bean
public Trigger myJobTrigger() {
return TriggerBuilder.newTrigger()
.forJob(myJobDetail())
.withIdentity("myTrigger")
.startNow()
.withSchedule(simpleSchedule()
.withIntervalInSeconds(10)
.repeatForever())
.build();
}
}
- 确保Service组件被Spring管理:
import org.springframework.stereotype.Service;
@Service
public class MyService {
public void doSomething() {
// 业务逻辑
}
}
确保MyService
类上有@Service
注解,这样Quartz定时任务在执行时就能注入MyService
实例。
如果遇到注入服务为空的问题,请确保MyJob
类也被Spring管理,即添加@Component
注解。Quartz默认不使用Spring的ApplicationContext,所以无法自动注入,但是可以通过实现JobFactory
来解决这个问题。
以上步骤可以搭配使用Spring Boot的自动配置,非常简洁高效地实现定时任务的配置和执行。
评论已关闭