From df32a94cdeda29590bba98abda53a58f210e38ef Mon Sep 17 00:00:00 2001 From: mxd <838425805@qq.com> Date: Tue, 15 Mar 2022 22:16:22 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E6=8E=A5=E5=8F=A3=E9=80=89?= =?UTF-8?q?=E9=A1=B9=E8=AE=BE=E7=BD=AE=E9=BB=98=E8=AE=A4=E6=95=B0=E6=8D=AE?= =?UTF-8?q?=E6=BA=90=E5=A4=B1=E6=95=88=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../boot/starter/MagicAPIAutoConfiguration.java | 7 ++++++- .../boot/starter/MagicModuleConfiguration.java | 11 ----------- .../ssssssss/magicapi/modules/DynamicModule.java | 11 +++++++++++ .../ssssssss/magicapi/modules/db/SQLModule.java | 15 ++++++++++++++- 4 files changed, 31 insertions(+), 13 deletions(-) create mode 100644 magic-api/src/main/java/org/ssssssss/magicapi/modules/DynamicModule.java diff --git a/magic-api-spring-boot-starter/src/main/java/org/ssssssss/magicapi/spring/boot/starter/MagicAPIAutoConfiguration.java b/magic-api-spring-boot-starter/src/main/java/org/ssssssss/magicapi/spring/boot/starter/MagicAPIAutoConfiguration.java index 6d4fb7e9..960864db 100644 --- a/magic-api-spring-boot-starter/src/main/java/org/ssssssss/magicapi/spring/boot/starter/MagicAPIAutoConfiguration.java +++ b/magic-api-spring-boot-starter/src/main/java/org/ssssssss/magicapi/spring/boot/starter/MagicAPIAutoConfiguration.java @@ -59,6 +59,7 @@ import org.ssssssss.magicapi.datasource.service.DataSourceEncryptProvider; import org.ssssssss.magicapi.datasource.web.MagicDataSourceController; import org.ssssssss.magicapi.function.service.FunctionMagicDynamicRegistry; import org.ssssssss.magicapi.jsr223.LanguageProvider; +import org.ssssssss.magicapi.modules.DynamicModule; import org.ssssssss.magicapi.utils.Mapping; import org.ssssssss.script.MagicResourceLoader; import org.ssssssss.script.MagicScript; @@ -291,7 +292,11 @@ public class MagicAPIAutoConfiguration implements WebMvcConfigurer, WebSocketCon applicationContext.getBeansWithAnnotation(MagicModule.class).values().forEach(module -> { String moduleName = AnnotationUtils.findAnnotation(module.getClass(), MagicModule.class).value(); logger.info("注册模块:{} -> {}", moduleName, module.getClass()); - MagicResourceLoader.addModule(moduleName, module); + if(module instanceof DynamicModule){ + MagicResourceLoader.addModule(moduleName, new DynamicModuleImport(module.getClass(), ((DynamicModule) module)::getDynamicModule)); + } else { + MagicResourceLoader.addModule(moduleName, module); + } }); MagicResourceLoader.getModuleNames().stream().filter(importModules::contains).forEach(moduleName -> { logger.info("自动导入模块:{}", moduleName); diff --git a/magic-api-spring-boot-starter/src/main/java/org/ssssssss/magicapi/spring/boot/starter/MagicModuleConfiguration.java b/magic-api-spring-boot-starter/src/main/java/org/ssssssss/magicapi/spring/boot/starter/MagicModuleConfiguration.java index 593bc7ff..4b34371d 100644 --- a/magic-api-spring-boot-starter/src/main/java/org/ssssssss/magicapi/spring/boot/starter/MagicModuleConfiguration.java +++ b/magic-api-spring-boot-starter/src/main/java/org/ssssssss/magicapi/spring/boot/starter/MagicModuleConfiguration.java @@ -1,6 +1,5 @@ package org.ssssssss.magicapi.spring.boot.starter; -import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.ObjectProvider; @@ -18,7 +17,6 @@ import org.ssssssss.magicapi.core.config.MagicAPIProperties; import org.ssssssss.magicapi.core.config.Page; import org.ssssssss.magicapi.core.interceptor.DefaultResultProvider; import org.ssssssss.magicapi.core.interceptor.ResultProvider; -import org.ssssssss.magicapi.core.model.Options; import org.ssssssss.magicapi.datasource.model.MagicDynamicDataSource; import org.ssssssss.magicapi.jsr223.JSR223LanguageProvider; import org.ssssssss.magicapi.modules.db.ColumnMapperAdapter; @@ -37,8 +35,6 @@ import org.ssssssss.magicapi.modules.http.HttpModule; import org.ssssssss.magicapi.modules.servlet.RequestModule; import org.ssssssss.magicapi.modules.servlet.ResponseModule; import org.ssssssss.magicapi.modules.spring.EnvModule; -import org.ssssssss.script.MagicResourceLoader; -import org.ssssssss.script.functions.DynamicModuleImport; import javax.sql.DataSource; import java.nio.charset.StandardCharsets; @@ -159,13 +155,6 @@ public class MagicModuleConfiguration { sqlModule.setDialectAdapter(dialectAdapter); sqlModule.setLogicDeleteColumn(properties.getCrud().getLogicDeleteColumn()); sqlModule.setLogicDeleteValue(properties.getCrud().getLogicDeleteValue()); - MagicResourceLoader.addModule("db", new DynamicModuleImport(SQLModule.class, context -> { - String dataSourceKey = context.getString(Options.DEFAULT_DATA_SOURCE.getValue()); - if (StringUtils.isEmpty(dataSourceKey)) return sqlModule; - SQLModule newSqlModule = sqlModule.cloneSQLModule(); - newSqlModule.setDataSourceNode(dynamicDataSource.getDataSource(dataSourceKey)); - return newSqlModule; - })); return sqlModule; } diff --git a/magic-api/src/main/java/org/ssssssss/magicapi/modules/DynamicModule.java b/magic-api/src/main/java/org/ssssssss/magicapi/modules/DynamicModule.java new file mode 100644 index 00000000..17f09b05 --- /dev/null +++ b/magic-api/src/main/java/org/ssssssss/magicapi/modules/DynamicModule.java @@ -0,0 +1,11 @@ +package org.ssssssss.magicapi.modules; + +import org.ssssssss.script.MagicScriptContext; + +import java.beans.Transient; + +public interface DynamicModule { + + @Transient + T getDynamicModule(MagicScriptContext context); +} diff --git a/magic-api/src/main/java/org/ssssssss/magicapi/modules/db/SQLModule.java b/magic-api/src/main/java/org/ssssssss/magicapi/modules/db/SQLModule.java index 3f0adccc..b7c00fbb 100644 --- a/magic-api/src/main/java/org/ssssssss/magicapi/modules/db/SQLModule.java +++ b/magic-api/src/main/java/org/ssssssss/magicapi/modules/db/SQLModule.java @@ -3,6 +3,8 @@ package org.ssssssss.magicapi.modules.db; import org.apache.commons.lang3.StringUtils; import org.springframework.jdbc.core.*; import org.springframework.jdbc.support.GeneratedKeyHolder; +import org.ssssssss.magicapi.core.model.Options; +import org.ssssssss.magicapi.modules.DynamicModule; import org.ssssssss.magicapi.modules.db.dialect.DialectAdapter; import org.ssssssss.magicapi.datasource.model.MagicDynamicDataSource; import org.ssssssss.magicapi.datasource.model.MagicDynamicDataSource.DataSourceNode; @@ -18,6 +20,7 @@ import org.ssssssss.magicapi.modules.db.provider.PageProvider; import org.ssssssss.magicapi.modules.db.table.NamedTable; import org.ssssssss.magicapi.core.interceptor.ResultProvider; import org.ssssssss.magicapi.utils.ScriptManager; +import org.ssssssss.script.MagicScriptContext; import org.ssssssss.script.annotation.Comment; import org.ssssssss.script.functions.DynamicAttribute; import org.ssssssss.script.parsing.ast.statement.ClassConverter; @@ -38,7 +41,7 @@ import java.util.stream.Stream; * @author mxd */ @MagicModule("db") -public class SQLModule implements DynamicAttribute { +public class SQLModule implements DynamicAttribute, DynamicModule { static { try { Field[] fields = Types.class.getFields(); @@ -695,6 +698,16 @@ public class SQLModule implements DynamicAttribute { return boundSql.copy(pageSql); } + @Transient + @Override + public SQLModule getDynamicModule(MagicScriptContext context) { + String dataSourceKey = context.getString(Options.DEFAULT_DATA_SOURCE.getValue()); + if (StringUtils.isEmpty(dataSourceKey)) return this; + SQLModule newSqlModule = cloneSQLModule(); + newSqlModule.setDataSourceNode(dynamicDataSource.getDataSource(dataSourceKey)); + return newSqlModule; + } + static class MagicKeyHolder extends GeneratedKeyHolder { private final boolean useGeneratedKeys;