很久以前就用过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要访问业务数据库才加入的依赖。

  1. <dependencies>
  2. <dependency>
  3. <groupId>org.mybatis</groupId>
  4. <artifactId>mybatis</artifactId>
  5. <version>RELEASE</version>
  6. </dependency>
  7. <dependency>
  8. <groupId>org.mybatis</groupId>
  9. <artifactId>mybatis-spring</artifactId>
  10. <version>RELEASE</version>
  11. </dependency>
  12.  
  13. <dependency>
  14. <groupId>commons-io</groupId>
  15. <artifactId>commons-io</artifactId>
  16. <version>2.6</version>
  17. </dependency>
  18. <dependency>
  19. <groupId>commons-net</groupId>
  20. <artifactId>commons-net</artifactId>
  21. <version>3.6</version>
  22. </dependency>
  23.  
  24. <!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-quartz -->
  25. <dependency>
  26. <groupId>org.springframework.boot</groupId>
  27. <artifactId>spring-boot-starter-quartz</artifactId>
  28. <version>RELEASE</version>
  29. </dependency>
  30. <!-- https://mvnrepository.com/artifact/com.alibaba/druid-spring-boot-starter -->
  31. <dependency>
  32. <groupId>com.alibaba</groupId>
  33. <artifactId>druid-spring-boot-starter</artifactId>
  34. <version>RELEASE</version>
  35. </dependency>
  36. <dependency>
  37. <groupId>org.springframework</groupId>
  38. <artifactId>spring-jdbc</artifactId>
  39. </dependency>
  40.  
  41. <dependency>
  42. <groupId>org.springframework.boot</groupId>
  43. <artifactId>spring-boot-starter-web</artifactId>
  44. </dependency>
  45.  
  46. <dependency>
  47. <groupId>org.projectlombok</groupId>
  48. <artifactId>lombok</artifactId>
  49. </dependency>
  50. <dependency>
  51. <groupId>org.springframework.boot</groupId>
  52. <artifactId>spring-boot-starter-tomcat</artifactId>
  53. <scope>provided</scope>
  54. </dependency>
  55. <dependency>
  56. <groupId>mysql</groupId>
  57. <artifactId>mysql-connector-java</artifactId>
  58. <version>5.1.47</version>
  59. </dependency>
  60. <dependency>
  61. <groupId>com.oracle</groupId>
  62. <artifactId>ojdbc8</artifactId>
  63. <version>12.2.0.1</version>
  64. </dependency>
  65.  
  66. </dependencies>

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

  1. #quartz相关属性配置
  2. spring.quartz.properties.org.quartz.scheduler.instanceName=myTasks
  3. spring.quartz.properties.org.quartz.scheduler.instanceId=AUTO
  4. spring.quartz.properties.org.quartz.jobStore.class=org.quartz.impl.jdbcjobstore.JobStoreTX
  5. spring.quartz.properties.org.quartz.jobStore.driverDelegateClass=org.quartz.impl.jdbcjobstore.StdJDBCDelegate
  6. spring.quartz.properties.org.quartz.jobStore.tablePrefix=QRTZ_
  7. spring.quartz.properties.org.quartz.jobStore.isClustered=true
  8. spring.quartz.properties.org.quartz.jobStore.clusterCheckinInterval=10000
  9. spring.quartz.properties.org.quartz.jobStore.useProperties=false
  10. spring.quartz.properties.org.quartz.jobStore.dataSource=qzDS
  11. spring.quartz.properties.org.quartzthreadPool.class=org.quartz.simpl.SimpleThreadPool
  12. spring.quartz.properties.org.quartzthreadPool.threadCount=10
  13. spring.quartz.properties.org.quartzthreadPool.threadPriority=5
  14. spring.quartz.properties.org.quartzthreadPool.threadsInheritContextClassLoaderOfInitializingThread=true
  15. #数据库方式
  16. spring.quartz.job-store-type=JDBC
  17. #初始化表结构
  18. spring.quartz.jdbc.initialize-schema=NEVER
  19.  
  20. ## mysql 数据源配置,主库Primary
  21. # via local
  22. mysql.datasource.druid.url = jdbc:mysql://localhost:3306/mysql?useUnicode=true&characterEncoding=utf8&useSSL=false
  23. mysql.datasource.druid.username=root
  24. mysql.datasource.druid.password=123456
  25. mysql.datasource.druid.driverClassName=com.mysql.jdbc.Driver
  26. #监控统计拦截的filters
  27. mysql.datasource.druid.filters=stat
  28. #配置初始化大小/最小/最大
  29. mysql.datasource.druid.initialSize=1
  30. mysql.datasource.druid.minIdle=1
  31. mysql.datasource.druid.maxActive=20
  32. #获取连接等待超时时间
  33. mysql.datasource.druid.maxWait=60000
  34. #间隔多久进行一次检测,检测需要关闭的空闲连接
  35. mysql.datasource.druid.timeBetweenEvictionRunsMillis=60000
  36. #一个连接在池中最小生存的时间
  37. mysql.datasource.druid.minEvictableIdleTimeMillis=300000
  38. mysql.datasource.druid.validationQuery=SELECT 'x'
  39. mysql.datasource.druid.testWhileIdle=true
  40. mysql.datasource.druid.testOnBorrow=false
  41. mysql.datasource.druid.testOnReturn=false
  42. #打开PSCache,并指定每个连接上PSCache的大小。oracle设为true,mysql设为false。分库分表较多推荐设置为false
  43. mysql.datasource.druid.poolPreparedStatements=false
  44. mysql.datasource.druid.maxPoolPreparedStatementPerConnectionSize=20
  45.  
  46. ## Oracle 数据源配置,从库
  47. oracle.datasource.druid.url=jdbc:oracle:thin:@(DESCRIPTION =(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=localhost)(PORT=1521)))(CONNECT_DATA=(SERVICE_NAME=scot)))
  48. oracle.datasource.druid.username=root
  49. oracle.datasource.druid.password=123456
  50. oracle.datasource.druid.driverClassName=oracle.jdbc.OracleDriver
  51. #监控统计拦截的filters
  52. oracle.datasource.druid.filters=stat
  53. #配置初始化大小/最小/最大
  54. oracle.datasource.druid.initialSize=1
  55. oracle.datasource.druid.minIdle=1
  56. oracle.datasource.druid.maxActive=20
  57. #获取连接等待超时时间
  58. oracle.datasource.druid.maxWait=60000
  59. #间隔多久进行一次检测,检测需要关闭的空闲连接
  60. oracle.datasource.druid.timeBetweenEvictionRunsMillis=60000
  61. #一个连接在池中最小生存的时间
  62. oracle.datasource.druid.minEvictableIdleTimeMillis=300000
  63. oracle.datasource.druid.validationQuery=SELECT 'x' FROM DUAL
  64. oracle.datasource.druid.testWhileIdle=true
  65. oracle.datasource.druid.testOnBorrow=false
  66. oracle.datasource.druid.testOnReturn=false
  67. #打开PSCache,并指定每个连接上PSCache的大小。oracle设为true,mysql设为false。分库分表较多推荐设置为false
  68. oracle.datasource.druid.poolPreparedStatements=true
  69. 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. dfs 全排列 使用交换——含重复元素和非重复元素

    15. 全排列 中文 English 给定一个数字列表,返回其所有可能的排列. 样例 样例 1: 输入:[1] 输出: [ [1] ] 样例 2: 输入:[1,2,3] 输出: [ [1,2,3], ...

  2. nvidia-smi命令执行很慢,如何改进

    初次安装好nvidia的驱动,每次执行nvidia-smi命令时,要5秒以上. 可通过如下命令进行改进: nvidia-persistenced --persistence-mode

  3. JSOI2009 等差数列 和 算术天才⑨与等差数列 和 CH4302 Interval GCD

    等差数列 为了检验学生的掌握情况,jyy布置了一道习题:给定一个长度为N(1≤N≤100,000)的数列,初始时第i个数为vi(vi是整数,−100,000≤vi≤100,000),学生们要按照jyy ...

  4. NameNode和SecondaryNameNode

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明.本文链接:https://blog.csdn.net/weixin_37838429/artic ...

  5. 在函数内部定义的变量加与不加var的区别,匿名函数和有名函数内声明变量的区别

    2014年4月21日,14:49分: 原创:http://www.cnblogs.com/liujinyu/p/3678523.html 今天写天气网英文版的产品频道,maps页面的js时,偶然意识到 ...

  6. 实现:python3_解析shodan_json数据

    前言:今天,一美元可以开通shodan,急忙去买了一个哈哈!! 下载json格式的数据,可以通过该脚本进行解析,得到相应的ip:port的格式 示例代码: # coding=utf-8 import ...

  7. virtual abstract override

    virtual和abstract都是用来修饰父类的,通过覆盖父类的定义,让子类重新定义. 它们有一个共同点:如果用来修饰方法,前面必须添加public,要不然就会出现编译错误:虚拟方法或抽象方法是不能 ...

  8. WinDbg常用命令系列---sx, sxd, sxe, sxi, sxn, sxr, sx- (设置异常)

    简介 sx*命令控制调试器在正在调试的应用程序中发生异常或发生某些事件时采取的操作. 使用形式 sx sx{e|d|i|n} [-c "Cmd1"] [-c2 "Cmd2 ...

  9. The Ultimate Guide to handling JWTs on frontend clients (GraphQL)

    转自:https://blog.hasura.io/best-practices-of-using-jwt-with-graphql/ hasura 团队关于jwt 的实践 JWTs (JSON We ...

  10. Java 使用 Jackson库 对 JavaMap 进行序列化反序列化

    最近在用 java 处理一一些东西,发现 java 对对象进行序列化反序列化比起 python 来还是有些麻烦记录一下. 找了好几个库最后选择了 Jackson 感觉大家对它评价还不错. 将目标从 J ...