我想设置一个 RDS 只读副本以将一些读取请求转发给它。我已经用以下方式注释了我所有的“读取” Dao 方法:
@Transactional(readOnly = true)
现在我正在为数据源配置而苦苦挣扎。我原以为这会很容易,但似乎并非如此。如何告诉数据源/休眠在某个端点上有可用的只读副本?
目前我的配置如下:
<bean id="mainDataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">
<property name="driverClass" value="com.mysql.jdbc.Driver"/>
<property name="jdbcUrl" value="jdbc:mysql://${master-url}:3306/${db-name}?useSSL=true&requireSSL=true&verifyServerCertificate=false"/>
<property name="user" value="${user}"/>
<property name="password" value="${password}"/>
<!-- these are C3P0 properties -->
<property name="acquireIncrement" value="3"/>
<property name="minPoolSize" value="3"/>
<property name="maxPoolSize" value="10"/>
<property name="maxIdleTime" value="3600"/>
<!-- 1 hour -->
<property name="maxConnectionAge" value="7200"/>
<property name="maxIdleTimeExcessConnections" value="600"/>
<property name="idleConnectionTestPeriod" value="60"/>
<property name="testConnectionOnCheckin" value="true"/>
<property name="testConnectionOnCheckout" value="false"/>
<property name="preferredTestQuery" value="SELECT 1"/>
</bean>
<bean id="mainSessionFactory" name="mainSessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean" depends-on="mainDataSource">
<property name="packagesToScan">
<list>
<value>com....</value>
</list>
</property>
<property name="dataSource" ref="mainDataSource"/>
<property name="hibernateProperties">
<props>
<prop key="hibernate.connection.tinyInt1isBit">true</prop>
<prop key="hibernate.connection.transformedBitIsBoolean">true</prop>
<prop key="hibernate.hbm2ddl.auto">none</prop>
<prop key="hibernate.show_sql">false</prop>
<prop key="hibernate.connection.CharSet">UTF-8</prop>
<prop key="hibernate.connection.characterEncoding">UTF-8</prop>
<prop key="hibernate.connection.useUnicode">true</prop>
<prop key="hibernate.jdbc.batch_size">40</prop>
</props>
</property>
</bean>
任何帮助/建议将不胜感激!
最好的问候,马克西姆