xxl-job使用oracle数据库实现

说一个心碎的故事,那天我在使用xxl-job,说是要装mysql,结果在linux上装mysql,怎么装都启动不了。心累,我们的业务系统用的是oracle,干嘛要用mysql。多此一举啊,为了一个中间件特意装一个mysql简直是浪费。于是就用oralce试试。

经过一天的模式,终于调试出来了。项目代码:
xxl-job-oracle-master【https://github.com/EscTabEnd/xxl-job-oracle-master.git】
我使用的版本是目前最新的2.3.1修改的。

如果后续出了新版本,功能更齐全,需要使用最新版本对接oracle的话,下面我这里贴出对接步骤,大家可以参考对接就行了。若不嫌弃可以使用小弟上传的项目。

按照以下步骤就能使用oracle方式运行xxl-jbo

一、引入ojdbc8依赖包

<dependency>
	<groupId>com.oracle.ojdbc</groupId>
	<artifactId>ojdbc8</artifactId>
	<version>19.3.0.0</version>
</dependency>

二、执行oracle建表脚本
脚本放在doc下面。可以点我项目链接去找脚本。
在这里插入图片描述

三、改造Mapper.xml
1、改造所有insert语句,通过去序列来获取ID,例如下代码所示:

	<sql id='XXL_JOB_LOG_REPORT_ID'>XXL_JOB_LOG_REPORT_ID.NEXTVAL</sql>

	<insert id="save" parameterType="com.xxl.job.admin.core.model.XxlJobLogReport" useGeneratedKeys="true" keyProperty="id" >
		<selectKey keyProperty="id" resultType="int" order="BEFORE">
			select <include refid="XXL_JOB_LOG_REPORT_ID" /> from dual
		</selectKey>
		INSERT INTO xxl_job_log_report (
			id,
			trigger_day,
			running_count,
			suc_count,
			fail_count
		) VALUES (
			#{id},
			#{triggerDay},
			#{runningCount},
			#{sucCount},
			#{failCount}
		)
	</insert>

2、修改分页查询,使用oracle三层嵌套

	<select id="pageList" parameterType="java.util.HashMap" resultMap="XxlJobUser">
		select *
		from (select *
		from (select A.*, rownum rn
		from (
				SELECT <include refid="Base_Column_List" />
				FROM xxl_job_user t
				<trim prefix="WHERE" prefixOverrides="AND | OR" >
					<if test="username != null and username != ''">
						AND t.username like CONCAT(CONCAT('%', #{username}), '%')
					</if>
					<if test="role gt -1">
						AND t.role = #{role}
					</if>
				</trim>
				ORDER BY username ASC) A)
		where rn > #{offset}) B
		<![CDATA[	where rn < #{offset}+ #{pagesize} ]]>
	</select>

3、修改一些mysql的特殊写法,例如:INTERVAL

	<!--//TODO oracle支持调整 取时间间隔 DATE_ADD(#{nowTime},INTERVAL -#{timeout} SECOND)修改为(#{nowTime}-1/(24*60*60)*#{timeout})  -->
	<select id="findDead" parameterType="java.util.HashMap" resultType="java.lang.Integer" >
		SELECT t.id
		FROM xxl_job_registry t
		WHERE t.update_time <![CDATA[ < ]]> (#{nowTime}-1/(24*60*60)*#{timeout})
	</select>

4、oracle中的clob字段和DATE字段若为空时需要指定字段类型,否则报错。oracle中的NUMBER类型不需要指定,指定了反而报错

	<update id="update" parameterType="com.xxl.job.admin.core.model.XxlJobGroup" >
		UPDATE xxl_job_group
		SET app_name = #{appname,jdbcType=VARCHAR},
			title = #{title,jdbcType=VARCHAR},
			address_type = #{addressType,jdbcType=VARCHAR},
			address_list = #{addressList,jdbcType=CLOB},
			update_time = #{updateTime,jdbcType=DATE}
		WHERE id = #{id}
	</update>

四、修改application配置,链接oracle数据库即可。

#TODO oracle支持调整
mybatis-plus.configuration.jdbc-type-for-null='' # 解决oracle更新数据为null时无法转换报错
mybatis-plus.configuration.database-id=oracle # 支持多库配置 mysql,oracle


#mybatis.type-aliases-package=com.xxl.job.admin.core.model
spring.datasource.url=jdbc:oracle:thin:@//xxx:1521/pdbscsb00
spring.datasource.username=admin
spring.datasource.password=123456

新手如果启动起项目过后。访问:http://localhost:8080/xxl-job-admin/joblog
需要注意

项目启动后,最开始是需要去新增自己的【执行器管理】项目的,然后再到任务管理去新增自己的任务。才能使用。 此处不演示执行器使用了。

执行器的问题有一点可以说下。就是端口。有如下使用场景:
一台应用服务器,我发布多个端口的应用程序,每个程序是一个执行器,那么执行器的端口如何设置呢?默认端口是9999,如果不填端口的话,启动会报错的。

如果需要一台ip上使用多个执行器,那么port就要填成0即可

本文来自久远银海永不掉发的程序员编写,对您有用请点个赞吧。

评论 23
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值