我在为infinispan配置jdbc-store时遇到了一些问题。 我已使用此配置定义了本地缓存:
<cache-container name="MyCacheContainer">
<local-cache name="MyCache">
<expiration max-idle="60000" interval="6000"/>
</local-cache>
</cache-container>
我需要保留缓存,所以我尝试使用jdbc-store,使用此数据源
<datasource jta="true" jndi-name="java:jboss/datasources/MyDS" pool-name="MyDS" enabled="true" use-ccm="true">
<connection-url>jdbc:h2:file:${jboss.server.data.dir}/db;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE</connection-url>
<driver-class>org.h2.Driver</driver-class>
<driver>h2</driver>
<security>
<user-name>abc</user-name>
<password>abc</password>
</security>
</datasource>
当我尝试在wildfly Web控制台中配置jdbc-store时出现此错误:
Internal Server Error
{
"outcome" => "failed",
"result" => {"step-1" => undefined},
"failure-description" => "JBAS014883: No resource definition is registered for address [
(\"subsystem\" => \"infinispan\"),
(\"cache-container\" => \"MyCacheContainer\"),
(\"local-cache\" => \"MyCache\"),
(\"jdbc-store\" => \"JDBC_STORE\")
]",
"rolled-back" => true
}
如果我手动编辑standalone.xml,添加此配置
<cache-container name="MyCacheContainer">
<local-cache name="MyCache">
<expiration max-idle="60000" interval="6000"/>
<string-keyed-jdbc-store preload="false" passivation="false" purge="false" datasource="java:jboss/datasources/MyDS"/>
</local-cache>
</cache-container>
我在db上有常规的高速缓存序列化,但是它没有按预期工作,因为数据每60000毫秒从db(而不是从内存)中删除,无论它们是否空闲。因此,如果我重新启动wildfly,则缓存为空。 此外我注意到web控制台仍然说在disableb中的jdbc-store,如果我使用文件存储而不是jdbc-store一切正常,所以我怀疑我的配置中存在一些问题。
答案 0 :(得分:0)
关于standalone.xml中的手动配置 - 您必须这样做,Infinispan应该知道哪个缓存(通常情况下)应该持久存储到此存储中?
关于最大空闲超时:你是对的,这是意料之外的。当条目持久存储到DB中时,将在那里写入到期日期。但是,当您读取条目时,此时间戳不会更新 - 然后,当触发数据库清除时,也会删除这些条目。
我认为没有任何简单的解决办法,但我想知道如何使用SingleFileStore。