Springboot項目整合MyBatis配置多資料源
描述
在項目開發過程中,在實際的業務中總會遇到這樣的問題,需要通路不同的資料源來完成資料的轉移或者資料的分開處理,這個時候我們可能就需要用到在一個項目中配置多個資料源;接下來要說的是MyBatis所對應的多資料源配置的詳細操作。
準備工作
項目中必須包含以下包引用(版本根據項目實際情況定):
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<optional>true</optional>
</dependency>
項目過程
項目中使用的是application.yml檔案來完成配置資訊的,配置如下:
test:
datasource:
db1:
username: root
password: 123456
driver-class-name: com.mysql.jdbc.Driver
jdbc-url: jdbc:mysql://saas.database:3306/test_one
db2:
username: root
password: 123456
driver-class-name: com.mysql.jdbc.Driver
jdbc-url: jdbc:mysql://saas.database:3306/test_two
資料源類編寫詳情如下:
DB1:
@Configuration
@MapperScan(value = "tech.test.eaglehorn.mapper.db1", sqlSessionFactoryRef = "sqlSessionFactoryOne")
public class ThirdPartMybatisConfig {
@Bean
@ConfigurationProperties(prefix = "thirdpart.datasource.db1")
public DataSource dataSourceOne() {
return DataSourceBuilder.create().type(HikariDataSource.class).build();
}
@Bean
public SqlSessionFactory sqlSessionFactoryOne(@Qualifier("dataSourceOne") DataSource dataSource) throws Exception {
SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();
sqlSessionFactoryBean.setDataSource(dataSource);
sqlSessionFactoryBean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources(
"classpath*:sqlmapper/db1/*.xml"
));
return sqlSessionFactoryBean.getObject();
}
}
DB2:
@Configuration
@Slf4j
@MapperScan(value = "tech.test.eaglehorn.mapper.db2", sqlSessionFactoryRef = "sqlSessionFactoryTwo")
public class GateWayMybatisConfig {
@Bean
@ConfigurationProperties(prefix = "thirdpart.datasource.db2")
public DataSource dataSourceTwo() {
return DataSourceBuilder.create().type(HikariDataSource.class).build();
}
@Bean
public SqlSessionFactory sqlSessionFactoryTwo(@Qualifier("dataSourceTwo") DataSource dataSource) throws Exception {
SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();
sqlSessionFactoryBean.setDataSource(dataSource);
sqlSessionFactoryBean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources(
"classpath*:sqlmapper/db2/*.xml"
));
return sqlSessionFactoryBean.getObject();
}
}
@MapperScan注解參數中,value的值是目前資料源所對應的Mapper接口所在的包路徑,sqlSessionFactoryRef的值是目前類中聲明的SqlSessionFactory Bean
聲明資料源bean上方上的@ConfigurationProperties(prefix = “thirdpart.datasource.db”)是項目配置中的所有資訊注入;
PathMatchingResourcePatternResolver().getResources(
“classpath*:sqlmapper/db2/*.xml”
)); 這個路徑是xml檔案的儲存路徑。
總結
springboot在項目建構的過程中其實已經幫我們做了很多事情了,我們按照規定簡單地做一些配置,就能滿足我們基本的restful API操作資料的整個鍊路,完成以上的配置,将對應的mapper接口放入響應的包下,映射檔案放入響應的配置目錄下,然後啟動項目,就可以直接寫操作資料的代碼邏輯了
有疑問可以評論,看到了基本上會回複