TransactionManager只读= true不适用于mysql ReplicationDriver

时间:2012-05-31 12:09:39

标签: java mysql spring hibernate spring-transactions

我们使用com.mysql.jdbc.ReplicationDriver连接Master / Slave。我们将transactionManager配置如下。

<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
    <property name="sessionFactory" ref="sessionFactory" />
</bean>

<tx:advice id="txHbAdvice" transaction-manager="transactionManager">
    <tx:attributes>
        <tx:method name="get*" read-only="true" />
    </tx:attributes>
</tx:advice>

我将只读参数设置为true,但未将java.sql.Connection.setReadonly()方法设置为true。所有读取的查询仍然是主服务器。

类似问题here存在未解决的问题。有没有人有解决这个问题的方法?

1 个答案:

答案 0 :(得分:-1)

我的建议是围绕@Transactional注释编写方面,获取当前正在运行的会话,然后调用doWork(Work work)→如果connection.setReadOnly具有只读属性集,则设置@transaction。我没有尝试过这个解决方案,但我认为它应该可行。

Youu也可以参考此solution