本篇分享的是springboot多數據源配置,在從springboot v1.5版本升級到v2.0.3時,發現之前寫的多數據源的方式不可用了,捕獲錯誤信息如: 先來說下之前的多數據源配置如: 配置了兩個資料庫,在原來預設的datasource節點下麵增加了seconddatasource節點的配置, ...
本篇分享的是springboot多數據源配置,在從springboot v1.5版本升級到v2.0.3時,發現之前寫的多數據源的方式不可用了,捕獲錯誤信息如:
異常:jdbcUrl is required with driverClassName.
先來說下之前的多數據源配置如:
1 spring: 2 datasource: 3 url: jdbc:sqlserver://192.168.122.111;DatabaseName=flight 4 username: sa 5 password: 1234.abcd 6 driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver 7 seconddatasource: 8 url: jdbc:sqlserver://192.168.122.111;DatabaseName=flight2 9 username: sa 10 password: 1234.abcd 11 driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver
配置了兩個資料庫,在原來預設的datasource節點下麵增加了seconddatasource節點的配置,然後主要的代碼如:
1 @Primary 2 @Bean 3 @ConfigurationProperties(prefix = "spring.seconddatasource") 4 public DataSource dataSource() { 5 return DataSourceBuilder.create().build(); 6 } 7 8 @Bean(name = "secodDataSource") 9 @ConfigurationProperties(prefix = "spring.seconddatasource") 10 public DataSource secodDataSource() { 11 return DataSourceBuilder.create().build(); 12 } 13 14 @Primary 15 @Bean 16 public JdbcTemplate jdbcTemplate(DataSource dataSource) { 17 return new JdbcTemplate(dataSource); 18 } 19 20 @Bean(name = "secondJdbcTemplate") 21 public JdbcTemplate secondJdbcTemplate(@Qualifier(value = "secodDataSource") DataSource dataSource) { 22 return new JdbcTemplate(dataSource); 23 }
來創建兩個不同的jdbctemplate,到這裡老版本這樣干沒有啥問題,能夠正常的得到數據;而升級未V2.03版本的時候提示:異常:jdbcUrl is required with
driverClassName.
很顯然配置節點不能使用導致的,配置節點名字變了,要解決這問題這裡使用了托管DataSourceProperties的方式來對數據配置從新賦值,具體代碼如:
1 @Bean 2 @Primary 3 @ConfigurationProperties(prefix = "spring.datasource") 4 public DataSourceProperties dataSourceProperties(){ 5 return new DataSourceProperties(); 6 } 7 8 @Bean("secondProperties") 9 @ConfigurationProperties(prefix = "spring.seconddatasource") 10 public DataSourceProperties secondProperties(){ 11 return new DataSourceProperties(); 12 } 13 14 @Primary 15 @Bean 16 public DataSource dataSource(DataSourceProperties dataSourceProperties) { 17 return dataSourceProperties.initializeDataSourceBuilder().build(); 18 } 19 20 @Bean(name = "secodDataSource") 21 public DataSource secodDataSource(@Qualifier(value = "secondProperties") DataSourceProperties dataSourceProperties) { 22 return dataSourceProperties.initializeDataSourceBuilder().build(); 23 }
能夠看出多了一級DataSourceProperties的創建,此時能夠運行出結果如:
除了編碼的這種方式也可以採用上面說的既然是配置找不到,那配置肯定是改名了,根據錯誤提示我們不放把url改名未jdbc-url,具體如下:
此刻我們再來運行,同樣的也能出來數據;兩種方式處理v2.03版本數據源問題:
- 編碼配置DataSourceProperties
- 通過配置jdbc-url
通過數據源配置節點名變動的問題,引發了springboot在升級迭代的過程中一些細微的變動,這或許會給我們在學習和升級過程中造成麻煩,所以官網每次升級的內容說明還是有必要看下的。