Skip to content

Commit 4262301

Browse files
committed
Merge remote-tracking branch 'origin/master'
2 parents 02ef8e7 + b4a7e8b commit 4262301

File tree

7 files changed

+58
-33
lines changed

7 files changed

+58
-33
lines changed

hsweb-system/hsweb-system-database-manager/hsweb-system-database-manager-api/src/main/java/org/hswebframework/web/database/manager/sql/TransactionSqlExecutor.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99

1010
public interface TransactionSqlExecutor {
1111
/**
12-
* 开启一个指定数据源的事务,并返回事务ID,在其他操作的时候,使用事务ID共享同一个事务
12+
* 开启一个指定默认数据源的事务,并返回事务ID,在其他操作的时候,使用事务ID共享同一个事务
1313
*
1414
* @param datasourceId 数据源ID {@link DynamicDataSource#getId()}
1515
* @return 事务ID

hsweb-system/hsweb-system-database-manager/hsweb-system-database-manager-simple/pom.xml

Lines changed: 0 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -17,23 +17,5 @@
1717
<artifactId>hsweb-system-database-manager-api</artifactId>
1818
<version>${project.version}</version>
1919
</dependency>
20-
21-
<dependency>
22-
<groupId>com.alibaba</groupId>
23-
<artifactId>druid</artifactId>
24-
<version>1.0.26</version>
25-
<scope>test</scope>
26-
</dependency>
27-
<dependency>
28-
<groupId>com.h2database</groupId>
29-
<artifactId>h2</artifactId>
30-
<scope>test</scope>
31-
</dependency>
32-
<dependency>
33-
<groupId>org.hswebframework.web</groupId>
34-
<artifactId>hsweb-tests</artifactId>
35-
<version>${project.version}</version>
36-
<scope>test</scope>
37-
</dependency>
3820
</dependencies>
3921
</project>

hsweb-system/hsweb-system-database-manager/hsweb-system-database-manager-simple/src/main/java/org/hswebframework/web/datasource/manager/simple/DefaultLocalTransactionExecutor.java

Lines changed: 18 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
import java.util.Queue;
1919
import java.util.concurrent.CountDownLatch;
2020
import java.util.concurrent.CyclicBarrier;
21+
import java.util.concurrent.TimeUnit;
2122
import java.util.function.Consumer;
2223
import java.util.stream.Collectors;
2324

@@ -46,7 +47,7 @@ public class DefaultLocalTransactionExecutor implements TransactionExecutor {
4647

4748
private TransactionTemplate transactionTemplate;
4849

49-
private boolean commit = false;
50+
private volatile boolean commit = false;
5051

5152
private volatile boolean running = false;
5253

@@ -95,10 +96,16 @@ protected void waitToClose() {
9596

9697
@Override
9798
public void rollback() {
98-
shutdown = true;
99+
tryRollback();
99100
waitToClose();
100101
}
101102

103+
private void tryRollback() {
104+
running = false;
105+
shutdown = true;
106+
commit = false;
107+
}
108+
102109
public void setSqlExecutor(SqlExecutor sqlExecutor) {
103110
this.sqlExecutor = sqlExecutor;
104111
}
@@ -124,13 +131,17 @@ public void run() {
124131
}
125132
while (!shutdown) {
126133
logger.debug("wait sql execute request {}", transactionId);
127-
waitToReady.await();//等待有新的sql进来
134+
if (transactionTemplate.getTimeout() > 0) {
135+
waitToReady.await(transactionTemplate.getTimeout(), TimeUnit.MILLISECONDS);//等待有新的sql进来
136+
} else {
137+
waitToReady.await();
138+
}
128139
waitToReady.reset();//重置,下一次循环继续等待
129140
//执行sql
130141
doExecute();
131142
}
132143
} catch (Exception e) {
133-
rollback();//回滚
144+
tryRollback();//回滚
134145
logger.error("execute sql error {}", transactionId, e);
135146
} finally {
136147
try {
@@ -175,8 +186,8 @@ protected void doExecute() {
175186
//通过回调返回执行结果
176187
execution.callback.accept(requests);
177188
} catch (Exception e) {
178-
rollback();
179189
execution.onError.accept(e);
190+
return;
180191
}
181192
}
182193
running = false;
@@ -194,7 +205,7 @@ public List<SqlExecuteResult> execute(SqlExecuteRequest request) throws Exceptio
194205
//异常信息
195206
Exception[] exceptions = new Exception[1];
196207
Execution execution = new Execution();
197-
execution.datasourceId=DataSourceHolder.switcher().currentDataSourceId();
208+
execution.datasourceId = DataSourceHolder.switcher().currentDataSourceId();
198209

199210
execution.request = request;
200211
execution.callback = sqlExecuteResults -> {
@@ -217,6 +228,7 @@ public List<SqlExecuteResult> execute(SqlExecuteRequest request) throws Exceptio
217228
//判断是否有异常
218229
Exception exception;
219230
if ((exception = exceptions[0]) != null) {
231+
rollback();
220232
throw exception;
221233
}
222234
return results;

hsweb-system/hsweb-system-database-manager/hsweb-system-database-manager-starter/pom.xml

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,5 +22,23 @@
2222
<artifactId>hsweb-system-database-manager-web</artifactId>
2323
<version>${project.version}</version>
2424
</dependency>
25+
26+
<dependency>
27+
<groupId>com.alibaba</groupId>
28+
<artifactId>druid</artifactId>
29+
<version>1.0.26</version>
30+
<scope>test</scope>
31+
</dependency>
32+
<dependency>
33+
<groupId>com.h2database</groupId>
34+
<artifactId>h2</artifactId>
35+
<scope>test</scope>
36+
</dependency>
37+
<dependency>
38+
<groupId>org.hswebframework.web</groupId>
39+
<artifactId>hsweb-tests</artifactId>
40+
<version>${project.version}</version>
41+
<scope>test</scope>
42+
</dependency>
2543
</dependencies>
2644
</project>
Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@
88
import org.hswebframework.web.tests.SimpleWebApplicationTests;
99
import org.junit.Test;
1010
import org.springframework.beans.factory.annotation.Autowired;
11+
import org.springframework.context.annotation.ComponentScan;
12+
import org.springframework.context.annotation.Configuration;
1113

1214
import java.sql.SQLException;
1315
import java.util.Arrays;
@@ -58,7 +60,7 @@ public void testExecuteSql() throws Exception {
5860
countDownLatch.await();
5961

6062
sqlInfo = new SqlInfo();
61-
sqlInfo.setSql("select * from t_test");
63+
sqlInfo.setSql("select * from t_test ");
6264
sqlInfo.setType("select");
6365

6466
request.setSql(Arrays.asList(sqlInfo));
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ spring:
99
driver-class-name : org.h2.Driver
1010
hsweb:
1111
app:
12-
name: 数据字典测试
12+
name: 数据库管理测试
1313
version: 3.0.0
1414
logging:
1515
level:

hsweb-system/hsweb-system-database-manager/hsweb-system-database-manager-web/src/main/java/org/hswebframework/web/database/manager/web/DataBaseManagerController.java

Lines changed: 17 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -56,9 +56,8 @@ public ResponseMessage<List<SqlExecuteResult>> execute(
5656
@PathVariable @ApiParam("数据源ID") String datasourceId,
5757
@RequestBody @ApiParam("SQL脚本") String sqlLines) throws Exception {
5858

59-
DataSourceHolder.switcher().use(datasourceId);
6059
return ResponseMessage.ok(databaseManagerService.execute(SqlExecuteRequest.builder()
61-
.sql(parseSql(sqlLines))
60+
.sql(parseSql(sqlLines,datasourceId))
6261
.build()));
6362

6463
}
@@ -70,7 +69,7 @@ public ResponseMessage<List<SqlExecuteResult>> execute(@RequestBody
7069
@ApiParam("SQL脚本") String sqlLines) throws Exception {
7170
return ResponseMessage.ok(databaseManagerService
7271
.execute(SqlExecuteRequest.builder()
73-
.sql(parseSql(sqlLines))
72+
.sql(parseSql(sqlLines,null))
7473
.build()));
7574
}
7675

@@ -80,7 +79,18 @@ public ResponseMessage<List<SqlExecuteResult>> execute(@RequestBody
8079
public ResponseMessage<List<SqlExecuteResult>> executeTransactional(@PathVariable @ApiParam("事务ID") String transactionalId,
8180
@ApiParam("SQL脚本") @RequestBody String sqlLines) throws Exception {
8281
return ResponseMessage.ok(databaseManagerService.execute(transactionalId, SqlExecuteRequest.builder()
83-
.sql(parseSql(sqlLines))
82+
.sql(parseSql(sqlLines,null))
83+
.build()));
84+
}
85+
86+
@PostMapping(value = "/transactional/execute/{transactionalId}/{dataSourceId}", consumes = MediaType.TEXT_PLAIN_VALUE)
87+
@Authorize(action = "execute", description = "执行SQL")
88+
@ApiOperation(value = "开启事务执行指定数据源对SQL")
89+
public ResponseMessage<List<SqlExecuteResult>> executeTransactional(@PathVariable @ApiParam("事务ID") String transactionalId,
90+
@PathVariable @ApiParam("数据源ID") String dataSourceId,
91+
@ApiParam("SQL脚本") @RequestBody String sqlLines) throws Exception {
92+
return ResponseMessage.ok(databaseManagerService.execute(transactionalId, SqlExecuteRequest.builder()
93+
.sql(parseSql(sqlLines,dataSourceId))
8494
.build()));
8595
}
8696

@@ -91,6 +101,7 @@ public ResponseMessage<String> newTransaction() throws Exception {
91101
return ResponseMessage.ok(databaseManagerService.newTransaction());
92102
}
93103

104+
94105
@GetMapping("/transactional")
95106
@Authorize(action = "execute", description = "执行SQL")
96107
@ApiOperation("获取全部事务信息")
@@ -114,12 +125,12 @@ public ResponseMessage<String> rollbackTransaction(@PathVariable String id) thro
114125
return ResponseMessage.ok();
115126
}
116127

117-
private List<SqlInfo> parseSql(String sqlText) {
128+
private List<SqlInfo> parseSql(String sqlText,String datasourceId) {
118129
List<String> sqlList = Sqls.parse(sqlText);
119130
return sqlList.stream().map(sql -> {
120131
SqlInfo sqlInfo = new SqlInfo();
121132
sqlInfo.setSql(sql);
122-
sqlInfo.setDatasourceId(DataSourceHolder.switcher().currentDataSourceId());
133+
sqlInfo.setDatasourceId(datasourceId);
123134
sqlInfo.setType(sql.split("[ ]")[0].toLowerCase());
124135
return sqlInfo;
125136
}).collect(Collectors.toList());

0 commit comments

Comments
 (0)