Quellcode durchsuchen

!34 增加配置脚本默认数据源的功能
Merge pull request !34 from 奇健陀螺王/dev

小东 vor 3 Jahren
Ursprung
Commit
4f9ae00b1a

+ 12 - 3
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<MagicModule> magicModules,
 								   List<ExtensionMethod> extensionMethods,
 								   List<LanguageProvider> 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<MagicModule> magicModules,
+	public MagicConfiguration magicConfiguration(MagicDynamicDataSource dynamicDataSource,
+                                                 SQLModule sqlModule,
+                                                 List<MagicModule> magicModules,
 												 List<LanguageProvider> 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);

+ 4 - 0
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);

+ 5 - 0
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"),
+
 	/**
 	 * 允许拥有该权限的访问
 	 */