spring boot本来最初设计是为独体服务,可是现实中的业务需求使用中却不够用,需要进行多连接数据源使用,以下为开发过程使用的案例
1、数据源自定义配置
1-1、ymal配置文件
spring:
datasource:
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql://127.0.0.1:3306/ds1?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&serverTimezone=UTC
username: root
password: 11111111
datasource2:
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql://127.0.0.1:3306/ds2?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&serverTimezone=UTC
username: root
password: 11111111
1-2、数据源配置自定义
1-2-1 数据源自定义配置1
@Configuration
@MapperScan(basePackages = "yun.ling.pm.mapper.ds1",sqlSessionFactoryRef = "sqlSessionFactory")
public class DataSourceConfig {
@Bean
@ConfigurationProperties("spring.datasource")
@Primary //springboot自定义所有的多中间件多数据源操作,必须指明一个主要的
public DataSourceProperties dataSourceProperties(){
return new DataSourceProperties();
}
@Bean("dataSource")
@Primary
public DataSource dataSource(){
DataSourceProperties dataSourceProperties = dataSourceProperties();
return dataSourceProperties.initializeDataSourceBuilder().build();
}
@Bean("txTransManager")
@Resource
@Primary
public PlatformTransactionManager txTransManager(@Qualifier("dataSource")DataSource dataSource){
return new DataSourceTransactionManager(dataSource);
}
@Bean("sqlSessionFactory")
@Primary
@Resource
public SqlSessionFactory sqlSessionFactory(@Qualifier("dataSource")DataSource dataSource) throws Exception {
SqlSessionFactoryBean sqlSessionFactory = new SqlSessionFactoryBean();
sqlSessionFactory.setDataSource(dataSource);
//加载xml配置文件
sqlSessionFactory.setMapperLocations(new PathMatchingResourcePatternResolver().
getResources("classpath*:yun/ling/pm/mapper/ds1/*.xml"));
return sqlSessionFactory.getObject();
}
@Bean("sqlSessionTemplate")
@Primary
@Resource
public SqlSessionTemplate sqlSessionTemplate(@Qualifier("sqlSessionFactory")SqlSessionFactory sqlSessionFactory){
return new SqlSessionTemplate(sqlSessionFactory);
}
}
1-2-2 数据源自定义配置2
@Configuration
@MapperScan(basePackages = "yun.ling.pm.mapper.ds2",sqlSessionFactoryRef = "sqlSessionFactory2")
public class DataSourceConfig2 {
@Bean
@ConfigurationProperties("spring.datasource2")
public DataSourceProperties dataSourceProperties2(){
return new DataSourceProperties();
}
@Bean("dataSource2")
public DataSource dataSource2(){
DataSourceProperties dataSourceProperties = dataSourceProperties2();
return dataSourceProperties.initializeDataSourceBuilder().build();
}
@Bean("sqlSessionFactory2")
public SqlSessionFactory sqlSessionFactory2(@Qualifier("dataSource2")DataSource dataSource) throws Exception {
SqlSessionFactoryBean sqlSessionFactory = new SqlSessionFactoryBean();
sqlSessionFactory.setDataSource(dataSource);
sqlSessionFactory.setMapperLocations(new PathMatchingResourcePatternResolver().
getResources("classpath*:yun/ling/pm/mapper/ds2/*.xml"));
return sqlSessionFactory.getObject();
}
@Bean("txTransManager2")
@Resource
public PlatformTransactionManager txTransManager2(@Qualifier("dataSource2")DataSource dataSource){
return new DataSourceTransactionManager(dataSource);
}
@Bean("sqlSessionTemplate2")
@Resource
public SqlSessionTemplate sqlSessionTemplate2(@Qualifier("sqlSessionFactory2")SqlSessionFactory sqlSessionFactory){
return new SqlSessionTemplate(sqlSessionFactory);
}
}
2、实例操作步骤
2-1、接口访问
@RestController
@RequestMapping("/model")
public class ModelCountController {
@Resource
private Test1CountService test1CountService;
@Resource
private Test2ModelCountService test2ModelCountService;
@RequestMapping(value = "list" ,method = {RequestMethod.GET,RequestMethod.POST})
public String insert(){
test1CountService.test1().forEach(CountEntity -> {
System.out.println("CountEntity.getModelCode() = " + jianmoModelCountEntity.getModelCode());
});
test2ModelCountService.test2().forEach(CountEntity -> {
System.out.println("CountEntity.getModelCode() = " + jianmoModelCountEntity.getModelCode());
});
return "";
}
}
2-2、service服务编写
2-2-1、service服务编写1
@Service
public class Test1CountServiceImpl extends ServiceImpl<Test1Mapper, ModelCountEntity> implements Test1CountService {
@Resource
private Test1Mapper test1Mapper;
@Override
public List<ModelCountVO> test1() {
return test1Mapper.test1();
}
}
2-2-2、service服务编写2
@Service
public class Test2ModelCountServiceImpl extends ServiceImpl<Test2CountMapper, ModelCountEntity> implements Test2ModelCountService {
@Resource
private Test2CountMapper test2CountMapper;
@Override
public List<ModelCountVO> test2() {
return test2CountMapper.test2();
}
}
2-3、mapper服务编写
2-3-1、mapper服务编写1
mapper映射类
public interface Test1Mapper extends BaseMapper<ModelCountEntity> {
List<ModelCountVO> test1();
}
xml映射类
<select id="test1" resultType="yun.ling.pm.vo.ModelCountVO">
select ID, CREATE_TS, UPDATE_TS, MODEL_CODE as modelCode, MODEL_TYPE_CODE, MODEL_TYPE, TYPE, COUNT_NUM from jm_count
</select>
2-3-2、mapper服务编写2
mapper映射类
public interface Test2CountMapper extends BaseMapper<ModelCountEntity> {
List<ModelCountVO> test2();
}
xml映射类
<select id="test2" resultType="yun.ling.pm.vo.ModelCountVO">
select ID, CREATE_TS, UPDATE_TS, MODEL_CODE as modelCode, MODEL_TYPE_CODE, MODEL_TYPE, TYPE, COUNT_NUM from jm_count
</select>