修复接口选项设置默认数据源失效的问题
This commit is contained in:
parent
3bc0414bfb
commit
df32a94cde
@ -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);
|
||||
|
||||
@ -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;
|
||||
}
|
||||
|
||||
|
||||
@ -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);
|
||||
}
|
||||
@ -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;
|
||||
|
||||
Loading…
Reference in New Issue
Block a user