我在独立的 JBoss AS7 中创建了一个 REST API,使用 hibernate 作为 JPA 提供程序,使用 Infinispan 作为二级缓存。
我在https://docs.jboss.org/author/display/ISPN/Write-Through+And+Write-Behind+Caching中看到过Infinispan 可以使用 write-behind 方法,将数据从缓存异步保存到数据库,这是我的项目所需要的。
我想启用此功能,但我找不到如何操作的地方。
如果有帮助,我可以解释为什么我需要这种行为。我有一个名为 Stat 的实体类。 在该类(class)中,我有一个 int 余额值,例如:
@Entity
public class Stat{
private int balance;
}
其中一个 REST 方法会同时访问该余额,从中减去一并在数据库中更新它。 这在项目中造成了瓶颈,因为许多线程尝试获取锁来读取数据库余额并将其更新到数据库。
因此,我认为我可以使用 Infinispan 来更新内存中的余额,并让 Infinispan 将更改异步保存到数据库中。
任何帮助将不胜感激。
最佳答案
据我所知,没有任何属性可以传递给 JPA 配置或 Hibernate 配置来启用此功能(可以找到 hibernate 的属性列表 here )。
您需要创建自己的 infinispan xml 配置文件(可能复制 this ),使用您想要从 inifnispan configuration 获取的属性创建一个新的namedCache。您给出的,然后在 JPA 或 hibernate 配置中添加“hibernate.cache.infinispan.cfg”属性以及新配置 xml 的位置。
您还需要通过将以下属性添加到 hibernate 或 JPA 配置来更改用于 Stat 实体的缓存:
<property name="hibernate.cache.infinispan.com.package.Stat.cfg" value="yourNewNamedCache"/>
关于java - 如何在JBoss AS7中使用hibernate-infinispan的write Behind方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13646728/