diff --git a/docker-compose.yml b/docker-compose-rocketmq.yml similarity index 100% rename from docker-compose.yml rename to docker-compose-rocketmq.yml diff --git a/docker-compose-xxljob.yml b/docker-compose-xxljob.yml new file mode 100644 index 0000000..7b6afde --- /dev/null +++ b/docker-compose-xxljob.yml @@ -0,0 +1,46 @@ +services: + # MySQL 服务(无数据持久化) + mysql: + image: mysql:8.0 + container_name: xxl-job-mysql + ports: + - "3307:3306" + environment: + - MYSQL_ROOT_PASSWORD=123456 + - MYSQL_DATABASE=xxl_job + - MYSQL_ROOT_HOST=% + - TZ=Asia/Shanghai + command: --default-authentication-plugin=mysql_native_password + restart: always + networks: + - xxl-job-network + healthcheck: + test: ["CMD", "mysqladmin", "ping", "-h", "localhost", "-p123456"] + interval: 5s + timeout: 3s + retries: 10 + start_period: 10s + + # XXL-Job 调度中心(核心,无持久化) + xxl-job-admin: + image: xuxueli/xxl-job-admin:2.4.1 + container_name: xxl-job-admin + ports: + - "8085:8080" + environment: + - TZ=Asia/Shanghai + - SPRING_DATASOURCE_URL=jdbc:mysql://mysql:3306/xxl_job?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&serverTimezone=Asia/Shanghai + - SPRING_DATASOURCE_USERNAME=root + - SPRING_DATASOURCE_PASSWORD=123456 + - XXL_JOB_ACCESS_TOKEN=default_token + - XXL_JOB_LOG_RETENTION_DAYS=30 + depends_on: + mysql: + condition: service_healthy + restart: always + networks: + - xxl-job-network + +networks: + xxl-job-network: + driver: bridge \ No newline at end of file diff --git a/order-service/pom.xml b/order-service/pom.xml index a570083..628e6f8 100644 --- a/order-service/pom.xml +++ b/order-service/pom.xml @@ -82,5 +82,9 @@ org.apache.rocketmq rocketmq-spring-boot-starter + + com.xuxueli + xxl-job-core + diff --git a/order-service/src/main/java/cn/mayiming/Config/XxlJobConfig.java b/order-service/src/main/java/cn/mayiming/Config/XxlJobConfig.java new file mode 100644 index 0000000..2af56fc --- /dev/null +++ b/order-service/src/main/java/cn/mayiming/Config/XxlJobConfig.java @@ -0,0 +1,33 @@ +package cn.mayiming.Config; + +import com.xxl.job.core.executor.impl.XxlJobSpringExecutor; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +@Configuration +public class XxlJobConfig { + + @Value("${xxl.job.admin.addresses}") + private String adminAddresses; + + @Value("${xxl.job.executor.appname}") + private String appname; + + @Value("${xxl.job.accessToken}") + private String accessToken; + + @Value("${xxl.job.executor.port}") + private int port; + + // 初始化XXL-Job执行器 + @Bean + public XxlJobSpringExecutor xxlJobExecutor() { + XxlJobSpringExecutor executor = new XxlJobSpringExecutor(); + executor.setAdminAddresses(adminAddresses); + executor.setAppname(appname); + executor.setAccessToken(accessToken); + executor.setPort(port); + return executor; + } +} \ No newline at end of file diff --git a/order-service/src/main/java/cn/mayiming/JobHandler/executorDemo.java b/order-service/src/main/java/cn/mayiming/JobHandler/executorDemo.java new file mode 100644 index 0000000..ab3e5e1 --- /dev/null +++ b/order-service/src/main/java/cn/mayiming/JobHandler/executorDemo.java @@ -0,0 +1,15 @@ +package cn.mayiming.JobHandler; + +import com.xxl.job.core.handler.annotation.XxlJob; +import org.springframework.stereotype.Component; + +@Component +public class executorDemo { + @XxlJob("demoJobHandler") + public void demoJobHandler() { + // 这里写你的业务逻辑,比如: + System.out.println("XXL-Job 执行器任务执行成功!当前时间:" + System.currentTimeMillis()); + + // 示例:定时订单超时取消、数据同步、日志清理等都可以写在这里 + } +} diff --git a/order-service/src/main/resources/application.yml b/order-service/src/main/resources/application.yml index 99082fe..2c03415 100644 --- a/order-service/src/main/resources/application.yml +++ b/order-service/src/main/resources/application.yml @@ -52,4 +52,13 @@ rocketmq: # 消息最大长度(默认4M) max-message-size: 4194304 # 压缩消息阈值(超过4K自动压缩) - compress-message-body-threshold: 4096 \ No newline at end of file + compress-message-body-threshold: 4096 + +xxl: + job: + admin: + addresses: http://localhost:8085/xxl-job-admin # 调度中心访问地址(端口按你实际配置的来) + executor: + appname: xxl-job-executor-demo # 必须和控制台创建的执行器AppName完全一致! + port: 9999 # 执行器端口(默认9999,可改) + accessToken: default_token # 和调度中心的token一致(默认default_token) \ No newline at end of file diff --git a/pom.xml b/pom.xml index 743029a..c913cdc 100644 --- a/pom.xml +++ b/pom.xml @@ -113,6 +113,11 @@ rocketmq-spring-boot-starter 2.3.4 + + com.xuxueli + xxl-job-core + 2.4.1 +