Browse Source

修复接口选项设置默认数据源失效的问题

mxd 3 years ago
parent
commit
df32a94cde

+ 6 - 1
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.datasource.web.MagicDataSourceController;
 import org.ssssssss.magicapi.function.service.FunctionMagicDynamicRegistry;
 import org.ssssssss.magicapi.function.service.FunctionMagicDynamicRegistry;
 import org.ssssssss.magicapi.jsr223.LanguageProvider;
 import org.ssssssss.magicapi.jsr223.LanguageProvider;
+import org.ssssssss.magicapi.modules.DynamicModule;
 import org.ssssssss.magicapi.utils.Mapping;
 import org.ssssssss.magicapi.utils.Mapping;
 import org.ssssssss.script.MagicResourceLoader;
 import org.ssssssss.script.MagicResourceLoader;
 import org.ssssssss.script.MagicScript;
 import org.ssssssss.script.MagicScript;
@@ -291,7 +292,11 @@ public class MagicAPIAutoConfiguration implements WebMvcConfigurer, WebSocketCon
 		applicationContext.getBeansWithAnnotation(MagicModule.class).values().forEach(module -> {
 		applicationContext.getBeansWithAnnotation(MagicModule.class).values().forEach(module -> {
 			String moduleName = AnnotationUtils.findAnnotation(module.getClass(), MagicModule.class).value();
 			String moduleName = AnnotationUtils.findAnnotation(module.getClass(), MagicModule.class).value();
 			logger.info("注册模块:{} -> {}", moduleName, module.getClass());
 			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 -> {
 		MagicResourceLoader.getModuleNames().stream().filter(importModules::contains).forEach(moduleName -> {
 			logger.info("自动导入模块:{}", moduleName);
 			logger.info("自动导入模块:{}", moduleName);

+ 0 - 11
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;
 package org.ssssssss.magicapi.spring.boot.starter;
 
 
-import org.apache.commons.lang3.StringUtils;
 import org.slf4j.Logger;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.ObjectProvider;
 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.config.Page;
 import org.ssssssss.magicapi.core.interceptor.DefaultResultProvider;
 import org.ssssssss.magicapi.core.interceptor.DefaultResultProvider;
 import org.ssssssss.magicapi.core.interceptor.ResultProvider;
 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.datasource.model.MagicDynamicDataSource;
 import org.ssssssss.magicapi.jsr223.JSR223LanguageProvider;
 import org.ssssssss.magicapi.jsr223.JSR223LanguageProvider;
 import org.ssssssss.magicapi.modules.db.ColumnMapperAdapter;
 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.RequestModule;
 import org.ssssssss.magicapi.modules.servlet.ResponseModule;
 import org.ssssssss.magicapi.modules.servlet.ResponseModule;
 import org.ssssssss.magicapi.modules.spring.EnvModule;
 import org.ssssssss.magicapi.modules.spring.EnvModule;
-import org.ssssssss.script.MagicResourceLoader;
-import org.ssssssss.script.functions.DynamicModuleImport;
 
 
 import javax.sql.DataSource;
 import javax.sql.DataSource;
 import java.nio.charset.StandardCharsets;
 import java.nio.charset.StandardCharsets;
@@ -159,13 +155,6 @@ public class MagicModuleConfiguration {
 		sqlModule.setDialectAdapter(dialectAdapter);
 		sqlModule.setDialectAdapter(dialectAdapter);
 		sqlModule.setLogicDeleteColumn(properties.getCrud().getLogicDeleteColumn());
 		sqlModule.setLogicDeleteColumn(properties.getCrud().getLogicDeleteColumn());
 		sqlModule.setLogicDeleteValue(properties.getCrud().getLogicDeleteValue());
 		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;
 		return sqlModule;
 	}
 	}
 
 

+ 11 - 0
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<T> {
+
+	@Transient
+	T getDynamicModule(MagicScriptContext context);
+}

+ 14 - 1
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.apache.commons.lang3.StringUtils;
 import org.springframework.jdbc.core.*;
 import org.springframework.jdbc.core.*;
 import org.springframework.jdbc.support.GeneratedKeyHolder;
 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.modules.db.dialect.DialectAdapter;
 import org.ssssssss.magicapi.datasource.model.MagicDynamicDataSource;
 import org.ssssssss.magicapi.datasource.model.MagicDynamicDataSource;
 import org.ssssssss.magicapi.datasource.model.MagicDynamicDataSource.DataSourceNode;
 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.modules.db.table.NamedTable;
 import org.ssssssss.magicapi.core.interceptor.ResultProvider;
 import org.ssssssss.magicapi.core.interceptor.ResultProvider;
 import org.ssssssss.magicapi.utils.ScriptManager;
 import org.ssssssss.magicapi.utils.ScriptManager;
+import org.ssssssss.script.MagicScriptContext;
 import org.ssssssss.script.annotation.Comment;
 import org.ssssssss.script.annotation.Comment;
 import org.ssssssss.script.functions.DynamicAttribute;
 import org.ssssssss.script.functions.DynamicAttribute;
 import org.ssssssss.script.parsing.ast.statement.ClassConverter;
 import org.ssssssss.script.parsing.ast.statement.ClassConverter;
@@ -38,7 +41,7 @@ import java.util.stream.Stream;
  * @author mxd
  * @author mxd
  */
  */
 @MagicModule("db")
 @MagicModule("db")
-public class SQLModule implements DynamicAttribute<SQLModule, SQLModule> {
+public class SQLModule implements DynamicAttribute<SQLModule, SQLModule>, DynamicModule<SQLModule> {
 	static {
 	static {
 		try {
 		try {
 			Field[] fields = Types.class.getFields();
 			Field[] fields = Types.class.getFields();
@@ -695,6 +698,16 @@ public class SQLModule implements DynamicAttribute<SQLModule, SQLModule> {
 		return boundSql.copy(pageSql);
 		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 {
 	static class MagicKeyHolder extends GeneratedKeyHolder {
 
 
 		private final boolean useGeneratedKeys;
 		private final boolean useGeneratedKeys;