说一个心碎的故事,那天我在使用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即可
本文来自久远银海永不掉发的程序员编写,对您有用请点个赞吧。