在我们进行开发过程中, 往往会使用不止一个数据库, 可能有很多, 又可能该数据库在另一个服务器上; 那么我们这里就需要在一个项目中配置多个数据库的数据源, 自由的进行数据持久化操作;
demo在此!!! demo在此!!! demo在此!!!
多数据源demo
1.创建一个springboot整合mybatis的项目
备注: 这里用的是mybatis-plus, 用法大致和mybatis一样
如果你还不会整合该项目,请看:
手把手教你springboot快速整合mybatis
如果你会了, 请忽略;
2.多数据源配置
备注: 这里用的是阿里的, druid作为数据源
2.1 yml文件
spring:
datasource:
#db1 这个名字可以随便取, 为了注入数据源数据的时候能分辨哪个是哪个
#第一个数据源, 默认数据源,
db1:
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql://localhost:3306/db1?useUnicode=true&characterEncoding=utf-8
username: root
password: root
#第二个数据源
db2:
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql://localhost:3306/db2?useUnicode=true&characterEncoding=utf-8
username: root
password: root
#第三个数据源
db3:
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql://localhost:3306/db3?useUnicode=true&characterEncoding=utf-8
username: root
password: root
#以此类推 .....
2.2 数据源类配置
默认数据源
bean.setTypeAliasesPackage("com.example.springboot.pojo");这里注意, 设置该参数时打成jar启动会找不到该包下的类,目前未找到解决方案
package com.example.springboot.config;
import com.alibaba.druid.pool.DruidDataSource;
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.core.io.Resource;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import javax.sql.DataSource;
@Configuration
//指定该SqlSession对象对应的dao(basePackages , dao扫包 sqlSessionFactoryRef: SqlSessionFactory对象注入到该变量中)
@MapperScan(basePackages = "com.example.springboot.DB1Dao", sqlSessionFactoryRef = "DB1Factory")
public class DB1DataSourceConfig {
/**
* 封装数据源对象创建, 该方法就已经将数据源的各个数据封装到该对象中
* @return
*/
@Bean(name = "DB1dataSource")
@Primary //必须要有, 说明该数据源是默认数据源
@ConfigurationProperties(prefix = "spring.datasource.db1") //读取的数据源前缀, 跟yml文件对应
public DataSource DB1dataSource(){
return new DruidDataSource();
}
/**
* SqlSession对象创建
* @param dataSource
* @return
* @throws Exception
*/
@Bean(name = "DB1Factory")
@Primary
public SqlSessionFactory DB1Factory(@Qualifier("DB1dataSource") DataSource dataSource) throws Exception {
SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
//指定起别名的包, 这里注意, 设置该参数时打成jar启动会找不到该包下的类,目前未找到解决方案
bean.setTypeAliasesPackage("com.example.springboot.pojo");
bean.setDataSource(dataSource);
//指定该SqlSession对应的mapper.xml文件位置
bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath*:DB1Mapper/*.xml"));
return bean.getObject();
}
}
其他数据源1
package com.example.springboot.config;
import com.alibaba.druid.pool.DruidDataSource;
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.core.io.Resource;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import javax.sql.DataSource;
@Configuration
@MapperScan(basePackages = "com.example.springboot.DB2Dao", sqlSessionFactoryRef = "DB2Factory")
public class DB2DataSourceConfig {
@Bean(name = "DB2dataSource")
@ConfigurationProperties(prefix = "spring.datasource.db2")
public DataSource DB1dataSource(){
return new DruidDataSource();
}
@Bean(name = "DB2Factory")
public SqlSessionFactory DB1Factory(@Qualifier("DB2dataSource") DataSource dataSource) throws Exception {
SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
//这里注意, 设置该参数时打成jar启动会找不到该包下的类,目前未找到解决方案
bean.setTypeAliasesPackage("com.example.springboot.pojo");
bean.setDataSource(dataSource);
bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath*:DB2Mapper/*.xml"));
return bean.getObject();
}
}
其他数据源2
package com.example.springboot.config;
import com.alibaba.druid.pool.DruidDataSource;
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import javax.sql.DataSource;
@Configuration
@MapperScan(basePackages = "com.example.springboot.DB3Dao", sqlSessionFactoryRef = "DB3Factory")
public class DB3DataSourceConfig {
@Bean(name = "DB3dataSource")
@ConfigurationProperties(prefix = "spring.datasource.db3")
public DataSource DB1dataSource(){
return new DruidDataSource();
}
@Bean(name = "DB3Factory")
public SqlSessionFactory DB1Factory(@Qualifier("DB3dataSource") DataSource dataSource) throws Exception {
SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
//这里注意, 设置该参数时打成jar启动会找不到该包下的类,目前未找到解决方案
bean.setTypeAliasesPackage("com.example.springboot.pojo");
bean.setDataSource(dataSource);
bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath*:DB3Mapper/*.xml"));
return bean.getObject();
}
}
其他数据源x
与其他数据源2, 3一样以此类推
网友评论