因为有很多天,我试图让一个Hazelcast MapStore与一个jparepository一起工作,但是我不能使它工作,因为我不能创建一个事务:
org.springframework.dao.InvalidDataAccessApiUsageException: no transaction is in progress; nested exception is javax.persistence.TransactionRequiredException: no transaction is in progress
我知道MapStore不参与文档中所述的Spring事务,但是如果需要,我希望显式地创建另一个事务。我试过了
TransactionTemplate
或
PlateformTransactioManager
但似乎没有效果:
@Autowired
private UuidSpringDataJpaRepository uuidSpringDataJpaRepository;
@Autowired
private PlatformTransactionManager platformTransactionManager;
...
@Override
public void storeAll(Map<String, V> map) {
LOGGER.info("[{}, {}] storeAll: {}", tenant, cacheType, map);
ClientDatabaseContextHolder.setTenantName(tenant);
try {
TransactionTemplate txTemplate = new TransactionTemplate(platformTransactionManager);
txTemplate.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRES_NEW);
txTemplate.execute(new TransactionCallbackWithoutResult() {
@Override
protected void doInTransactionWithoutResult(TransactionStatus status) {
for (Entry<String, V> entry : map.entrySet()) {
storeUuidEntity(entry.getKey(), entry.getValue());
}
uuidSpringDataJpaRepository.flush();
}
});
} finally {
ClientDatabaseContextHolder.removeTenantName();
}
}
我已经看到一些例子,比如
this
所以这可能是可行的,我想?
谢谢你的帮助。