業務場景
在SAAS模式下,不同的租戶需要切換數據庫,我們可以使用動態數據源,動態數據源有個問題,就是需要對每一個數據庫創建一個連接池,在初始化的時候初始化這些連接池,
如果多台應用服務器的情況,每一台應用服務器都需要創建連接池。
比如有10台應用服務器,每台創建10個鏈接池。每個連接池200個鏈接。
那么每台應用服務器 的鏈接數為 10*200 兩千個鏈接。
數據庫也會有很多的鏈接 。如果應用服務器更多的情況,那么鏈接管理這塊都會占用很多的服務器資源,如果服務器更多的情況,則可能報錯。
解決方案
我們在同一個數據庫上創建相同的數據庫,那么我們就不需要使用動態數據源,我們可以使用切換數據庫的方式來實現。
實現原理很簡單 use db1,use db2 這樣就很容易進行數據庫切換了。
切換方法
使用AOP攔截來實現:
創建一個切面:
public class DbSelectAspect { public void doSelectDb(JoinPoint point ){ JdbcTemplate template=AppBeanUtil.getBean(JdbcTemplate.class); template.execute("use db1;"); } }
這里我代碼寫死了。
然后配置好AOP切面就可以了。
程序數據庫連接配置如下:
db.url=jdbc:mysql://192.168.1.88:4000/?useUnicode=true&characterEncoding=utf-8
不需要指定數據庫名,根據切面進行數據庫切換就可以了。
