SpringBoot數據源相關配置


數據源配置

單數據源

配置步驟

  1. 引入依賴:H2數據庫驅動、JDBC依賴、acturator(運維)、web模塊(用於測試)、lambok(使用@Slf4j打印日志)。
  2. 直接配置所需的Bean,注入容器。
    1. 數據源:DataSource
    2. 事務:例PlatformTransactionManager(DataSourceTransactionManager)
    3. 操作:例JdbcTemplate

springboot所做的自動配置,包括上面三個,分別是DataSourceAutoConfiguration、DataSourceTransactionManagerAutoConfiguration、JdbcTemplateAutoConfiguration。

配置屬性

# Spring boot actuator端點暴露
management.endpoints.web.exposure.include=*
# 控制台彩色輸出,不要帶到生產上去!!
spring.output.ansi.enabled=ALWAYS

# 通用屬性
spring.datasource.url=jdbc:h2:mem:testdb
spring.datasource.username=sa
spring.datasource.password=
spring.datasource.driver-class-name=com.mysql.jdbc.Driver(可選)

# 初始化內嵌數據庫
spring.datasource.initialization-mode=embedded|always|never
spring.datasource.schema與spring.datasource.data確定初始化SQL⽂文件
spring.datasource.platform=hsqldb | h2 | oracle | mysql | postgresql(與前者對應)

多數據源

配置多個數據源有兩種方式,第一種是繼續使用springboot自動配置,通過@Primary設置主數據源;第二種是剔除springboot自動配置,分別配置多個數據源、事務管理器、JDBCTmeplate等。

@Bean
@Primary
@ConfigurationProperties("app.datasource.member")
public DataSourceProperties memberDataSourceProperties() {
    return new DataSourceProperties();
}
@Bean
@Primary
@ConfigurationProperties("app.datasource.member.configuration")
public DataSource memberDataSource() {
    return memberDataSourceProperties().initializeDataSourceBuilder()
            .type(HikariDataSource.class).build();
}

擴展

  1. Spring自己會計算依賴關系,把依賴最底層的Bean先創建出來。

All @Configuration classes are subclassed at startup-time with CGLIB. In the subclass, the child method checks the container first for any cached (scoped) beans before it calls the parent method and creates a new instance.

所有@Configuration類在啟動時會使用CGLIB子類化。子類方法在調用父類方法或創建新實例之前,首先會檢查容器中是否有緩存的bean。

  1. 排除了SpringBoot的數據源自動配置,SpringBoot不會為你初始化Schema和Data。參考DataSourceInitializerInvoker設置初始化數據。

  2. SpringBoot自動配置多數都是針對只有一個DataSource的情況,要么給主要的DataSource Bean增加@Primary注解,要么就把幾個自動配置類排除掉。

  3. 自動配置會針對上下文中唯一的DataSource或者標記了@Primary的那個DataSource做相關配置

其他,Spring中,AbstractRoutingDataSource,可以自動切換多個數據源。通過編碼來指定DataSource。Alibaba Druid里也有一個HA的DataSource,用ThreadLocal變量來控制返回哪個DataSource。

完全不同的庫,分開寫,不使用自動切。分庫分表或者讀寫分離的情況,用中間件來做,無論是客戶端的,還是代理的。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM