diff --git a/README.md b/README.md
index b32f41886..88538a895 100644
--- a/README.md
+++ b/README.md
@@ -46,17 +46,17 @@ https://github.com/sagframe/sqltoy-online-doc/blob/master/docs/sqltoy/search.md
# 码云地址: https://gitee.com/sagacity/sagacity-sqltoy
# 最新版本
-* 5.6.11 LTS (jdk17+/springboot3.x)/5.6.11.jre8 (兼容5.2.x/5.3.x版本) 发版日期: 2024-7-12
+* 5.6.12 LTS (jdk17+/springboot3.x)/5.6.12.jre8 (兼容5.2.x/5.3.x版本) 发版日期: 2024-7-18
```xml
com.sagframe
sagacity-sqltoy-spring-starter
-
- 5.6.11
+
+ 5.6.12
```
-* 5.2.105 LTS (jdk1.8+) 发版日期: 2024-6-6
+* 5.2.106 LTS (jdk1.8+) 发版日期: 2024-7-12
# 1. 前言
## 1.1 sqltoy-orm是什么
diff --git a/trunk/sqltoy-orm-core/pom.xml b/trunk/sqltoy-orm-core/pom.xml
index 01ac141c4..d88844a70 100644
--- a/trunk/sqltoy-orm-core/pom.xml
+++ b/trunk/sqltoy-orm-core/pom.xml
@@ -3,7 +3,7 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
com.sagframe
- 5.6.11
+ 5.6.12
sagacity-sqltoy
sqltoy core code
sagacity-sqltoy
@@ -14,13 +14,13 @@
3.10.8
4.5.14
4.4.16
- 8.14.2
- 2.0.51
+ 8.14.3
+ 2.0.52
3.12.14
5.10.3
1.10.3
2.0.13
-
2.2.224
+ 2.3.230
1.18.34
1.2.23
2.14.5
diff --git a/trunk/sqltoy-orm-core/src/main/java/org/sagacity/sqltoy/SqlExecuteStat.java b/trunk/sqltoy-orm-core/src/main/java/org/sagacity/sqltoy/SqlExecuteStat.java
index 54ba5c787..e458e70e2 100644
--- a/trunk/sqltoy-orm-core/src/main/java/org/sagacity/sqltoy/SqlExecuteStat.java
+++ b/trunk/sqltoy-orm-core/src/main/java/org/sagacity/sqltoy/SqlExecuteStat.java
@@ -10,6 +10,7 @@
import org.sagacity.sqltoy.config.model.SqlExecuteLog;
import org.sagacity.sqltoy.config.model.SqlExecuteTrace;
import org.sagacity.sqltoy.model.OverTimeSql;
+import org.sagacity.sqltoy.plugins.FirstBizCodeTrace;
import org.sagacity.sqltoy.plugins.OverTimeSqlHandler;
import org.sagacity.sqltoy.plugins.formater.SqlFormater;
import org.sagacity.sqltoy.utils.SqlUtil;
@@ -52,6 +53,11 @@ public class SqlExecuteStat {
// sql执行超时处理器
public static OverTimeSqlHandler overTimeSqlHandler;
+ /**
+ * 获取业务代码调用位置的实现类
+ */
+ public static FirstBizCodeTrace firstBizCodeTrace;
+
/**
* sql格式化输出器(用于debug sql输出)
*/
@@ -312,34 +318,42 @@ private static String fitSqlParams(String sql, Object[] params) {
*/
public static String getFirstTrace() {
StackTraceElement[] stackTraceElements = Thread.currentThread().getStackTrace();
+ if (stackTraceElements == null || stackTraceElements.length == 0) {
+ return "未知类.未知方法[代码第:null行]";
+ }
+ StackTraceElement traceElement = null;
String className = null;
- int lineNumber = 0;
- String method = null;
- StackTraceElement traceElement;
- int length = stackTraceElements.length;
- // 逆序
- for (int i = length - 1; i > 0; i--) {
- traceElement = stackTraceElements[i];
- className = traceElement.getClassName();
- // 进入调用sqltoy的代码,此时取上一个
- if (className.startsWith("org.sagacity.sqltoy")) {
- method = traceElement.getMethodName();
- lineNumber = traceElement.getLineNumber();
- // 避免异常发生
- if (i + 1 < length) {
- traceElement = stackTraceElements[i + 1];
- //判断是否代理类,是代理类继续向上推一层
- if ((i + 2) < length && Proxy.isProxyClass(traceElement.getClass())) {
- traceElement = stackTraceElements[i + 2];
+ if (firstBizCodeTrace != null) {
+ traceElement = firstBizCodeTrace.getFirstTrace(stackTraceElements);
+ } else {
+ int length = stackTraceElements.length;
+ // 逆序
+ for (int i = length - 1; i > 0; i--) {
+ traceElement = stackTraceElements[i];
+ className = traceElement.getClassName();
+ // 进入调用sqltoy的代码,此时取上一个
+ if (className.startsWith(SqlToyConstants.SQLTOY_PACKAGE)) {
+ // 避免异常发生
+ if (i + 1 < length) {
+ traceElement = stackTraceElements[i + 1];
+ className = traceElement.getClassName();
+ // 判断是否代理类,找到非代理类、非主流框架类
+ int nextIndex = 2;
+ while ((i + nextIndex) < length && (Proxy.isProxyClass(traceElement.getClass())
+ || className.startsWith("java.") || className.startsWith("sun.")
+ || className.startsWith("com.sun.") || className.startsWith("org.springframework.")
+ || className.startsWith("org.noear.solon."))) {
+ traceElement = stackTraceElements[i + nextIndex];
+ className = traceElement.getClassName();
+ nextIndex++;
+ }
}
- className = traceElement.getClassName();
- method = traceElement.getMethodName();
- lineNumber = traceElement.getLineNumber();
+ break;
}
- break;
}
}
- return "" + className + "." + method + "[代码第:" + lineNumber + " 行]";
+ return traceElement.getClassName() + "." + traceElement.getMethodName() + "[代码第:" + traceElement.getLineNumber()
+ + " 行]";
}
/**
diff --git a/trunk/sqltoy-orm-core/src/main/java/org/sagacity/sqltoy/SqlToyConstants.java b/trunk/sqltoy-orm-core/src/main/java/org/sagacity/sqltoy/SqlToyConstants.java
index 42b7dc0d4..04193b001 100644
--- a/trunk/sqltoy-orm-core/src/main/java/org/sagacity/sqltoy/SqlToyConstants.java
+++ b/trunk/sqltoy-orm-core/src/main/java/org/sagacity/sqltoy/SqlToyConstants.java
@@ -206,6 +206,11 @@ public class SqlToyConstants {
public final static String MERGE_ALIAS_ON_REGEX = "\\)\\s+tv\\s+on\\s+\\(";
public final static String MERGE_UPDATE = " when matched then update set ";
public final static String MERGE_INSERT = " when not matched then insert ";
+
+ /**
+ * sqltoy的框架包路径
+ */
+ public final static String SQLTOY_PACKAGE="org.sagacity.sqltoy";
public static String localDateTimeFormat;
diff --git a/trunk/sqltoy-orm-core/src/main/java/org/sagacity/sqltoy/SqlToyContext.java b/trunk/sqltoy-orm-core/src/main/java/org/sagacity/sqltoy/SqlToyContext.java
index 379d0f5f9..18477c036 100644
--- a/trunk/sqltoy-orm-core/src/main/java/org/sagacity/sqltoy/SqlToyContext.java
+++ b/trunk/sqltoy-orm-core/src/main/java/org/sagacity/sqltoy/SqlToyContext.java
@@ -24,6 +24,7 @@
import org.sagacity.sqltoy.model.OverTimeSql;
import org.sagacity.sqltoy.model.QueryExecutor;
import org.sagacity.sqltoy.plugins.FilterHandler;
+import org.sagacity.sqltoy.plugins.FirstBizCodeTrace;
import org.sagacity.sqltoy.plugins.IUnifyFieldsHandler;
import org.sagacity.sqltoy.plugins.OverTimeSqlHandler;
import org.sagacity.sqltoy.plugins.SqlInterceptor;
@@ -398,6 +399,11 @@ public TranslateManager getTranslateManager() {
*/
private DialectDDLGenerator dialectDDLGenerator;
+ /**
+ * 自定义获取业务代码调用点
+ */
+ private FirstBizCodeTrace firstBizCodeTrace;
+
/**
* @todo 初始化
* @throws Exception
@@ -411,6 +417,9 @@ public void initialize() throws Exception {
ReservedWordsUtil.put(reservedWords);
// 初始化方言对应的类别代码,避免线程安全
DataSourceUtils.initialize();
+ if (firstBizCodeTrace != null) {
+ SqlExecuteStat.firstBizCodeTrace = firstBizCodeTrace;
+ }
// 设置方言映射(默认OSCAR==>gaussdb)
if (dialectMap != null && !dialectMap.isEmpty()) {
DataSourceUtils.dialectMap = dialectMap;
@@ -1288,4 +1297,8 @@ public DialectDDLGenerator getDialectDDLGenerator() {
public void setDialectDDLGenerator(DialectDDLGenerator dialectDDLGenerator) {
this.dialectDDLGenerator = dialectDDLGenerator;
}
+
+ public void setFirstBizCodeTrace(FirstBizCodeTrace firstBizCodeTrace) {
+ this.firstBizCodeTrace = firstBizCodeTrace;
+ }
}
diff --git a/trunk/sqltoy-orm-core/src/main/java/org/sagacity/sqltoy/config/EntityManager.java b/trunk/sqltoy-orm-core/src/main/java/org/sagacity/sqltoy/config/EntityManager.java
index ff686c2f8..aaa397dff 100644
--- a/trunk/sqltoy-orm-core/src/main/java/org/sagacity/sqltoy/config/EntityManager.java
+++ b/trunk/sqltoy-orm-core/src/main/java/org/sagacity/sqltoy/config/EntityManager.java
@@ -115,6 +115,8 @@ public class EntityManager {
* id产生器的包路径(针对类名补充包路径,直接包含了包路径的除外)
*/
private static final String IdGeneratorPackage = "org.sagacity.sqltoy.plugins.id.impl.";
+ // 历史id主键策略的包路径,5.x版本开始剔除了兼容处理,2024-7-16日增加了兼容处理
+ private static final String IdGeneratorOldPackage = "org.sagacity.sqltoy.plugin.id.";
/**
* 扫描的包(意义不大,sqltoy已经改为在使用时自动加载)
@@ -780,6 +782,10 @@ private void processIdGenerator(SqlToyContext sqlToyContext, EntityMeta entityMe
} else {
String generator = IdGenerators.get(idGenerator.toLowerCase());
generator = (generator != null) ? IdGeneratorPackage.concat(generator) : idGenerator;
+ // 针对历史id策略包路径提供兼容处理:update 2024-07-16
+ if (generator.startsWith(IdGeneratorOldPackage)) {
+ generator = IdGeneratorPackage.concat(generator.substring(generator.lastIndexOf(".") + 1));
+ }
// 自定义(不依赖spring模式),用法在quickvo中配置例如:com.xxxx..CustomIdGenerator
try {
IdGenerator idGeneratorBean = (IdGenerator) Class.forName(generator).getDeclaredConstructor()
diff --git a/trunk/sqltoy-orm-core/src/main/java/org/sagacity/sqltoy/plugins/FirstBizCodeTrace.java b/trunk/sqltoy-orm-core/src/main/java/org/sagacity/sqltoy/plugins/FirstBizCodeTrace.java
new file mode 100644
index 000000000..7d47be8dc
--- /dev/null
+++ b/trunk/sqltoy-orm-core/src/main/java/org/sagacity/sqltoy/plugins/FirstBizCodeTrace.java
@@ -0,0 +1,8 @@
+package org.sagacity.sqltoy.plugins;
+
+/**
+ * 提供获取业务代码的位置
+ */
+public interface FirstBizCodeTrace {
+ public StackTraceElement getFirstTrace(StackTraceElement[] stackTraceElements);
+}
diff --git a/trunk/sqltoy-orm-core/src/main/java/org/sagacity/sqltoy/translate/cache/impl/TranslateEhcacheManager.java b/trunk/sqltoy-orm-core/src/main/java/org/sagacity/sqltoy/translate/cache/impl/TranslateEhcacheManager.java
index 268789266..012f62162 100644
--- a/trunk/sqltoy-orm-core/src/main/java/org/sagacity/sqltoy/translate/cache/impl/TranslateEhcacheManager.java
+++ b/trunk/sqltoy-orm-core/src/main/java/org/sagacity/sqltoy/translate/cache/impl/TranslateEhcacheManager.java
@@ -81,12 +81,14 @@ public void put(TranslateConfigModel cacheConfig, String cacheName, String cache
// 缓存没有配置,自动创建缓存(不建议使用)
if (cache == null) {
ResourcePoolsBuilder resBuilder = ResourcePoolsBuilder.newResourcePoolsBuilder();
- // 堆内内存大小(20000条)
+ // 堆内内存大小(默认10000条)
resBuilder = resBuilder.heap((cacheConfig.getHeap() < 1) ? 1000 : cacheConfig.getHeap(),
EntryUnit.ENTRIES);
+ //offHeap 堆外内存
if (cacheConfig.getOffHeap() > 0) {
resBuilder = resBuilder.offheap(cacheConfig.getOffHeap(), MemoryUnit.MB);
}
+ //disk
if (cacheConfig.getDiskSize() > 0) {
resBuilder = resBuilder.disk(cacheConfig.getDiskSize(), MemoryUnit.MB, true);
}
diff --git a/trunk/sqltoy-orm-core/src/main/java/org/sagacity/sqltoy/utils/HttpClientUtils.java b/trunk/sqltoy-orm-core/src/main/java/org/sagacity/sqltoy/utils/HttpClientUtils.java
index 97dad2031..908a6f069 100644
--- a/trunk/sqltoy-orm-core/src/main/java/org/sagacity/sqltoy/utils/HttpClientUtils.java
+++ b/trunk/sqltoy-orm-core/src/main/java/org/sagacity/sqltoy/utils/HttpClientUtils.java
@@ -6,13 +6,13 @@
import java.util.Map;
import org.apache.http.HttpEntity;
-import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.auth.AuthScope;
import org.apache.http.auth.UsernamePasswordCredentials;
import org.apache.http.client.CredentialsProvider;
import org.apache.http.client.config.RequestConfig;
import org.apache.http.client.entity.UrlEncodedFormEntity;
+import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.BasicCredentialsProvider;
@@ -69,6 +69,7 @@ public static String doPost(SqlToyContext sqltoyContext, final String url, Strin
httpPost.setHeader("Connection", "close");
httpPost.setConfig(requestConfig);
CloseableHttpClient client = null;
+ CloseableHttpResponse response = null;
try {
if (StringUtil.isNotBlank(username) && StringUtil.isNotBlank(password)) {
// 凭据提供器
@@ -91,7 +92,7 @@ public static String doPost(SqlToyContext sqltoyContext, final String url, Strin
((UrlEncodedFormEntity) httpEntity).setContentType(CONTENT_TYPE);
httpPost.setEntity(httpEntity);
}
- HttpResponse response = client.execute(httpPost);
+ response = client.execute(httpPost);
// 返回结果
HttpEntity reponseEntity = response.getEntity();
if (reponseEntity != null) {
@@ -99,6 +100,17 @@ public static String doPost(SqlToyContext sqltoyContext, final String url, Strin
}
} catch (Exception e) {
throw e;
+ } finally {
+ try {
+ if (response != null) {
+ response.close();
+ }
+ if (client != null) {
+ client.close();
+ }
+ } catch (Exception e) {
+
+ }
}
return null;
}
@@ -137,6 +149,7 @@ public static JSONObject doPost(SqlToyContext sqltoyContext, NoSqlConfigModel no
String realUrl;
// 返回结果
HttpEntity reponseEntity = null;
+ String result = null;
// 使用elastic rest client(默认)
if (esConfig.getRestClient() != null) {
realUrl = wrapUrl(esConfig, nosqlConfig);
@@ -146,17 +159,25 @@ public static JSONObject doPost(SqlToyContext sqltoyContext, NoSqlConfigModel no
}
// 默认采用post请求
RestClient restClient = null;
+ Response response;
try {
restClient = esConfig.getRestClient();
Request request = new Request(POST, realUrl);
request.setEntity(httpEntity);
- Response response = restClient.performRequest(request);
+ response = restClient.performRequest(request);
reponseEntity = response.getEntity();
+ if (reponseEntity != null) {
+ result = EntityUtils.toString(reponseEntity, nosqlConfig.getCharset());
+ }
} catch (Exception e) {
throw e;
} finally {
- if (restClient != null) {
- restClient.close();
+ try {
+ if (restClient != null) {
+ restClient.close();
+ }
+ } catch (Exception e) {
+
}
}
} // 组织httpclient模式调用(此种模式不推荐使用)
@@ -180,6 +201,7 @@ public static JSONObject doPost(SqlToyContext sqltoyContext, NoSqlConfigModel no
httpPost.setConfig(requestConfig);
}
CloseableHttpClient client = null;
+ CloseableHttpResponse response = null;
try {
if (StringUtil.isNotBlank(esConfig.getUsername()) && StringUtil.isNotBlank(esConfig.getPassword())) {
// 凭据提供器
@@ -191,22 +213,32 @@ public static JSONObject doPost(SqlToyContext sqltoyContext, NoSqlConfigModel no
} else {
client = HttpClients.createDefault();
}
- HttpResponse response = client.execute(httpPost);
+ response = client.execute(httpPost);
reponseEntity = response.getEntity();
+ if (reponseEntity != null) {
+ result = EntityUtils.toString(reponseEntity, nosqlConfig.getCharset());
+ }
} catch (Exception e) {
throw e;
- }
- }
- String result = null;
- if (reponseEntity != null) {
- result = EntityUtils.toString(reponseEntity, nosqlConfig.getCharset());
- if (sqltoyContext.isDebug()) {
- logger.debug("result={}", result);
+ } finally {
+ try {
+ if (response != null) {
+ response.close();
+ }
+ if (client != null) {
+ client.close();
+ }
+ } catch (Exception e) {
+
+ }
}
}
if (StringUtil.isBlank(result)) {
return null;
}
+ if (sqltoyContext.isDebug()) {
+ logger.debug("result={}", result);
+ }
// 将结果转换为JSON对象
JSONObject json = JSON.parseObject(result);
// 存在错误
diff --git a/trunk/sqltoy-orm-solon-plugin/pom.xml b/trunk/sqltoy-orm-solon-plugin/pom.xml
index fad5d0879..420052110 100644
--- a/trunk/sqltoy-orm-solon-plugin/pom.xml
+++ b/trunk/sqltoy-orm-solon-plugin/pom.xml
@@ -5,7 +5,7 @@
4.0.0
com.sagframe
- 5.6.11
+ 5.6.12
sagacity-sqltoy-solon-plugin
sagacity-sqltoy-solon-plugin
diff --git a/trunk/sqltoy-orm-solon-plugin/src/main/java/org/sagacity/sqltoy/solon/configure/SqlToyContextProperties.java b/trunk/sqltoy-orm-solon-plugin/src/main/java/org/sagacity/sqltoy/solon/configure/SqlToyContextProperties.java
index ece3aed57..054376e12 100644
--- a/trunk/sqltoy-orm-solon-plugin/src/main/java/org/sagacity/sqltoy/solon/configure/SqlToyContextProperties.java
+++ b/trunk/sqltoy-orm-solon-plugin/src/main/java/org/sagacity/sqltoy/solon/configure/SqlToyContextProperties.java
@@ -254,6 +254,11 @@ public class SqlToyContextProperties implements Serializable {
* 是否基于实体注解动态生成表结构
*/
private Boolean autoDDL;
+
+ /**
+ * 业务代码调用点获取
+ */
+ private String firstBizCodeTrace;
/**
* @return the sqlResourcesDir
@@ -748,4 +753,12 @@ public void setDialectMap(Map dialectMap) {
this.dialectMap = dialectMap;
}
+ public String getFirstBizCodeTrace() {
+ return firstBizCodeTrace;
+ }
+
+ public void setFirstBizCodeTrace(String firstBizCodeTrace) {
+ this.firstBizCodeTrace = firstBizCodeTrace;
+ }
+
}
diff --git a/trunk/sqltoy-orm-solon-plugin/src/main/java/org/sagacity/sqltoy/solon/integration/SqlToyContextBuilder.java b/trunk/sqltoy-orm-solon-plugin/src/main/java/org/sagacity/sqltoy/solon/integration/SqlToyContextBuilder.java
index 4c95fd5be..47804de0d 100644
--- a/trunk/sqltoy-orm-solon-plugin/src/main/java/org/sagacity/sqltoy/solon/integration/SqlToyContextBuilder.java
+++ b/trunk/sqltoy-orm-solon-plugin/src/main/java/org/sagacity/sqltoy/solon/integration/SqlToyContextBuilder.java
@@ -19,6 +19,7 @@
import org.sagacity.sqltoy.integration.AppContext;
import org.sagacity.sqltoy.integration.ConnectionFactory;
import org.sagacity.sqltoy.plugins.FilterHandler;
+import org.sagacity.sqltoy.plugins.FirstBizCodeTrace;
import org.sagacity.sqltoy.plugins.IUnifyFieldsHandler;
import org.sagacity.sqltoy.plugins.OverTimeSqlHandler;
import org.sagacity.sqltoy.plugins.SqlInterceptor;
@@ -353,6 +354,18 @@ else if (translateCacheManager.contains(".")) {
}
}
+ // 自定义业务代码调用点
+ String firstBizCodeTrace = properties.getFirstBizCodeTrace();
+ if (StringUtil.isNotBlank(firstBizCodeTrace)) {
+ if (appContext.containsBean(firstBizCodeTrace)) {
+ sqlToyContext.setFirstBizCodeTrace((FirstBizCodeTrace) appContext.getBean(firstBizCodeTrace));
+ } // 包名和类名称
+ else if (firstBizCodeTrace.contains(".")) {
+ sqlToyContext.setFirstBizCodeTrace(
+ (FirstBizCodeTrace) Class.forName(firstBizCodeTrace).getDeclaredConstructor().newInstance());
+ }
+ }
+
// 自定义typeHandler
String typeHandler = properties.getTypeHandler();
if (StringUtil.isNotBlank(typeHandler)) {
diff --git a/trunk/sqltoy-orm-spring-starter/pom.xml b/trunk/sqltoy-orm-spring-starter/pom.xml
index e50ce13ba..5f034ea6f 100644
--- a/trunk/sqltoy-orm-spring-starter/pom.xml
+++ b/trunk/sqltoy-orm-spring-starter/pom.xml
@@ -4,7 +4,7 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
com.sagframe
- 5.6.11
+ 5.6.12
sagacity-sqltoy-spring-starter
sagacity-sqltoy-spring-starter
sqltoy springboot starter
diff --git a/trunk/sqltoy-orm-spring-starter/src/main/java/org/sagacity/sqltoy/configure/SqlToyContextProperties.java b/trunk/sqltoy-orm-spring-starter/src/main/java/org/sagacity/sqltoy/configure/SqlToyContextProperties.java
index dde1290ae..5eddc8125 100644
--- a/trunk/sqltoy-orm-spring-starter/src/main/java/org/sagacity/sqltoy/configure/SqlToyContextProperties.java
+++ b/trunk/sqltoy-orm-spring-starter/src/main/java/org/sagacity/sqltoy/configure/SqlToyContextProperties.java
@@ -9,7 +9,6 @@
* @author zhongxuchen
* @version v1.0,Date:2020年2月20日
*/
-
@ConfigurationProperties(prefix = "spring.sqltoy")
public class SqlToyContextProperties implements Serializable {
@@ -244,7 +243,7 @@ public class SqlToyContextProperties implements Serializable {
* 默认一页数据记录数量
*/
private int defaultPageSize = 10;
-
+
/**
* 自定义数据库DDL产生器
*/
@@ -268,6 +267,11 @@ public class SqlToyContextProperties implements Serializable {
*/
private String localTimeFormat = "HH:mm:ss";
+ /**
+ * 业务代码调用点获取
+ */
+ private String firstBizCodeTrace;
+
/**
* @return the sqlResourcesDir
*/
@@ -755,4 +759,12 @@ public void setDialectDDLGenerator(String dialectDDLGenerator) {
this.dialectDDLGenerator = dialectDDLGenerator;
}
+ public String getFirstBizCodeTrace() {
+ return firstBizCodeTrace;
+ }
+
+ public void setFirstBizCodeTrace(String firstBizCodeTrace) {
+ this.firstBizCodeTrace = firstBizCodeTrace;
+ }
+
}
diff --git a/trunk/sqltoy-orm-spring-starter/src/main/java/org/sagacity/sqltoy/configure/SqltoyAutoConfiguration.java b/trunk/sqltoy-orm-spring-starter/src/main/java/org/sagacity/sqltoy/configure/SqltoyAutoConfiguration.java
index 0fb571898..766ed35a3 100644
--- a/trunk/sqltoy-orm-spring-starter/src/main/java/org/sagacity/sqltoy/configure/SqltoyAutoConfiguration.java
+++ b/trunk/sqltoy-orm-spring-starter/src/main/java/org/sagacity/sqltoy/configure/SqltoyAutoConfiguration.java
@@ -1,6 +1,17 @@
package org.sagacity.sqltoy.configure;
-import com.alibaba.ttl.threadpool.TtlExecutors;
+import static java.lang.System.err;
+
+import java.io.IOException;
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Set;
+import java.util.TreeSet;
+import java.util.concurrent.CopyOnWriteArrayList;
+import java.util.concurrent.Executor;
+import java.util.stream.Collectors;
+
import org.sagacity.sqltoy.SqlToyContext;
import org.sagacity.sqltoy.config.SqlScriptLoader;
import org.sagacity.sqltoy.config.model.ElasticEndpoint;
@@ -11,7 +22,12 @@
import org.sagacity.sqltoy.integration.ConnectionFactory;
import org.sagacity.sqltoy.integration.impl.SpringAppContext;
import org.sagacity.sqltoy.integration.impl.SpringConnectionFactory;
-import org.sagacity.sqltoy.plugins.*;
+import org.sagacity.sqltoy.plugins.FilterHandler;
+import org.sagacity.sqltoy.plugins.FirstBizCodeTrace;
+import org.sagacity.sqltoy.plugins.IUnifyFieldsHandler;
+import org.sagacity.sqltoy.plugins.OverTimeSqlHandler;
+import org.sagacity.sqltoy.plugins.SqlInterceptor;
+import org.sagacity.sqltoy.plugins.TypeHandler;
import org.sagacity.sqltoy.plugins.datasource.DataSourceSelector;
import org.sagacity.sqltoy.plugins.ddl.DialectDDLGenerator;
import org.sagacity.sqltoy.plugins.formater.SqlFormater;
@@ -34,17 +50,7 @@
import org.springframework.core.io.support.ResourcePatternResolver;
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
-import java.io.IOException;
-import java.net.URL;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Set;
-import java.util.TreeSet;
-import java.util.concurrent.CopyOnWriteArrayList;
-import java.util.concurrent.Executor;
-import java.util.stream.Collectors;
-
-import static java.lang.System.err;
+import com.alibaba.ttl.threadpool.TtlExecutors;
/**
* @author wolf
@@ -347,6 +353,18 @@ else if (translateCacheManager.contains(".")) {
}
}
+ // 自定义业务代码调用点
+ String firstBizCodeTrace = properties.getFirstBizCodeTrace();
+ if (StringUtil.isNotBlank(firstBizCodeTrace)) {
+ if (applicationContext.containsBean(firstBizCodeTrace)) {
+ sqlToyContext.setFirstBizCodeTrace((FirstBizCodeTrace) applicationContext.getBean(firstBizCodeTrace));
+ } // 包名和类名称
+ else if (firstBizCodeTrace.contains(".")) {
+ sqlToyContext.setFirstBizCodeTrace(
+ (FirstBizCodeTrace) Class.forName(firstBizCodeTrace).getDeclaredConstructor().newInstance());
+ }
+ }
+
// 自定义typeHandler
String typeHandler = properties.getTypeHandler();
if (StringUtil.isNotBlank(typeHandler)) {
diff --git a/trunk/sqltoy-orm-spring/pom.xml b/trunk/sqltoy-orm-spring/pom.xml
index b4b4b9f64..4b297f03c 100644
--- a/trunk/sqltoy-orm-spring/pom.xml
+++ b/trunk/sqltoy-orm-spring/pom.xml
@@ -3,7 +3,7 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
com.sagframe
- 5.6.11
+ 5.6.12
sagacity-sqltoy-spring
sagacity-sqltoy-spring
sagacity-sqltoy-spring