很久以前就用过quartz,现在重新用起,主要实现集群方式启动,并且支持多数据源注入到job中。网上demo很多,方法大同小异。但关于数据源注入的深入介绍不多,不错的文章:《spring-boot-2.0.3之quartz集成,数据源问题,源码探究》,作者关于quartz有3篇,都值得一看。

  总结一下:mybatis不是必须的,springboot会自动将数据源注入到quartz(前提是你的配置正确)。本地化的job类也不是必须的,创建一个类主要是控制任务时传参数。

  理论上来说,在数据库中建好quartz的表,在pom中加入相关依赖,配置好quartz的属性,无需额外编码,就可以让quartz跑起来。只是这种情况没有任何任务,需要对任务进行增删改启停就需要实现一个service来操作job,这个类网上的demo几乎都一样,实现控制job的方法都是调用quartz的方法。

  要记录的有几点:

  1、我还没有彻底弄清job的各种特性,包括任务的调度等,先从基本功能开始,满足业务需要即可。

  2、踩了两个坑,一个是依赖问题,在IDEA中可以顺畅的跑,但部署到服务器运行就会报错(mybatis相关)。琢磨了很久,没找到原因,无意中发现可能是依赖冲突导致,于是从零开始,力求最少依赖方式,我的依赖见下。第二个坑,使用了企业自研的分布式数据库(mysql),结果本机mysql正常,连企业数据库就报错:"Unknown column '0x' in 'field list'。最后dba查日志发现是在向trigger表插入数据时blob字段没按要求将0x用引号包起来。

  3、接下来还需要尝试使用jar进行任务定制,实现不动框架就可以对job进行定制。

附pom及properties:

pom.xml,其中的mybatis是因为job要访问业务数据库才加入的依赖。

    <dependencies>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>RELEASE</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>RELEASE</version>
</dependency> <dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.6</version>
</dependency>
<dependency>
<groupId>commons-net</groupId>
<artifactId>commons-net</artifactId>
<version>3.6</version>
</dependency> <!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-quartz -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-quartz</artifactId>
<version>RELEASE</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.alibaba/druid-spring-boot-starter -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
</dependency> <dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency> <dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.47</version>
</dependency>
<dependency>
<groupId>com.oracle</groupId>
<artifactId>ojdbc8</artifactId>
<version>12.2.0.1</version>
</dependency> </dependencies>

application.properties。使用了druid的主从数据源(需要定义额外的配置类),quartz的表格部署在主库上,springboot默认将主库数据源注入到了quartz。

