在我的ActiveMQ配置中,我希望将默认的DB锁事务隔离级别更改为TRANSACTION_REPEATABLE_READ。
API文档写道:
public void setTransactionIsolation(int transactionIsolation)将事务隔离级别设置为TRANSACTION_READ_UNCOMMITTED允许的脏隔离级别在集群DB环境中可能无法实现,因此可能需要一个更严格和更昂贵的选项,例如TRANSACTION_REPEATABLE_READ,请参阅Connection中的隔离级别常量。
在XML配置中,jdbcPersistenceAdapter的transactionIsolation属性只接受整数类型的值,因此不能直接使用Connection.TRANSACTION_REPEATABLE_READ常量,而只能使用价值(4):
<persistenceAdapter>
<jdbcPersistenceAdapter dataDirectory="${activemq.data}" dataSource="#mysql-ds" transactionIsolation="4" lockKeepAlivePeriod="5000">
<locker>
<lease-database-locker lockAcquireSleepInterval="10000"/>
</locker>
</jdbcPersistenceAdapter>
</persistenceAdapter>有没有办法,我可以指定常量,而不是硬编码数字"4"?
由于ActiveMQ是基于Spring的,我想我可以尝试通过使用来分配它,但是却找不到如何去做.
发布于 2013-10-01 08:35:51
试着那样:
<util:constant id="transactionType" static-field="java.sql.Connection.TRANSACTION_REPEATABLE_READ" />编辑:
问题不在春季,而是在中:
<xs:attribute name="transactionIsolation" type="xs:integer">因此,除了硬编码int之外,它不接受任何其他值--您可以在这里尝试put属性占位符:
transactionIsolation="#{myproperty}"但我不确定这是否有效。
解决这个问题的方法是通过纯spring (bean id=...)配置activemq,而不使用专用的amq标记。EDIT2:这里有带有纯spring标记的示例配置,http://activemq.apache.org/jms-and-jdbc-operations-in-one-transaction.html
https://stackoverflow.com/questions/19111038
复制相似问题