疯狂的狮子Li
2024-03-14 abe6b05c5c1322eb28185a8354d02c72247f26b2
update 优化 !pr493 代码结构与问题修复
已添加4个文件
已删除5个文件
已修改5个文件
497 ■■■■ 文件已修改
ruoyi-extend/ruoyi-easyretry-server/src/main/resources/application-dev.yml 53 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-extend/ruoyi-easyretry-server/src/main/resources/application-prod.yml 53 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-extend/ruoyi-easyretry-server/src/main/resources/application.yml 53 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-extend/ruoyi-easyretry-server/src/main/resources/banner.txt 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-extend/ruoyi-easyretry-server/src/main/resources/logback-boot.xml 88 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-extend/ruoyi-easyretry-server/src/main/resources/logback-plus.xml 92 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-job/src/main/java/org/dromara/job/easyretry/TestAnnoJobExecutor.java 5 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-job/src/main/java/org/dromara/job/easyretry/TestAnnoJobExecutorSleep10s.java 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-job/src/main/java/org/dromara/job/easyretry/TestAnnoJobExecutorSleep1s.java 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-job/src/main/java/org/dromara/job/easyretry/TestAnnoJobExecutorSleep30s.java 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-job/src/main/java/org/dromara/job/easyretry/TestAnnoJobExecutorSleep5s.java 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-job/src/main/java/org/dromara/job/easyretry/TestClassJobExecutor.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
script/sql/easy_retry.sql 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
script/sql/postgres/easy_retry.sql 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-extend/ruoyi-easyretry-server/src/main/resources/application-dev.yml
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,53 @@
easy-retry:
  # å½“前使用的数据库类型
  db-type: mysql
spring:
  datasource:
    type: com.zaxxer.hikari.HikariDataSource
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3306/ry-vue?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true
    username: root
    password: root
    hikari:
      connection-timeout: 30000
      validation-timeout: 5000
      minimum-idle: 10
      maximum-pool-size: 20
      idle-timeout: 600000
      max-lifetime: 900000
      keepaliveTime: 30000
--- # easy-retry æœåŠ¡ç«¯é…ç½®
easy-retry:
  # æ‹‰å–重试数据的每批次的大小
  retry-pull-page-size: 1000
  # æ‹‰å–重试数据的每批次的大小
  job-pull-page-size: 1000
  # æœåŠ¡ç«¯ netty ç«¯å£
  netty-port: 1788
  # é‡è¯•和死信表的分区总数
  total-partition: 2
  # ä¸€ä¸ªå®¢æˆ·ç«¯æ¯ç§’最多接收的重试数量指令
  limiter: 1000
  # å·æ®µæ¨¡å¼ä¸‹æ­¥é•¿é…ç½®
  step: 100
  # æ—¥å¿—保存时间(单位: day)
  log-storage: 90
  # å›žè°ƒé…ç½®
  callback:
    #回调最大执行次数
    max-count: 288
    #间隔时间
    trigger-interval: 900
  mode: all
  retry-max-pull-count: 10
--- # ç›‘控中心配置
spring.boot.admin.client:
  # å¢žåŠ å®¢æˆ·ç«¯å¼€å…³
  enabled: true
  url: http://localhost:9090/admin
  instance:
    service-host-type: IP
  username: ruoyi
  password: 123456
ruoyi-extend/ruoyi-easyretry-server/src/main/resources/application-prod.yml
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,53 @@
easy-retry:
  # å½“前使用的数据库类型
  db-type: mysql
spring:
  datasource:
    type: com.zaxxer.hikari.HikariDataSource
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3306/ry-vue?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true
    username: root
    password: root
    hikari:
      connection-timeout: 30000
      validation-timeout: 5000
      minimum-idle: 10
      maximum-pool-size: 20
      idle-timeout: 600000
      max-lifetime: 900000
      keepaliveTime: 30000
