基于xxl-job V2.4.0版本改造,由于目前版本只支持mysql使用,在现实工作中会有 多种数据库的可能,所以花时间进行了一个简单的适配,将常用的数据库进行了一个简单的适配 具体适配是使用mybatis的databaseId进行适配的,这个只是暂时的解决办法, 许大神后续的计划中会把orm层改成jpa,这样就不用再单独区分数据库了,所以大家 没必要去改造成mybatis-plus或者通用mapper,后续根据官网的更新就好了,毕竟改造 太多,回头官网更新不太顺利。
“水平一般,能力有限,不足之处,还望多指教”
码云仓库地址
1、pom中引用数据库包(有可能会找不到,由于有些包在我自己私服上面),信任做技术的都是有办法搞定的
<dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>${mysql-connector-java.version}</version></dependency><!-- 金仓 --><dependency><groupId>com.xxx.3rd</groupId><artifactId>kingbase8</artifactId><version>${kingbase.verison}</version></dependency><!-- 达梦 --><dependency><groupId>com.xxx.3rd</groupId><artifactId>dm8</artifactId><version>${dm8.verison}</version></dependency><!-- oracle --><dependency><groupId>com.oracle</groupId><artifactId>ojdbc6</artifactId><version>${oracle.verison}</version></dependency><!-- pgsql --><dependency><groupId>org.postgresql</groupId><artifactId>postgresql</artifactId><version>${pgsql.verison}</version></dependency><dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>${mysql-connector-java.version}</version> </dependency> <!-- 金仓 --> <dependency> <groupId>com.xxx.3rd</groupId> <artifactId>kingbase8</artifactId> <version>${kingbase.verison}</version> </dependency> <!-- 达梦 --> <dependency> <groupId>com.xxx.3rd</groupId> <artifactId>dm8</artifactId> <version>${dm8.verison}</version> </dependency> <!-- oracle --> <dependency> <groupId>com.oracle</groupId> <artifactId>ojdbc6</artifactId> <version>${oracle.verison}</version> </dependency> <!-- pgsql --> <dependency> <groupId>org.postgresql</groupId> <artifactId>postgresql</artifactId> <version>${pgsql.verison}</version> </dependency><dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>${mysql-connector-java.version}</version> </dependency> <!-- 金仓 --> <dependency> <groupId>com.xxx.3rd</groupId> <artifactId>kingbase8</artifactId> <version>${kingbase.verison}</version> </dependency> <!-- 达梦 --> <dependency> <groupId>com.xxx.3rd</groupId> <artifactId>dm8</artifactId> <version>${dm8.verison}</version> </dependency> <!-- oracle --> <dependency> <groupId>com.oracle</groupId> <artifactId>ojdbc6</artifactId> <version>${oracle.verison}</version> </dependency> <!-- pgsql --> <dependency> <groupId>org.postgresql</groupId> <artifactId>postgresql</artifactId> <version>${pgsql.verison}</version> </dependency>
2、application配置文件修改
#mysql数据库配置#spring.datasource.url=jdbc:mysql://10.30.100.73:3306/xxl_job?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&serverTimezone=Asia/Shanghai#spring.datasource.username=root#spring.datasource.password=123456#spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver#人大金仓数据库配置#spring.datasource.url=jdbc:kingbase8://10.30.100.76:54321/XXL_JOB?zeroDateTimeBehavior=convertToNull&useUnicode=true&characterEncoding¤tSchema=PUBLIC,SYS_CATALOG#spring.datasource.username=SYSTEM#spring.datasource.password=password123#spring.datasource.driver-class-name=com.kingbase8.Driver##达梦数据库配置#spring.datasource.url=jdbc:dm://10.30.100.76:5236/XXL_JOB?zeroDateTimeBehavior=convertToNull&useUnicode=true&characterEncoding=utf-8#spring.datasource.username=XXL_JOB#spring.datasource.password=password123#spring.datasource.driver-class-name=dm.jdbc.driver.DmDriver###ORACLE数据库配置spring.datasource.url=jdbc:oracle:thin:@10.30.100.10:1521:orclspring.datasource.username=XXL_JOBspring.datasource.password=password123spring.datasource.driver-class-name=oracle.jdbc.driver.OracleDriver####postgreSQL数据库配置#spring.datasource.url=jdbc:postgresql://10.30.100.9:5432/xxl-job#spring.datasource.username=xxl-job#spring.datasource.password=password123#spring.datasource.driver-class-name=org.postgresql.Driver#mysql数据库配置 #spring.datasource.url=jdbc:mysql://10.30.100.73:3306/xxl_job?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&serverTimezone=Asia/Shanghai #spring.datasource.username=root #spring.datasource.password=123456 #spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver #人大金仓数据库配置 #spring.datasource.url=jdbc:kingbase8://10.30.100.76:54321/XXL_JOB?zeroDateTimeBehavior=convertToNull&useUnicode=true&characterEncoding¤tSchema=PUBLIC,SYS_CATALOG #spring.datasource.username=SYSTEM #spring.datasource.password=password123 #spring.datasource.driver-class-name=com.kingbase8.Driver ##达梦数据库配置 #spring.datasource.url=jdbc:dm://10.30.100.76:5236/XXL_JOB?zeroDateTimeBehavior=convertToNull&useUnicode=true&characterEncoding=utf-8 #spring.datasource.username=XXL_JOB #spring.datasource.password=password123 #spring.datasource.driver-class-name=dm.jdbc.driver.DmDriver ###ORACLE数据库配置 spring.datasource.url=jdbc:oracle:thin:@10.30.100.10:1521:orcl spring.datasource.username=XXL_JOB spring.datasource.password=password123 spring.datasource.driver-class-name=oracle.jdbc.driver.OracleDriver ####postgreSQL数据库配置 #spring.datasource.url=jdbc:postgresql://10.30.100.9:5432/xxl-job #spring.datasource.username=xxl-job #spring.datasource.password=password123 #spring.datasource.driver-class-name=org.postgresql.Driver#mysql数据库配置 #spring.datasource.url=jdbc:mysql://10.30.100.73:3306/xxl_job?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&serverTimezone=Asia/Shanghai #spring.datasource.username=root #spring.datasource.password=123456 #spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver #人大金仓数据库配置 #spring.datasource.url=jdbc:kingbase8://10.30.100.76:54321/XXL_JOB?zeroDateTimeBehavior=convertToNull&useUnicode=true&characterEncoding¤tSchema=PUBLIC,SYS_CATALOG #spring.datasource.username=SYSTEM #spring.datasource.password=password123 #spring.datasource.driver-class-name=com.kingbase8.Driver ##达梦数据库配置 #spring.datasource.url=jdbc:dm://10.30.100.76:5236/XXL_JOB?zeroDateTimeBehavior=convertToNull&useUnicode=true&characterEncoding=utf-8 #spring.datasource.username=XXL_JOB #spring.datasource.password=password123 #spring.datasource.driver-class-name=dm.jdbc.driver.DmDriver ###ORACLE数据库配置 spring.datasource.url=jdbc:oracle:thin:@10.30.100.10:1521:orcl spring.datasource.username=XXL_JOB spring.datasource.password=password123 spring.datasource.driver-class-name=oracle.jdbc.driver.OracleDriver ####postgreSQL数据库配置 #spring.datasource.url=jdbc:postgresql://10.30.100.9:5432/xxl-job #spring.datasource.username=xxl-job #spring.datasource.password=password123 #spring.datasource.driver-class-name=org.postgresql.Driver
配置文件这里面有个小坑,由于oracle的特殊性,不支持自增,查询方式也不同,分页也
不一样,所以适配oracle比较复杂,就在数据库这块单独把oracle的mapper拉了出来
### mybatis#mysql数据库配置mybatis##oracle使用的语法mybatis.mapper-locations=classpath:/mybatis-oracle-mapper/*Mapper.xml##其他数据库使用的语法#mybatis.mapper-locations=classpath:/mybatis-mapper/*Mapper.xml这块应该大家能理解,毕竟项目中一般只用一种,所以改一下就好了##oracle使用的语法spring.datasource.hikari.connection-test-query=SELECT * from dual##其他数据库使用的语法#spring.datasource.hikari.connection-test-query=SELECT 1### mybatis #mysql数据库配置mybatis ##oracle使用的语法 mybatis.mapper-locations=classpath:/mybatis-oracle-mapper/*Mapper.xml ##其他数据库使用的语法 #mybatis.mapper-locations=classpath:/mybatis-mapper/*Mapper.xml 这块应该大家能理解,毕竟项目中一般只用一种,所以改一下就好了 ##oracle使用的语法 spring.datasource.hikari.connection-test-query=SELECT * from dual ##其他数据库使用的语法 #spring.datasource.hikari.connection-test-query=SELECT 1### mybatis #mysql数据库配置mybatis ##oracle使用的语法 mybatis.mapper-locations=classpath:/mybatis-oracle-mapper/*Mapper.xml ##其他数据库使用的语法 #mybatis.mapper-locations=classpath:/mybatis-mapper/*Mapper.xml 这块应该大家能理解,毕竟项目中一般只用一种,所以改一下就好了 ##oracle使用的语法 spring.datasource.hikari.connection-test-query=SELECT * from dual ##其他数据库使用的语法 #spring.datasource.hikari.connection-test-query=SELECT 1
3、增加多数据库配置
/*** 自动识别使用的数据库类型* 在mapper.xml中databaseId的值就是跟这里对应,* 如果没有databaseId选择则说明该sql适用所有数据库* */@Beanpublic DatabaseIdProvider getDatabaseIdProvider(){DatabaseIdProvider databaseIdProvider = new VendorDatabaseIdProvider();Properties properties = new Properties();properties.setProperty("Oracle","oracle");properties.setProperty("MySQL","mysql");properties.setProperty("DB2","db2");properties.setProperty("Derby","derby");properties.setProperty("H2","h2");properties.setProperty("HSQL","hsql");properties.setProperty("Informix","informix");properties.setProperty("MS-SQL","ms-sql");properties.setProperty("PostgreSQL","postgresql");properties.setProperty("Sybase","sybase");properties.setProperty("Hana","hana");properties.setProperty("DM","dm");properties.setProperty("KingbaseES","kingbase");properties.setProperty("KingBase8","kingbase");databaseIdProvider.setProperties(properties);return databaseIdProvider;}/** * 自动识别使用的数据库类型 * 在mapper.xml中databaseId的值就是跟这里对应, * 如果没有databaseId选择则说明该sql适用所有数据库 * */ @Bean public DatabaseIdProvider getDatabaseIdProvider(){ DatabaseIdProvider databaseIdProvider = new VendorDatabaseIdProvider(); Properties properties = new Properties(); properties.setProperty("Oracle","oracle"); properties.setProperty("MySQL","mysql"); properties.setProperty("DB2","db2"); properties.setProperty("Derby","derby"); properties.setProperty("H2","h2"); properties.setProperty("HSQL","hsql"); properties.setProperty("Informix","informix"); properties.setProperty("MS-SQL","ms-sql"); properties.setProperty("PostgreSQL","postgresql"); properties.setProperty("Sybase","sybase"); properties.setProperty("Hana","hana"); properties.setProperty("DM","dm"); properties.setProperty("KingbaseES","kingbase"); properties.setProperty("KingBase8","kingbase"); databaseIdProvider.setProperties(properties); return databaseIdProvider; }/** * 自动识别使用的数据库类型 * 在mapper.xml中databaseId的值就是跟这里对应, * 如果没有databaseId选择则说明该sql适用所有数据库 * */ @Bean public DatabaseIdProvider getDatabaseIdProvider(){ DatabaseIdProvider databaseIdProvider = new VendorDatabaseIdProvider(); Properties properties = new Properties(); properties.setProperty("Oracle","oracle"); properties.setProperty("MySQL","mysql"); properties.setProperty("DB2","db2"); properties.setProperty("Derby","derby"); properties.setProperty("H2","h2"); properties.setProperty("HSQL","hsql"); properties.setProperty("Informix","informix"); properties.setProperty("MS-SQL","ms-sql"); properties.setProperty("PostgreSQL","postgresql"); properties.setProperty("Sybase","sybase"); properties.setProperty("Hana","hana"); properties.setProperty("DM","dm"); properties.setProperty("KingbaseES","kingbase"); properties.setProperty("KingBase8","kingbase"); databaseIdProvider.setProperties(properties); return databaseIdProvider; }
4、在数据库中做多数据库兼容
<select id="findAll" parameterType="java.util.HashMap" resultMap="XxlJobRegistry">SELECT <include refid="Base_Column_List" />FROM xxl_job_registry t<if test="_databaseId=='mysql'">WHERE t.update_time <![CDATA[ > ]]> DATE_ADD(#{nowTime},INTERVAL -#{timeout} SECOND)</if><if test="_databaseId=='dm'">WHERE t.update_time <![CDATA[ > ]]> (now()-1/(24*60*60)*#{timeout})</if><if test="_databaseId=='kingbase'||_databaseId=='postgresql'">WHERE t.update_time <![CDATA[ > ]]> date '${nowTime}' - INTERVAL '${timeout} second'</if></select><select id="findAll" parameterType="java.util.HashMap" resultMap="XxlJobRegistry"> SELECT <include refid="Base_Column_List" /> FROM xxl_job_registry t <if test="_databaseId=='mysql'"> WHERE t.update_time <![CDATA[ > ]]> DATE_ADD(#{nowTime},INTERVAL -#{timeout} SECOND) </if> <if test="_databaseId=='dm'"> WHERE t.update_time <![CDATA[ > ]]> (now()-1/(24*60*60)*#{timeout}) </if> <if test="_databaseId=='kingbase'||_databaseId=='postgresql'"> WHERE t.update_time <![CDATA[ > ]]> date '${nowTime}' - INTERVAL '${timeout} second' </if> </select><select id="findAll" parameterType="java.util.HashMap" resultMap="XxlJobRegistry"> SELECT <include refid="Base_Column_List" /> FROM xxl_job_registry t <if test="_databaseId=='mysql'"> WHERE t.update_time <![CDATA[ > ]]> DATE_ADD(#{nowTime},INTERVAL -#{timeout} SECOND) </if> <if test="_databaseId=='dm'"> WHERE t.update_time <![CDATA[ > ]]> (now()-1/(24*60*60)*#{timeout}) </if> <if test="_databaseId=='kingbase'||_databaseId=='postgresql'"> WHERE t.update_time <![CDATA[ > ]]> date '${nowTime}' - INTERVAL '${timeout} second' </if> </select>
码云仓库地址
© 版权声明
文章版权归作者所有,未经允许请勿转载。如内容涉嫌侵权,请在本页底部进入<联系我们>进行举报投诉!
THE END
暂无评论内容