Commit f8b4a08faef7f2f82a6b8899ec889a2caa49d870
1 parent
d4417d24
code review:访问日志、错误日志的清理 Job 实现
Showing
14 changed files
with
23 additions
and
1 deletions
yudao-framework/yudao-spring-boot-starter-job/src/main/java/cn/iocoder/yudao/framework/quartz/config/YudaoQuartzAutoConfiguration.java
| @@ -30,6 +30,7 @@ public class YudaoQuartzAutoConfiguration { | @@ -30,6 +30,7 @@ public class YudaoQuartzAutoConfiguration { | ||
| 30 | return new SchedulerManager(scheduler.get()); | 30 | return new SchedulerManager(scheduler.get()); |
| 31 | } | 31 | } |
| 32 | 32 | ||
| 33 | + // TODO @j-sentinel:这个 job,先拿到 infra biz 里面实现哈; | ||
| 33 | @Bean | 34 | @Bean |
| 34 | public JobLogJobHandler jobLogJobHandler(LogJobProperties logJobProperties){ | 35 | public JobLogJobHandler jobLogJobHandler(LogJobProperties logJobProperties){ |
| 35 | return new JobLogJobHandler(logJobProperties); | 36 | return new JobLogJobHandler(logJobProperties); |
yudao-framework/yudao-spring-boot-starter-job/src/main/java/cn/iocoder/yudao/framework/quartz/core/job/JobLogJobHandler.java
| @@ -7,7 +7,9 @@ import lombok.extern.slf4j.Slf4j; | @@ -7,7 +7,9 @@ import lombok.extern.slf4j.Slf4j; | ||
| 7 | 7 | ||
| 8 | import javax.annotation.Resource; | 8 | import javax.annotation.Resource; |
| 9 | 9 | ||
| 10 | +// TODO @j-sentinel:名字和项目里其它保持统一,可以叫 JobLogCleanJob,不用带 handler 哈 | ||
| 10 | /** | 11 | /** |
| 12 | + * // TODO @j-sentinel:要写下类注释噢,就是这个类要干啥;然后下面两个应该是 @author 和 @since | ||
| 11 | * @Author: j-sentinel | 13 | * @Author: j-sentinel |
| 12 | * @Date: 2023/9/30 20:40 | 14 | * @Date: 2023/9/30 20:40 |
| 13 | */ | 15 | */ |
yudao-framework/yudao-spring-boot-starter-job/src/main/java/cn/iocoder/yudao/framework/quartz/core/job/LogJobProperties.java
| @@ -3,6 +3,7 @@ package cn.iocoder.yudao.framework.quartz.core.job; | @@ -3,6 +3,7 @@ package cn.iocoder.yudao.framework.quartz.core.job; | ||
| 3 | import lombok.Data; | 3 | import lombok.Data; |
| 4 | import org.springframework.boot.context.properties.ConfigurationProperties; | 4 | import org.springframework.boot.context.properties.ConfigurationProperties; |
| 5 | 5 | ||
| 6 | +// TODO @j-sentinel:这个配置类,先暂时不做,每个 Job 里面定一个静态类。其实不是所有的变量,都需要配置化,因为它本身基本也不会改动。 | ||
| 6 | /** | 7 | /** |
| 7 | * @Author: j-sentinel | 8 | * @Author: j-sentinel |
| 8 | * @Date: 2023/9/30 16:17 | 9 | * @Date: 2023/9/30 16:17 |
yudao-framework/yudao-spring-boot-starter-web/pom.xml
| @@ -62,11 +62,11 @@ | @@ -62,11 +62,11 @@ | ||
| 62 | </dependency> | 62 | </dependency> |
| 63 | 63 | ||
| 64 | <!-- Job 定时任务相关 --> | 64 | <!-- Job 定时任务相关 --> |
| 65 | + <!-- TODO @j-sentinel:去掉这个依赖哈; --> | ||
| 65 | <dependency> | 66 | <dependency> |
| 66 | <groupId>cn.iocoder.boot</groupId> | 67 | <groupId>cn.iocoder.boot</groupId> |
| 67 | <artifactId>yudao-spring-boot-starter-job</artifactId> | 68 | <artifactId>yudao-spring-boot-starter-job</artifactId> |
| 68 | </dependency> | 69 | </dependency> |
| 69 | - | ||
| 70 | </dependencies> | 70 | </dependencies> |
| 71 | 71 | ||
| 72 | </project> | 72 | </project> |
yudao-framework/yudao-spring-boot-starter-web/src/main/java/cn/iocoder/yudao/framework/apilog/core/job/ApiAccessLogJobHandler.java
| @@ -8,6 +8,7 @@ import lombok.extern.slf4j.Slf4j; | @@ -8,6 +8,7 @@ import lombok.extern.slf4j.Slf4j; | ||
| 8 | 8 | ||
| 9 | import javax.annotation.Resource; | 9 | import javax.annotation.Resource; |
| 10 | 10 | ||
| 11 | +// TODO @j-sentinel:同 JobLogJobHandler | ||
| 11 | /** | 12 | /** |
| 12 | * @Author: j-sentinel | 13 | * @Author: j-sentinel |
| 13 | * @Date: 2023/9/30 16:13 | 14 | * @Date: 2023/9/30 16:13 |
yudao-framework/yudao-spring-boot-starter-web/src/main/java/cn/iocoder/yudao/framework/apilog/core/job/ApiErrorLogJobHandler.java
| @@ -8,6 +8,7 @@ import lombok.extern.slf4j.Slf4j; | @@ -8,6 +8,7 @@ import lombok.extern.slf4j.Slf4j; | ||
| 8 | 8 | ||
| 9 | import javax.annotation.Resource; | 9 | import javax.annotation.Resource; |
| 10 | 10 | ||
| 11 | +// TODO @j-sentinel:同 JobLogJobHandler | ||
| 11 | /** | 12 | /** |
| 12 | * @Author: j-sentinel | 13 | * @Author: j-sentinel |
| 13 | * @Date: 2023/9/30 16:13 | 14 | * @Date: 2023/9/30 16:13 |
yudao-module-infra/yudao-module-infra-api/src/main/java/cn/iocoder/yudao/module/infra/api/logger/ApiAccessLogApi.java
| @@ -18,10 +18,12 @@ public interface ApiAccessLogApi { | @@ -18,10 +18,12 @@ public interface ApiAccessLogApi { | ||
| 18 | */ | 18 | */ |
| 19 | void createApiAccessLog(@Valid ApiAccessLogCreateReqDTO createDTO); | 19 | void createApiAccessLog(@Valid ApiAccessLogCreateReqDTO createDTO); |
| 20 | 20 | ||
| 21 | + // TODO @j-sentinel:这个我们先提供接口在 API,而是 infra 模块自己清理先哈; | ||
| 21 | /** | 22 | /** |
| 22 | * 清理 @param accessLogJobDay 天的访问日志 | 23 | * 清理 @param accessLogJobDay 天的访问日志 |
| 23 | * | 24 | * |
| 24 | * @param accessLogJobDay 超过多少天就进行清理 | 25 | * @param accessLogJobDay 超过多少天就进行清理 |
| 25 | */ | 26 | */ |
| 26 | void jobCleanAccessLog(Integer accessLogJobDay); | 27 | void jobCleanAccessLog(Integer accessLogJobDay); |
| 28 | + | ||
| 27 | } | 29 | } |
yudao-module-infra/yudao-module-infra-api/src/main/java/cn/iocoder/yudao/module/infra/api/logger/ApiErrorLogApi.java
| @@ -18,10 +18,12 @@ public interface ApiErrorLogApi { | @@ -18,10 +18,12 @@ public interface ApiErrorLogApi { | ||
| 18 | */ | 18 | */ |
| 19 | void createApiErrorLog(@Valid ApiErrorLogCreateReqDTO createDTO); | 19 | void createApiErrorLog(@Valid ApiErrorLogCreateReqDTO createDTO); |
| 20 | 20 | ||
| 21 | + // TODO @j-sentinel:这个我们先提供接口在 API,而是 infra 模块自己清理先哈; | ||
| 21 | /** | 22 | /** |
| 22 | * 清理 @param errorLogJobDay 天的访问日志 | 23 | * 清理 @param errorLogJobDay 天的访问日志 |
| 23 | * | 24 | * |
| 24 | * @param errorLogJobDay 超过多少天就进行清理 | 25 | * @param errorLogJobDay 超过多少天就进行清理 |
| 25 | */ | 26 | */ |
| 26 | void jobCleanErrorLog(Integer errorLogJobDay); | 27 | void jobCleanErrorLog(Integer errorLogJobDay); |
| 28 | + | ||
| 27 | } | 29 | } |
yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/dal/mysql/job/JobLogMapper.java
| @@ -41,7 +41,12 @@ public interface JobLogMapper extends BaseMapperX<JobLogDO> { | @@ -41,7 +41,12 @@ public interface JobLogMapper extends BaseMapperX<JobLogDO> { | ||
| 41 | ); | 41 | ); |
| 42 | } | 42 | } |
| 43 | 43 | ||
| 44 | + // TODO @j-sentinel:一般来说,我们 mapper 只提供 crud 的操作,所以这个方法的命名,建议是 deleteByCreateTimeLt; | ||
| 45 | + // 然后,参数是 (crateTime, count),由 service 传入 | ||
| 46 | + // 这里为什么有 lt 呢,这个其实是延续 spring data 的 method 描述的命名习惯,lt 表示小于; | ||
| 47 | + // 另外,timingJobCleanLog 的具体 sql 这么写,性能是比较差的;可以直接 delete * from job_log where create_time < xxx order by id limit 100; | ||
| 44 | Integer timingJobCleanLog(@Param("jobCleanRetainDay") Integer jobCleanRetainDay); | 48 | Integer timingJobCleanLog(@Param("jobCleanRetainDay") Integer jobCleanRetainDay); |
| 45 | 49 | ||
| 50 | + // TODO @j-serntinel:optimize table infra_job_log 就可以啦? | ||
| 46 | void optimizeTable(); | 51 | void optimizeTable(); |
| 47 | } | 52 | } |
yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/dal/mysql/logger/ApiAccessLogMapper.java
| @@ -45,6 +45,7 @@ public interface ApiAccessLogMapper extends BaseMapperX<ApiAccessLogDO> { | @@ -45,6 +45,7 @@ public interface ApiAccessLogMapper extends BaseMapperX<ApiAccessLogDO> { | ||
| 45 | ); | 45 | ); |
| 46 | } | 46 | } |
| 47 | 47 | ||
| 48 | + // TODO @j-sentinel:同 JobLogMapper 的一些优化点 | ||
| 48 | Integer jobCleanAccessLog(@Param("accessLogJobDay") Integer accessLogJobDay); | 49 | Integer jobCleanAccessLog(@Param("accessLogJobDay") Integer accessLogJobDay); |
| 49 | 50 | ||
| 50 | void optimizeTable(); | 51 | void optimizeTable(); |
yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/dal/mysql/logger/ApiErrorLogMapper.java
| @@ -43,6 +43,7 @@ public interface ApiErrorLogMapper extends BaseMapperX<ApiErrorLogDO> { | @@ -43,6 +43,7 @@ public interface ApiErrorLogMapper extends BaseMapperX<ApiErrorLogDO> { | ||
| 43 | ); | 43 | ); |
| 44 | } | 44 | } |
| 45 | 45 | ||
| 46 | + // TODO @j-sentinel:同 JobLogMapper 的一些优化点 | ||
| 46 | Integer jobCleanErrorLog(@Param("errorLogJobDay") Integer errorLogJobDay); | 47 | Integer jobCleanErrorLog(@Param("errorLogJobDay") Integer errorLogJobDay); |
| 47 | 48 | ||
| 48 | void optimizeTable(); | 49 | void optimizeTable(); |
yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/service/job/JobLogServiceImpl.java
| @@ -52,10 +52,13 @@ public class JobLogServiceImpl implements JobLogService { | @@ -52,10 +52,13 @@ public class JobLogServiceImpl implements JobLogService { | ||
| 52 | } | 52 | } |
| 53 | } | 53 | } |
| 54 | 54 | ||
| 55 | + // TODO @j-sentinel:这个 job,也可以忽略租户哈;可以直接使用 @TenantIgnore 注解; | ||
| 55 | @Override | 56 | @Override |
| 56 | public Integer timingJobCleanLog(Integer jobCleanRetainDay) { | 57 | public Integer timingJobCleanLog(Integer jobCleanRetainDay) { |
| 57 | Integer result = null; | 58 | Integer result = null; |
| 58 | int count = 0; | 59 | int count = 0; |
| 60 | + // TODO @j-sentinel:一般我们在写逻辑时,尽量避免用 while true 这种“死循环”,而是 for (int i = 0; i < Short.MAX) 类似这种;避免里面真的发生一些意外的情况,无限执行; | ||
| 61 | + // 然后 for 里面,可以有个 if count < 100 未到达删除的预期条数,说明已经到底,可以 break 了; | ||
| 59 | while (result == null || DELETE_LIMIT.equals(result)){ | 62 | while (result == null || DELETE_LIMIT.equals(result)){ |
| 60 | result = jobLogMapper.timingJobCleanLog(jobCleanRetainDay); | 63 | result = jobLogMapper.timingJobCleanLog(jobCleanRetainDay); |
| 61 | count += result; | 64 | count += result; |
yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/service/logger/ApiAccessLogServiceImpl.java
| @@ -47,6 +47,7 @@ public class ApiAccessLogServiceImpl implements ApiAccessLogService { | @@ -47,6 +47,7 @@ public class ApiAccessLogServiceImpl implements ApiAccessLogService { | ||
| 47 | } | 47 | } |
| 48 | 48 | ||
| 49 | @Override | 49 | @Override |
| 50 | + // TODO j-sentinel:类似 JobLogServiceImpl 的建议 | ||
| 50 | public void jobCleanAccessLog(Integer accessLogJobDay) { | 51 | public void jobCleanAccessLog(Integer accessLogJobDay) { |
| 51 | TenantUtils.executeIgnore(() -> { | 52 | TenantUtils.executeIgnore(() -> { |
| 52 | Integer result = null; | 53 | Integer result = null; |
yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/service/logger/ApiErrorLogServiceImpl.java
| @@ -68,6 +68,7 @@ public class ApiErrorLogServiceImpl implements ApiErrorLogService { | @@ -68,6 +68,7 @@ public class ApiErrorLogServiceImpl implements ApiErrorLogService { | ||
| 68 | } | 68 | } |
| 69 | 69 | ||
| 70 | @Override | 70 | @Override |
| 71 | + // TODO j-sentinel:类似 JobLogServiceImpl 的建议 | ||
| 71 | public void jobCleanErrorLog(Integer errorLogJobDay) { | 72 | public void jobCleanErrorLog(Integer errorLogJobDay) { |
| 72 | TenantUtils.executeIgnore(() -> { | 73 | TenantUtils.executeIgnore(() -> { |
| 73 | Integer result = null; | 74 | Integer result = null; |