定时任务--静态 和 动态

依赖

<dependencies>

        
        <dependency>
            <groupId>mysqlgroupId>
            <artifactId>mysql-connector-javaartifactId>
            <scope>runtimescope>
        dependency>

        
        <dependency>
            <groupId>com.baomidougroupId>
            <artifactId>mybatis-plus-boot-starterartifactId>
            <version>3.4.3version>
        dependency>

        <dependency>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-starter-webartifactId>
        dependency>

        <dependency>
            <groupId>org.projectlombokgroupId>
            <artifactId>lombokartifactId>
            <optional>trueoptional>
        dependency>
        <dependency>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-starter-testartifactId>
            <scope>testscope>
        dependency>
    dependencies>

启动类

@SpringBootApplication
@MapperScan("com.example.scheduledtask.generator.mapper")
@EnableScheduling//这里
public class ScheduledtaskApplication {

    public static void main(String[] args) {
        SpringApplication.run(ScheduledtaskApplication.class, args);
    }

}

定时任务
随着项目的启动而启动,如果需要更改循环时间,需要重启应用

//1.主要用于标记配置类,兼备Component的效果。
@Configuration
public class StaticTask {

    @Scheduled(cron = "0/5 * * * * ?")
    private void configureTasks() {
        System.err.println("你好,我是StaticTask定时任务,我每5秒执行一次");
    }

}

动态任务
动态任务就是说,从数据库中读取循环时间,数据库中只要改动,那么项目中的循环时间就会随之改变,所以说项目中引用了 mybatisplus ,而库中存的内容很简单
定时任务--静态 和 动态_第1张图片

@Component
/*动态的定时任务 就是说我们把定时任务的循环时间写在数据库中 可以随时的更改而不需要重启应用
* 当然,前提是 数据库中的 cron表达式是正确的 如果错误一次,那么就需要重新启动应用才行*/
public class DynamicTask implements SchedulingConfigurer {

    @Autowired
    private CronService cronService;

    @Autowired
    private TbProductService tbProductService;

    @Override
    public void configureTasks(ScheduledTaskRegistrar taskRegistrar) {

        taskRegistrar.addTriggerTask(new Runnable() {
            @Override
            public void run() {
                /*任务的具体内容,比如 定期获取学生列表 老师列表等等*/
                TbProduct byId = tbProductService.getById(2);
                System.out.println(byId);
            }
        }, new Trigger() {
            @Override
            public Date nextExecutionTime(TriggerContext triggerContext) {
                /*获取执行周期的具体代码*/
                Cron cron = cronService.getById(1);
                String stringCron = cron.getCron();
                return new CronTrigger(stringCron).nextExecutionTime(triggerContext);
            }
        });
    }
}

你可能感兴趣的:(java)