2017-04-10 73 views
0

我需要使用單獨的讀寫器MySQL服務器。一個作家和一個(或更多)閱讀副本。Spring + Hibernate:讀/寫不同的數據源和數千個mysql數據庫

這樣做的最好方法是什麼?

enter image description here

我發現了很多的例子:


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

回答

相關問題