Skip to content

Commit 61e731e

Browse files
committed
#501 优化,还需要做一些优化。
1 parent a4ce3b8 commit 61e731e

File tree

14 files changed

+138
-92
lines changed

14 files changed

+138
-92
lines changed

starter-txlcn-tc/src/main/resources/META-INF/spring.factories

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -10,13 +10,11 @@ com.codingapi.txlcn.tc.jdbc.JdbcConfiguration,\
1010
com.codingapi.txlcn.tc.jdbc.event.JdbcEventConfiguration,\
1111
com.codingapi.txlcn.tc.jdbc.log.JdbcLogConfiguration,\
1212
com.codingapi.txlcn.tc.jdbc.sql.JdbcSqlConfiguration,\
13+
com.codingapi.txlcn.tc.jdbc.sql.analyse.AnalyseConfiguration,\
14+
com.codingapi.txlcn.tc.jdbc.sql.strategy.StrategyConfiguration,\
1315
com.codingapi.txlcn.tc.reporter.ReporterConfiguration,\
1416
com.codingapi.txlcn.tc.resolver.ResolverConfiguration,\
1517
com.codingapi.txlcn.tc.runner.TcRunnerConfiguration,\
1618
com.codingapi.txlcn.tc.rpc.RpcTransactionConfiguration,\
1719
com.codingapi.txlcn.tc.TCAutoConfiguration,\
18-
com.codingapi.txlcn.tc.jdbc.sql.strategy.MysqlInsertAnalyseStrategy,\
19-
com.codingapi.txlcn.tc.jdbc.sql.strategy.MysqlSqlDeleteAnalyseStrategy,\
20-
com.codingapi.txlcn.tc.jdbc.sql.strategy.MysqlUpdateAnalyseStrategy,\
21-
com.codingapi.txlcn.tc.jdbc.sql.strategy.AnalyseStrategryFactory,\
22-
com.codingapi.txlcn.tc.jdbc.sql.analyse.MysqlAnalyse
20+

txlcn-tc/src/main/java/com/codingapi/txlcn/tc/jdbc/sql/JdbcSqlConfiguration.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package com.codingapi.txlcn.tc.jdbc.sql;
22

33
import com.codingapi.txlcn.tc.config.TxConfig;
4+
import com.codingapi.txlcn.tc.jdbc.sql.strategy.AnalyseStrategryFactory;
45
import org.springframework.beans.factory.annotation.Autowired;
56
import org.springframework.context.annotation.Bean;
67
import org.springframework.context.annotation.Configuration;
@@ -21,7 +22,7 @@ public SqlAnalyseStrategy sqlParserContext(@Autowired(required = false) List<Sql
2122
}
2223

2324
@Bean
24-
public SqlAnalyse mysqlSqlParser(){
25-
return new MysqlSqlAnalyse();
25+
public SqlAnalyse mysqlSqlParser(AnalyseStrategryFactory analyseStrategryFactory){
26+
return new MysqlSqlAnalyse(analyseStrategryFactory);
2627
}
2728
}

txlcn-tc/src/main/java/com/codingapi/txlcn/tc/jdbc/sql/MysqlSqlAnalyse.java

Lines changed: 12 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,11 @@
22

33
import com.codingapi.txlcn.p6spy.common.StatementInformation;
44
import com.codingapi.txlcn.tc.jdbc.sql.strategy.AnalyseStrategryFactory;
5-
import com.codingapi.txlcn.tc.jdbc.sql.strategy.MysqlAnalyseEnum;
5+
import com.codingapi.txlcn.tc.jdbc.sql.strategy.SqlSqlAnalyseHandler;
66
import lombok.SneakyThrows;
77
import lombok.extern.slf4j.Slf4j;
88
import net.sf.jsqlparser.parser.CCJSqlParserManager;
99
import net.sf.jsqlparser.statement.Statement;
10-
import net.sf.jsqlparser.statement.delete.Delete;
11-
import net.sf.jsqlparser.statement.insert.Insert;
12-
import net.sf.jsqlparser.statement.update.Update;
1310