#quartz相关属性配置
spring.quartz.properties.org.quartz.scheduler.instanceName=myTasks
spring.quartz.properties.org.quartz.scheduler.instanceId=AUTO
spring.quartz.properties.org.quartz.jobStore.class=org.quartz.impl.jdbcjobstore.JobStoreTX
spring.quartz.properties.org.quartz.jobStore.driverDelegateClass=org.quartz.impl.jdbcjobstore.StdJDBCDelegate
spring.quartz.properties.org.quartz.jobStore.tablePrefix=QRTZ_
spring.quartz.properties.org.quartz.jobStore.isClustered=true
spring.quartz.properties.org.quartz.jobStore.clusterCheckinInterval=10000
spring.quartz.properties.org.quartz.jobStore.useProperties=false
spring.quartz.properties.org.quartz.jobStore.dataSource=qzDS
spring.quartz.properties.org.quartzthreadPool.class=org.quartz.simpl.SimpleThreadPool
spring.quartz.properties.org.quartzthreadPool.threadCount=10
spring.quartz.properties.org.quartzthreadPool.threadPriority=5
spring.quartz.properties.org.quartzthreadPool.threadsInheritContextClassLoaderOfInitializingThread=true
#数据库方式
spring.quartz.job-store-type=JDBC
#初始化表结构
spring.quartz.jdbc.initialize-schema=NEVER ## mysql 数据源配置,主库Primary
# via local
mysql.datasource.druid.url = jdbc:mysql://localhost:3306/mysql?useUnicode=true&characterEncoding=utf8&useSSL=false
mysql.datasource.druid.username=root
mysql.datasource.druid.password=123456
mysql.datasource.druid.driverClassName=com.mysql.jdbc.Driver
#监控统计拦截的filters
mysql.datasource.druid.filters=stat
#配置初始化大小/最小/最大
mysql.datasource.druid.initialSize=1
mysql.datasource.druid.minIdle=1
mysql.datasource.druid.maxActive=20
#获取连接等待超时时间
mysql.datasource.druid.maxWait=60000
#间隔多久进行一次检测,检测需要关闭的空闲连接
mysql.datasource.druid.timeBetweenEvictionRunsMillis=60000
#一个连接在池中最小生存的时间
mysql.datasource.druid.minEvictableIdleTimeMillis=300000
mysql.datasource.druid.validationQuery=SELECT 'x'
mysql.datasource.druid.testWhileIdle=true
mysql.datasource.druid.testOnBorrow=false
mysql.datasource.druid.testOnReturn=false
#打开PSCache,并指定每个连接上PSCache的大小。oracle设为true,mysql设为false。分库分表较多推荐设置为false
mysql.datasource.druid.poolPreparedStatements=false
mysql.datasource.druid.maxPoolPreparedStatementPerConnectionSize=20 ## Oracle 数据源配置,从库
oracle.datasource.druid.url=jdbc:oracle:thin:@(DESCRIPTION =(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=localhost)(PORT=1521)))(CONNECT_DATA=(SERVICE_NAME=scot)))
oracle.datasource.druid.username=root
oracle.datasource.druid.password=123456
oracle.datasource.druid.driverClassName=oracle.jdbc.OracleDriver
#监控统计拦截的filters
oracle.datasource.druid.filters=stat
#配置初始化大小/最小/最大
oracle.datasource.druid.initialSize=1
oracle.datasource.druid.minIdle=1
oracle.datasource.druid.maxActive=20
#获取连接等待超时时间
oracle.datasource.druid.maxWait=60000
#间隔多久进行一次检测,检测需要关闭的空闲连接
oracle.datasource.druid.timeBetweenEvictionRunsMillis=60000
#一个连接在池中最小生存的时间
oracle.datasource.druid.minEvictableIdleTimeMillis=300000
oracle.datasource.druid.validationQuery=SELECT 'x' FROM DUAL
oracle.datasource.druid.testWhileIdle=true
oracle.datasource.druid.testOnBorrow=false
oracle.datasource.druid.testOnReturn=false
#打开PSCache,并指定每个连接上PSCache的大小。oracle设为true,mysql设为false。分库分表较多推荐设置为false
oracle.datasource.druid.poolPreparedStatements=true
oracle.datasource.druid.maxPoolPreparedStatementPerConnectionSize=20

