springboot項(xiàng)目如何配置多數(shù)據(jù)源
springboot項(xiàng)目配置多數(shù)據(jù)源
1. 配置多個(gè)數(shù)據(jù)源
首先,你需要在application.yml或application.properties中配置多個(gè)數(shù)據(jù)源。
例如:
spring: datasource: type: com.alibaba.druid.pool.DruidDataSource one: driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://localhost:3306/db1?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai username: xxs password: 123456 two: driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://localhost:3306/db2?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai username: xxs password: 123456
2. 創(chuàng)建數(shù)據(jù)源配置類(lèi)
對(duì)于每個(gè)數(shù)據(jù)源,你需要?jiǎng)?chuàng)建一個(gè)配置類(lèi)來(lái)定義DataSource、SqlSessionFactory和MapperScan。
例如:
@Configuration @MapperScan(basePackages = "com.xxs.mapper.db1", sqlSessionFactoryRef = "db1SqlSessionFactory") public class DataSourceOneConfig { @Bean(name = "db1DataSource") @ConfigurationProperties(prefix = "spring.datasource.one") public DataSource db1DataSource() { return DataSourceBuilder.create().build(); } @Bean(name = "db1SqlSessionFactory") public SqlSessionFactory db1SqlSessionFactory(@Qualifier("db1DataSource") DataSource dataSource) throws Exception { SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean(); sessionFactory.setDataSource(dataSource); sessionFactory.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:mapper/db1/*.xml")); return sessionFactory.getObject(); } }
對(duì)于第二個(gè)數(shù)據(jù)源,創(chuàng)建另一個(gè)配置類(lèi):
@Configuration @MapperScan(basePackages = "com.xxs.mapper.db2", sqlSessionFactoryRef = "db2SqlSessionFactory") public class DataSourceTwoConfig { @Bean(name = "db2DataSource") @ConfigurationProperties(prefix = "spring.datasource.two") public DataSource db2DataSource() { return DataSourceBuilder.create().build(); } @Bean(name = "db2SqlSessionFactory") public SqlSessionFactory db2SqlSessionFactory(@Qualifier("db2DataSource") DataSource dataSource) throws Exception { SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean(); sessionFactory.setDataSource(dataSource); sessionFactory.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:mapper/db2/*.xml")); return sessionFactory.getObject(); } }
3. 配置事務(wù)管理器
對(duì)于每個(gè)數(shù)據(jù)源,你還需要配置相應(yīng)的事務(wù)管理器:
@Bean(name = "db1TransactionManager") public DataSourceTransactionManager db1TransactionManager(@Qualifier("db1DataSource") DataSource dataSource) { return new DataSourceTransactionManager(dataSource); } @Bean(name = "db2TransactionManager") public DataSourceTransactionManager db2TransactionManager(@Qualifier("db2DataSource") DataSource dataSource) { return new DataSourceTransactionManager(dataSource); }
4. 使用不同的Mapper
現(xiàn)在你可以在不同的包路徑下創(chuàng)建對(duì)應(yīng)的Mapper接口,并在對(duì)應(yīng)的Mapper XML文件中編寫(xiě)SQL語(yǔ)句。
例如,com.xxs.mapper.db1包下的Mapper接口將使用第一個(gè)數(shù)據(jù)源,而com.xxs.mapper.db2包下的Mapper接口將使用第二個(gè)數(shù)據(jù)源。
這樣,你就可以在Spring Boot項(xiàng)目中配置不同數(shù)據(jù)庫(kù)的Mapper,并實(shí)現(xiàn)跨數(shù)據(jù)庫(kù)操作了。
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
- SpringBoot實(shí)現(xiàn)JPA多數(shù)據(jù)源配置小結(jié)
- SpringBoot實(shí)現(xiàn)多數(shù)據(jù)源配置的示例詳解
- SpringBoot中實(shí)現(xiàn)多數(shù)據(jù)源連接和切換的方案
- 淺析SpringBoot多數(shù)據(jù)源實(shí)現(xiàn)方案
- springboot項(xiàng)目實(shí)現(xiàn)多數(shù)據(jù)源配置使用dynamic-datasource-spring-boot-starter的操作步驟
- springboot配置多數(shù)據(jù)源的一款框架(dynamic-datasource-spring-boot-starter)
- SpringBoot利用dynamic-datasource-spring-boot-starter解決多數(shù)據(jù)源問(wèn)題
相關(guān)文章
在mybatis執(zhí)行SQL語(yǔ)句之前進(jìn)行攔擊處理實(shí)例
本篇文章主要介紹了在mybatis執(zhí)行SQL語(yǔ)句之前進(jìn)行攔擊處理實(shí)例,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下。2017-04-04使用jmeter實(shí)現(xiàn)對(duì)jar包的調(diào)用方式
這篇文章主要介紹了使用jmeter實(shí)現(xiàn)對(duì)jar包的調(diào)用方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-03-03java文件復(fù)制代碼片斷(java實(shí)現(xiàn)文件拷貝)
本文介紹java實(shí)現(xiàn)文件拷貝的代碼片斷,大家可以直接放到程序里運(yùn)行2014-01-01SpringBoot項(xiàng)目啟動(dòng)執(zhí)行任務(wù)的多種方法小結(jié)
這篇文章主要介紹了SpringBoot項(xiàng)目啟動(dòng)執(zhí)行任務(wù)的多種方法小結(jié),本文給大家分享的這幾種方法經(jīng)常會(huì)被用到,當(dāng)我們的項(xiàng)目啟動(dòng)后需要調(diào)用對(duì)應(yīng)的方法,用來(lái)項(xiàng)目的初始化等,本文通過(guò)示例代碼講解的非常詳細(xì),需要的朋友參考下吧2023-07-07解決SpringBoot使用devtools導(dǎo)致的類(lèi)型轉(zhuǎn)換異常問(wèn)題
這篇文章主要介紹了解決SpringBoot使用devtools導(dǎo)致的類(lèi)型轉(zhuǎn)換異常問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。 一起跟隨小編過(guò)來(lái)看看吧2020-08-08java反射之Method的invoke方法實(shí)現(xiàn)教程詳解
這篇文章主要給大家介紹了關(guān)于java反射之Method的invoke方法的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-01-01springboot掃描引入jar包的service等組件方式
這篇文章主要介紹了springboot掃描引入jar包的service等組件方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-07-07SpringCloud負(fù)載均衡實(shí)現(xiàn)定向路由詳情
這篇文章主要介紹了SpringCloud負(fù)載均衡實(shí)現(xiàn)定向路由詳情,文章圍繞主題展開(kāi)詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下2022-08-08Redis Java 集成到 Spring Boot的詳細(xì)過(guò)程
本文介紹了如何使用SpringBoot連接Redis,并展示了如何配置Redis服務(wù)地址、創(chuàng)建Controller類(lèi)以及進(jìn)行基本的Redis操作,如字符串、列表、集合、哈希和有序集合,感興趣的朋友跟隨小編一起看看吧2024-12-12