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

This commit is contained in:
mxd 2022-03-15 22:16:22 +08:00
parent 3bc0414bfb
commit df32a94cde
4 changed files with 31 additions and 13 deletions

View File

@ -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);

View File

@ -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;
}

View File

@ -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);
}

View File

@ -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<SQLModule, SQLModule> {
public class SQLModule implements DynamicAttribute<SQLModule, SQLModule>, DynamicModule<SQLModule> {
static {
try {
Field[] fields = Types.class.getFields();
@ -695,6 +698,16 @@ public class SQLModule implements DynamicAttribute<SQLModule, SQLModule> {
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;