xxl-job适配 达梦数据库,金仓数据库,postgresql数据库和oracle数据库

基于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>

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: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

3、增加多数据库配置
 /**
     * 自动识别使用的数据库类型
     * 在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>

码云仓库地址

posted @   Fightingyouth  阅读(253)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示