我正在探索Ignite事务缓存。我已经有一段代码,它使用JDBC的Spring事务管理。我想使用Spring缓存抽象在代码中集成点火事务缓存。
我遇到了SpringTransactionManager(由Ignite提供),但我无法找到正确的使用方法。基本上,我想做一些事情:
@Transactional
@Cacheable(cacheNames="personcache", key="#person.id", unless="#result == null")
public Person create(Person person) {
String queryPerson = "insert into Person (id, name) values (?,?)";
JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
jdbcTemplate.update(queryPerson, new Object[] { person.getId(), person.getName() });
System.out.println("Inserted into Person Table Successfully");
return person;
}
当事务提交时,数据库和缓存应该一起提交。为此,Ignite文档提到了SpringTransactionManager https://www.gridgain.com/sdk/pe/latest/javadoc/org/apache/ignite/transactions/spring/SpringTransactionManager.html的使用。
我不确定如何将此事务管理器与Spring的DriverManagerDataSource一起插入https://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/jdbc/datasource/DriverManagerDataSource.html
有人可以指导我吗?一个例子会有很大帮助。 谢谢!
答案 0 :(得分:2)
如果您向Spring提供SpringTransactionManager
,它将围绕使用@Transactional
注释的方法创建一个Ignite事务。首先,我相信在这种情况下甚至不会启动数据库事务。即使它确实如此,它也将独立于Ignite的那个。
我看到两个选项来解决这个问题:
JtaTransactionManager
。@Cacheable
[2] [3]集成Ignite和DB,而不是CacheStore
,并使用直写。在这种情况下,Ignite将负责事务一致性。[1] https://apacheignite.readme.io/docs/transactions#integration-with-jta