SpringBoot定时任务

本文介绍了两种在Spring Boot中实现定时任务的方法。第一种是使用`@Scheduled`注解配合cron表达式静态配置定时任务,第二种是通过数据库动态获取cron表达式,更具灵活性。示例代码展示了如何集成MyBatis、Redis和数据库来实现动态定时任务。
摘要由CSDN通过智能技术生成

定时任务大致有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);
                }
        );
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值