2

マスター/スレーブデータベースのセットアップで動作するように、春/休止状態のプロジェクトをセットアップしようとしています。

トランザクションは春に機能するようです (たとえば、 @Transactional(readOnly=true) として注釈が付けられたメソッド内で hibernateTemplate.merge() を実行しようとすると、例外が発生します)。ただし、hibernate は、アノテーションが付けられたメソッド内でスレーブ データベースを使用しません。

@Transactional(readOnly=true).

<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
      destroy-method="close">
    <property name="driverClassName" value="com.mysql.jdbc.ReplicationDriver"/>
    <property name="url" value="jdbc:mysql:replication://master:3306,slave:3306/proust"/>
    <property name="username" value="username"/>
    <property name="password" value="password"/>
</bean>

<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
    <property name="dataSource" ref="dataSource"/>
</bean>

<tx:annotation-driven transaction-manager="transactionManager"/>

次に、マネージャー クラスまたは DAO クラスに次の注釈を付けます。

@Transactional(readOnly = true)

...およびいくつかのメソッド

@Transactional(readOnly = false)

クラス内のいくつかのメソッドがマスターに対して実行され、いくつかのメソッドがスレーブに対して実行されることを期待していますが、それらはすべてマスターに対して実行されます。私は何が間違っているのでしょうか?

4

1 に答える 1

0

@TransactionalHibernate は、アノテーションに関して JDBC 接続を R/O モードに切り替えません。変更のフラッシュを防止するだけです。

于 2011-09-01T18:15:45.823 に答える