zlwu 1 år sedan
förälder
incheckning
bab7b53074

+ 37 - 35
backend/ruoyi-admin/src/main/java/org/dromara/config/AsyncConfig.java

@@ -24,38 +24,40 @@ public class AsyncConfig {
     /**
      * 审批流程异步任务执行器
      */
-    @Bean("approvalTaskExecutor")
-    public TaskExecutor approvalTaskExecutor() {
-        ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
-        
-        // 核心线程数
-        executor.setCorePoolSize(5);
-        
-        // 最大线程数
-        executor.setMaxPoolSize(10);
-        
-        // 队列容量
-        executor.setQueueCapacity(50);
-        
-        // 线程名前缀
-        executor.setThreadNamePrefix("approval-async-");
-        
-        // 线程空闲存活时间(秒)
-        executor.setKeepAliveSeconds(60);
-        
-        // 拒绝策略:调用线程执行
-        executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());
-        
-        // 等待任务完成后再关闭线程池
-        executor.setWaitForTasksToCompleteOnShutdown(true);
-        
-        // 等待时间(秒)
-        executor.setAwaitTerminationSeconds(30);
-        
-        // 初始化
-        executor.initialize();
-        
-        log.info("✅ 审批流程异步任务执行器初始化完成");
-        return executor;
-    }
-} 
+    // 吴自龙注释了,跟震哥确定为不需要的代码
+    // @Bean("approvalTaskExecutor")
+    // public TaskExecutor approvalTaskExecutor() {
+    // ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
+
+    // // 核心线程数
+    // executor.setCorePoolSize(5);
+
+    // // 最大线程数
+    // executor.setMaxPoolSize(10);
+
+    // // 队列容量
+    // executor.setQueueCapacity(50);
+
+    // // 线程名前缀
+    // executor.setThreadNamePrefix("approval-async-");
+
+    // // 线程空闲存活时间(秒)
+    // executor.setKeepAliveSeconds(60);
+
+    // // 拒绝策略:调用线程执行
+    // executor.setRejectedExecutionHandler(new
+    // ThreadPoolExecutor.CallerRunsPolicy());
+
+    // // 等待任务完成后再关闭线程池
+    // executor.setWaitForTasksToCompleteOnShutdown(true);
+
+    // // 等待时间(秒)
+    // executor.setAwaitTerminationSeconds(30);
+
+    // // 初始化
+    // executor.initialize();
+
+    // log.info("✅ 审批流程异步任务执行器初始化完成");
+    // return executor;
+    // }
+}

+ 9 - 9
backend/ruoyi-admin/src/main/resources/application-dev.yml

@@ -104,21 +104,21 @@ spring:
 #          password: root
       hikari:
         # 最大连接池数量(增加以减少连接竞争)
-        maxPoolSize: 30
-        # 最小空闲线程数量
-        minIdle: 15
+        maxPoolSize: 20
+        # 最小空闲线程数量(减少空闲连接数)
+        minIdle: 5
         # 配置获取连接等待超时的时间(减少等待时间)
         connectionTimeout: 30000
         # 校验超时时间
         validationTimeout: 5000
         # 空闲连接存活最大时间,默认10分钟(减少空闲超时)
-        idleTimeout: 180000
+        idleTimeout: 300000
         # 此属性控制池中连接的最长生命周期,值0表示无限生命周期,默认30分钟(减少生命周期)
-        maxLifetime: 600000
-        # 多久检查一次连接的活性
-        keepaliveTime: 30000
+        maxLifetime: 900000
+        # 多久检查一次连接的活性(增加间隔,减少检测频率)
+        keepaliveTime: 60000
         # 连接测试查询(验证连接有效性)
-        connectionTestQuery: SELECT 1
+        # connectionTestQuery: SELECT 11
 
 --- # redis 单机配置(单机与集群只能开启一个另一个需要注释掉)
 spring.data:
@@ -340,4 +340,4 @@ system:
 # - 对于内存充足的环境,可以适当增加 max-cache-size-bytes
 # - 对于频繁访问的小文件,可以增加 max-cache-size
 # - 对于大文件较多的环境,可以调整 max-single-file-size
-# - 对于访问频率较低的环境,可以适当减少 expire-time-ms
+# - 对于访问频率较低的环境,可以适当减少 expire-time-ms

+ 4 - 4
backend/ruoyi-admin/src/main/resources/application.yml

@@ -41,10 +41,10 @@ logging:
     org.springframework: warn
     org.mybatis.spring.mapper: error
     org.apache.fury: warn
-    # 临时启用SQL日志调试
-    org.dromara.cw.mapper.CwApprovalRecordMapper: debug
-    org.dromara.cw.service.impl.CwApprovalRecordServiceImpl: debug
-    org.dromara.cw.listener.ApprovalProcessEventListener: debug
+    # 关闭SQL日志调试,减少SELECT 1心跳检测日志
+    # org.dromara.cw.mapper.CwApprovalRecordMapper: info
+    # org.dromara.cw.service.impl.CwApprovalRecordServiceImpl: info
+    # org.dromara.cw.listener.ApprovalProcessEventListener: info
   config: classpath:logback-plus.xml
 
 # 用户配置

