
最近一个Java项目中,需要配置多个不同的mybatis数据库连接,在此总结下配置方法。
【也可以叫做mybatis多数据源(DataSource)配置方法】
二、步骤1.springboot项目中,在pom.xml中导入mybatis(或mybatis-plus)的jar包
mysql mysql-connector-java8.0.16 com.baomidou mybatis-plus-boot-starter3.1.2 com.baomidou mybatis-plus-generator3.1.2
2.在配置文件application.properties中,编写好多个不同的数据源的配置信息,样例如下:
#spring.datasource.url=jdbc:mysql://10.123.123.123:3306/mydb #spring.datasource.username=root #spring.datasource.password=root #spring.datasource.driver-class-name=com.mysql.jdbc.Driver #A数据源,连接数据库mydbA spring.datasource.mydbA.jdbc-url=jdbc:mysql://10.123.123.123:3306/mydbA spring.datasource.mydbA.username=root spring.datasource.mydbA.password=root spring.datasource.mydbA.driver-class-name=com.mysql.jdbc.Driver #B数据源,连接数据库mydbB spring.datasource.mydbB.jdbc-url=jdbc:mysql://10.123.123.123:3306/mydbB spring.datasource.mydbB.username=root spring.datasource.mydbB.password=root spring.datasource.mydbB.driver-class-name=com.mysql.jdbc.Driver
上方配置了两个数据源连接,一个连接数据库mydbA,一个连接数据库mydbB(虽然数据库的ip一样,但是默认连接的数据库名不一样);
如有需要,修改为不同的数据库ip即可。
3.在项目中,新建一个java类,使用第一个数据源(连接mydbA数据库),样例如下:
//这个java类,可以扫描指定包com.mydbA.mapper下的自己写的Mapper.java文件
//这些Mapper.java中的sql默认使用mydbA数据库
@Configuration
@MapperScan(basePackages="com.mydbA.mapper", sqlSessionFactoryRef="myASqlSessionFactory")
public class ADataSourceConfig{
//这样配置,就可以扫描上方application.properties中指定前缀的key,使用其value
@Bean(name="ADataSource")
@ConfigurationProperties(prefix="spring.datasource.mydbA")
public DataSource aDataSource(){
return DataSourceBuilder.create().build();
}
@Bean(name="myASqlSessionFactory")
public SqlSessionFactory aSqlSessionFactory(@Qualifier("ADataSource")DataSource dataSource ) throws Exception {
SqlSessionFactoryBean ssfb = new SqlSessionFactoryBean();
ssfb.setDataSource(dataSource);
//设置mybatis分页插件
PageInterceptor pi = new PageInterceptor();
Properties prop = new Properties();
prop.setProperty("pageSizeZero","true");
prop.setProperty("reasonable","true");
pi.setProperties(prop);
PageInterceptor[] pis = new PageInterceptor[]{pi};
//设置
ssfb.setPlugins(pis);
return ssfb.getObject();
}
}
4.在项目中,新建一个java类,使用第二个数据源(连接mydbB数据库),样例如下:
//这个java类,可以扫描指定包com.mydbB.mapper、com.mydbB.repository下的自己写的Mapper.java文件
//这些Mapper.java中的sql默认使用mydbB数据库
@Configuration
@MapperScan(basePackages={"com.mydbB.mapper","com.mydbB.repository"}, sqlSessionFactoryRef="myBSqlSessionFactory")
public class BDataSourceConfig{
//这样配置,就可以扫描上方application.properties中指定前缀的key,使用其value
@Bean(name="BDataSource")
@ConfigurationProperties(prefix="spring.datasource.mydbB")
public DataSource bDataSource(){
return DataSourceBuilder.create().build();
}
@Bean(name="myBSqlSessionFactory")
public SqlSessionFactory bSqlSessionFactory(@Qualifier("BDataSource")DataSource dataSource ) throws Exception {
SqlSessionFactoryBean ssfb = new SqlSessionFactoryBean();
ssfb.setDataSource(dataSource);
//设置mybatis分页插件
PageInterceptor pi = new PageInterceptor();
Properties prop = new Properties();
prop.setProperty("pageSizeZero","true");
prop.setProperty("reasonable","true");
pi.setProperties(prop);
PageInterceptor[] pis = new PageInterceptor[]{pi};
//设置
ssfb.setPlugins(pis);
return ssfb.getObject();
}
}
5.这样就配置完毕了。
最终,spring容器中会有两个SqlSessionFactory对象,一个是myASqlSessionFactory,另一个是myBSqlSessionFactory(上方配置的)。
这两个分别使用不同的mapper.java,分别使用不同的数据源;也就实现了一个项目中配置多个mybatis数据库连接(数据库源)的目的。
三、备注如果需要同时配置jpa(hibernate)的数据源,可以参考本人的这篇文章:
spring项目同时配置mybatis与jpa(hibernate)
https://blog.csdn.net/BHSZZY/article/details/121951817
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)