SpringBoot2.x读取数据库实现定时任务
SpringBoot2.x整合mybatis读取数据库实现定时任务,适合初学者学习。
第一步:准备开发环境 JDK:1.8 Maven:apache-maven-3.6.0
第二步:添加Maven相关依赖
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.4.RELEASE</version>
<relativePath/>
</parent>
<properties>
<java.version>1.8</java.version>
<!-- 解决maven的pom.xml文件第一行报错 Unknown Error -->
<maven-jar-plugin.version>3.1.1</maven-jar-plugin.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- quartz -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-quartz</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.46</version>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.3.2</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
复制
第三步:application.yml配置
server:
port: 8081
spring:
datasource:
url: jdbc:mysql://127.0.0.1:3306/demo?characterEncoding=utf8
driver-class-name: com.mysql.jdbc.Driver
username: root
password: 123456
复制
第四步:创建SQL脚本
create table `task_job` (
`task_id` varchar ,
`task_cron` varchar ,
`task_Name` varchar ,
`task_Desc` varchar ,
`task_status` varchar
);
insert into `task_job` (`task_id`, `task_cron`, `task_Name`, `task_Desc`, `task_status`) values('1','0/5 * * * * ?','查询定时任务','每5秒执行一次','0');
复制
第五步:编写Dao类
package com.xiaowen.dao;
import org.apache.ibatis.annotations.Select;
public interface TaskCronDao {
@Select("SELECT task_cron FROM task_job WHERE task_status='0'")
String findTaskCron();
}
复制
第六步:编写定时器配置类
package com.xiaowen.quart;
import java.text.SimpleDateFormat;
import java.util.Date;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.Trigger;
import org.springframework.scheduling.TriggerContext;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.scheduling.annotation.SchedulingConfigurer;
import org.springframework.scheduling.config.ScheduledTaskRegistrar;
import org.springframework.scheduling.support.CronTrigger;
import com.xiaowen.dao.TaskCronDao;
/**
* 定时器
* @author xiaowen
*
*/
@Configuration
@EnableScheduling
public class TaskCronConfig implements SchedulingConfigurer{
@Autowired
private TaskCronDao taskCronDao;
public void configureTasks(ScheduledTaskRegistrar taskRegistrar) {
//从数据库获取执行周期
String cron = taskCronDao.findTaskCron();
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
taskRegistrar.addTriggerTask(getRunnable(sdf), getTrigger(cron));
}
private Trigger getTrigger(String cron) {
return new Trigger() {
@Override
public Date nextExecutionTime(TriggerContext triggerContext) {
CronTrigger trigger = new CronTrigger(cron);
Date nextExec = trigger.nextExecutionTime(triggerContext);
return nextExec;
}
};
}
private Runnable getRunnable(SimpleDateFormat sdf) {
return new Runnable() {
@Override
public void run() {
System.out.println("执行任务:"+sdf.format(new Date()));
}
};
}
}
复制
第七步:编写启动类
package com.xiaowen;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
@MapperScan("com.xiaowen.dao")
public class QuartzApplication {
public static void main(String[] args) {
SpringApplication.run(QuartzApplication.class, args);
}
}
复制
第八步:运行启动类,效果如下
到此,SpringBoot2.x整合mybatis读取数据库实现定时任务已经完成
关注公众号
关注头条号