+ 19 - 20
backend/ruoyi-admin/src/main/resources/logback-plus.xml

@@ -1,8 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <configuration>
     <property name="log.path" value="./logs"/>
-    <property name="console.log.pattern"
-              value="%cyan(%d{yyyy-MM-dd HH:mm:ss}) %green([%thread]) %highlight(%-5level) %boldMagenta(%logger{36}%n) - %msg%n"/>
+    <property name="console.log.pattern" value="%cyan(%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"/>
 
     <!-- 控制台输出 -->
@@ -113,24 +112,24 @@
     </appender>
 
     <!-- 整合 skywalking 控制台输出 tid -->
-<!--    <appender name="console" class="ch.qos.logback.core.ConsoleAppender">-->
-<!--        <encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">-->
-<!--            <layout class="org.apache.skywalking.apm.toolkit.log.logback.v1.x.TraceIdPatternLogbackLayout">-->
-<!--                <pattern>[%tid] ${console.log.pattern}</pattern>-->
-<!--            </layout>-->
-<!--            <charset>utf-8</charset>-->
-<!--        </encoder>-->
-<!--    </appender>-->
+    <!--    <appender name="console" class="ch.qos.logback.core.ConsoleAppender">-->
+    <!--        <encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">-->
+    <!--            <layout class="org.apache.skywalking.apm.toolkit.log.logback.v1.x.TraceIdPatternLogbackLayout">-->
+    <!--                <pattern>[%tid] ${console.log.pattern}</pattern>-->
+    <!--            </layout>-->
+    <!--            <charset>utf-8</charset>-->
+    <!--        </encoder>-->
+    <!--    </appender>-->
 
     <!-- 整合 skywalking 推送采集日志 -->
-<!--    <appender name="sky_log" class="org.apache.skywalking.apm.toolkit.log.logback.v1.x.log.GRPCLogClientAppender">-->
-<!--        <encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">-->
-<!--            <layout class="org.apache.skywalking.apm.toolkit.log.logback.v1.x.TraceIdPatternLogbackLayout">-->
-<!--                <pattern>[%tid] ${console.log.pattern}</pattern>-->
-<!--            </layout>-->
-<!--            <charset>utf-8</charset>-->
-<!--        </encoder>-->
-<!--    </appender>-->
+    <!--    <appender name="sky_log" class="org.apache.skywalking.apm.toolkit.log.logback.v1.x.log.GRPCLogClientAppender">-->
+    <!--        <encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">-->
+    <!--            <layout class="org.apache.skywalking.apm.toolkit.log.logback.v1.x.TraceIdPatternLogbackLayout">-->
+    <!--                <pattern>[%tid] ${console.log.pattern}</pattern>-->
+    <!--            </layout>-->
+    <!--            <charset>utf-8</charset>-->
+    <!--        </encoder>-->
+    <!--    </appender>-->
 
     <!--系统操作日志-->
     <root level="info">
@@ -138,10 +137,10 @@
         <appender-ref ref="async_info" />
         <appender-ref ref="async_error" />
         <appender-ref ref="file_console" />
-<!--        <appender-ref ref="sky_log"/>-->
+        <!--        <appender-ref ref="sky_log"/>-->
     </root>
 
-    <!-- 设置MyBatis的日志级别为DEBUG,以便打印SQL语句 -->
+    <!-- 设置MyBatis的日志级别为INFO,减少SELECT 1心跳检测日志 -->
     <logger name="org.dromara.xg.mapper" level="DEBUG">
         <appender-ref ref="file_sql" />
     </logger>

+ 2 - 2
backend/ruoyi-common/ruoyi-common-mybatis/src/main/java/org/dromara/common/mybatis/config/MybatisPlusConfig.java

@@ -28,7 +28,7 @@ import org.springframework.transaction.annotation.EnableTransactionManagement;
  * @author Lion Li
  */
 @EnableTransactionManagement(proxyTargetClass = true)
-@MapperScan("org.dromara.**.mapper")
+@MapperScan("${mybatis-plus.mapperPackage}")
 @PropertySource(value = "classpath:common-mybatis.yml", factory = YmlPropertySourceFactory.class)
 public class MybatisPlusConfig {
 
@@ -54,7 +54,7 @@ public class MybatisPlusConfig {
      * 数据权限拦截器
      */
     public PlusDataPermissionInterceptor dataPermissionInterceptor() {
-        return new PlusDataPermissionInterceptor("org.dromara.**.mapper");
+        return new PlusDataPermissionInterceptor(SpringUtils.getProperty("mybatis-plus.mapperPackage"));
     }
 
     /**

+ 3 - 0
backend/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/listener/WorkflowGlobalListener.java

@@ -180,6 +180,9 @@ public class WorkflowGlobalListener implements GlobalListener {
                 String status = BusinessStatusEnum.FINISH.getStatus();
                 // 更新流程状态为已完成
                 instanceService.updateStatus(instanceId, status);
+                // 同时更新内存中的实例状态,避免后续insService.updateById时状态被覆盖
+                // 修复人:吴自龙 - 解决流程结束时状态不一致问题
+                instance.setFlowStatus(status);
                 log.info("流程已结束,状态更新为: {}", status);
                 return status;
             }