Skip to content

Commit e4934c9

Browse files
committed
txc fix
1 parent c459206 commit e4934c9

22 files changed

Lines changed: 296 additions & 25 deletions

File tree

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
#spring.cloud.consul.discovery.health-check-url=http://127.0.0.1:${server.port}/actuator/health
2+
spring.datasource.password=123456
3+
4+
spring.datasource.hikari.maximum-pool-size=5
5+
6+
tx-lcn.logger.enabled=true
7+

example/spring-demo-d/src/main/java/com/codingapi/example/demod/SpringDApplication.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,5 +16,6 @@ public class SpringDApplication {
1616

1717
public static void main(String[] args) {
1818
SpringApplication.run(SpringDApplication.class, args);
19+
1920
}
2021
}

example/spring-demo-d/src/main/java/com/codingapi/example/demod/service/impl/DemoServiceImpl.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ public class DemoServiceImpl implements DemoService {
3131

3232
@Override
3333
@TxcTransaction(dtxp = DTXPropagation.SUPPORTS)
34+
@Transactional
3435
public String rpc(String value) {
3536
Demo demo = new Demo();
3637
demo.setCreateTime(new Date());
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
#spring.cloud.consul.discovery.health-check-url=http://127.0.0.1:${server.port}/actuator/health
2+
spring.datasource.password=123456
3+
4+
spring.datasource.hikari.maximum-pool-size=5
5+
6+
tx-lcn.logger.enabled=true
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
#spring.cloud.consul.discovery.health-check-url=http://127.0.0.1:${server.port}/actuator/health
2+
spring.datasource.password=123456
3+
4+
spring.datasource.hikari.maximum-pool-size=5
5+
6+
tx-lcn.logger.enabled=true

tx-client/pom.xml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,12 @@
7171
<artifactId>spring-tx</artifactId>
7272
<scope>provided</scope>
7373
</dependency>
74+
<dependency>
75+
<groupId>org.springframework</groupId>
76+
<artifactId>spring-jdbc</artifactId>
77+
<version>RELEASE</version>
78+
<scope>compile</scope>
79+
</dependency>
7480

7581
</dependencies>
7682

tx-client/src/main/java/com/codingapi/tx/client/TxClientConfiguration.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ public TxcSettingFactory txcSettingFactory() {
3939
return new DefaultTxcSettingFactory();
4040
}
4141

42+
4243
@Bean
4344
public SmartInitializingSingleton dtxCheckingTransactionCleanTemplateAdapter(DTXChecking dtxChecking,
4445
TransactionCleanTemplate transactionCleanTemplate) {

tx-client/src/main/java/com/codingapi/tx/client/spi/transaction/txc/control/TxcRunningTransaction.java

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,15 @@
33
import com.codingapi.tx.client.bean.DTXLocal;
44
import com.codingapi.tx.client.bean.TxTransactionInfo;
55
import com.codingapi.tx.client.spi.transaction.txc.resource.def.TxcService;
6+
import com.codingapi.tx.client.support.message.TxMangerReporter;
67
import com.codingapi.tx.client.support.separate.TXLCNTransactionControl;
78
import com.codingapi.tx.client.support.common.template.TransactionCleanTemplate;
89
import com.codingapi.tx.client.support.common.template.TransactionControlTemplate;
910
import com.codingapi.tx.client.spi.transaction.txc.resource.def.bean.RollbackInfo;
1011
import com.codingapi.tx.commons.exception.TransactionClearException;
1112
import com.codingapi.tx.commons.exception.TxClientException;
1213
import com.codingapi.tx.commons.exception.TxcLogicException;
14+
import com.codingapi.tx.logger.TxLogger;
1315
import lombok.extern.slf4j.Slf4j;
1416
import org.springframework.beans.factory.annotation.Autowired;
1517
import org.springframework.stereotype.Component;
@@ -30,6 +32,11 @@ public class TxcRunningTransaction implements TXLCNTransactionControl {
3032

3133
private final TransactionControlTemplate transactionControlTemplate;
3234

35+
@Autowired
36+
private TxMangerReporter txMangerReporter;
37+
38+
@Autowired
39+
private TxLogger txLogger;
3340

3441
@Autowired
3542
public TxcRunningTransaction(TxcService txcService,
@@ -71,7 +78,15 @@ public void onBusinessCodeSuccess(TxTransactionInfo info, Object result) throws
7178
txcService.writeUndoLog(
7279
info.getGroupId(), info.getUnitId(), (RollbackInfo) DTXLocal.cur().getAttachment());
7380
} catch (TxcLogicException e) {
74-
throw new TxClientException(e);
81+
//执行回滚处理。(启用备用连接池的方式)
82+
try {
83+
RollbackInfo rollbackInfo = (RollbackInfo) DTXLocal.cur().getAttachment();
84+
txLogger.trace(info.getGroupId(), info.getUnitId(), "txc", "exception rollbackInfo sql " + rollbackInfo.toString());
85+
txcService.undoRollbackInfo(rollbackInfo);
86+
} catch (TxcLogicException e1) {
87+
txMangerReporter.reportTxcRollbackException(info.getGroupId(), info.getUnitId());
88+
}
89+
throw new TxClientException("txc rollback fail.");
7590
}
7691
// 加入事务组
7792
transactionControlTemplate.joinGroup(info.getGroupId(), info.getUnitId(), info.getTransactionType(),

tx-client/src/main/java/com/codingapi/tx/client/spi/transaction/txc/resource/TxcServiceImpl.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -225,4 +225,13 @@ public void undo(String groupId, String unitId) throws TxcLogicException {
225225
DTXLocal.undoProxyStatus();
226226
}
227227
}
228+
229+
@Override
230+
public void undoRollbackInfo(RollbackInfo rollbackInfo) throws TxcLogicException {
231+
try {
232+
txcSqlExecutor.undoRollbackInfoSql(rollbackInfo);
233+
} catch (SQLException e) {
234+
throw new TxcLogicException(e);
235+
}
236+
}
228237
}

tx-client/src/main/java/com/codingapi/tx/client/spi/transaction/txc/resource/TxcSqlExecutorImpl.java

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import com.codingapi.tx.client.spi.transaction.txc.resource.def.TxcSqlExecutor;
44
import com.codingapi.tx.client.spi.transaction.txc.resource.def.bean.*;
5+
import com.codingapi.tx.client.spi.transaction.txc.resource.init.TxcExceptionConnectionPool;
56
import com.codingapi.tx.client.spi.transaction.txc.resource.init.TxcSettingFactory;
67
import com.codingapi.tx.client.spi.transaction.txc.resource.rs.UpdateSqlPreDataHandler;
78
import com.codingapi.tx.client.spi.transaction.txc.resource.util.SqlUtils;
@@ -36,6 +37,9 @@ public class TxcSqlExecutorImpl implements TxcSqlExecutor {
3637

3738
private final TxLogger txLogger;
3839

40+
@Autowired
41+
private TxcExceptionConnectionPool txcExceptionConnectionPool;
42+
3943
@Autowired
4044
public TxcSqlExecutorImpl(QueryRunner queryRunner, TxcSettingFactory txcSettingFactory, TxLogger txLogger) {
4145
this.queryRunner = queryRunner;
@@ -179,6 +183,25 @@ public void applyUndoLog(String groupId, String unitId) throws SQLException {
179183
}
180184
}
181185

186+
@Override
187+
public void undoRollbackInfoSql(RollbackInfo rollbackInfo) throws SQLException {
188+
Connection connection = txcExceptionConnectionPool.getConnection();
189+
try {
190+
connection.setAutoCommit(false);
191+
for (StatementInfo statementInfo : rollbackInfo.getRollbackSqlList()) {
192+
log.debug("txc > Apply undo log. sql: {}, params: {}", statementInfo.getSql(), statementInfo.getParams());
193+
queryRunner.update(connection, statementInfo.getSql(), statementInfo.getParams());
194+
}
195+
connection.commit();
196+
197+
}finally {
198+
try {
199+
DbUtils.close(connection);
200+
} catch (SQLException ignored) {
201+
}
202+
}
203+
}
204+
182205
@Override
183206
public void clearUndoLog(String groupId, String unitId) throws SQLException {
184207
log.debug("txc > clear undo log. groupId: {}, unitId: {}", groupId, unitId);

0 commit comments

Comments
 (0)