From 6b7bb7c6cbe168af6a2f6c3d334124a182b3cf50 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=80=E6=BA=90=E6=B5=B7=E5=93=A5?= Date: Sat, 24 Jun 2023 10:41:21 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E5=8A=A8=E6=80=81=E8=A1=A8=E5=90=8D?= =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E5=AF=B9=20Spring=20@Configuration=20?= =?UTF-8?q?=E8=87=AA=E5=8A=A8=E9=85=8D=E7=BD=AE=E7=9A=84=E6=94=AF=E6=8C=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/zh/core/dynamic-table.md | 25 +++++++++++++++++- .../boot/MybatisFlexAutoConfiguration.java | 26 ++++++++++++++++++- 2 files changed, 49 insertions(+), 2 deletions(-) diff --git a/docs/zh/core/dynamic-table.md b/docs/zh/core/dynamic-table.md index dcd83620..e617877d 100644 --- a/docs/zh/core/dynamic-table.md +++ b/docs/zh/core/dynamic-table.md @@ -43,4 +43,27 @@ TableManager.setDynamicSchemaProcessor(new DynamicSchemaProcessor() { }); ``` -动态 Schema 的配置,只对使用了注解 `@Table(schema="xxx")` 的 Entity 有效。 \ No newline at end of file +动态 Schema 的配置,只对使用了注解 `@Table(schema="xxx")` 的 Entity 有效。 + +## SpringBoot 支持 +在 SpringBoot 项目下,直接通过 `@Configuration` 即可使用: + +```java +@Configuration +public class MyConfiguration { + + @Bean + public DynamicTableProcessor dynamicTableProcessor(){ + DynamicTableProcessor processor = new ....; + return processor; + } + + + @Bean + public DynamicSchemaProcessor dynamicSchemaProcessor(){ + DynamicSchemaProcessor processor = new ....; + return processor; + } + +} +``` \ No newline at end of file diff --git a/mybatis-flex-spring-boot-starter/src/main/java/com/mybatisflex/spring/boot/MybatisFlexAutoConfiguration.java b/mybatis-flex-spring-boot-starter/src/main/java/com/mybatisflex/spring/boot/MybatisFlexAutoConfiguration.java index 48e31bc3..3f56b320 100644 --- a/mybatis-flex-spring-boot-starter/src/main/java/com/mybatisflex/spring/boot/MybatisFlexAutoConfiguration.java +++ b/mybatis-flex-spring-boot-starter/src/main/java/com/mybatisflex/spring/boot/MybatisFlexAutoConfiguration.java @@ -19,6 +19,9 @@ import com.mybatisflex.core.FlexGlobalConfig; import com.mybatisflex.core.datasource.DataSourceDecipher; import com.mybatisflex.core.datasource.DataSourceManager; import com.mybatisflex.core.mybatis.FlexConfiguration; +import com.mybatisflex.core.table.DynamicSchemaProcessor; +import com.mybatisflex.core.table.DynamicTableProcessor; +import com.mybatisflex.core.table.TableManager; import com.mybatisflex.spring.FlexSqlSessionFactoryBean; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.mapping.DatabaseIdProvider; @@ -106,15 +109,23 @@ public class MybatisFlexAutoConfiguration implements InitializingBean { protected final List sqlSessionFactoryBeanCustomizers; + //数据源解密器 protected final DataSourceDecipher dataSourceDecipher; + //动态表名 + protected final DynamicTableProcessor dynamicTableProcessor; + protected final DynamicSchemaProcessor dynamicSchemaProcessor; + public MybatisFlexAutoConfiguration(MybatisFlexProperties properties, ObjectProvider interceptorsProvider, ObjectProvider typeHandlersProvider, ObjectProvider languageDriversProvider, ResourceLoader resourceLoader, ObjectProvider databaseIdProvider, ObjectProvider> configurationCustomizersProvider, ObjectProvider> sqlSessionFactoryBeanCustomizers, - ObjectProvider dataSourceDecipherProvider) { + ObjectProvider dataSourceDecipherProvider, + ObjectProvider dynamicTableProcessorProvider, + ObjectProvider dynamicSchemaProcessorProvider + ) { this.properties = properties; this.interceptors = interceptorsProvider.getIfAvailable(); this.typeHandlers = typeHandlersProvider.getIfAvailable(); @@ -126,16 +137,29 @@ public class MybatisFlexAutoConfiguration implements InitializingBean { //数据密码 this.dataSourceDecipher = dataSourceDecipherProvider.getIfAvailable(); + + //动态表名 + this.dynamicTableProcessor = dynamicTableProcessorProvider.getIfAvailable(); + this.dynamicSchemaProcessor = dynamicSchemaProcessorProvider.getIfAvailable(); } @Override public void afterPropertiesSet() { // 检测 MyBatis 原生配置文件是否存在 checkConfigFileExists(); + // 添加 MyBatis-Flex 全局配置 if (properties.getGlobalConfig() != null) { properties.getGlobalConfig().applyTo(FlexGlobalConfig.getDefaultConfig()); } + + // 动态表名配置 + if (dynamicTableProcessor != null) { + TableManager.setDynamicTableProcessor(dynamicTableProcessor); + } + if (dynamicSchemaProcessor != null) { + TableManager.setDynamicSchemaProcessor(dynamicSchemaProcessor); + } } private void checkConfigFileExists() {