fix(backend-java): 收口并发资源与恢复链路

This commit is contained in:
2026-09-05 14:33:07 +08:00
parent d760838e71
commit 40224d8e56
35 changed files with 917 additions and 154 deletions
@@ -15,7 +15,7 @@ spring:
sentinel:
master: ${AIIMAGE_REDIS_SENTINEL_MASTER:mymaster}
nodes: ${AIIMAGE_REDIS_SENTINEL_NODES:192.168.0.171:26379,192.168.0.170:26379}
password: ${AIIMAGE_REDIS_SENTINEL_PASSWORD:B6COTcY094TYe545}
password: ${AIIMAGE_REDIS_SENTINEL_PASSWORD:}
aiimage:
instance-id: ${AIIMAGE_INSTANCE_ID:}
+17 -10
View File
@@ -16,8 +16,8 @@ spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: ${AIIMAGE_DB_URL:jdbc:mysql://47.110.241.161:3306/aiimage?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&useSSL=false&allowPublicKeyRetrieval=true}
username: ${AIIMAGE_DB_USERNAME:root}
password: ${AIIMAGE_DB_PASSWORD:WTFrb5y6hNLz6hNy}
username: ${AIIMAGE_DB_USERNAME:aiimage_app}
password: ${AIIMAGE_DB_PASSWORD:}
hikari:
maximum-pool-size: ${AIIMAGE_DB_POOL_MAX_SIZE:30}
minimum-idle: ${AIIMAGE_DB_POOL_MIN_IDLE:5}
@@ -39,7 +39,7 @@ spring:
username: ${AIIMAGE_REDIS_USERNAME:}
host: ${AIIMAGE_REDIS_HOST:47.111.163.154}
port: ${AIIMAGE_REDIS_PORT:16379}
password: ${AIIMAGE_REDIS_PASSWORD:B6COTcY094TYe545}
password: ${AIIMAGE_REDIS_PASSWORD:}
database: ${AIIMAGE_REDIS_DATABASE:0}
timeout: ${AIIMAGE_REDIS_TIMEOUT:5s}
@@ -50,9 +50,15 @@ rocketmq:
send-message-timeout: ${AIIMAGE_ROCKETMQ_SEND_TIMEOUT_MS:3000}
management:
endpoint:
health:
probes:
enabled: true
health:
db:
enabled: false
enabled: true
redis:
enabled: true
logging:
file:
@@ -111,14 +117,14 @@ aiimage:
digital-human-bucket: ${AIIMAGE_DIGITAL_HUMAN_OSS_BUCKET:nanri-ai-digital-human}
template-bucket: ${AIIMAGE_TEMPLATE_OSS_BUCKET:aiimage-templates}
software-version-bucket: ${AIIMAGE_OSS_SOFTWARE_VERSION_BUCKET:client}
access-key-id: ${AIIMAGE_OSS_ACCESS_KEY_ID:appuser}
access-key-secret: ${AIIMAGE_OSS_ACCESS_KEY_SECRET:AppUser@2024SecureKey}
access-key-id: ${AIIMAGE_OSS_ACCESS_KEY_ID:}
access-key-secret: ${AIIMAGE_OSS_ACCESS_KEY_SECRET:}
transient-storage:
enabled: ${AIIMAGE_TRANSIENT_STORAGE_ENABLED:true}
endpoint: ${AIIMAGE_TRANSIENT_STORAGE_ENDPOINT:http://121.196.149.225:9000}
bucket: ${AIIMAGE_TRANSIENT_STORAGE_BUCKET:json-server}
access-key-id: ${AIIMAGE_TRANSIENT_STORAGE_ACCESS_KEY_ID:YPkyFAymauf21pHMoK0V}
access-key-secret: ${AIIMAGE_TRANSIENT_STORAGE_ACCESS_KEY_SECRET:XcPzJqT8jzAHDEQNCovhkPmlwWcphBwLdA36BTzL}
access-key-id: ${AIIMAGE_TRANSIENT_STORAGE_ACCESS_KEY_ID:}
access-key-secret: ${AIIMAGE_TRANSIENT_STORAGE_ACCESS_KEY_SECRET:}
region: ${AIIMAGE_TRANSIENT_STORAGE_REGION:us-east-1}
connect-timeout-seconds: ${AIIMAGE_TRANSIENT_STORAGE_CONNECT_TIMEOUT_SECONDS:10}
read-timeout-seconds: ${AIIMAGE_TRANSIENT_STORAGE_READ_TIMEOUT_SECONDS:60}
@@ -229,7 +235,7 @@ aiimage:
brand-check:
base-url: ${AIIMAGE_BRAND_CHECK_BASE_URL:http://47.110.241.161:16890}
path: ${AIIMAGE_BRAND_CHECK_PATH:/brand_check}
token: ${AIIMAGE_BRAND_CHECK_TOKEN:eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9}
token: ${AIIMAGE_BRAND_CHECK_TOKEN:}
default-strategy: ${AIIMAGE_BRAND_CHECK_DEFAULT_STRATEGY:Terms}
connect-timeout-millis: ${AIIMAGE_BRAND_CHECK_CONNECT_TIMEOUT_MILLIS:10000}
read-timeout-millis: ${AIIMAGE_BRAND_CHECK_READ_TIMEOUT_MILLIS:60000}
@@ -242,6 +248,7 @@ aiimage:
llm-read-timeout-millis: ${AIIMAGE_APPEARANCE_PATENT_LLM_READ_TIMEOUT_MILLIS:180000}
llm-batch-size: ${AIIMAGE_APPEARANCE_PATENT_LLM_BATCH_SIZE:10}
llm-row-concurrency: ${AIIMAGE_APPEARANCE_PATENT_LLM_ROW_CONCURRENCY:10}
max-parse-rows: ${AIIMAGE_APPEARANCE_PATENT_MAX_PARSE_ROWS:50000}
llm-retry-times: ${AIIMAGE_APPEARANCE_PATENT_LLM_RETRY_TIMES:3}
flush-pending-minutes: ${AIIMAGE_APPEARANCE_PATENT_FLUSH_PENDING_MINUTES:${AIIMAGE_APPEARANCE_PATENT_COZE_FLUSH_PENDING_MINUTES:1}}
stale-timeout-minutes: ${AIIMAGE_APPEARANCE_PATENT_STALE_TIMEOUT_MINUTES:30}
@@ -286,7 +293,7 @@ aiimage:
result-item-batch-size: ${AIIMAGE_COLLECT_DATA_RESULT_ITEM_BATCH_SIZE:100}
image-video:
coze-base-url: ${AIIMAGE_IMAGE_VIDEO_COZE_BASE_URL:https://api.coze.cn}
coze-token: ${AIIMAGE_IMAGE_VIDEO_COZE_TOKEN:sat_Ws4VB1caOPasDivpKIvtOySYx3lhKgQ95H3crIh0tBwiNYtPTyi6bqe0pBaRzpVu}
coze-token: ${AIIMAGE_IMAGE_VIDEO_COZE_TOKEN:}
coze-workflow-path: ${AIIMAGE_IMAGE_VIDEO_COZE_WORKFLOW_PATH:/v1/workflow/run}
coze-connect-timeout-millis: ${AIIMAGE_IMAGE_VIDEO_COZE_CONNECT_TIMEOUT_MILLIS:10000}
coze-read-timeout-millis: ${AIIMAGE_IMAGE_VIDEO_COZE_READ_TIMEOUT_MILLIS:3600000}
@@ -0,0 +1,51 @@
-- V100: 后台 Vue History 路由
-- column_key 保持为稳定的菜单权限标识;仅切换前端 route_path
-- 以实现权限 key 与 URL 解耦。旧 Flask/admin.html 不再作为正式入口。
UPDATE `columns` SET `route_path` = 'account/users'
WHERE `menu_type` = 'admin' AND `column_key` = 'admin_users';
UPDATE `columns` SET `route_path` = 'account/menus'
WHERE `menu_type` = 'admin' AND `column_key` = 'admin_columns';
UPDATE `columns` SET `route_path` = 'account/groups'
WHERE `menu_type` = 'admin' AND `column_key` = 'admin_group_manage';
UPDATE `columns` SET `route_path` = 'asin-center/registry'
WHERE `menu_type` = 'admin' AND `column_key` = 'admin_dedupe_total_data';
UPDATE `columns` SET `route_path` = 'asin-center/invalid'
WHERE `menu_type` = 'admin' AND `column_key` = 'admin_invalid_asin_data';
UPDATE `columns` SET `route_path` = 'asin-center/query'
WHERE `menu_type` = 'admin' AND `column_key` = 'admin_query_asin';
UPDATE `columns` SET `route_path` = 'asin-center/categories'
WHERE `menu_type` = 'admin' AND `column_key` = 'admin_product_categories';
UPDATE `columns` SET `route_path` = 'shop-center/keys'
WHERE `menu_type` = 'admin' AND `column_key` = 'admin_shop_keys';
UPDATE `columns` SET `route_path` = 'shop-center/shops'
WHERE `menu_type` = 'admin' AND `column_key` = 'admin_shop_manage';
UPDATE `columns` SET `route_path` = 'asin-center/skip-price'
WHERE `menu_type` = 'admin' AND `column_key` = 'admin_skip_price_asin';
UPDATE `columns` SET `route_path` = 'shop-center/data-tasks'
WHERE `menu_type` = 'admin' AND `column_key` = 'admin_shop_data_crawl_tasks';
UPDATE `columns` SET `route_path` = 'shop-center/duplicate-check'
WHERE `menu_type` = 'admin' AND `column_key` = 'admin_shop_data_duplicate_check';
UPDATE `columns` SET `route_path` = 'records/history'
WHERE `menu_type` = 'admin' AND `column_key` = 'admin_history';
UPDATE `columns` SET `route_path` = 'records/image-video-tasks'
WHERE `menu_type` = 'admin' AND `column_key` = 'admin_image_video_tasks';
UPDATE `columns` SET `route_path` = 'records/software-version'
WHERE `menu_type` = 'admin' AND `column_key` = 'admin_version';
UPDATE `columns` SET `route_path` = 'records/digital-human-version'
WHERE `menu_type` = 'admin' AND `column_key` = 'digital_human_version';
@@ -7,8 +7,8 @@
<springProperty scope="context" name="FILE_PATTERN" source="logging.pattern.file" defaultValue="%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n"/>
<springProperty scope="context" name="CONSOLE_PATTERN" source="logging.pattern.console" defaultValue="%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n"/>
<property name="APP_LOG_FILE" value="${LOG_NAME}"/>
<property name="APP_LOG_ARCHIVE" value="${LOG_NAME}.%d{yyyy-MM-dd}.%i"/>
<property name="APP_LOG_FILE" value="${LOG_PATH}/${LOG_NAME}"/>
<property name="APP_LOG_ARCHIVE" value="${LOG_PATH}/${LOG_NAME}.%d{yyyy-MM-dd}.%i"/>
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<encoder>