MySQL數據庫讀寫分離主要利用了MySQL提供的Java客戶端的ReplicationDriver的特性。
簡單的讀寫分離改造方案:
1、使用DBCP的數據庫連接池(DBCP2暫時不支持)
2、數據源配置成:
jdbc:mysql:replication://localhost:3306,localhost:3307/test?autoReconnect=true&characterEncoding=utf-8&useUnicode=true&zeroDateTimeBehavior=convertToNull
第一個地址爲主庫,後面的爲從庫,從庫可以配置多個
3、通過Spring的事務配置,所有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://localhost:3306,localhost:3307/test?autoReconnect=true&characterEncoding=utf-8&useUnicode=true&zeroDateTimeBehavior=convertToNull" /> <property name="username" value="root" /> <property name="password" value="test" /> </bean>
備註:
hibernate.connection.release_mode不能設置爲after_transaction
hibernate.transaction.auto_close_session不能設置爲true