Spring Boot 揭祕與實戰(二) 資料儲存篇 – 資料訪問與多資料來源配置

樑桂釗發表於2019-03-04

在某些場景下,我們可能會在一個應用中需要依賴和訪問多個資料來源,例如針對於 MySQL 的分庫場景。因此,我們需要配置多個資料來源。
原文地址:Spring Boot 揭祕與實戰(二) 資料儲存篇 – 資料訪問與多資料來源配置
部落格地址:blog.720ui.com/

環境依賴

修改 POM 檔案,新增spring-boot-starter-jdbc依賴。

<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>複製程式碼

新增mysql依賴。

<dependency>
  <groupId>mysql</groupId>
  <artifactId>mysql-connector-java</artifactId>
  <version>5.1.35</version>
</dependency>
<dependency>
  <groupId>com.alibaba</groupId>
  <artifactId>druid</artifactId>
  <version>1.0.14</version>
</dependency>複製程式碼

資料來源

src/main/resources/application.properties 中配置資料來源資訊。

# mysql
spring.datasource.one.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.one.url=jdbc:mysql://localhost:3307/springboot_db1
spring.datasource.one.username=root
spring.datasource.one.password=root

spring.datasource.two.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.two.url=jdbc:mysql://localhost:3307/springboot_db2
spring.datasource.two.username=root
spring.datasource.two.password=root複製程式碼

通過 Java Config 建立 dataSource 和 jdbcTemplate。

我們設定主資料來源為 spring.datasource.one 開頭的配置,並新增 @Primary ,這樣我們還可以享受 Spring Boot 提供的自動配置 DataSource 的機能。此外,第二資料來源配置為 spring.datasource.two 開頭的配置。

@Configuration
@EnableTransactionManagement
public class BeanConfig {

    @Bean(name = "oneDataSource")
    @Qualifier("oneDataSource")
    @Primary
    @ConfigurationProperties(prefix="spring.datasource.one")
    public DataSource oneDataSource() {
        return DataSourceBuilder.create().build();
    }

    @Bean(name = "twoDataSource")
    @Qualifier("twoDataSource")
    @ConfigurationProperties(prefix="spring.datasource.two")
    public DataSource twoDataSource() {
        return DataSourceBuilder.create().build();
    }

    @Bean(name = "oneJdbcTemplate")
    public JdbcTemplate oneJdbcTemplate(@Qualifier("oneDataSource") DataSource dataSource) {
        return new JdbcTemplate(dataSource);
    }
    @Bean(name = "twoJdbcTemplate")
    public JdbcTemplate twoJdbcTemplate(@Qualifier("twoDataSource") DataSource dataSource) {
        return new JdbcTemplate(dataSource);
    }
}複製程式碼

單元測試

為了驗證我們的配置是否正常,我們通過編寫單元測試用例來驗證吧。

@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(WebMain.class)
public class JdbcTest {

    @Resource(name="oneJdbcTemplate")
    protected JdbcTemplate jdbcTemplate1;
    @Resource(name="twoJdbcTemplate")
    protected JdbcTemplate jdbcTemplate2;

    @Test
    public void test() throws Exception {
        jdbcTemplate1.update("insert into t_author(id, real_name, nick_name) values(?, ?, ?)", 2, "樑桂釗", "LiangGzone");
        jdbcTemplate2.update("insert into t_author(id, real_name, nick_name) values(?, ?, ?)", 2, "樑桂釗", "LiangGzone");
    }
}複製程式碼

原始碼

相關示例完整程式碼: springboot-action

(完)

更多精彩文章,盡在「服務端思維」微信公眾號!

Spring Boot 揭祕與實戰(二) 資料儲存篇 – 資料訪問與多資料來源配置

相關文章