• 技术文章 >Java >java教程

    JAVA开发之springBoot2.0搭建双数据源

    无忌哥哥无忌哥哥2018-07-20 11:32:06原创1230
    最近因为项目需要,需要在程序中同时访问不同的数据库。之前使用springboot注解写代码确实方便快捷,但是如果需要自己需改其中的一些东西来方便自己使用,改起来有点烦,不知道从哪里入手。写个这个记录下。

    首先是pom.xml,都是通用的,这里就不贴出来了。

    其次就是application.properties配置,笔者因为不同的环境,所以新建了两个application-dev.properties和application-pro.properties配置文件。

    application.properties:指定当前使用那个环境的配置.

    spring.profiles.active=dev
    application-dev.properties的配置(application-pro.properties类似dev的配置)
    #datasource1
    spring.datasource.username=**
    spring.datasource.password=*****
    spring.datasource.jdbc-url=jdbc:mysql://***************
    useUnicode=true&characterEncoding=utf-8&useSSL=false
    spring.datasource.driver-class-name=com.mysql.jdbc.Driver
    
    #datasource2
    spring.datasource.ds1.username=***
    spring.datasource.ds1.password=******
    spring.datasource.ds1.jdbc-url=jdbc:mysql://***************
    useUnicode=true&characterEncoding=utf-8&useSSL=false
    spring.datasource.ds1.driver-class-name=com.mysql.jdbc.Drive

    不同数据源的MyBatis (Config1)

    @Configuration
    @MapperScan(basePackages = "com.pet.petgame2.mapper.dao", sqlSessionFactoryRef = "petgame2SessionFactory")
    public class Config1 {
    
        @Bean(name = "petgame2")
        @ConfigurationProperties(prefix = "spring.datasource")
        @Primary
        public DataSource dataSource(){
            return DataSourceBuilder.create().build();
        }
    
        @Bean(name = "petgame2SessionFactory")
        @Primary
        public SqlSessionFactory sessionFactory(@Qualifier("petgame2") DataSource dataSource) throws Exception{
            SqlSessionFactoryBean factoryBean = new SqlSessionFactoryBean();
            factoryBean.setDataSource(dataSource);
            factoryBean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:Mapper/pet2Mapper/*.xml"));
            return factoryBean.getObject();
        }
    
        @Bean(name = "petgame2TransactionManager")
        @Primary
        public DataSourceTransactionManager transactionManager(@Qualifier("petgame2") DataSource dataSource){
            return new DataSourceTransactionManager(dataSource);
        }
    }

    不同数据源的MyBatis (Config2)

    @Configuration
    @MapperScan(basePackages = "com.pet.petgame2.mapper.dao2", sqlSessionFactoryRef = "petgamesqlSessionFactory")
    public class Config2 {
    
        @Bean(name = "petgame")
        @ConfigurationProperties(prefix = "spring.datasource.ds1")
        public DataSource dataSource(){
            return DataSourceBuilder.create().build();
        }
    
        @Bean(name = "petgamesqlSessionFactory")
        public SqlSessionFactory sessionFactory(@Qualifier("petgame") DataSource dataSource) throws Exception{
            SqlSessionFactoryBean factoryBean = new SqlSessionFactoryBean();
            factoryBean.setDataSource(dataSource);
            factoryBean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:Mapper/petMapper/*.xml"));
            return factoryBean.getObject();
        }
    
        @Bean(name = "petgameTransactionManager")
        public DataSourceTransactionManager transactionManager(@Qualifier("petgame") DataSource dataSource){
            return new DataSourceTransactionManager(dataSource);
        }
    }

    @MapperScan注解会自动扫描mapper的接口文件, factoryBean.setMapperLocations会扫描mapper接口文件对应的Mapper.XML文件,注意这两个的路径不要写错。@Primary设定默认的一个数据库链接配置,必须指定其中一个数据源为默认。

    *注意:如果使用了springboot2.0自带的Hikari作为连接池,需要注意properties中的

    spring.datasource.url改为spring.datasource.jdbc-url

    或者修改config中DataSource为DataSourceProperties,如下

    @Bean(name = "petgame2DataSourceProperties")
        @Qualifier("petgame2DataSourceProperties")
        @ConfigurationProperties(prefix = "spring.datasource")
        @Primary
        public DataSourceProperties properties(){
            return new DataSourceProperties();
        }
    
        @Bean(name = "petgame2")
        @ConfigurationProperties(prefix = "spring.datasource")
        @Primary
        public DataSource dataSource(){
    //        return DataSourceBuilder.create().build();
            return properties().initializeDataSourceBuilder().build();
        }

    以上就是JAVA开发之springBoot2.0搭建双数据源的详细内容,更多请关注php中文网其它相关文章!

    声明:本文原创发布php中文网,转载请注明出处,感谢您的尊重!如有疑问,请联系admin@php.cn处理
    专题推荐:springBoot MyBatis
    上一篇:深入解析springCloud的Eureka实践 下一篇:java启动Tomcat报错:The specified JRE installation does not exist
    大前端线上培训班

    相关文章推荐

    • 理解java8中java.util.function.*pojo反射新方法(附代码)• 浅析安卓app和微信授权登录及分享完整对接(代码分享)• 教你一招搞定时序数据库在Spring Boot中的使用• 一招教你使用java快速创建Map(代码分享)• PlayFramework 完整实现一个APP(十一)

    全部评论我要评论

  • 取消发布评论发送
  • 1/1

    PHP中文网