From 34981c30a78e8bbd7791131059a9210f9928b62c Mon Sep 17 00:00:00 2001
From: 刘光辉 <347230014@qq.com>
Date: 星期四, 17 九月 2026 09:24:09 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master' into master
---
jnpf-biz-common/jnpf-audit-sdk/src/main/java/jnpf/audit/sdk/AuditSdkAutoConfiguration.java | 107 +++++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 107 insertions(+), 0 deletions(-)
diff --git a/jnpf-biz-common/jnpf-audit-sdk/src/main/java/jnpf/audit/sdk/AuditSdkAutoConfiguration.java b/jnpf-biz-common/jnpf-audit-sdk/src/main/java/jnpf/audit/sdk/AuditSdkAutoConfiguration.java
new file mode 100644
index 0000000..bf91306
--- /dev/null
+++ b/jnpf-biz-common/jnpf-audit-sdk/src/main/java/jnpf/audit/sdk/AuditSdkAutoConfiguration.java
@@ -0,0 +1,107 @@
+package jnpf.audit.sdk;
+
+import jnpf.audit.AuditEventApi;
+import org.springframework.beans.factory.ObjectProvider;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.boot.autoconfigure.AutoConfiguration;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
+import org.springframework.context.ApplicationContext;
+import org.springframework.context.annotation.Bean;
+import org.springframework.core.env.Environment;
+
+/**
+ * audit-sdk 鑷姩瑁呴厤锛圱ask 7 Step 5锛夈��
+ *
+ * <p>娉ㄥ唽鏈哄埗锛歿@code META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports}
+ * 鈥斺�斿钩鍙伴粯璁ゆ瀯寤鸿蛋 JDK21/boot3 profile锛圫pring Boot 3.5.7锛夛紝Spring Boot 3 宸茬Щ闄� spring.factories
+ * 鐨勮嚜鍔ㄨ閰嶅叆鍙o紝蹇呴』鐢� {@code .imports}锛涗笖璇ユ満鍒惰嚜 Spring Boot 2.7 璧峰嵆鍙楁敮鎸侊紝瀵� boot2 profile 浜﹀悜鍚庡吋瀹广��
+ *
+ * <p>{@code audit.enabled}锛堥粯璁� true锛岀己鐪佽涓哄惎鐢級涓烘�诲紑鍏筹紱缃� false 鏃舵暣濂� Bean 涓嶈閰嶃��
+ * 鍚� Bean 鍧囧姞 {@link ConditionalOnMissingBean} 渚涘涓绘寜闇�瑕嗙洊銆�
+ *
+ * <p><b>灞傛鐜扮姸锛�2026-08-11 璧凤級</b>锛歋DK 渚у彧鍓╁眰 2锛坽@code @AuditLog} 鍒囬潰锛変笌灞� 3
+ * 锛坽@link AuditClient} 鏄惧紡鍩嬬偣锛夈�傚眰 1锛圡yBatis Executor 鎻掍欢锛夊凡鏁村绉婚櫎鈥斺�斿畠鑷氦浠樿捣
+ * 涓�鐩撮粯璁ゅ叧锛寋@code audit_events} 琛ㄥ唴 {@code source_layer=1} 闆惰锛屽睘鏈惎鐢ㄥ嵆璐熷�恒��
+ * 闇�瑕佹仮澶嶈 {@code docs/handoff-2026-08-11-audit-into-biz-common.md} 璁扮殑 git revert 鍧愭爣銆�
+ */
+@AutoConfiguration
+@ConditionalOnProperty(name = "audit.enabled", matchIfMissing = true)
+public class AuditSdkAutoConfiguration {
+
+ @Bean
+ @ConditionalOnMissingBean
+ public AuditContextCollector auditContextCollector(Environment environment) {
+ return new AuditContextCollector(environment.getProperty("spring.application.name"));
+ }
+
+ /**
+ * spool 鍙屽眰閿侊紙Codex 鎵规浜屽楠� #1/#2 缁堝眬淇锛夛細writer 涓� replayer <b>鍏变韩鍚屼竴瀹炰緥</b>锛�
+ * 鎶婂郊姝ょ殑 spool 鏂囦欢鎿嶄綔涓茶鍖栵紙杩涚▼鍐� monitor + 璺ㄨ繘绋� {@code spool.lock} FileLock锛夈��
+ */
+ @Bean
+ @ConditionalOnMissingBean
+ public AuditSpoolLock auditSpoolLock(
+ @Value("${audit.spool-dir:./audit-spool}") String spoolDir) {
+ return new AuditSpoolLock(spoolDir);
+ }
+
+ @Bean
+ @ConditionalOnMissingBean
+ public AuditSpoolWriter auditSpoolWriter(
+ @Value("${audit.spool-dir:./audit-spool}") String spoolDir,
+ AuditSpoolLock spoolLock) {
+ return new AuditSpoolWriter(spoolDir, spoolLock);
+ }
+
+ @Bean
+ @ConditionalOnMissingBean
+ public AuditEventPublisher auditEventPublisher(ObjectProvider<AuditEventApi> feignApi,
+ AuditSpoolWriter spoolWriter) {
+ return new AuditEventPublisher(feignApi, spoolWriter);
+ }
+
+ @Bean
+ @ConditionalOnMissingBean
+ public AuditSpoolReplayer auditSpoolReplayer(AuditEventPublisher publisher,
+ @Value("${audit.spool-dir:./audit-spool}") String spoolDir,
+ @Value("${audit.spool-replay-enabled:true}") boolean replayEnabled,
+ // 璋冨害鍛ㄦ湡锛堟绉掞級锛氶粯璁� 300000锛�5 鍒嗛挓锛宻pec锛夛紱娴嬭瘯鐜鍙皟鐭姞閫熼檷绾ч摼閲嶆斁楠岃瘉銆�
+ // 浠呮敼杞棰戠巼锛屼笉鏀瑰鍎垮勾榫勫畨鍏ㄩ槇鍊硷紙瑙� AuditSpoolReplayer.ORPHAN_REPLAYING_AGE_MS锛夈��
+ @Value("${audit.spool-replay-interval-ms:300000}") long replayIntervalMs,
+ AuditSpoolLock spoolLock) {
+ return new AuditSpoolReplayer(publisher, spoolDir, replayEnabled, spoolLock, replayIntervalMs);
+ }
+
+ @Bean
+ @ConditionalOnMissingBean
+ public AuditRequestScopeFilter auditRequestScopeFilter(
+ @Value("${audit.request-scope.frontend-only:false}") boolean frontendOnly,
+ @Value("${audit.request-scope.allowed-app-codes:}") String allowedAppCodes) {
+ return new AuditRequestScopeFilter(frontendOnly, allowedAppCodes);
+ }
+
+ @Bean
+ @ConditionalOnMissingBean
+ public AuditClient auditClient(AuditContextCollector collector,
+ AuditEventPublisher publisher,
+ AuditRequestScopeFilter requestScopeFilter,
+ @Value("${audit.enabled:true}") boolean enabled) {
+ return new AuditClient(collector, publisher, enabled, requestScopeFilter);
+ }
+
+ /**
+ * 灞� 2 鍒囬潰锛堥粯璁ゅ紑鍚紝鍙敤 audit.layer2-enabled=false 鍗曠嫭鍏筹級銆�
+ * @ConditionalOnClass 闃叉瀹夸富娌″紩 AOP starter 鏃惰閰嶅け璐ャ��
+ */
+ @Bean
+ @ConditionalOnMissingBean
+ @ConditionalOnClass(org.aspectj.lang.ProceedingJoinPoint.class)
+ @ConditionalOnProperty(name = "audit.layer2-enabled", matchIfMissing = true)
+ public jnpf.audit.sdk.aspect.AuditLogAspect auditLogAspect(AuditClient auditClient,
+ AuditEventPublisher publisher,
+ ApplicationContext applicationContext) {
+ return new jnpf.audit.sdk.aspect.AuditLogAspect(auditClient, publisher, applicationContext);
+ }
+}
--
Gitblit v1.8.0