Springboot+Quartz+druid+多库的更多相关文章

  1. 3分钟搞定SpringBoot+Mybatis+druid多数据源和分布式事务

    文章来自: https://blog.csdn.net/qq_29242877/article/details/79033287 在一些复杂的应用开发中,一个应用可能会涉及到连接多个数据源,所谓多数据 ...

  2. 基于Maven的Springboot+Mybatis+Druid+Swagger2+mybatis-generator框架环境搭建

    基于Maven的Springboot+Mybatis+Druid+Swagger2+mybatis-generator框架环境搭建 前言 最近做回后台开发,重新抓起以前学过的SSM(Spring+Sp ...

  3. 带着萌新看springboot源码10(springboot+JdbcTemplate+druid)

    上一节把springboot和jdbcTemplate大概用法说了一下,以及大概看了一下源码,还说了加载sql文件时的原理. 这一节来看看自动注入JdbcTemplate的原理,顺便用一用Druid数 ...

  4. springboot配置Druid数据源

    springboot配置druid数据源 Author:SimpleWu springboot整合篇 前言 对于数据访问层,无论是Sql还是NoSql,SpringBoot默认采用整合SpringDa ...

  5. SpringBoot使用Druid数据库加密链接完整方案

    网上的坑 springboot 使用 Druid 数据库加密链接方案,不建议采用网上的一篇文章<springboot 结合 Druid 加密数据库密码遇到的坑!>介绍的方式来进行加密链接实 ...

  6. Springboot整合druid

    目录 Springboot整合druid application.yml DruidConfig 数据监控地址:http://localhost:8080/druid Springboot整合drui ...

  7. SpringBoot Druid整合,SpringBoot 集成Druid

    SpringBoot Druid整合,SpringBoot 集成Druid ================================ ©Copyright 蕃薯耀 2018年4月8日 http ...

  8. SpringBoot整合Druid数据连接池

    SpringBoot整合Druid数据连接池 Druid是什么? Druid是Alibaba开源的的数据库连接池.Druid能够提供强大的监控和扩展功能. 在哪里下载druid maven中央仓库: ...

  9. spring-boot+quartz的CRUD动态任务管理系统

    版权声明:作者: 小柒 出处: https://blog.52itstyle.com 分享是快乐的,也见证了个人成长历程,文章大多都是工作经验总结以及平时学习积累,基于自身认知不足之处在所难免,也请大 ...

随机推荐

  1. 记一次wxpy开发经历

    常在河边走,哪有不湿鞋,没想到搞这个花了半天时间.

  2. leaf框架(一) 部署leaf

    获取 LeafServer: git clone https://github.com/name5566/leafserver 将下下来的文件里server放入gopath的src下,bin里的文件也 ...

  3. NameNode的HA

    HDFS中的NameNode的HA怎么实现?(一言以蔽之) 在Hadoop集群中配置并启动两个NameNode进程,一个作为Active节点对外提供服务,另一个作为Standby的节点,两个NameN ...

  4. modbus-poll和modbus-slave工具的学习使用——modbus协议功能码3的解析(及欧姆龙温控器调试笔记)

    最近的项目中使用到了欧姆龙的温控器,里面有很多的通信方式,我们使用的常见的modbus——RTU方式,其他方式我们不使用,其中通信手册上面有很多通信的实例,欧姆龙modbus还区分4字节模式和2字节模 ...

  5. WHAT IS THE DIFFERENCE BETWEEN REACT.JS AND REACT NATIVE?

    Amit Ashwini - 09 SEPTEMBER 2017 React.js was developed by Facebook to address its need for a dynami ...

  6. k8gege的Ladon使用笔记

    自己今天看到了这个工具,感觉挺实用的,尝试学习用法 资产扫描模块 初级用法: Ladon.exe 192.168.1.8/24 OnlinePC(扫当前机器所处C段的存活主机,其它模块同理) 总结:在 ...

  7. yugabyte cdc 试用

    目前yugabyte 的cdc 功能处于beta 阶段,应该也快实际可用了,以下是一个简单的试用 环境准备 使用docker-compose docker-compose 文件 version: '2 ...

  8. 前端零基础入门:页面结构层HTML(2)

    学习笔记 若本号内容有做得不到位的地方(比如:涉及版权或其他问题),请及时联系我们进行整改即可,会在第一时间进行处理. 请点赞!因为你们的赞同/鼓励是我写作的最大动力! 欢迎关注达达的简书! 这是一个 ...

  9. ffmpeg结合SDL编写播放器(一)

    ffmpeg 工具是一个高效快速的命令行工具,进行视音频不同格式之间的转换. ffmpeg命令行 ffmpeg可以读取任意数量的输入“文件”(可以是常规文件,管道,网络流,抓取设备等)读取,由 -i ...

  10. 驱动中遍历模块,以及获取ntoskrnl.exe基址

    方法是基于PsLoadModuleList方式 驱动中遍历模块 一丶简介 简介: 进入内核了.遍历内核中使用的模块该怎么办. 其实在驱动中.我们的DriverEntry入口位置. 提供了两个参数. 一 ...