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 43a552ba566bc00c90f3b31f28087d257c827d8a..b5dd38ad3281123496597f16ab6def057925d48f 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 @@ -50,6 +50,7 @@ import org.ssssssss.magicapi.interceptor.*; import org.ssssssss.magicapi.logging.LoggerManager; import org.ssssssss.magicapi.model.Constants; import org.ssssssss.magicapi.model.DataType; +import org.ssssssss.magicapi.model.Options; import org.ssssssss.magicapi.modules.*; import org.ssssssss.magicapi.provider.*; import org.ssssssss.magicapi.provider.impl.*; @@ -441,7 +442,9 @@ public class MagicAPIAutoConfiguration implements WebMvcConfigurer, WebSocketCon /** * 注册模块、类型扩展 */ - private void setupMagicModules(ResultProvider resultProvider, + private void setupMagicModules(MagicDynamicDataSource dynamicDataSource, + SQLModule sqlModule, + ResultProvider resultProvider, List magicModules, List extensionMethods, List languageProviders) { @@ -487,6 +490,11 @@ public class MagicAPIAutoConfiguration implements WebMvcConfigurer, WebSocketCon logger.info("注册模块:{} -> {}", module.getModuleName(), module.getClass()); MagicResourceLoader.addModule(module.getModuleName(), module); }); + logger.info("注册模块:{} -> {}", "动态db", SQLModule.class); + MagicResourceLoader.addModule("db", new DynamicModuleImport(SQLModule.class, context -> { + sqlModule.setDataSourceNode(dynamicDataSource.getDataSource(context.getString(Options.DEFAULT_DATA_SOURCE.getValue()))); + return sqlModule; + })); MagicResourceLoader.getModuleNames().stream().filter(importModules::contains).forEach(moduleName -> { logger.info("自动导入模块:{}", moduleName); MagicScriptEngine.addDefaultImport(moduleName, MagicResourceLoader.loadModule(moduleName)); @@ -507,7 +515,9 @@ public class MagicAPIAutoConfiguration implements WebMvcConfigurer, WebSocketCon } @Bean - public MagicConfiguration magicConfiguration(List magicModules, + public MagicConfiguration magicConfiguration(MagicDynamicDataSource dynamicDataSource, + SQLModule sqlModule, + List magicModules, List languageProviders, Resource magicResource, ResultProvider resultProvider, @@ -529,7 +539,7 @@ public class MagicAPIAutoConfiguration implements WebMvcConfigurer, WebSocketCon Constants.RESPONSE_CODE_INVALID = responseCodeConfig.getInvalid(); Constants.RESPONSE_CODE_EXCEPTION = responseCodeConfig.getException(); // 设置模块和扩展方法 - setupMagicModules(resultProvider, magicModules, extensionMethodsProvider.getIfAvailable(Collections::emptyList), languageProviders); + setupMagicModules(dynamicDataSource, sqlModule, resultProvider, magicModules, extensionMethodsProvider.getIfAvailable(Collections::emptyList), languageProviders); MagicConfiguration configuration = new MagicConfiguration(); configuration.setMagicAPIService(magicAPIService); configuration.setMagicNotifyService(magicNotifyService); diff --git a/magic-api/src/main/java/org/ssssssss/magicapi/controller/RequestHandler.java b/magic-api/src/main/java/org/ssssssss/magicapi/controller/RequestHandler.java index a413f645fe73602a3ffabb84aa4230d381844646..0f7b5f841621d38a314263ae323945dc112653dc 100644 --- a/magic-api/src/main/java/org/ssssssss/magicapi/controller/RequestHandler.java +++ b/magic-api/src/main/java/org/ssssssss/magicapi/controller/RequestHandler.java @@ -115,6 +115,10 @@ public class RequestHandler extends MagicController { if (wrap != null && StringUtils.isNotBlank(wrap.toString())) { context.set(wrap.toString(), requestEntity.getParameters()); } + String defaultDataSourceValue = requestEntity.getApiInfo().getOptionValue(Options.DEFAULT_DATA_SOURCE.getValue()); + if (defaultDataSourceValue != null) { + context.set(Options.DEFAULT_DATA_SOURCE.getValue(), defaultDataSourceValue); + } context.putMapIntoContext(requestEntity.getParameters()); // 验证 path doValidate(scriptName, "path", paths, requestEntity.getPathVariables(), PATH_VARIABLE_INVALID); diff --git a/magic-api/src/main/java/org/ssssssss/magicapi/model/Options.java b/magic-api/src/main/java/org/ssssssss/magicapi/model/Options.java index 17a32ae5e53ccb2aaa8a6296e39e671c1a4a1772..2e6e1d18c4efe673e49a38ccc12feb5fecadc563 100644 --- a/magic-api/src/main/java/org/ssssssss/magicapi/model/Options.java +++ b/magic-api/src/main/java/org/ssssssss/magicapi/model/Options.java @@ -12,6 +12,11 @@ public enum Options { */ WRAP_REQUEST_PARAMETERS("包装请求参数到一个变量中", "wrap_request_parameter"), + /** + * 配置默认数据源的key + */ + DEFAULT_DATA_SOURCE("配置默认数据源的key", "default_data_source"), + /** * 允许拥有该权限的访问 */