最新公告
  • 欢迎您光临【搜客网】,本站秉承服务宗旨:销售只是起点,服务永无止境!立即加入我们
  • springboot动态定时任务,springboot自动配置原理

    一、springboot动态定时任务

    在Spring Boot中,我们可以使用Spring自带的@Scheduled注解来实现定时任务。但是,如果我们需要动态地添加、修改、删除定时,该怎么办呢?这时候,我们可以使用Quartz框架来实现动态定时任务。

    Quartz是一个开源的作业调度框架,可以用来实现复杂的作业调度需求。它支持动态添加、修改、删除作业,支持集群部署,支持持久化作业信息等。

    在Spring Boot中,我们可以通过集成Quartz框架来实现动态定时任务。具体步骤如下:

    1. 引入Quartz依赖

    在pom.xml文件中添加以下依赖:

    “`
    dependency>
    org.quartz-scheduler
    quartz
    version>2.3.2

    “`

    2. 配置Quartz

    在application.properties文件中添加以下配置:

    “`
    # 配置Quartz的数据源
    spring.quartz.job-store-type=jdbc
    spring.quartz.jdbc.initialize-schema=always
    spring.quartz.properties.org.quartz.dataSource.myDS.driver=com.mysql.jdbc.Driver
    spring.quartz.properties.org.quartz.dataSource.myDS.URL=jdbc:mysql://localhost:3306/quartzuseUnicode=true&characterEncoding=utf-8&useSSL=false
    spring.quartz.properties.org.quartz.dataSource.myDS.user=root
    spring.quartz.properties.org.quartz.dataSource.myDS.password=root

    # 配置Quartz的调度器
    spring.quartz.scheduler.instanceName=myScheduler
    spring.quartz.scheduler.instanceId=AUTO
    spring.quartz.scheduler.skipUpdateCheck=true
    spring.quartz.scheduler.jobFactory.class=org.springframework.scheduling.quartz.SpringBeanJobFactory
    spring.quartz.job-store.class=org.quartz.impl.jdbcjobstore.JobStoreTX
    spring.quartz.job-store.driverDelegateClass=org.quartz.impl.jdbcjobstore.StdJDBCDelegate
    spring.quartz.job-store.dataSource=myDS
    spring.quartz.job-store.tablePrefix=QRTZ_
    spring.quartz.job-store.isClustered=true
    spring.quartz.threadPool.class=org.quartz.simpl.SimpleThreadPool
    spring.quartz.threadPool.threadCount=10
    “`

    3. 创建定时任务

    创建一个继承自QuartzJobBean的类,实现executeInternal方法,该方法中编写定时任务的逻辑

    “`
    public class MyJob extends QuartzJobBean {
    @Override
    protected void executeInternal(JobExecutionContext context) throws JobExecutionException {
    // 定时任务逻辑
    }
    }
    “`

    4. 添加定时任务

    在需要添加定时任务的地方,注入SchedulerFactoryBean,并调用其getScheduler方法获取Scheduler对象。然后,创建一个JobDetail对象和一个Trigger对象,将它们传入Scheduler的scheduleJob方法中即可。

    “`
    @Autowired
    private SchedulerFactoryBean schedulerFactoryBean;

    public void addJob() throws SchedulerException {
    Scheduler scheduler=schedulerFactoryBean.getScheduler();
    JobDetail jobDetail=JobBuilder.newJob(MyJob.class).withIdentity(“job1”, “group1”).build();
    Trigger trigger=TriggerBuilder.newTrigger().withIdentity(“trigger1”, “group1”).startNow().withSchedule(SimpleScheduleBuilder.simpleSchedule().withIntervalInSeconds(10).repeatForever()).build();
    scheduler.scheduleJob(jobDetail, trigger);
    }
    “`

    5. 修改定时任务

    修改定时任务也很简单,只需要先获取到要修改的JobDetail和Trigger对象,然后调用Scheduler的rescheduleJob方法即可。

    “`
    public void modifyJob() throws SchedulerException {
    Scheduler scheduler=schedulerFactoryBean.getScheduler();
    JobDetail jobDetail=scheduler.getJobDetail(JobKey.jobKey(“job1”, “group1”));
    Trigger trigger=scheduler.getTrigger(TriggerKey.triggerKey(“trigger1”
    必应
    , “group1”));
    trigger=trigger.getTriggerBuilder().withIdentity(trigger.getKey()).withSchedule(SimpleScheduleBuilder.simpleSchedule().withIntervalInSeconds(20).repeatForever()).build();
    scheduler.rescheduleJob(trigger.getKey(), trigger);
    }
    “`

    6. 删除定时任务

    删除定时任务也很简单,只需要调用Scheduler的deleteJob方法即可。

    “`
    public void deleteJob() throws SchedulerException {
    Scheduler scheduler=schedulerFactoryBean.getScheduler();
    scheduler.deleteJob(JobKey.jobKey(“job1”, “group1”));
    }
    “`

    二、springboot自动配置原理

    Spring Boot的自动配置是通过条件注解实现的。条件注解是Spring 4.0引入的一个新特性,它可以根据一定的条件来决定是否启用某个配置类或某个Bean。

    Spring Boot中的自动配置类都是以AutoConfiguration结尾的,比如DataSourceAutoConfiguration、JdbcTemplateAutoConfiguration等。这些自动配置类都使用了条件注解来判断是否需要Configuration为例,它的源码如下:

    “`
    @Configuration
    @ConditionalOnClass({ DataSource.class, EmbeddedDatabaseType.class })
    @EnableConfigurationProperties(DataSourceProperties.class)
    @Import({ DataSourcePoolMetadataProvidersConfiguration.class, DataSourceInitializationConfiguration.class })
    public class DataSourceAutoConfiguration {
    @Bean
    @ConditionalOnMissingBean
    @ConfigurationProperties(prefix=”spring.datasource.hikari”)
    public HikariDataSource dataSource(DataSourceProperties properties) {
    // 创建HikariDataSource对象
    }
    }
    “`

    该类使用了@Configuration注解,表示它是一个配置类。它还使用了@ConditionalOnClass注解,表示只有当DataSource和EmbeddedDatabaseType类存在时才启用该配置类。它还使用了@EnableConfigurationProperties注解,表示启用@ConfigurationProperties注解,将配置文件中的属性注入到DataSourceProperties类中。最后,它还定义了一个名为dataSource的Bean,使用了@ConditionalOnMissingBean注解,表示只有当容器中不存在名为dataSource的Bean时才创建该Bean。

    通过这些条件注解的组合,Spring Boot可以根据一定的条件来决定是否启用某个配置类或某个Bean,从而实现自动配置的功能。

    【搜客网】_全网激活码总代_激活码商城【www.wxzygp.com】
    【搜客吧】_激活码商城_微商营销货源站 » springboot动态定时任务,springboot自动配置原理

    常见问题FAQ

    本站资源可以代理扶持吗?有没有售后和技术支持?
    具体请参照:https://www.wxzygp.com/345.html
    遇到问题无法解决怎么办?
    解决方案:https://www.wxzygp.com/343.html
    免费下载或者VIP会员资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    购买该资源后,可以退款吗?
    本站均属于虚拟商品,具有可复制性,可传播性。一旦授予,不接受任何形式的退款、换货要求。请您在购买获取之前确认好是您所需要的资源!
    • 10406会员总数(位)
    • 32630资源总数(个)
    • 38本周发布(个)
    • 0 今日发布(个)
    • 1492稳定运行(天)

    【搜客网】_全网激活码总代_激活码商城

    立即查看 了解详情
    升级SVIP尊享更多特权立即升级