Spring+xxl-job+oracle

一、xxl-job

1.1 下载xxl-job

下载地址:xxl-job

1.2 配置xxl-job

1.2.1 配置数据库:

打开xxl-job-admin下的resources文件夹下的application.properties

其他配置:

修改端口server.port

1.2.2 执行数据库脚本:

打开doc文件-->db-->table_xxl_job.sql。由于源码只有mysql版的脚本。故附上oracle版脚本:

--drop table XXL_JOB_GROUP;
create table XXL_JOB_GROUP
(
    ID            NUMBER not null,
    APP_NAME      VARCHAR2(150) not null,
    TITLE         VARCHAR2(50) not null,
    ADDRESS_TYPE  NUMBER not null,
    ADDRESS_LIST  CLOB,
    UPDATE_TIME   DATE
);
comment on table XXL_JOB_GROUP
 is '执行器信息表';
comment on column XXL_JOB_GROUP.ID
 is 'id';
comment on column XXL_JOB_GROUP.APP_NAME
 is '执行器AppName';
comment on column XXL_JOB_GROUP.TITLE
 is '执行器名称';
comment on column XXL_JOB_GROUP.ADDRESS_TYPE
 is '执行器地址类型:0=自动注册、1=手动录入';
comment on column XXL_JOB_GROUP.ADDRESS_LIST
 is '执行器地址列表,多地址逗号分隔';
comment on column XXL_JOB_GROUP.UPDATE_TIME
 is '';
create index IDX_JOB_GROUP_APP_NAME on XXL_JOB_GROUP(APP_NAME) ;
alter table XXL_JOB_GROUP add constraint PK_XXL_JOB_GROUP primary key (ID)  ;

--drop table XXL_JOB_INFO;
create table XXL_JOB_INFO
(
    ID                        NUMBER not null,
    JOB_GROUP                 NUMBER not null,
    JOB_DESC                  VARCHAR2(500) not null,
    ADD_TIME                  DATE,
    UPDATE_TIME               DATE,
    AUTHOR                    VARCHAR2(500),
    ALARM_EMAIL               VARCHAR2(500),
    SCHEDULE_TYPE             VARCHAR2(50),
    SCHEDULE_CONF             VARCHAR2(128),
    MISFIRE_STRATEGY          VARCHAR2(50),
    EXECUTOR_ROUTE_STRATEGY   VARCHAR2(150),
    EXECUTOR_HANDLER          VARCHAR2(500),
    EXECUTOR_PARAM            VARCHAR2(1000),
    EXECUTOR_BLOCK_STRATEGY   VARCHAR2(150),
    EXECUTOR_TIMEOUT          NUMBER not null,
    EXECUTOR_FAIL_RETRY_COUNT NUMBER not null,
    GLUE_TYPE                 VARCHAR2(150) not null,
    GLUE_SOURCE               CLOB,
    GLUE_REMARK               VARCHAR2(128),
    GLUE_UPDATETIME           DATE,
    CHILD_JOBID               VARCHAR2(500),
    TRIGGER_STATUS            NUMBER not null,
    TRIGGER_LAST_TIME         NUMBER not null,
    TRIGGER_NEXT_TIME         NUMBER not null
) ;
comment on table XXL_JOB_INFO
 is '调度信息表';
comment on column XXL_JOB_INFO.SCHEDULE_CONF
 is '调度配置,值含义取决于调度类型';
comment on column XXL_JOB_INFO.EXECUTOR_HANDLER
 is '执行器任务handler';
comment on column XXL_JOB_INFO.EXECUTOR_PARAM
 is '执行器任务参数';
comment on column XXL_JOB_INFO.EXECUTOR_BLOCK_STRATEGY
 is '阻塞处理策略';
comment on column XXL_JOB_INFO.EXECUTOR_TIMEOUT
 is '任务执行超时时间,单位秒';
comment on column XXL_JOB_INFO.EXECUTOR_FAIL_RETRY_COUNT
 is '失败重试次数';
comment on column XXL_JOB_INFO.GLUE_TYPE
 is 'GLUE类型';
comment on column XXL_JOB_INFO.GLUE_SOURCE
 is 'GLUE源代码';
comment on column XXL_JOB_INFO.GLUE_REMARK
 is 'GLUE备注';
comment on column XXL_JOB_INFO.GLUE_UPDATETIME
 is 'GLUE更新时间';
comment on column XXL_JOB_INFO.CHILD_JOBID
 is '子任务ID,多个逗号分隔';
comment on column XXL_JOB_INFO.TRIGGER_STATUS
 is '调度状态:0-停止,1-运行';
comment on column XXL_JOB_INFO.TRIGGER_LAST_TIME
 is '上次
