SpringBoot基于mybatis-plus实现定时器管理

本文详细介绍了如何在SpringBoot应用中集成mybatis-plus并配置Quartz框架,包括数据库连接、mybatis-plus设置、Quartz配置、Job和Trigger的创建以及Controller中的触发方法。

以下是基于SpringBoot和mybatis-plus实现定时器管理的步骤:

  1. 创建一个基于SpringBoot的Web应用程序。
  2. 添加以下依赖到pom.xml中:
<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-boot-starter</artifactId>
    <version>{mybatis-plus-version}</version>
</dependency>

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-quartz</artifactId>
</dependency>

其中,{mybatis-plus-version}是mybatis-plus的版本号。

  1. 在应用程序的配置文件中添加以下配置:
# 数据库连接配置
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://${mysql.host}:${mysql.port}/${mysql.database}?useSSL=false&useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull&transformedBitIsBoolean=true&autoReconnect=true&useAffectedRows=true
spring.datasource.username=${mysql.username}
spring.datasource.password=${mysql.password}

# mybatis-plus配置
mybatis-plus.mapper-locations=classpath*:mybatis/mapper/*.xml
mybatis-plus.type-aliases-package=com.example.demo.domain
mybatis-plus.global-config.db-config.table-prefix=${mysql.table-prefix}
mybatis-plus.global-config.db-config.logic-delete-field=${mysql.logic-delete-field}
mybatis-plus.global-config.db-config.logic-delete-value=${mysql.logic-delete-value}
mybatis-plus.global-config.db-config.logic-not-delete-value=${mysql.logic-not-delete-value}

# 定时器配置
spring.quartz.job-store-type=jdbc
spring.quartz.jdbc.initialize-schema=always
spring.quartz.properties.org.quartz.jobStore.driverDelegateClass=org.quartz.impl.jdbcjobstore.StdJDBCDelegate
spring.quartz.properties.org.quartz.jobStore.tablePrefix=${quartz.table-prefix}
spring.quartz.properties.org.quartz.jobStore.isClustered=true
spring.quartz.properties.org.quartz.scheduler.instanceName=${quartz.instanceName}
spring.quartz.properties.org.quartz.scheduler.instanceId=${quartz.instanceId}
spring.quartz.properties.org.quartz.threadPool.class=org.quartz.simpl.SimpleThreadPool
spring.quartz.properties.org.quartz.threadPool.threadCount=${quartz.threadCount}
spring.quartz.properties.org.quartz.jobStore.dataSource=myDataSource
spring.quartz.properties.org.quartz.dataSource.myDataSource.driver=${spring.datasource.driver-class-name}
spring.quartz.properties.org.quartz.dataSource.myDataSource.URL=${spring.datasource.url}
spring.quartz.properties.org.quartz.dataSource.myDataSource.user=${spring.datasource.username}
spring.quartz.properties.org.quartz.dataSource.myDataSource.password=${spring.datasource.password}

其中,{mysql.host}、{mysql.port}、{mysql.database}、{mysql.username}、{mysql.password}、{mysql.table-prefix}、{mysql.logic-delete-field}、{mysql.logic-delete-value}、{mysql.logic-not-delete-value}、{quartz.table-prefix}、{quartz.instanceName}、{quartz.instanceId}和{quartz.threadCount}是需要替换成应用程序的具体配置信息。

  1. 创建一个QuartzJob类,实现Job接口,实现具体的定时任务逻辑。
public class QuartzJob implements Job {
    @Override
    public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
        // 具体的定时任务逻辑
    }
}
  1. 创建一个QuartzConfig类,配置定时器的具体参数和任务。
@Configuration
public class QuartzConfig {
    @Autowired
    private MyQuartzJobFactory myQuartzJobFactory;

    @Autowired
    private MyQuartzJobListener myQuartzJobListener;

    @Autowired
    private MyQuartzTriggerListener myQuartzTriggerListener;

    @Bean
    public SchedulerFactoryBean schedulerFactoryBean() {
        SchedulerFactoryBean schedulerFactoryBean = new SchedulerFactoryBean();
        schedulerFactoryBean.setJobFactory(myQuartzJobFactory);
        schedulerFactoryBean.setGlobalJobListeners(myQuartzJobListener);
        schedulerFactoryBean.setGlobalTriggerListeners(myQuartzTriggerListener);
        return schedulerFactoryBean;
    }

    @Bean
    public JobDetailFactoryBean jobDetailFactoryBean() {
        JobDetailFactoryBean jobDetailFactoryBean = new JobDetailFactoryBean();
        jobDetailFactoryBean.setJobClass(QuartzJob.class);
        jobDetailFactoryBean.setDurability(true);
        return jobDetailFactoryBean;
    }

    @Bean
    public CronTriggerFactoryBean cronTriggerFactoryBean(JobDetail jobDetail) {
        CronTriggerFactoryBean cronTriggerFactoryBean = new CronTriggerFactoryBean();
        cronTriggerFactoryBean.setJobDetail(jobDetail);
        cronTriggerFactoryBean.setCronExpression("* * * * * ?");
        return cronTriggerFactoryBean;
    }

    @Bean
    public JobExecutionVetoer jobExecutionVetoer() {
        return new MyJobExecutionVetoer();
    }

    @Bean
    public Scheduler scheduler(CronTrigger cronTrigger, JobExecutionVetoer vetoer, SchedulerFactoryBean schedulerFactoryBean) throws Exception {
        Scheduler scheduler = schedulerFactoryBean.getScheduler();
        scheduler.scheduleJob(cronTrigger, vetoer);
        scheduler.start();
        return scheduler;
    }
}

其中,MyQuartzJobFactory是实现了Spring的AutowireCapableBeanFactory接口的类,用于注入依赖到QuartzJob中。MyQuartzJobListener和MyQuartzTriggerListener是实现了Quartz的JobListener和TriggerListener接口的类,用于处理定时任务的监听事件。MyJobExecutionVetoer是实现了Quartz的JobExecutionVetoer接口的类,用于控制定时任务是否执行。

  1. 在Controller中添加一个接口,用于手动触发定时任务。
@RestController
@RequestMapping("/schedule")
public class ScheduleController {
    @Autowired
    private Scheduler scheduler;

    @PostMapping("/run")
    public String runSchedule() throws Exception {
        JobKey jobKey = JobKey.jobKey("quartzJob");
        scheduler.triggerJob(jobKey);
        return "success";
    }
}

以上就是基于SpringBoot和mybatis-plus实现定时器管理的全部步骤。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

愚公搬程序

你的鼓励将是我们最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值