1

在我的 ActiveMQ 配置中,我想将默认的数据库锁事务隔离级别更改为TRANSACTION_REPEATABLE_READ.

API 文档写道:

public void setTransactionIsolation(int transactionIsolation)

将事务隔离级别设置为其他 TRANSACTION_READ_UNCOMMITTED值 在集群数据库环境中可能无法实现允许的脏隔离级别,因此可能需要更严格和更昂贵的选项,例如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 的,我想我可以尝试通过使用<util:constant>以某种方式分配它,但找不到如何去做......

4

1 回答 1

0

试试这样:

<util:constant id="transactionType" static-field="java.sql.Connection.TRANSACTION_REPEATABLE_READ" />

编辑:

问题不在 spring 中,而是在 activemq XML Schema 中:

<xs:attribute name="transactionIsolation" type="xs:integer">

所以它不会接受除硬编码 int 之外的任何其他值 - 您可以尝试将属性占位符放在这里:

 transactionIsolation="#{myproperty}"

但我不确定这是否可行。

解决这个问题的方法是通过纯 spring bean ( bean id=...) 以某种方式配置 activemq,而不使用专用的 amq 标签。EDIT2:这里有带有纯弹簧标签的示例配置http://activemq.apache.org/jms-and-jdbc-operations-in-one-transaction.html

于 2013-10-01T08:35:51.757 回答