我需要使用單獨的讀寫器MySQL服務器。一個作家和一個(或更多)閱讀副本。Spring + Hibernate:讀/寫不同的數據源和數千個mysql數據庫
這樣做的最好方法是什麼?
我發現了很多的例子:
http://www.dragishak.com/?p=307
使用特殊的JDBC驅動程序:com.mysql.jdbc.ReplicationDriver
和用法是:
@Transactional(readOnly=true)
@ReadOnlyConnection
public Result serviceMethod(…) {
…
}
https://stackoverflow.com/a/33169879/1974494
使用Spring AbstractRoutingDatasource
:
用法:
@Transactional(readOnly = true)
public Page<BookDTO> getBooks(Pageable p) {
try{
DbContextHolder.setDbType(DbType.REPLICA1); // <----- set ThreadLocal DataSource lookup key
在每一個我需要設置的DbType方法。
是否可以自動向副本服務器發送「讀取查詢」並向主服務器「寫入查詢」(插入/更新)?
而第二個問題:
我想有每個用戶(非常大的)一個MySQL數據庫。我預計約有2 000名用戶。所以我無法爲每個用戶*讀者+作者定義數據源。
例子:
spring.ds_items.driverClassName=com.mysql.jdbc.Driver
spring.ds_items.url=jdbc:mysql://mysql-master/user1
spring.ds_items.username=root
spring.ds_items.password=12345
spring.ds_items.driverClassName=com.mysql.jdbc.Driver
spring.ds_items.url=jdbc:mysql://mysql-replica1/user1
spring.ds_items.username=root
spring.ds_items.password=12345
spring.ds_items.driverClassName=com.mysql.jdbc.Driver
spring.ds_items.url=jdbc:mysql://mysql-master/user2
spring.ds_items.username=root
spring.ds_items.password=12345
spring.ds_items.driverClassName=com.mysql.jdbc.Driver
spring.ds_items.url=jdbc:mysql://mysql-replica1/user2
spring.ds_items.username=root
spring.ds_items.password=12345
我想有一個「主MySQL數據庫」與表類似:
user db_name
--------------
test1 db_test1
test2 db_test2
如果我需要的用戶test2
一些數據,我看「主數據庫「並獲取數據庫db_test2
的使用信息。之後,將查詢發送到數據庫db_test2
。
尼斯。需要試試這個。 – Christian