spring boot多数据源配置

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>
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

山不在高_有仙则灵

你的奖励是我的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值