<think>我们正在处理用户关于整合Spring Boot、Oracle数据库XXL-JOB的问题。 根据用户的问题,我们需要设置Spring Boot项目,集成Oracle数据库,并配置XXL-JOB执行器。 步骤: 1. 创建Spring Boot项目 2. 添加Oracle数据库支持 3. 集成XXL-JOB执行器 注意:XXL-JOB是一个分布式任务调度平台,我们需要在Spring Boot项目中配置XXL-JOB的执行器(xxl-job-executor)。 引用[1]提到手动安装父工程xxl-job到本地仓库,这是因为在某些情况下,xxl-job的依赖可能不在公共仓库中,需要手动安装。但最新版本可能已经发布到Maven中央仓库,因此我们首先尝试通过Maven依赖添加。 然而,用户的问题是关于Spring Boot、OracleXXL-JOB的整合,所以我们将重点放在配置上。 详细步骤: 1. 创建Spring Boot项目 可以使用Spring Initializr(https://start.spring.io/)创建项目,选择必要的依赖:Web、JDBC(或JPA,根据用户选择)、Oracle驱动。 2. 添加Oracle JDBC驱动 由于Oracle JDBC驱动不在公共仓库中,需要手动下载并安装到本地仓库,或者从Oracle获取官方依赖(如果使用Oracle的Maven仓库)。这里我们假设用户已经处理了Oracle驱动的问题。 在pom.xml中添加Oracle驱动依赖(示例版本): ```xml <dependency> <groupId>com.oracle.database.jdbc</groupId> <artifactId>ojdbc8</artifactId> <version>21.5.0.0</version> </dependency> ``` 3. 添加XXL-JOB执行器依赖 根据XXL-JOB官方文档,添加执行器依赖。目前,XXL-JOB的执行器依赖可以在Maven中央仓库找到。 ```xml <dependency> <groupId>com.xuxueli</groupId> <artifactId>xxl-job-core</artifactId> <version>2.3.0</version> </dependency> ``` 4. 配置XXL-JOB执行器 在application.properties(或application.yml)中配置XXL-JOB执行器的相关参数: ```properties # xxl-job admin address list, such as "http://address" or "http://address01,http://address02" xxl.job.admin.addresses=http://127.0.0.1:8080/xxl-job-admin # xxl-job executor address xxl.job.executor.appname=xxl-job-executor-sample xxl.job.executor.ip= xxl.job.executor.port=9999 # xxl-job access token xxl.job.accessToken= # xxl-job log path xxl.job.executor.logpath=/data/applogs/xxl-job/jobhandler # xxl-job log retention days xxl.job.executor.logretentiondays=30 ``` 5. 配置Spring Boot数据源(Oracle) ```properties spring.datasource.url=jdbc:oracle:thin:@//localhost:1521/ORCLCDB spring.datasource.username=your_username spring.datasource.password=your_password spring.datasource.driver-class-name=oracle.jdbc.OracleDriver ``` 6. 创建XXL-JOB配置类 在Spring Boot项目中创建一个配置类,用于初始化XXL-JOB的执行器。 ```java import com.xxl.job.core.executor.impl.XxlJobSpringExecutor; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @Configuration public class XxlJobConfig { private Logger logger = LoggerFactory.getLogger(XxlJobConfig.class); @Value("${xxl.job.admin.addresses}") private String adminAddresses; @Value("${xxl.job.executor.appname}") private String appName; @Value("${xxl.job.executor.ip}") private String ip; @Value("${xxl.job.executor.port}") private int port; @Value("${xxl.job.accessToken}") private String accessToken; @Value("${xxl.job.executor.logpath}") private String logPath; @Value("${xxl.job.executor.logretentiondays}") private int logRetentionDays; @Bean public XxlJobSpringExecutor xxlJobExecutor() { logger.info(">>>>>>>>>>> xxl-job config init."); XxlJobSpringExecutor xxlJobSpringExecutor = new XxlJobSpringExecutor(); xxlJobSpringExecutor.setAdminAddresses(adminAddresses); xxlJobSpringExecutor.setAppname(appName); xxlJobSpringExecutor.setIp(ip); xxlJobSpringExecutor.setPort(port); xxlJobSpringExecutor.setAccessToken(accessToken); xxlJobSpringExecutor.setLogPath(logPath); xxlJobSpringExecutor.setLogRetentionDays(logRetentionDays); return xxlJobSpringExecutor; } } ``` 7. 编写一个简单的任务 使用@XxlJob注解标记一个方法为XXL-JOB任务。 ```java import com.xxl.job.core.handler.annotation.XxlJob; import org.springframework.stereotype.Component; @Component public class SampleJob { @XxlJob("demoJobHandler") public void demoJobHandler() throws Exception { System.out.println("XXL-JOB, Hello World."); } } ``` 8. 启动项目并登录XXL-JOB管理平台 在XXL-JOB管理平台中,添加执行器(appname要与配置中的一致),然后添加任务,选择刚才编写的任务(demoJobHandler)。 注意:如果遇到依赖问题,比如xxl-job-core依赖无法下载,可能需要手动安装。引用[1]中提到了手动安装父工程的方法,但这里我们只需要安装核心依赖。如果确实需要手动安装,可以按照以下步骤: - 下载xxl-job-core的jar包 - 使用mvn install命令安装到本地仓库 - 或者,按照引用[1]的方法,手动创建目录并放置pom文件(但通常我们只需要安装jar包) 不过,由于2.3.0版本在Maven中央仓库可用,所以直接添加依赖即可。 最后,确保Oracle数据库服务运行,并且XXL-JOB的管理平台已经启动。 这样,我们就完成了Spring Boot整合OracleXXL-JOB的基本设置。 生成相关问题: 1. 如何配置XXL-JOB任务的分片处理? 2. 在Spring Boot中如何实现XXL-JOB任务的动态参数传递? 3. 如何监控XXL-JOB任务的执行情况? 4. 在Oracle数据库中如何存储XXL-JOB的日志? 5. 如何优化XXL-JOB执行器在Spring Boot中的性能?</think>### Spring Boot整合Oracle数据库XXL-JOB配置指南 #### 1. **基础环境准备** - **Spring Boot项目创建** 使用[Spring Initializr](https://start.spring.io/)生成项目,选择依赖: - `Spring Web` - `JDBC API`(或`Spring Data JPA`) - `Oracle Driver` - **Oracle JDBC驱动配置** 在`pom.xml`中添加Oracle驱动(需手动安装到本地仓库): ```xml <dependency> <groupId>com.oracle.database.jdbc</groupId> <artifactId>ojdbc8</artifactId> <version>21.5.0.0</version> </dependency> ``` - **XXL-JOB依赖安装** 按引用[1]方法手动安装父工程到本地仓库: ```shell mvn install:install-file \ -Dfile=xxl-job-core-2.3.0.jar \ -DgroupId=com.xuxueli \ -DartifactId=xxl-job-core \ -Dversion=2.3.0 \ -Dpackaging=jar ``` #### 2. **关键配置步骤** ##### (1) 添加XXL-JOB依赖 ```xml <dependency> <groupId>com.xuxueli</groupId> <artifactId>xxl-job-core</artifactId> <version>2.3.0</version> </dependency> ``` ##### (2) 配置文件`application.yml` ```yaml # Oracle数据源 spring: datasource: url: jdbc:oracle:thin:@//localhost:1521/ORCL username: your_username password: your_password driver-class-name: oracle.jdbc.OracleDriver # XXL-JOB配置 xxl: job: admin: addresses: http://xxl-job-admin-host:8080/xxl-job-admin # 调度中心地址 executor: appname: your-springboot-app-name port: 9999 # 执行器端口 logpath: /data/applogs/xxl-job/jobhandler logretentiondays: 30 accessToken: your_token # 与调度中心一致 ``` ##### (3) 配置类`XxlJobConfig.java` ```java @Configuration public class XxlJobConfig { @Value("${xxl.job.admin.addresses}") private String adminAddresses; @Value("${xxl.job.executor.appname}") private String appName; @Bean public XxlJobSpringExecutor xxlJobExecutor() { XxlJobSpringExecutor executor = new XxlJobSpringExecutor(); executor.setAdminAddresses(adminAddresses); executor.setAppname(appName); executor.setPort(9999); return executor; } } ``` #### 3. **创建定时任务** ```java @Component public class OracleDataSyncJob { @Autowired private JdbcTemplate jdbcTemplate; // 注入Oracle操作组件 @XxlJob("oracleDataSyncHandler") public void syncData() { // 示例:从Oracle查询数据 List<Map<String, Object>> data = jdbcTemplate.queryForList( "SELECT * FROM YOUR_TABLE WHERE SYNC_FLAG = 0" ); // 业务处理逻辑(如数据同步) data.forEach(row -> { System.out.println("Processing: " + row.get("ID")); // 更新同步状态 jdbcTemplate.update( "UPDATE YOUR_TABLE SET SYNC_FLAG = 1 WHERE ID = ?", row.get("ID") ); }); } } ``` #### 4. **验证与调试** 1. **启动Spring Boot应用**: ```shell mvn spring-boot:run ``` 2. **在XXL-JOB控制台操作**: - 进入"执行器管理",添加执行器(AppName与配置一致) - 在"任务管理"新建任务: - JobHandler填 `oracleDataSyncHandler` - 路由策略选择`轮询` - Cron表达式示例:`0 0/30 * * * ?`(每30分钟执行) #### 5. **常见问题解决** - **依赖冲突**:检查`xxl-job-core`与其他库的版本兼容性 - **Oracle连接失败**:确保TNS配置正确,防火墙开放1521端口 - **任务未触发**:核对调度中心与执行器的AppName和accessToken - **性能监控**:集成引用[2]中的JMH或VisualVM进行性能分析 --- ### 相关问题 1. 如何实现XXL-JOB任务的分片广播处理? 2. 在Oracle环境下如何优化XXL-JOB的任务日志存储? 3. Spring Boot中如何动态修改XXL-JOB的Cron表达式? 4. XXL-JOB执行器注册失败的可能原因有哪些? 5. 如何监控XXL-JOB任务在Oracle数据库中的执行效率?
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值