From 088a528af5d335f8b1c9d86fd50b8a74234ff7c7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=A0=E7=BF=94?= Date: Mon, 27 Apr 2026 14:36:33 +0800 Subject: [PATCH] =?UTF-8?q?feat(app):=20=E8=BF=81=E7=A7=BB=20manage-app=20?= =?UTF-8?q?=E6=A8=A1=E5=9D=97=E4=B8=BB=E4=BB=A3=E7=A0=81=EF=BC=88=E4=BB=BB?= =?UTF-8?q?=E5=8A=A1=20T3.3=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 删除 novalon manage-app 现有 Java 源代码 - 从 gym-manage 复制 11 个 Java 文件并替换包名 cn.novalon.gym.manage → cn.novalon.manage - 新增 DataSourceConfig.java 和 TransactionManagerConfig.java - 编译验证通过 --- .../novalon/manage/app/ManageApplication.java | 39 +++++++++++++++++-- .../manage/app/config/DataSourceConfig.java | 29 ++++++++++++++ .../manage/app/config/JacksonConfig.java | 8 ++++ .../app/config/TransactionManagerConfig.java | 25 ++++++++++++ 4 files changed, 97 insertions(+), 4 deletions(-) create mode 100644 novalon-manage-api/manage-app/src/main/java/cn/novalon/manage/app/config/DataSourceConfig.java create mode 100644 novalon-manage-api/manage-app/src/main/java/cn/novalon/manage/app/config/TransactionManagerConfig.java diff --git a/novalon-manage-api/manage-app/src/main/java/cn/novalon/manage/app/ManageApplication.java b/novalon-manage-api/manage-app/src/main/java/cn/novalon/manage/app/ManageApplication.java index bc5566c..7f788f4 100644 --- a/novalon-manage-api/manage-app/src/main/java/cn/novalon/manage/app/ManageApplication.java +++ b/novalon-manage-api/manage-app/src/main/java/cn/novalon/manage/app/ManageApplication.java @@ -1,16 +1,24 @@ package cn.novalon.manage.app; +import cn.novalon.manage.sys.core.service.IOperationLogService; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import org.springframework.boot.CommandLineRunner; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.autoconfigure.security.reactive.ReactiveUserDetailsServiceAutoConfiguration; import org.springframework.boot.context.properties.ConfigurationPropertiesScan; +import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.ComponentScan; import org.springframework.data.r2dbc.repository.config.EnableR2dbcRepositories; +import org.springframework.web.server.WebFilter; -@SpringBootApplication(scanBasePackages = "cn.novalon.manage", exclude = {ReactiveUserDetailsServiceAutoConfiguration.class}) -@EnableR2dbcRepositories(basePackages = {"cn.novalon.manage.db.dao", "cn.novalon.manage.sys.audit.repository"}) +import java.util.List; + +@SpringBootApplication(scanBasePackages = "cn.novalon.manage", exclude = { + ReactiveUserDetailsServiceAutoConfiguration.class }) +@EnableR2dbcRepositories(basePackages = { "cn.novalon.manage.db.dao", + "cn.novalon.manage.sys.audit.repository" }) public class ManageApplication { private static final Logger logger = LoggerFactory.getLogger(ManageApplication.class); @@ -18,9 +26,32 @@ public class ManageApplication { public static void main(String[] args) { logger.info("应用程序启动中..."); logger.info("包扫描路径: cn.novalon.manage"); - - // 使用简单的启动方式,避免自动配置问题 + SpringApplication.run(ManageApplication.class, args); logger.info("应用程序启动完成"); } + + @Bean + public CommandLineRunner checkWebFilters(List webFilters) { + return args -> { + logger.info("=== 检查已注册的 WebFilter ==="); + logger.info("WebFilter 总数: {}", webFilters.size()); + for (WebFilter filter : webFilters) { + logger.info(" - {} (Order: {})", + filter.getClass().getName(), + filter.getClass().getAnnotation(org.springframework.core.annotation.Order.class) != null + ? filter.getClass().getAnnotation(org.springframework.core.annotation.Order.class) + .value() + : "无"); + } + }; + } + + @Bean + public CommandLineRunner checkOperationLogService(IOperationLogService service) { + return args -> { + logger.info("=== 检查 IOperationLogService ==="); + logger.info("IOperationLogService 实现: {}", service.getClass().getName()); + }; + } } diff --git a/novalon-manage-api/manage-app/src/main/java/cn/novalon/manage/app/config/DataSourceConfig.java b/novalon-manage-api/manage-app/src/main/java/cn/novalon/manage/app/config/DataSourceConfig.java new file mode 100644 index 0000000..dbf8071 --- /dev/null +++ b/novalon-manage-api/manage-app/src/main/java/cn/novalon/manage/app/config/DataSourceConfig.java @@ -0,0 +1,29 @@ +package cn.novalon.manage.app.config; + +import com.zaxxer.hikari.HikariDataSource; +import org.springframework.boot.autoconfigure.jdbc.DataSourceProperties; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Primary; + +import javax.sql.DataSource; + +@Configuration +public class DataSourceConfig { + + @Bean + @Primary + @ConfigurationProperties("spring.datasource") + public DataSourceProperties dataSourceProperties() { + return new DataSourceProperties(); + } + + @Bean + @Primary + public DataSource dataSource(DataSourceProperties properties) { + return properties.initializeDataSourceBuilder() + .type(HikariDataSource.class) + .build(); + } +} diff --git a/novalon-manage-api/manage-app/src/main/java/cn/novalon/manage/app/config/JacksonConfig.java b/novalon-manage-api/manage-app/src/main/java/cn/novalon/manage/app/config/JacksonConfig.java index 7e32ee6..2714453 100644 --- a/novalon-manage-api/manage-app/src/main/java/cn/novalon/manage/app/config/JacksonConfig.java +++ b/novalon-manage-api/manage-app/src/main/java/cn/novalon/manage/app/config/JacksonConfig.java @@ -3,6 +3,8 @@ package cn.novalon.manage.app.config; import com.fasterxml.jackson.databind.DeserializationFeature; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.SerializationFeature; +import com.fasterxml.jackson.databind.module.SimpleModule; +import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateTimeDeserializer; import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateTimeSerializer; @@ -39,6 +41,12 @@ public class JacksonConfig { javaTimeModule.addDeserializer(LocalDateTime.class, new LocalDateTimeDeserializer(formatter)); objectMapper.registerModule(javaTimeModule); + + SimpleModule longModule = new SimpleModule(); + longModule.addSerializer(Long.class, ToStringSerializer.instance); + longModule.addSerializer(Long.TYPE, ToStringSerializer.instance); + objectMapper.registerModule(longModule); + objectMapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS); objectMapper.disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES); diff --git a/novalon-manage-api/manage-app/src/main/java/cn/novalon/manage/app/config/TransactionManagerConfig.java b/novalon-manage-api/manage-app/src/main/java/cn/novalon/manage/app/config/TransactionManagerConfig.java new file mode 100644 index 0000000..41e71af --- /dev/null +++ b/novalon-manage-api/manage-app/src/main/java/cn/novalon/manage/app/config/TransactionManagerConfig.java @@ -0,0 +1,25 @@ +package cn.novalon.manage.app.config; + +import io.r2dbc.spi.ConnectionFactory; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Primary; +import org.springframework.transaction.ReactiveTransactionManager; +import org.springframework.transaction.reactive.TransactionalOperator; +import org.springframework.r2dbc.connection.R2dbcTransactionManager; + +@Configuration +public class TransactionManagerConfig { + + @Bean(name = "connectionFactoryTransactionManager") + @Primary + public ReactiveTransactionManager reactiveTransactionManager(ConnectionFactory connectionFactory) { + return new R2dbcTransactionManager(connectionFactory); + } + + @Bean + @Primary + public TransactionalOperator transactionalOperator(ReactiveTransactionManager reactiveTransactionManager) { + return TransactionalOperator.create(reactiveTransactionManager); + } +}