1411
import java.io.StringReader;
1512
import java.sql.Connection;
@@ -23,6 +20,12 @@
2320
@Slf4j
2421
public class MysqlSqlAnalyse implements SqlAnalyse {
2522

23+
private AnalyseStrategryFactory analyseStrategryFactory;
24+
25+
public MysqlSqlAnalyse(AnalyseStrategryFactory analyseStrategryFactory) {
26+
this.analyseStrategryFactory = analyseStrategryFactory;
27+
}
28+
2629
@Override
2730
public String sqlType() {
2831
return "mysql";
@@ -37,15 +40,13 @@ public String analyse(String sql,StatementInformation statementInformation) thr
3740
// if else 实现并不是很优雅
3841
CCJSqlParserManager parser = new CCJSqlParserManager();
3942
Statement stmt = parser.parse(new StringReader(sql));
40-
if (stmt instanceof Insert) {
41-
return AnalyseStrategryFactory.getInvokeStrategy(MysqlAnalyseEnum.INSERT.name()).mysqlAnalyseStrategy(sql,connection,stmt);
42-
} else if (stmt instanceof Update) {
43-
return AnalyseStrategryFactory.getInvokeStrategy(MysqlAnalyseEnum.UPDATE.name()).mysqlAnalyseStrategy(sql,connection,stmt);
44-
} else if (stmt instanceof Delete) {
45-
return AnalyseStrategryFactory.getInvokeStrategy(MysqlAnalyseEnum.DELETE.name()).mysqlAnalyseStrategy(sql,connection,stmt);
43+
SqlSqlAnalyseHandler sqlSqlAnalyseHandler = analyseStrategryFactory.getInvokeStrategy(sqlType(),stmt);
44+
if(sqlSqlAnalyseHandler==null){
45+
return sql;
4646
}
47-
return sql;
47+
return sqlSqlAnalyseHandler.analyse(sql,connection,stmt);
4848
}
49+
4950
@Override
5051
public boolean preAnalyse(String sql) {
5152
// SQL类型检查,只有对CUD(CURD)操作做处理
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
package com.codingapi.txlcn.tc.jdbc.sql.analyse;
2+
3+
import org.springframework.beans.factory.annotation.Configurable;
4+
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
5+
import org.springframework.context.annotation.Bean;
6+
7+
/**
8+
* @author lorne
9+
* @date 2020/9/17
10+
* @description
11+
*/
12+
@Configurable
13+
public class AnalyseConfiguration {
14+
15+
@Bean
16+
@ConditionalOnMissingBean
17+
public SqlDetailAnalyse mysqlSqlDetailAnalyse(){
18+
return new MysqlSqlDetailAnalyse();
19+
}
20+
21+
22+
23+
}

txlcn-tc/src/main/java/com/codingapi/txlcn/tc/jdbc/sql/analyse/MysqlAnalyse.java renamed to txlcn-tc/src/main/java/com/codingapi/txlcn/tc/jdbc/sql/analyse/MysqlSqlDetailAnalyse.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@
2323
import java.util.Map;
2424

2525
@Slf4j
26-
public class MysqlAnalyse implements SqlDetailAnalyse{
26+
public class MysqlSqlDetailAnalyse implements SqlDetailAnalyse{
2727

2828
@Override
2929
public boolean singleInsertAnalyse(String sql, Connection connection, Insert statement, ItemsList itemsList, String pk, int pkIndex) throws SQLException {

txlcn-tc/src/main/java/com/codingapi/txlcn/tc/jdbc/sql/analyse/SqlDetailAnalyse.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,9 @@
1313
import java.util.List;
1414
import java.util.Map;
1515

16+
/**
17+
* //todo 若作为各种数据库的适配的话应该还需要做其他的数据库的适配,这样的话还不能满足需求。
18+
*/
1619
public interface SqlDetailAnalyse {
1720

1821
/**
Lines changed: 11 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,8 @@
11
package com.codingapi.txlcn.tc.jdbc.sql.strategy;
22

3-
import com.google.common.collect.Maps;
4-
import org.springframework.context.annotation.Configuration;
5-
import org.springframework.util.StringUtils;
3+
import net.sf.jsqlparser.statement.Statement;
64

7-
import javax.annotation.PostConstruct;
8-
import java.util.Map;
5+
import java.util.List;
96

107
/**
118
* @author Gz.
@@ -15,17 +12,19 @@
1512

1613
public class AnalyseStrategryFactory {
1714

18-
private static Map<String, SqlSqlAnalyseHandler> strategyMap = Maps.newHashMap();
15+
private List<SqlSqlAnalyseHandler> analyseHandlers;
1916

20-
public static SqlSqlAnalyseHandler getInvokeStrategy(String name) {
21-
return strategyMap.get(name);
17+
public AnalyseStrategryFactory(List<SqlSqlAnalyseHandler> analyseHandlers) {
18+
this.analyseHandlers = analyseHandlers;
2219
}
2320

24-
public static void register(String name, SqlSqlAnalyseHandler handler) {
25-
if (StringUtils.isEmpty(name) || null == handler) {
26-
return;
21+
public SqlSqlAnalyseHandler getInvokeStrategy(String sqlType,Statement statement) {
22+
for(SqlSqlAnalyseHandler handler : analyseHandlers){
23+
if(handler.preAnalyse(sqlType,statement)){
24+
return handler;
25+
}
2726
}
28-
strategyMap.put(name, handler);
27+
return null;
2928
}
3029

3130
}

txlcn-tc/src/main/java/com/codingapi/txlcn/tc/jdbc/sql/strategy/MysqlAnalyseEnum.java

Lines changed: 0 additions & 18 deletions
This file was deleted.
Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,7 @@
11
package com.codingapi.txlcn.tc.jdbc.sql.strategy;
22

3-
import com.codingapi.txlcn.p6spy.common.StatementInformation;
43
import net.sf.jsqlparser.JSQLParserException;
54
import net.sf.jsqlparser.statement.Statement;
6-
import org.springframework.beans.factory.InitializingBean;
75

86
import java.sql.Connection;
97
import java.sql.SQLException;
@@ -13,7 +11,12 @@
1311
* @description: SQL分析则略接口
1412
* @date 2020-08-13 23:08:26
1513
*/
16-
public interface SqlSqlAnalyseHandler extends InitializingBean {
14+
public interface SqlSqlAnalyseHandler {
15+
16+
17+
String analyse(String sql, Connection connection, Statement stmt) throws JSQLParserException, SQLException;
18+
19+
20+
boolean preAnalyse(String sqlType,Statement stmt);
1721

18-
String mysqlAnalyseStrategy(String sql,Connection connection,Statement stmt) throws JSQLParserException, SQLException;
1922
}
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
package com.codingapi.txlcn.tc.jdbc.sql.strategy;
2+
3+
import com.codingapi.txlcn.tc.jdbc.sql.analyse.SqlDetailAnalyse;
4+
import com.codingapi.txlcn.tc.jdbc.sql.strategy.mysql.MysqlDeleteAnalyseStrategy;
5+
import com.codingapi.txlcn.tc.jdbc.sql.strategy.mysql.MysqlInsertAnalyseStrategy;
6+
import com.codingapi.txlcn.tc.jdbc.sql.strategy.mysql.MysqlUpdateAnalyseStrategy;
7+
import org.springframework.beans.factory.annotation.Autowired;
8+
import org.springframework.beans.factory.annotation.Configurable;
9+
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
10+
import org.springframework.context.annotation.Bean;
11+
12+
import java.util.List;
13+
14+
/**
15+
* @author lorne
16+
* @date 2020/9/17
17+
* @description
18+
*/
19+
@Configurable
20+
public class StrategyConfiguration {
21+
22+
@Bean
23+
public AnalyseStrategryFactory analyseStrategryFactory(@Autowired(required = false)List<SqlSqlAnalyseHandler> analyseHandlers){
24+
return new AnalyseStrategryFactory(analyseHandlers);
25+
}
26+
27+
@Bean
28+
@ConditionalOnMissingBean
29+
public SqlSqlAnalyseHandler mysqlInsertAnalyseStrategy(SqlDetailAnalyse sqlDetailAnalyse){
30+
return new MysqlInsertAnalyseStrategy(sqlDetailAnalyse);
31+
}
32+
33+
@Bean
34+
@ConditionalOnMissingBean
35+
public SqlSqlAnalyseHandler mysqlDeleteAnalyseStrategy(SqlDetailAnalyse sqlDetailAnalyse){
36+
return new MysqlDeleteAnalyseStrategy(sqlDetailAnalyse);
37+
}
38+
39+
@Bean
40+
@ConditionalOnMissingBean
41+
public SqlSqlAnalyseHandler mysqlUpdateAnalyseStrategy(SqlDetailAnalyse sqlDetailAnalyse){
42+
return new MysqlUpdateAnalyseStrategy(sqlDetailAnalyse);
43+
}
44+
45+
46+
}

0 commit comments

Comments
 (0)