spring多线程使用同一个事务
DataSource dataSource = transactionManager.getDataSource();
TransactionStatus status = transactionManager.getTransaction(null);
Future<?> future = executorService.submit(() -> {
Object transaction = ((DefaultTransactionStatus) status).getTransaction();
try {
Field field = transaction.getClass().getSuperclass().getDeclaredField("connectionHolder");
field.setAccessible(true);
Object object = field.get(transaction);
TransactionSynchronizationManager.bindResource(dataSource, object);
} catch (Exception e) {
throw new RuntimeException(e);
}
transactionManager.getTransaction(null);
TransactionSynchronizationManager.unbindResource(Objects.requireNonNull(transactionManager.getDataSource()));
TransactionSynchronizationManager.clear();
});
future.get();
transactionManager.rollback(status);