1、pom.xml文件
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>test.task</groupId>
<artifactId>taskTest</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>taskTest</name>
<url>http://maven.apache.org</url>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.6.RELEASE</version>
<relativePath /> <!-- lookup parent from repository -->
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- fastJson -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.3</version>
</dependency>
<!-- mybatis -->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.3.2</version>
</dependency>
<!-- mysql驱动包 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.2</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
</project>
2、启动类App.java
package task.test;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.scheduling.annotation.EnableScheduling;
/**
* Hello world!
*
*/
@SpringBootApplication
@EnableAutoConfiguration
@EnableScheduling
@MapperScan({"task.test.mapper"})
public class App
{
public static void main( String[] args )
{
SpringApplication.run(App.class, args);
}
}
3、实体类Cron
package task.test.entity;
public class Cron {
private String cronId;
private String cron;
public String getCronId() {
return cronId;
}
public void setCronId(String cronId) {
this.cronId = cronId == null ? null : cronId.trim();
}
public String getCron() {
return cron;
}
public void setCron(String cron) {
this.cron = cron == null ? null : cron.trim();
}
}
4、CronMapper.java
package task.test.mapper;
import java.util.List;
import task.test.entity.Cron;
public interface CronMapper {
int insert(Cron record);
List<Cron> selectAll();
}
5、CronMapper.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="task.test.mapper.CronMapper" >
<resultMap id="BaseResultMap" type="task.test.entity.Cron" >
<result column="cron_id" property="cronId" jdbcType="VARCHAR" />
<result column="cron" property="cron" jdbcType="VARCHAR" />
</resultMap>
<insert id="insert" parameterType="task.test.entity.Cron" >
insert into cron (cron_id, cron)
values (#{cronId,jdbcType=VARCHAR}, #{cron,jdbcType=VARCHAR})
</insert>
<select id="selectAll" resultMap="BaseResultMap" >
select cron_id, cron
from cron
</select>
</mapper>
6、任务调度配置类ScheduleConfig
package task.test.config;
import java.time.LocalDateTime;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
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 org.springframework.util.StringUtils;
import task.test.mapper.CronMapper;
@Configuration
@EnableScheduling
public class ScheduleConfig implements SchedulingConfigurer {
@Autowired
private CronMapper cronMapper;
/**
* 执行定时任务.
*/
@Override
public void configureTasks(ScheduledTaskRegistrar taskRegistrar) {
taskRegistrar.addTriggerTask(
// 1.添加任务内容(Runnable)
() -> {
// 1.1具体任务
System.out.println("执行定时任务: " + LocalDateTime.now().toLocalTime());
},
// 2.设置执行周期(Trigger)
triggerContext -> {
// 2.1 从数据库获取执行周期
String cron = cronMapper.selectAll().get(0).getCron();
// 2.2 合法性校验.
if (StringUtils.isEmpty(cron)) {
// 根据需求修改
}
// 2.3 返回执行周期(Date)
return new CronTrigger(cron).nextExecutionTime(triggerContext);
});
}
}
7、application.yml配置文件
spring:
datasource:
url: jdbc:mysql://***:3306/***
username: root
password: root
8、数据库建表语句
DROP TABLE IF EXISTS `cron`;
CREATE TABLE `cron` (
`cron_id` varchar(30),
`cron` varchar(30)
);
INSERT INTO `cron` VALUES ('1', '0/5 * * * * ?');