--- # easy-retry æœåŠ¡ç«¯é…ç½®
easy-retry:
  # æ‹‰å–重试数据的每批次的大小
  retry-pull-page-size: 1000
  # æ‹‰å–重试数据的每批次的大小
  job-pull-page-size: 1000
  # æœåŠ¡ç«¯ netty ç«¯å£
  netty-port: 1788
  # é‡è¯•和死信表的分区总数
  total-partition: 2
  # ä¸€ä¸ªå®¢æˆ·ç«¯æ¯ç§’最多接收的重试数量指令
  limiter: 1000
  # å·æ®µæ¨¡å¼ä¸‹æ­¥é•¿é…ç½®
  step: 100
  # æ—¥å¿—保存时间(单位: day)
  log-storage: 90
  # å›žè°ƒé…ç½®
  callback:
    #回调最大执行次数
    max-count: 288
    #间隔时间
    trigger-interval: 900
  mode: all
  retry-max-pull-count: 10
--- # ç›‘控中心配置
spring.boot.admin.client:
  # å¢žåŠ å®¢æˆ·ç«¯å¼€å…³
  enabled: true
  url: http://localhost:9090/admin
  instance:
    service-host-type: IP
  username: ruoyi
  password: 123456
ruoyi-extend/ruoyi-easyretry-server/src/main/resources/application.yml
@@ -2,26 +2,12 @@
  port: 8800
  servlet:
    context-path: /easy-retry
spring:
  application:
    name: ruoyi-easyretry-server
  profiles:
    active: @profiles.active@
  datasource:
    name: ry-vue
    url: jdbc:mysql://localhost:3306/ry-vue?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true
    username: root
    password: root
    type: com.zaxxer.hikari.HikariDataSource
    driver-class-name: com.mysql.cj.jdbc.Driver
    hikari:
      connection-timeout: 30000
      minimum-idle: 5
      maximum-pool-size: 20
      auto-commit: true
      idle-timeout: 30000
      pool-name: easy_retry
      max-lifetime: 1800000
  web:
    resources:
      static-locations: classpath:admin/
@@ -37,30 +23,17 @@
  configuration:
    map-underscore-to-camel-case: true
    cache-enabled: true
logging:
  config: classpath:logback-boot.xml
  config: classpath:logback-plus.xml
easy-retry:
  retry-pull-page-size: 1000 # æ‹‰å–重试数据的每批次的大小
  job-pull-page-size: 1000 # æ‹‰å–重试数据的每批次的大小
  netty-port: 1788  # æœåŠ¡ç«¯netty端口
  total-partition: 2  # é‡è¯•和死信表的分区总数
  limiter: 1000 # ä¸€ä¸ªå®¢æˆ·ç«¯æ¯ç§’最多接收的重试数量指令
  step: 100 # å·æ®µæ¨¡å¼ä¸‹æ­¥é•¿é…ç½®
  log-storage: 90 # æ—¥å¿—保存时间(单位: day)
  callback: # å›žè°ƒé…ç½®
    max-count: 288 #回调最大执行次数
    trigger-interval: 900 #间隔时间
  db-type: mysql #当前使用的数据库
  mode: all
  retry-max-pull-count: 10
--- # ç›‘控中心配置
spring.boot.admin.client:
  # å¢žåŠ å®¢æˆ·ç«¯å¼€å…³
  enabled: true
  url: http://localhost:9090/admin
  instance:
    service-host-type: IP
  username: ruoyi
  password: 123456
management:
  endpoints:
    web:
      exposure:
        include: '*'
  endpoint:
    health:
      show-details: ALWAYS
    logfile:
      external-file: ./logs/ruoyi-easyretry-server/console.log
