如何实现Springboot集成任务调度
Spring Boot是一种快速开发的框架,其优点在于程序的结构清晰可读,且整个程序都处于容器环境中,保证了程序的稳定性。任务调度是企业级应用中必不可少的一部分,因此,如何将任务调度与Spring Boot 集成起来是一个值得探讨的话题。
本文将以 Quartz 作为任务调度框架,并介绍如何将 Quartz 与 Spring Boot 集成起来,实现一个简单的任务调度应用。
步骤1:添加 Quartz 依赖
在 pom.xml 文件中添加 Quartz 的依赖:
<dependency> <groupId>org.quartz-scheduler</groupId> <artifactId>quartz</artifactId> <version>2.3.2</version> </dependency>
依赖添加完成后,运行 mvn clean install 命令,从 Maven 仓库下载依赖。
步骤2:创建 Quartz 任务
Quartz任务类需要实现 Job 接口,并且重写 execute() 方法。在 execute() 方法中编写需要执行的任务。
@Component
public class SimpleJob implements Job {
@Override
public void execute(JobExecutionContext context) throws JobExecutionException {
System.out.println("开始执行定时任务:" + new Date());
}
}
步骤3:配置 Quartz 定时任务
在 Spring Boot 项目中,可通过配置文件方式来创建 Quartz 定时任务。
首先,在 application.properties 文件中配置 Quartz。
# 配置 Quartz 调度器 quartz.scheduler.instanceName = MyScheduler quartz.scheduler.instanceId = AUTO quartz.scheduler.skipUpdateCheck = true # 配置任务存储方式 quartz.jobStore.class = org.quartz.impl.jdbcjobstore.JobStoreTX quartz.jobStore.driverDelegateClass = org.quartz.impl.jdbcjobstore.StdJDBCDelegate quartz.jobStore.dataSource = myDS quartz.jobStore.tablePrefix = QRTZ_ quartz.jobStore.isClustered = false # 配置数据源 quartz.dataSource.myDS.driver = com.mysql.jdbc.Driver quartz.dataSource.myDS.URL = jdbc:mysql://localhost:3306/quartz quartz.dataSource.myDS.user = root quartz.dataSource.myDS.password = admin123 quartz.dataSource.myDS.maxConnections = 10
接下来,创建 TaskConfig 类。
@Configuration
public class TaskConfig {
@Autowired
private DataSource dataSource;
@Autowired
private SimpleJob simpleJob;
@Bean
public JobDetail jobDetail() {
return JobBuilder.newJob(simpleJob.getClass())
.withIdentity("simpleJob")
.usingJobData("name", "test")
.storeDurably().build();
}
@Bean
public Trigger trigger() {
SimpleScheduleBuilder builder = SimpleScheduleBuilder.simpleSchedule()
.withIntervalInSeconds(5)
.repeatForever();
return TriggerBuilder.newTrigger()
.forJob(jobDetail())
.withIdentity("simpleTrigger")
.usingJobData("age", 26)
.withSchedule(builder)
.build();
}
@Bean
public SchedulerFactoryBean schedulerFactory() {
SchedulerFactoryBean bean = new SchedulerFactoryBean();
bean.setDataSource(dataSource);
bean.setJobFactory(jobFactory());
bean.setTriggers(trigger());
return bean;
}
@Bean
public SpringBeanJobFactory jobFactory() {
return new SpringBeanJobFactory();
}
}
在 TaskConfig 类中,首先使用 @Autowired 自动注入了 DataSource 和 SimpleJob。再通过 @Bean 注解的方式创建了 JobDetail、Trigger 和 SchedulerFactoryBean 对象。JobDetail 对象中,任务名称为 simpleJob,JobData 中设置了名称为 test 的参数;Trigger 对象中,任务的调度策略为每 5 秒执行一次;SchedulerFactoryBean 对象中,设置了数据源、JobFactory 和Trigger。
步骤4:启动定时任务
在 Spring Boot 项目的启动类中,注入 SchedulerFactoryBean 实例,并调用 scheduler.start() 方法,启动定时任务。
@SpringBootApplication
public class Application implements CommandLineRunner {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
@Autowired
private SchedulerFactoryBean schedulerFactory;
@Override
public void run(String... args) throws Exception {
Scheduler scheduler = schedulerFactory.getScheduler();
scheduler.start();
}
}
运行 Spring Boot 项目,即可在控制台中看到输出信息,每隔 5 秒钟输出一条信息。
至此,Spring Boot 集成 Quartz 定时任务的实现,就完成了。
