Spring boot 在Spring Boot应用程序中正确使用Hazelcast事务映射
我正在研究Hazelcast事务性地图的概念验证。为了实现这一点,我正在编写一个SpringBoot应用程序,并使用Atomikos作为我的JTA/XA实现 此应用程序必须更新事务映射,还必须通过在同一事务中插入新行来更新数据库表 我正在使用JPA/SpringData/Hibernate来处理数据库 因此,该应用程序有一个组件(用@component注释的JAVA类),该组件有一个名为agregar()的方法(西班牙语中的add)。此方法用@Transactional(org.springframework.transaction.annotation.Transactional)注释 该方法必须作为一个单元执行两个任务:首先必须更新从Hazelcast实例检索到的TransactionalMap,其次必须使用从JpaRepository(org.springframework.data.jpa.repository.JpaRepository)扩展的存储库更新数据库表 这是我写的代码:Spring boot 在Spring Boot应用程序中正确使用Hazelcast事务映射,spring-boot,hazelcast,spring-transactions,jta,atomikos,Spring Boot,Hazelcast,Spring Transactions,Jta,Atomikos,我正在研究Hazelcast事务性地图的概念验证。为了实现这一点,我正在编写一个SpringBoot应用程序,并使用Atomikos作为我的JTA/XA实现 此应用程序必须更新事务映射,还必须通过在同一事务中插入新行来更新数据库表 我正在使用JPA/SpringData/Hibernate来处理数据库 因此,该应用程序有一个组件(用@component注释的JAVA类),该组件有一个名为agregar()的方法(西班牙语中的add)。此方法用@Transactional(org.springfr
@Transactional
public void agregar() throws NotSupportedException, SystemException, IllegalStateException, RollbackException, SecurityException, HeuristicMixedException, HeuristicRollbackException, SQLException {
logger.info("AGRENADO AL MAPA ...");
HazelcastXAResource xaResource = hazelcastInstance.getXAResource();
UserTransactionManager tm = new UserTransactionManager();
tm.begin();
Transaction transaction = tm.getTransaction();
transaction.enlistResource(xaResource);
TransactionContext context = xaResource.getTransactionContext();
TransactionalMap<TaskKey, TaskQueue> mapTareasDiferidas = context.getMap("TAREAS-DIFERIDAS");
TaskKey taskKey = new TaskKey(1L);
TaskQueue taskQueue = mapTareasDiferidas.get(taskKey);
Integer numero = 4;
Task<Integer> taskFactorial = new TaskImplFactorial(numero);
taskQueue = new TaskQueue();
taskQueue.getQueue().add(taskFactorial);
mapTareasDiferidas.put(taskKey, taskQueue);
transaction.delistResource(xaResource, XAResource.TMSUCCESS);
tm.commit();
logger.info("AGRENADO A LA TABLA ...");
PaisEntity paisEntity = new PaisEntity(100, "ARGENTINA", 10);
paisRepository.save(paisEntity);
}
@Transactional
public void agregar()抛出NotSupportedException、SystemException、IllegalStateException、RollbackException、SecurityException、HeuristicMixedException、HeuristicRollbackException、SQLException{
logger.info(“AGRENADO AL-MAPA…”);
HazelcastXAResource=hazelcastInstance.getXAResource();
UserTransactionManager tm=新的UserTransactionManager();
tm.begin();
Transaction=tm.getTransaction();
事务。登记资源(xaResource);
TransactionContext=xaResource.getTransactionContext();
TransactionalMapTareasDiferidas=context.getMap(“TAREAS-DIFERIDAS”);
TaskKey TaskKey=新TaskKey(1L);
TaskQueue TaskQueue=mapTareasDiferidas.get(taskKey);
整数numero=4;
Task taskFactorial=新taskFactorial(numero);
taskQueue=新建taskQueue();
taskQueue.getQueue().add(taskFactorial);
mapTareasDiferidas.put(taskKey,taskQueue);
delistResource(xaResource,xaResource.TMSUCCESS);
tm.commit();
logger.info(“AGRENADO A LA TABLA…”);
两性平等=新两性平等(100,“阿根廷”,10);
paisRepository.save(paisEntity);
}
这段代码正在工作:如果其中一个任务引发异常,那么这两个任务都将回滚
我的问题是:
提前感谢最后我意识到我必须注入“UserTransactionManager”对象并从中获取事务 还需要使用JTA/XA实现。我选择了必须在MS SQL Server中启用Atomikos和XA事务
工作示例可在atomikos数据源mssql分支的Github上找到。最后,我意识到必须注入“UserTransactionManager”对象并从中获取事务 还需要使用JTA/XA实现。我选择了必须在MS SQL Server中启用Atomikos和XA事务
工作示例可从atomikos数据源mssql分支的Github获得。从Hazelcast 3.7开始,您可以去掉样板代码,使用
HazelcastTransactionManager
提交或回滚事务,这是一个PlatformTransactionManager
实现,将与Spring事务API一起使用。
你可以找到例子
此外,Hazelcast可以参与与Atomikos的XA事务
谢谢从Hazelcast 3.7开始,您可以使用
HazelcastTransactionManager
摆脱用于开始、提交或回滚事务的样板代码,这是一个与Spring事务API一起使用的PlatformTransactionManager
实现。
你可以找到例子
此外,Hazelcast可以参与与Atomikos的XA事务
谢谢我已更新到Hazelcast 3.7.5,并向HazelcastConfig类添加了以下代码
@Configuration
public class HazelcastConfig {
...
@Bean
public HazelcastInstance getHazelcastInstance() {
....
}
@Bean
public HazelcastTransactionManager getTransactionManager() {
HazelcastTransactionManager transactionManager = new HazelcastTransactionManager(getHazelcastInstance());
return transactionManager;
}
@Bean
public ManagedTransactionalTaskContext getTransactionalContext() {
ManagedTransactionalTaskContext transactionalContext = new ManagedTransactionalTaskContext(getTransactionManager());
return transactionalContext;
}
当我运行应用程序时,会出现以下异常:
org.springframework.beans.factory.noSuchBean定义异常:否
名为“transactionManager”的bean可用:不匹配
找到限定符的PlatformTransactionManager bean
“transactionManager”-既不匹配限定符也不匹配bean名称
代码可在Github的一个新分支上获得:atomikos-datasource-mssql-hz37
提前感谢我已更新到Hazelcast 3.7.5,并向HazelcastConfig类添加了以下代码
@Configuration
public class HazelcastConfig {
...
@Bean
public HazelcastInstance getHazelcastInstance() {
....
}
@Bean
public HazelcastTransactionManager getTransactionManager() {
HazelcastTransactionManager transactionManager = new HazelcastTransactionManager(getHazelcastInstance());
return transactionManager;
}
@Bean
public ManagedTransactionalTaskContext getTransactionalContext() {
ManagedTransactionalTaskContext transactionalContext = new ManagedTransactionalTaskContext(getTransactionManager());
return transactionalContext;
}
当我运行应用程序时,会出现以下异常:
org.springframework.beans.factory.noSuchBean定义异常:否
名为“transactionManager”的bean可用:不匹配
找到限定符的PlatformTransactionManager bean
“transactionManager”-既不匹配限定符也不匹配bean名称
代码可在Github的一个新分支上获得:atomikos-datasource-mssql-hz37
提前感谢您使用的是哪个版本的Hazelcast?嵌入Spring Boot 1.4.5的Hazelcast 3.6.7是哪个版本的Hazelcast?嵌入Spring Boot 1.4.5的Hazelcast 3.6.7我已更新为Hazelcast 3.7.5,但在atomikos集成和Hazelcast ManagedTransactionalTaskContext方面仍然存在问题。你能帮我一下吗?我将发布更多详细信息作为回答。我已经更新到Hazelcast 3.7.5,但在atomikos集成和Hazelcast ManagedTransactionalTaskContext方面仍然存在问题。你能帮我一下吗?我将发布更多细节作为答案。类路径中有hazelcast spring jar吗?有。它是在pom.xml中声明的。在类路径中是否有hazelcast spring jar?是的。它在pom.xml中声明