ruoyi-extend/ruoyi-easyretry-server/src/main/resources/banner.txt
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,10 @@
Application Version: ${revision}
Spring Boot Version: ${spring-boot.version}
                                      _
                                     | |
  ___  __ _ ___ _   _ ______ _ __ ___| |_ _ __ _   _ ______ ___  ___ _ ____   _____ _ __
 / _ \/ _` / __| | | |______| '__/ _ \ __| '__| | | |______/ __|/ _ \ '__\ \ / / _ \ '__|
|  __/ (_| \__ \ |_| |      | | |  __/ |_| |  | |_| |      \__ \  __/ |   \ V /  __/ |
 \___|\__,_|___/\__, |      |_|  \___|\__|_|   \__, |      |___/\___|_|    \_/ \___|_|
                 __/ |                          __/ |
                |___/                          |___/
ruoyi-extend/ruoyi-easyretry-server/src/main/resources/logback-boot.xml
ÎļþÒÑɾ³ý
ruoyi-extend/ruoyi-easyretry-server/src/main/resources/logback-plus.xml
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,92 @@
<configuration>
    <property name="log.path" value="./logs/ruoyi-easyretry-server" />
    <property name="console.log.pattern"
              value="%red(%d{yyyy-MM-dd HH:mm:ss}) %green([%thread]) %highlight(%-5level) %boldMagenta(%logger{36}%n) - %msg%n"/>
    <property name="log.pattern" value="%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n"/>
    <!-- æŽ§åˆ¶å°è¾“出 -->
    <appender name="console" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>${console.log.pattern}</pattern>
            <charset>utf-8</charset>
        </encoder>
    </appender>
    <!-- æŽ§åˆ¶å°è¾“出 -->
    <appender name="file_console" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${log.path}/console.log</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!-- æ—¥å¿—文件名格式 -->
            <fileNamePattern>${log.path}/console.%d{yyyy-MM-dd}.log</fileNamePattern>
            <!-- æ—¥å¿—最大 1天 -->
            <maxHistory>1</maxHistory>
        </rollingPolicy>
        <encoder>
            <pattern>${log.pattern}</pattern>
            <charset>utf-8</charset>
        </encoder>
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <!-- è¿‡æ»¤çš„级别 -->
            <level>INFO</level>
        </filter>
    </appender>
    <appender name="file_info" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${log.path}/info.log</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <FileNamePattern>${log.base}/info.%d{yyyy-MM-dd}.log</FileNamePattern>
            <MaxHistory>60</MaxHistory>
        </rollingPolicy>
        <encoder>
            <pattern>${log.pattern}</pattern>
        </encoder>
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>INFO</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
    </appender>
    <appender name="file_error" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${log.base}/error.log</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <FileNamePattern>${log.base}/error.%d{yyyy-MM-dd}.log
            </FileNamePattern>
            <MaxHistory>60</MaxHistory>
        </rollingPolicy>
        <encoder>
            <pattern>${log.pattern}</pattern>
        </encoder>
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>ERROR</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
    </appender>
    <appender name ="async_info" class= "ch.qos.logback.classic.AsyncAppender">
        <discardingThreshold >100</discardingThreshold>
        <queueSize>1024</queueSize>
        <appender-ref ref ="file_info"/>
    </appender>
    <appender name ="async_error" class= "ch.qos.logback.classic.AsyncAppender">
        <discardingThreshold >100</discardingThreshold>
        <queueSize>1024</queueSize>
        <appender-ref ref ="file_error"/>
    </appender>
    <!-- EasyRetry appender -->
    <appender name="easy_log_server_appender" class="com.aizuda.easy.retry.server.job.task.support.appender.EasyRetryServerLogbackAppender">
    </appender>
    <!-- æŽ§åˆ¶å°è¾“出日志级别 -->
    <root level="info">
        <appender-ref ref="console" />
        <appender-ref ref="async_info" />
        <appender-ref ref="async_error" />
        <appender-ref ref="easy_log_server_appender" />
    </root>
</configuration>
ruoyi-modules/ruoyi-job/src/main/java/org/dromara/job/easyretry/TestAnnoJobExecutor.java
@@ -3,18 +3,21 @@
import com.aizuda.easy.retry.client.job.core.annotation.JobExecutor;
import com.aizuda.easy.retry.client.job.core.dto.JobArgs;
import com.aizuda.easy.retry.client.model.ExecuteResult;
import com.aizuda.easy.retry.common.core.util.JsonUtil;
import com.aizuda.easy.retry.common.log.EasyRetryLog;
import org.springframework.stereotype.Component;
/**
 * @author www.byteblogs.com
 * @date 2023-09-28 22:54:07
 * @since 2.4.0
 */
@Component
@JobExecutor(name = "testJobExecutor")
public class TestAnnoJobExecutor {
    public ExecuteResult jobExecute(JobArgs jobArgs) {
        EasyRetryLog.LOCAL.info("testJobExecutor. jobArgs:{}", JsonUtil.toJsonString(jobArgs));
        EasyRetryLog.REMOTE.info("testJobExecutor. jobArgs:{}", JsonUtil.toJsonString(jobArgs));
        return ExecuteResult.success("测试成功");
    }
}
ruoyi-modules/ruoyi-job/src/main/java/org/dromara/job/easyretry/TestAnnoJobExecutorSleep10s.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-job/src/main/java/org/dromara/job/easyretry/TestAnnoJobExecutorSleep1s.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-job/src/main/java/org/dromara/job/easyretry/TestAnnoJobExecutorSleep30s.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-job/src/main/java/org/dromara/job/easyretry/TestAnnoJobExecutorSleep5s.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-job/src/main/java/org/dromara/job/easyretry/TestClassJobExecutor.java
@@ -8,7 +8,6 @@
/**
 * @author www.byteblogs.com
 * @date 2023-09-28 22:54:07
 * @since 2.4.0
 */
@Component
public class TestClassJobExecutor extends AbstractJobExecutor {
script/sql/easy_retry.sql
@@ -16,10 +16,8 @@
) ENGINE = InnoDB
  DEFAULT CHARSET = utf8mb4 COMMENT ='命名空间';
INSERT INTO `namespace` (`id`, `name`, `unique_id`, `create_dt`, `update_dt`, `deleted`)
VALUES (1, 'Development', 'dev', now(), now(), 0);
INSERT INTO `namespace` (`id`, `name`, `unique_id`, `create_dt`, `update_dt`, `deleted`)
VALUES (2, 'Production', 'prod', now(), now(), 0);
INSERT INTO `namespace` VALUES (1, 'Development', 'dev', '', now(), now(), 0);
INSERT INTO `namespace` VALUES (2, 'Production', 'prod', '', now(), now(), 0);
DROP TABLE IF EXISTS `group_config`;
CREATE TABLE `group_config`
@@ -43,8 +41,7 @@
  DEFAULT CHARSET = utf8mb4 COMMENT ='组配置'
;
INSERT INTO `ry-vue`.group_config (id, namespace_id, group_name, description, group_status, version, group_partition, id_generator_mode, init_scene, bucket_index, create_dt, update_dt)
VALUES (1, 'dev', 'ruoyi_group', '', 1, 1, 0, 1, 1, 4, '2024-03-13 23:21:41', '2024-03-13 23:21:40');
INSERT INTO `group_config` VALUES (1, 'dev', 'ruoyi_group', '', 1, 1, 0, 1, 1, 4, now(), now());
DROP TABLE IF EXISTS `notify_config`;
CREATE TABLE `notify_config`
@@ -254,8 +251,7 @@
  DEFAULT CHARSET = utf8mb4 COMMENT ='系统用户表';
-- pwd: admin
INSERT INTO system_user (username, password, role)
VALUES ('admin', '465c194afb65670f38322df087f0a9bb225cc257e43eb4ac5a0c98ef5b3173ac', 2);
INSERT INTO `system_user` VALUES (1, 'admin', '465c194afb65670f38322df087f0a9bb225cc257e43eb4ac5a0c98ef5b3173ac', 2, now(), now());
DROP TABLE IF EXISTS `system_user_permission`;
CREATE TABLE `system_user_permission`
@@ -323,8 +319,7 @@
  AUTO_INCREMENT = 0
  DEFAULT CHARSET = utf8mb4 COMMENT ='任务信息';
INSERT INTO job (id, namespace_id, group_name, job_name, args_str, args_type, next_trigger_at, job_status, task_type, route_key, executor_type, executor_info, trigger_type, trigger_interval, block_strategy, executor_timeout, max_retry_times, parallel_num, retry_interval, bucket_index, resident, description, ext_attrs, create_dt, update_dt, deleted)
VALUES (1, 'dev', 'ruoyi_group', 'demo-job', null, 1, 1710344035622, 1, 1, 4, 1, 'testJobExecutor', 2, '60', 1, 60, 3, 1, 1, 116, 0, '', '', '2024-03-13 22:59:39', '2024-03-13 23:32:52', 0);
INSERT INTO `job` VALUES (1, 'dev', 'ruoyi_group', 'demo-job', null, 1, 1710344035622, 1, 1, 4, 1, 'testJobExecutor', 2, '60', 1, 60, 3, 1, 1, 116, 0, '', '', now(), now(), 0);
DROP TABLE IF EXISTS `job_log_message`;
CREATE TABLE `job_log_message`
script/sql/postgres/easy_retry.sql
@@ -22,8 +22,8 @@
COMMENT ON COLUMN namespace.deleted IS '逻辑删除 1、删除';
COMMENT ON TABLE namespace IS '命名空间';
INSERT INTO namespace (name, unique_id, create_dt, update_dt, deleted)
VALUES ('Default', '764d604ec6fc45f68cd92514c40e9e1a', now(), now(), 0);
INSERT INTO namespace VALUES (1, 'Development', 'dev', '', now(), now(), 0);
INSERT INTO namespace VALUES (2, 'Production', 'prod', '', now(), now(), 0);
CREATE TABLE group_config
(
@@ -57,10 +57,7 @@
COMMENT ON COLUMN "group_config"."update_dt" IS '修改时间';
COMMENT ON TABLE "group_config" IS '组配置';
INSERT INTO `namespace` (`id`, `name`, `unique_id`, `create_dt`, `update_dt`, `deleted`)
VALUES (1, 'Development', 'dev', now(), now(), 0);
INSERT INTO `namespace` (`id`, `name`, `unique_id`, `create_dt`, `update_dt`, `deleted`)
VALUES (2, 'Production', 'prod', now(), now(), 0);
INSERT INTO group_config VALUES (1, 'dev', 'ruoyi_group', '', 1, 1, 0, 1, 1, 4, now(), now());
CREATE TABLE notify_config
(
@@ -353,8 +350,8 @@
COMMENT ON TABLE "system_user" IS '系统用户表';
-- pwd: admin
INSERT INTO system_user (username, password, role)
VALUES ('admin', '465c194afb65670f38322df087f0a9bb225cc257e43eb4ac5a0c98ef5b3173ac', 2);
INSERT INTO system_user VALUES (1, 'admin', '465c194afb65670f38322df087f0a9bb225cc257e43eb4ac5a0c98ef5b3173ac', 2, now(), now());
CREATE TABLE system_user_permission
(
@@ -459,8 +456,7 @@
COMMENT ON COLUMN "job"."update_dt" IS '更新时间';
COMMENT ON TABLE "job" IS '任务信息';
INSERT INTO job (id, namespace_id, group_name, job_name, args_str, args_type, next_trigger_at, job_status, task_type, route_key, executor_type, executor_info, trigger_type, trigger_interval, block_strategy, executor_timeout, max_retry_times, parallel_num, retry_interval, bucket_index, resident, description, ext_attrs, create_dt, update_dt, deleted)
VALUES (1, 'dev', 'ruoyi_group', 'demo-job', null, 1, 1710344035622, 1, 1, 4, 1, 'testJobExecutor', 2, '60', 1, 60, 3, 1, 1, 116, 0, '', '', '2024-03-13 22:59:39', '2024-03-13 23:32:52', 0);
INSERT INTO job VALUES (1, 'dev', 'ruoyi_group', 'demo-job', null, 1, 1710344035622, 1, 1, 4, 1, 'testJobExecutor', 2, '60', 1, 60, 3, 1, 1, 116, 0, '', '', now(), now(), 0);
CREATE TABLE job_log_message
(