有没有办法将infinispan缓存存储中的缓存对象持久保存到关系数据库表?我试图将其作为缓存加载器。
<loader class="org.infinispan.loaders.jdbc.stringbased.JdbcStringBasedCacheStore" fetchPersistentState="true" ignoreModifications="false" purgeOnStartup="false">
<properties>
<property name="stringsTableNamePrefix" value="ISPN_STRING_TABLE"/>
<property name="idColumnName" value="ID_COLUMN"/>
<property name="dataColumnName" value="DATA_COLUMN"/>
<property name="timestampColumnName" value="TIMESTAMP_COLUMN"/>
<property name="timestampColumnType" value="BIGINT"/>
<property name="connectionFactoryClass" value="org.infinispan.loaders.jdbc.connectionfactory.PooledConnectionFactory"/>
<property name="connectionUrl" value="jdbc:derby://localhost:1527/DB;create=true"/>
<property name="userName" value="user"/>
<property name="password" value="password"/>
<property name="driverClass" value="org.apache.derby.jdbc.ClientDriver"/>
<property name="idColumnType" value="VARCHAR(255)"/>
<property name="dataColumnType" value="BLOB"/>
<property name="dropTableOnExit" value="false"/>
<property name="createTableOnStart" value="true"/>
</properties>
</loader>
From此键和值存储在ISPN_STRING_TABLE_TEST_STORE中,其中<
namedCache name =“TEST_STORE”&gt;。它将ID列中的键和DATA_COLUMN中的值保存为Blob.I希望将此Blob包含数据放入关系数据库(非对象)。例如,当我在Cache中放置一个Employee对象时,它应该将数据库表作为一个具有emplyee属性的员工表作为该表中的字段。(Emp Name,Age ..等)。有没有办法做到这一点?
答案 0 :(得分:3)
Infinispan Data Grid Platform Book中有一个例子,它描述了如何使用MySQL作为关系数据库配置 JdbcStringBasedCacheStore 。在此示例中,在连接URL中使用了数据源,但要使其适应您的需求并不困难。希望它有所帮助。
此致
<loaders>
<loader
class="org.infinispan.loaders.jdbc.stringbased.JdbcStringBasedCacheStore"
fetchPersistentState="true" ignoreModifications="false"
purgeOnStartup="false">
<properties>
<property name="stringsTableNamePrefix" value="ISPN_STRING_TABLE" />
<property name="idColumnName" value="ID_COLUMN" />
<property name="idColumnType" value="VARCHAR(255)" />
<property name="dataColumnName" value="DATA_COLUMN" />
<property name="dataColumnType" value="TRUE" />
<property name="timestampColumnName" value="TIMESTAMP_COLUMN" />
<property name="timestampColumnType" value="BIGINT" />
<property name="connectionFactoryClass"
value="org.infinispan.loaders.jdbc.
connectionfactory.PooledConnectionFactory" />
<property name="connectionUrl" value="java:jboss/datasources/MySQLDS" />
<property name="userName" value="xxxx" />
<property name="password" value="xxxx" />
<property name="driverClass" value="com.mysql.jdbc.Driver" />
<property name="dropTableOnExit" value="true" />
<property name="createTableOnStart" value="true" />
</properties>
</loader>
</loaders>
答案 1 :(得分:2)
事情似乎发生了变化。这似乎适用于Infinispan 5.2和5.3。
<loaders [...]>
<stringKeyedJdbcStore
xmlns="urn:infinispan:config:jdbc:5.2"
fetchPersistentState="false"
ignoreModifications="false"
purgeOnStartup="false">
<dataSource jndiUrl="java:jboss/datasources/MySQLDS" />
<!--
<connectionPool connectionUrl="jdbc:mysql://[host][:port]/[database]"
username="xxxx"
password="xxxx"
driverClass="com.mysql.jdbc.Driver"/>
-->
<stringKeyedTable dropOnExit="true"
createOnStart="true"
prefix="ISPN_STRING_TABLE">
<idColumn name="ID_COLUMN" type="VARCHAR(255)" />
<dataColumn name="DATA_COLUMN" type="BINARY" />
<timestampColumn name="TIMESTAMP_COLUMN" type="BIGINT" />
</stringKeyedTable>
</stringKeyedJdbcStore>
</loaders>
使用xmlns urn:infinispan:config:jdbc:5.2
(链接上的schemaLocation)