From e66efc1f665c3ddcc9efeec7e5d0920e209c9ce2 Mon Sep 17 00:00:00 2001 From: wangyao Date: Wed, 27 Oct 2021 23:28:26 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E8=84=9A=E6=9C=AC=E9=BB=98?= =?UTF-8?q?=E8=AE=A4=E6=95=B0=E6=8D=AE=E6=BA=90=E7=9A=84=E9=85=8D=E7=BD=AE?= =?UTF-8?q?=E5=8A=9F=E8=83=BD=20https://gitee.com/ssssssss-team/magic-api/?= =?UTF-8?q?issues/I47VQF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../boot/starter/MagicAPIAutoConfiguration.java | 15 ++++++++++++--- .../magicapi/controller/RequestHandler.java | 4 ++++ .../java/org/ssssssss/magicapi/model/Options.java | 5 +++++ 3 files changed, 21 insertions(+), 3 deletions(-) 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 43a552ba..269f8ce7 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,10 @@ public class MagicAPIAutoConfiguration implements WebMvcConfigurer, WebSocketCon logger.info("注册模块:{} -> {}", module.getModuleName(), module.getClass()); MagicResourceLoader.addModule(module.getModuleName(), module); }); + 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 +514,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 +538,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 a413f645..0f7b5f84 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 17a32ae5..2e6e1d18 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"), + /** * 允许拥有该权限的访问 */