新增SQL日志打印配置

This commit is contained in:
mxd
2021-10-01 15:12:19 +08:00
parent 6acc0e0d17
commit 892f6a3601
5 changed files with 75 additions and 28 deletions

View File

@@ -46,10 +46,7 @@ import org.ssssssss.magicapi.config.*;
import org.ssssssss.magicapi.controller.*;
import org.ssssssss.magicapi.dialect.Dialect;
import org.ssssssss.magicapi.exception.MagicAPIException;
import org.ssssssss.magicapi.interceptor.AuthorizationInterceptor;
import org.ssssssss.magicapi.interceptor.DefaultAuthorizationInterceptor;
import org.ssssssss.magicapi.interceptor.RequestInterceptor;
import org.ssssssss.magicapi.interceptor.SQLInterceptor;
import org.ssssssss.magicapi.interceptor.*;
import org.ssssssss.magicapi.logging.LoggerManager;
import org.ssssssss.magicapi.model.Constants;
import org.ssssssss.magicapi.modules.*;
@@ -408,7 +405,11 @@ public class MagicAPIAutoConfiguration implements WebMvcConfigurer, WebSocketCon
}
sqlModule.setResultProvider(resultProvider);
sqlModule.setPageProvider(pageProvider);
sqlModule.setSqlInterceptors(sqlInterceptorsProvider.getIfAvailable(Collections::emptyList));
List<SQLInterceptor> sqlInterceptors = sqlInterceptorsProvider.getIfAvailable(ArrayList::new);
if(properties.isShowSql()){
sqlInterceptors.add(new DefaultSqlInterceptor());
}
sqlModule.setSqlInterceptors(sqlInterceptors);
ColumnMapperAdapter columnMapperAdapter = new ColumnMapperAdapter();
this.columnMapperProvidersProvider.getIfAvailable(Collections::emptyList).stream().filter(mapperProvider -> !"default".equals(mapperProvider.name())).forEach(columnMapperAdapter::add);
columnMapperAdapter.setDefault(properties.getSqlColumnCase());

View File

