添加多数据源配置
spring.datasource.platform.jdbc-url=jdbc:mysql://localhost:3306/platform
spring.datasource.platform.username=root
spring.datasource.platform.password=root
spring.datasource.platform.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.mall.jdbc-url=jdbc:mysql://localhost:3306/mall
spring.datasource.mall.username=root
spring.datasource.mall.password=root
spring.datasource.mall.driver-class-name=com.mysql.cj.jdbc.Driver
mybatis.mapper-locations=classpath:mapper/**.xml
初始化数据源与mybatis配置
- 新建一个多数据源的配置类
@Configuration
public class DataSourceConfig {
@Primary
@Bean
@ConfigurationProperties(prefix = "spring.datasource.platform")
public DataSource platformDataSource() {
return DataSourceBuilder.create().build();
}
@Bean
@ConfigurationProperties(prefix = "spring.datasource.mall")
public DataSource mallDataSource() {
return DataSourceBuilder.create().build();
}
}
- 分别创建两个数据源的
mybatis
配置
platform
数据源JPA
配置
@Configuration
@MapperScan(basePackages = "com.example.refreshcommodity.mapper.platform",
sqlSessionFactoryRef = "sqlSessionFactoryPlatform",
sqlSessionTemplateRef = "sqlSessionTemplatePlatform")
public class PlatformConfig {
private DataSource platformDataSource;
public PlatformConfig(@Qualifier("platformDataSource") DataSource platformDataSource) {
this.platformDataSource = platformDataSource;
}
@Bean
public SqlSessionFactory sqlSessionFactoryPlatform() throws Exception {
SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
bean.setDataSource(platformDataSource);
bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath*:mapper/platform/*.xml"));
return bean.getObject();
}
@Bean
public SqlSessionTemplate sqlSessionTemplatePlatform() throws Exception {
return new SqlSessionTemplate(sqlSessionFactoryPlatform());
}
}
mall
数据源JPA
配置
@Configuration
@MapperScan(basePackages = "com.example.refreshcommodity.mapper.mall",
sqlSessionFactoryRef = "sqlSessionFactoryMall",
sqlSessionTemplateRef = "sqlSessionTemplateMall")
public class MallConfig {
private DataSource mallDataSource;
public MallConfig(@Qualifier("mallDataSource") DataSource mallDataSource) {
this.mallDataSource = mallDataSource;
}
@Bean
public SqlSessionFactory sqlSessionFactoryMall() throws Exception {
SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
bean.setDataSource(mallDataSource);
bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath*:mapper/mall/*.xml"));
return bean.getObject();
}
@Bean
public SqlSessionTemplate sqlSessionTemplateMall() throws Exception {
return new SqlSessionTemplate(sqlSessionFactoryMall());
}
}
- 创建
mapper
接口
- 在
com.example.refreshcommodity.mapper.mall
目录下创建mall
数据源的接口 - 在
com.example.refreshcommodity.mapper.platform
目录下创建platform
数据源的接口
最后的目录结构如下:
测试
编写测试类验证
MallMapper.java
代码
public interface MallMapper {
List<Map<String,Object>> getSchoolList();
}
MallMapper.xml
代码
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.example.refreshcommodity.mapper.mall.MallMapper">
<select id="getSchoolList" resultType="java.util.Map" parameterType="java.util.List">
select * from school
</select>
</mapper>
PlatformMapper.java
代码
public interface PlatformMapper {
List<Map<String,Object>> getUserList();
}
PlatformMapper.xml
代码
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.example.refreshcommodity.mapper.platform.PlatformMapper">
<select id="getUserList" resultType="java.util.Map" parameterType="java.util.List">
select * from user
</select>
</mapper>
MyController.java
代码
@RestController
public class MyController {
@Autowired
PlatformMapper platformMapper;
@Autowired
MallMapper mallMapper;
@GetMapping("/test")
public String test() {
List<Map<String, Object>> schoolList = mallMapper.getSchoolList();
List<Map<String, Object>> userList = platformMapper.getUserList();
Map<String, Object> result = new HashMap<>();
result.put("schoolList", schoolList);
result.put("userList", userList);
return result.toString();
}
}
测试结果
{
"schoolList": [{
"address": "北京市三里屯",
"name": "清华附属小学",
"id": 1
}],
"userList": [{
"name": "小明",
"id": 1,
"age": 10
}]
}
可以看到实现了多数据源的查询