Spring多個數(shù)據(jù)源配置詳解
前言
在上篇文章講到了如何配置單數(shù)據(jù)源,但是在實際場景中,會有需要配置多個數(shù)據(jù)源的場景,比如說,我們在支付系統(tǒng)中,單筆操作(包含查詢、插入、新增)中需要操作主庫,在批量查詢或者對賬單查詢等對實時性要求不高的場景,需要使用讀庫來操作,依次來減輕數(shù)據(jù)庫的壓力。那么我們?nèi)绾闻渲枚鄶?shù)據(jù)源?
這里還是基于springboot應(yīng)用的情況下,我們看一下怎么配置。
因為SpringBoot會實現(xiàn)自動配置,但是SpringBoot并不知道我們的業(yè)務(wù)場景分別要使用哪一個數(shù)據(jù)源,因此我們需要把相關(guān)的自動配置關(guān)閉。
首先,生成項目骨架,引入相應(yīng)的依賴
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jdbc</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>com.h2database</groupId> <artifactId>h2</artifactId> <scope>runtime</scope> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <optional>true</optional> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> ``` **然后,在Application排除自動裝配類** ```java @SpringBootApplication(exclude = { DataSourceAutoConfiguration.class,DataSourceTransactionManagerAutoConfiguration.class,JdbcTemplateAutoConfiguration.class}) @Slf4j public class MultiDataSourceDemoApplication { }
上面代碼中,我們排除了DataSourceAutoConfiguration、DataSourceTransactionManagerAutoConfiguration、JdbcTemplateAutoConfiguration三個類,然后就可以自己定義DataSource了。
配置數(shù)據(jù)源
//第一個數(shù)據(jù)源 @Bean @ConfigurationProperties("first.datasource") public DataSource firstDataSource() { return DataSourceBuilder.create().build(); } @Bean public JdbcTemplate firstJdbcTemplate() { return new JdbcTemplate(firstDataSource()); } @Bean @Resource public PlatformTransactionManager firstTxManager(DataSource firstDataSource) { return new DataSourceTransactionManager(firstDataSource); } //第二個數(shù)據(jù)源 @Bean @ConfigurationProperties("second.datasource") public DataSource secondDataSource() { return DataSourceBuilder.create().build(); } @Bean public JdbcTemplate secondJdbcTemplate() { return new JdbcTemplate(secondDataSource()); } @Bean @Resource public PlatformTransactionManager secondTxManager(DataSource secondDataSource) { return new DataSourceTransactionManager(secondDataSource); }
application.properties的配置項信息
management.endpoints.web.exposure.include=* spring.output.ansi.enabled=ALWAYS first.datasource.jdbc-url=jdbc:mysql://localhost:3306/first first.datasource.username=root first.datasource.password=xxx second.datasource.jdbc-url=jdbc:mysql://localhost:3306/second second.datasource.username=root second.datasource.password=xxx
看一下表結(jié)構(gòu)和數(shù)據(jù)
運(yùn)行測試代碼:
@Test public void testMutilDataSource(){ firstJdbcTemplate.queryForList("SELECT * FROM test1") .forEach(row -> log.info("記錄:"+row.toString())); secondJdbcTemplate.queryForList("SELECT * FROM test2") .forEach(row -> log.info("記錄:"+row.toString())); }
我們看一下運(yùn)行效果:
我們可以看到,兩個數(shù)據(jù)源都初始化成功了,并且各自數(shù)據(jù)源執(zhí)行的結(jié)果準(zhǔn)確。
上面的方式?jīng)]有集成Mybatis,使用的是jdbcTemplate,網(wǎng)絡(luò)上還有很多配置方式,比如動態(tài)選擇數(shù)據(jù)源,大同小異,不過筆者還是建議不同的業(yè)務(wù)單獨指定數(shù)據(jù)源,容易維護(hù)。
我們已經(jīng)演示了簡單的單數(shù)據(jù)源和多數(shù)據(jù)源的配置方式,我們下一篇文章將講一下,SpringBoot默認(rèn)的連接池HikariCP。
到此這篇關(guān)于Spring多個數(shù)據(jù)源配置詳解的文章就介紹到這了,更多相關(guān)Spring多數(shù)據(jù)源配置內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Java中短路運(yùn)算符與邏輯運(yùn)算符示例詳解
這篇文章主要給大家介紹了關(guān)于Java中短路運(yùn)算符與邏輯運(yùn)算符的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-01-01WMTS中TileMatrix與ScaleDenominator淺析
這篇文章主要為大家介紹了WMTS中TileMatrix與ScaleDenominator淺析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-03-03