达梦数据库兼容Quartz定时框架

1、背景

近期项目中需要使用达梦数据库,现将mysql数据库切换为达梦数据库,其中兼容Quartz定时框架报错如下:

2、解决方案

2.1 起初配置完:达梦数据库驱动直接启动项目直接报错,

后面在yml中配置数据库表名前缀:tablePrefix: database.QRTZ_ 。还是不行。

    quartz:
    #quartz相关属性配置
    org:
      quartz:
        scheduler:
          instanceName: DefaultQuartzScheduler #调度器的实例名
          instanceId: AUTO #调度器编号自动生成
        jobStore:
          class: org.quartz.impl.jdbcjobstore.JobStoreTX
          driverDelegateClass: org.quartz.impl.jdbcjobstore.StdJDBCDelegate
          tablePrefix: database.QRTZ_  #数据库表名前缀
          isClustered: true #开启分布式部署
          clusterCheckinInterval: 10000 #分布式节点有效性检查时间间隔,单位:秒
          useProperties: false #是否读取自己写的配置文件
          dataSource: qzds
        dataSource:
          qzds:
            driver: dm.jdbc.driver.DmDriver #达梦数据库驱动
            url: jdbc:dm://localhost:5236/database?zeroDateTimeBehavior=convertToNull&useUnicode=true&characterEncoding=utf-8&clobAsString=true
            user: root
            password: password
            validationQuery: select 0 from dual

2.2 然后在 SchedulerConfig中配置数据库表名前缀,最后项目成功跑起来了,亲测有效。

roperties.put("org.quartz.jobStore.tablePrefix", "database.QRTZ_");

注:达梦数据库我也是初次使用,文中如有问题,欢迎指正。

在Spring Boot项目中使用Quartz实现动态定时任务,需要完成以下步骤: 1. 引入Quartz依赖 在`pom.xml`文件中添加Quartz依赖: ```xml <dependency> <groupId>org.quartz-scheduler</groupId> <artifactId>quartz</artifactId> <version>2.3.2</version> </dependency> ``` 2. 配置Quartz 创建`QuartzConfig`类,配置Quartz的参数和JobDetail: ```java @Configuration public class QuartzConfig { // 配置Scheduler @Bean public SchedulerFactoryBean schedulerFactoryBean() { SchedulerFactoryBean schedulerFactoryBean = new SchedulerFactoryBean(); schedulerFactoryBean.setJobFactory(jobFactory()); schedulerFactoryBean.setQuartzProperties(quartzProperties()); return schedulerFactoryBean; } // 配置JobDetail @Bean public JobDetail jobDetail() { return JobBuilder.newJob(MyJob.class) .withIdentity("myJob") .storeDurably() .build(); } // 配置JobFactory @Bean public JobFactory jobFactory() { return new SpringBeanJobFactory(); } // 配置Quartz参数 @Bean public Properties quartzProperties() { Properties properties = new Properties(); properties.setProperty("org.quartz.scheduler.instanceName", "MyScheduler"); properties.setProperty("org.quartz.scheduler.instanceId", "AUTO"); properties.setProperty("org.quartz.jobStore.class", "org.quartz.impl.jdbcjobstore.JobStoreTX"); properties.setProperty("org.quartz.jobStore.driverDelegateClass", "org.quartz.impl.jdbcjobstore.StdJDBCDelegate"); properties.setProperty("org.quartz.jobStore.dataSource", "myDS"); properties.setProperty("org.quartz.jobStore.tablePrefix", "QRTZ_"); properties.setProperty("org.quartz.dataSource.myDS.driver", "com.mysql.jdbc.Driver"); properties.setProperty("org.quartz.dataSource.myDS.URL", "jdbc:mysql://localhost:3306/mydb"); properties.setProperty("org.quartz.dataSource.myDS.user", "root"); properties.setProperty("org.quartz.dataSource.myDS.password", "root"); properties.setProperty("org.quartz.dataSource.myDS.maxConnections", "10"); return properties; } } ``` 其中,`MyJob`是自定义的Job类,需要实现`org.quartz.Job`接口。 3. 创建Job和Trigger 创建`Job`和`Trigger`的实例,并将`Job`和`Trigger`注册到`Scheduler`中: ```java @Autowired private SchedulerFactoryBean schedulerFactoryBean; @Autowired private JobDetail jobDetail; @PostConstruct public void init() throws SchedulerException { Scheduler scheduler = schedulerFactoryBean.getScheduler(); // 创建Trigger Trigger trigger = TriggerBuilder.newTrigger() .withIdentity("myTrigger") .startNow() .withSchedule(CronScheduleBuilder.cronSchedule("0/5 * * * * ?")) // 每5秒执行一次 .build(); // 将Job和Trigger注册到Scheduler中 scheduler.scheduleJob(jobDetail, trigger); scheduler.start(); } ``` 4. 编写Job逻辑 创建自定义的`Job`类,实现`org.quartz.Job`接口: ```java public class MyJob implements Job { @Override public void execute(JobExecutionContext context) throws JobExecutionException { // 编写Job逻辑 } } ``` 在`execute`方法中编写具体的定时任务逻辑。 5. 动态修改定时任务 Quartz支持动态修改定时任务的执行时间,可以使用以下代码实现: ```java @Autowired private SchedulerFactoryBean schedulerFactoryBean; @PutMapping("/modifyTrigger") public void modifyTrigger() throws SchedulerException { Scheduler scheduler = schedulerFactoryBean.getScheduler(); // 获取Trigger TriggerKey triggerKey = TriggerKey.triggerKey("myTrigger"); CronTrigger trigger = (CronTrigger) scheduler.getTrigger(triggerKey); if (trigger == null) { return; } // 修改Trigger的执行时间 String cronExpression = "0/10 * * * * ?"; // 每10秒执行一次 CronScheduleBuilder scheduleBuilder = CronScheduleBuilder.cronSchedule(cronExpression); trigger = trigger.getTriggerBuilder().withIdentity(triggerKey).withSchedule(scheduleBuilder).build(); // 重新注册Trigger scheduler.rescheduleJob(triggerKey, trigger); } ``` 在上面的代码中,使用`getTrigger`方法获取`Trigger`对象,然后使用`getTriggerBuilder`方法修改`Trigger`的执行时间,最后使用`rescheduleJob`方法重新注册`Trigger`对象即可。 以上就是在Spring Boot项目中使用Quartz实现动态定时任务的步骤。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值