@@ -102,6 +102,12 @@ public class MagicAPIProperties {
*/
private boolean showUrl = true;
/**
* 是否要打印SQL
* @since 1.5.0
*/
private boolean showSql = true;
@NestedConfigurationProperty
private SecurityConfig securityConfig = new SecurityConfig();
@@ -359,4 +365,13 @@ public class MagicAPIProperties {
public void setBackupConfig(BackupConfig backupConfig) {
this.backupConfig = backupConfig;
}
public boolean isShowSql() {
return showSql;
}
public void setShowSql(boolean showSql) {
this.showSql = showSql;
}
}

View File

@@ -0,0 +1,32 @@
package org.ssssssss.magicapi.interceptor;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.ssssssss.magicapi.model.RequestEntity;
import org.ssssssss.magicapi.modules.BoundSql;
import org.ssssssss.script.MagicScriptContext;
import java.util.Arrays;
import java.util.stream.Collectors;
public class DefaultSqlInterceptor implements SQLInterceptor{
@Override
public void preHandle(BoundSql boundSql, RequestEntity requestEntity) {
Logger logger = LoggerFactory.getLogger(MagicScriptContext.get().getScriptName());
String parameters = Arrays.stream(boundSql.getParameters()).map(it -> {
if (it == null) {
return "null";
}
return it + "(" + it.getClass().getSimpleName() + ")";
}).collect(Collectors.joining(", "));
String dataSourceName = boundSql.getSqlModule().getDataSourceName();
logger.info("执行SQL{}", boundSql.getSql().trim());
if(dataSourceName != null){
logger.info("数据源:{}", dataSourceName);
}
if(parameters.length() > 0){
logger.info("SQL参数{}", parameters);
}
}
}

View File

@@ -33,23 +33,17 @@ public class BoundSql {
private List<Object> parameters = new ArrayList<>();
private SqlCache sqlCache;
private String cacheName;
private long ttl;
private Set<String> excludeColumns;
private SQLModule sqlModule;
public BoundSql(String sql, List<Object> parameters, SQLModule sqlModule) {
this.sql = sql;
this.parameters = parameters;
this.sqlCache = sqlModule.getSqlCache();
this.cacheName = sqlModule.getCacheName();
this.ttl = sqlModule.getTtl();
this.sqlModule = sqlModule;
}
BoundSql(String sql) {
private BoundSql(String sql) {
MagicScriptContext context = MagicScriptContext.get();
// 处理?{}参数
this.sql = ifTokenParser.parse(sql.trim(), text -> {
@@ -84,24 +78,24 @@ public class BoundSql {
BoundSql(String sql, SQLModule sqlModule) {
this(sql);
this.sqlCache = sqlModule.getSqlCache();
this.cacheName = sqlModule.getCacheName();
this.ttl = sqlModule.getTtl();
this.sqlModule = sqlModule;
}
private BoundSql() {
}
public SQLModule getSqlModule() {
return sqlModule;
}
BoundSql copy(String newSql) {
BoundSql boundSql = new BoundSql();
boundSql.setParameters(new ArrayList<>(this.parameters));
boundSql.setSql(this.sql);
boundSql.ttl = this.ttl;
boundSql.cacheName = this.cacheName;
boundSql.sqlCache = this.sqlCache;
boundSql.sql = newSql;
boundSql.excludeColumns = this.excludeColumns;
boundSql.sqlModule = this.sqlModule;
return boundSql;
}
@@ -153,16 +147,16 @@ public class BoundSql {
*/
@SuppressWarnings({"unchecked"})
private <T> T getCacheValue(String sql, Object[] params, Supplier<T> supplier) {
if (cacheName == null) {
if (sqlModule.getCacheName() == null) {
return supplier.get();
}
String cacheKey = sqlCache.buildSqlCacheKey(sql, params);
Object cacheValue = sqlCache.get(cacheName, cacheKey);
String cacheKey = sqlModule.getSqlCache().buildSqlCacheKey(sql, params);
Object cacheValue = sqlModule.getSqlCache().get(sqlModule.getCacheName(), cacheKey);
if (cacheValue != null) {
return (T) cacheValue;
}
T value = supplier.get();
sqlCache.put(cacheName, cacheKey, value, ttl);
sqlModule.getSqlCache().put(sqlModule.getCacheName(), cacheKey, value, sqlModule.getTtl());
return value;
}

View File

@@ -342,7 +342,7 @@ public class SQLModule extends HashMap<String, SQLModule> implements MagicModule
*/
@Comment("执行update操作返回受影响行数")
public int update(@Comment("`SQL`语句") String sql) {
return update(new BoundSql(sql));
return update(new BoundSql(sql, this));
}
@UnableCall
@@ -362,7 +362,7 @@ public class SQLModule extends HashMap<String, SQLModule> implements MagicModule
@Comment("执行insert操作返回插入主键")
public long insert(@Comment("`SQL`语句") String sql) {
MagicKeyHolder magicKeyHolder = new MagicKeyHolder();
insert(new BoundSql(sql), magicKeyHolder);
insert(new BoundSql(sql, this), magicKeyHolder);
return magicKeyHolder.getLongKey();
}
@@ -371,7 +371,7 @@ public class SQLModule extends HashMap<String, SQLModule> implements MagicModule
*/
@Comment("执行insert操作返回插入主键")
public Object insert(@Comment("`SQL`语句") String sql, @Comment("主键列") String primary) {
return insert(new BoundSql(sql), primary);
return insert(new BoundSql(sql, this), primary);
}
void insert(BoundSql boundSql, MagicKeyHolder keyHolder) {
@@ -435,6 +435,11 @@ public class SQLModule extends HashMap<String, SQLModule> implements MagicModule
return page(boundSql, page);
}
@UnableCall
public String getDataSourceName(){
return this.dataSourceNode == null ? "unknown" : dataSourceNode.getName();
}
@UnableCall
public Object page(BoundSql boundSql, Page page) {
assertDatasourceNotNull();