zoukankan      html  css  js  c++  java
  • 论SpringBoot集成quartz的两种简单方式

    一、第一种(配置类+任务类):

    配置类如下:

    @Slf4j
    @Configuration
    public class QuartzConfig  {
    
        /**
         * 统计日志
         */
        @Bean
        public JobDetail statsLogJobJobDetail() {
            return JobBuilder.newJob(StatsLogTask.class)
                    .withIdentity(StatsLogTask.TASK_IDENTITY)
                    .storeDurably().build();
        }
    
        @Bean
        public Trigger statsLogJobTrigger() {
            // 每天0点执行一次
            CronScheduleBuilder cronScheduleBuilder = CronScheduleBuilder.cronSchedule("0 0 0 * * ?");
            return TriggerBuilder.newTrigger()
                    .forJob(statsLogJobJobDetail())
                    .withIdentity(StatsLogTask.TASK_IDENTITY)
                    .withSchedule(cronScheduleBuilder)
                    .build();
        }
    

    任务类如下:

    @Slf4j
    @Component
    public class StatsLogTask extends QuartzJobBean {
    
        static final String TASK_IDENTITY = "StatsLogTask";
        
        @Override
        protected void executeInternal(@NonNull JobExecutionContext jobExecutionContext) {
            doPvUvStatistics();
        }
    
        /**
         *业务方法
         */
        private void doPvUvStatistics() {
            dosomething...
        }
    }
    

    二、第二种(任务类):

    任务类如下:

    @Slf4j
    @Component("favoritesTask")
    public class FavoritesTask implements SchedulingConfigurer, Ordered {
    
    	//获取配置类,此处可以获取cron表达式即可,读者可自己想办法解决
        @Resource
        private QuartzPropertiesUntil quartzPropertiesUntil;
        
        @Resource
        private IWeeklyFavoritesService iWeeklyFavoritesService
        
        @Override
        public void configureTasks(ScheduledTaskRegistrar scheduledTaskRegistrar) {
            Runnable runnable = () -> {
                log.info("FavoritesTask-------- {}", DateFormatUtils.format(new Date(), "yyyy-MM-dd HH:mm:ss"));
                //业务方法
                iWeeklyFavoritesService.transFavoritesFromRedis2Db();
            };
    
            Trigger trigger = triggerContext -> {
                CronTrigger cronTrigger = new CronTrigger(quartzPropertiesUntil.getFavoritesJobCron());
                return cronTrigger.nextExecutionTime(triggerContext);
            };
            scheduledTaskRegistrar.addTriggerTask(runnable, trigger);
    
        }
    
        @Override
        public int getOrder() {
            return LOWEST_PRECEDENCE;
        }
    }
    

    此方法可以很好的跟apollo配置结合,实现不重启服务器的情况下变更cron表达式,达到灵活控制业务需求的目的。(以上两种方式,前提是导入spring-boot-starter-quartz依赖,并在启动类加@EnableScheduling注解才能实现),下一篇文章,关于如何实现apollo中quartz的动态配置

  • 相关阅读:
    百度云盘下载限速破解
    (五)Struts之Action类基础(二)
    (四)Decorator设计模式解决GET/POST请求的乱码问题(转)
    (三)Struts之Action类基础(一)
    (二)Struts.xml文件详解
    (一)Struts2 基础
    (三十一)web 开发基础项目
    mysql的索引
    数据库的acid
    String StringBuffer和StringBuilder
  • 原文地址:https://www.cnblogs.com/aohongzhu/p/12938732.html
Copyright © 2011-2022 走看看