@Autowired
private PlatformTransactionManager transactionManager;
@Transactional(value = "dw-transactionManager",propagation = Propagation.REQUIRED, rollbackForClassName = "Exception")
public void aaa() throws Exception {
List<String> objects = new ArrayList<>();
objects.add("1");
objects.add("2");
objects.add("3");
String insertSql = "-${tenantsid} INSERT INTO `test1`(`title`) VALUES (?);";
CountDownLatch mainThreadLatch = new CountDownLatch(objects.size());
CountDownLatch rollBackLatch = new CountDownLatch(1);
AtomicReference<Boolean> rollbackFlag = new AtomicReference<>(false);
for (String a : objects) {
ThreadUtil.getInstance().execute(() -> {
DefaultTransactionDefinition def = new DefaultTransactionDefinition();
def.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRES_NEW);
TransactionStatus status = transactionManager.getTransaction(def);
try {
dao.update(insertSql, a);
if (StringUtils.equals(a, "3")) {
int b = 1 / 0;
}
rollBackLatch.await();
if (rollbackFlag.get()) {
transactionManager.rollback(status);
} else {
transactionManager.commit(status);
}
} catch (Exception e) {
rollbackFlag.set(true);
rollBackLatch.countDown();
} finally {
mainThreadLatch.countDown();
}
});
}
mainThreadLatch.await();
rollBackLatch.countDown();
}