定时任务大致有2种用法,一种是定时的时间定死直接写在后端,另一种是从数据库中取出时间,总的来说第一种用的比较多,第二种比较灵活。
1、导入依赖
<!-- Web-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- AOP-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency>
<!-- Redis -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<!-- MySql-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.20</version>
<scope>runtime</scope>
</dependency>
<!-- MyBatis-->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.2.2</version>
</dependency>
<!-- 添加mybatis依赖 -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.5</version>
<scope>compile</scope>
</dependency>
2、第一种方法实现定时任务
package ptcc9.text;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.scheduling.annotation.Scheduled;
import ptcc9.mapper.UserMapper;
import javax.annotation.Resource;
import java.time.LocalDateTime;
@Configuration
@EnableScheduling
public class ScheduleText {
@Scheduled(cron = "0/5 * * * * ?")
private void configureTexts(){
System.err.println("执行时间: "+ LocalDateTime.now());
}
}
@EnableScheduling 此注解表示开启定时任务
@Scheduled(cron = “0/5 * * * * ?”) 在这个注解里设置定时任务多久开启一次(注:不用秒定时就把秒位变成 *,同理用什么单位定时变什么,用不到的就变成 * )
秒(0~59)
分(0~59)
时(0~23)
日(0~31)
月(0~11)
运行之后返回结果
3、第二种方法实现定时任务
首先在库里建个表,包含以下内容,然后在.yml文件中设置好数据库信息。
建一个mapper层
package ptcc9.mapper;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;
@Mapper
@Repository
public interface UserMapper {
String selects();
}
再建一个.xml文档来写sql
<?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="ptcc9.mapper.UserMapper">
<select id="selects" resultType="java.lang.String">
select cron
from cron
limit 1
</select>
</mapper>
方法体
package ptcc9.text;
import com.aliyun.oss.common.utils.StringUtils;
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 ptcc9.mapper.UserMapper;
import javax.annotation.Resource;
import java.time.LocalDateTime;
@Configuration
@EnableScheduling
public class ScheduleText implements SchedulingConfigurer {
@Resource
private UserMapper userMapper;
@Override
public void configureTasks(ScheduledTaskRegistrar scheduledTaskRegistrar) {
scheduledTaskRegistrar.addTriggerTask(
() -> System.out.println("执行动态定时任务: " + LocalDateTime.now().toLocalTime()),
triggerContext -> {
String selects = userMapper.selects();
if (StringUtils.isNullOrEmpty(selects)){
}
return new CronTrigger(selects).nextExecutionTime(triggerContext);
}
);
}
}