• 技术文章 >Java >java教程

    springboot项目配置两个数据源的方法

    不言不言2018-09-20 14:50:11原创3430
    本篇文章给大家带来的内容是关于springboot项目配置两个数据源的方法,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。

    本文主要介绍如何在一个springboot项目配置两个数据源(mysql和oracle);

    1、引进相关依赖

    <!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <scope>runtime</scope>
    </dependency>
    <!--oracle 驱动 -->
    <dependency>
        <groupId>com.oracle</groupId>
        <artifactId>ojdbc6</artifactId>
        <version>11.1.0.7.0</version>
    </dependency>

    当ojdbc驱动包版本过低,会报如下图所示错误,即驱动jar与数据库版本不兼容:

    2、于applicationContext.yml中配置数据源连接参数:

    Spring:
            datasource:
                base:
                     driver-class-name: com.mysql.jdbc.Driver
                     jdbc-url: ${base.db.url}
                     username: ${base.db.username}
                     password: ${base.db.password}
                oa:
                     driver-class-name: oracle.jdbc.driver.OracleDriver
                     jdbc-url: ${oa.db.urL}
                     username: ${oa.db.username}
                     password: ${oa.db.password}
                hikari:
                     max-lifetime: 60000
                     login-timeout: 5
                     validation-timeout: 3000
                     connection-timeout: 60000
                     idle-timeout: 60000

    3、多数据源配置文件,读取对应连接参数

    Package com.**.config;
    
    import org.springframework.beans.factory.annotation.Qualifier;
    import org.springframework.boot.context.properties.ConfigurationProperties;
    import org.springframework.boot.jdbc.DataSourceBuilder;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.context.annotation.Primary;
    import javax.sql.DataSource;
    
    public class MultiDataSourceConfig {
    
        @Bean (name = "primaryDataSource")
        @Qualifier("primaryDataSource")
        @Primary //定义主数据源
        @ConfigurationProperties (prefix = "spring.datasource.Base")
        public DataSource primaryDataSource () { return DataSourceBuilder.create().build (); }
    
        @Bean (name = "secondaryDataSource")
        @Qualifier ("secondaryDataSource")
        @ConfigurationProperties (prefix = "spring.datasource.oa")
        public DataSource secondaryDataSource () { return DataSourceBuilder.create().build (); }
    
    }

    3、主数据源配置,指定扫描对应mapper文件以及对应xml文件,在使用mapper包下的mapper文件时会自动使用对应sql会话

    Package com.**.config;
    
    import org.apache.ibatis.session.SqlSessionFactory;
    import org.mybatis.spring.SqLSessionFactoryBean;
    import org.mybatis.spring.SqLSessionTemplate;
    import org.mybatis.spring.annotation.MapperScan;
    import org.springframework.beans.factory.annotation.Qualifier;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.context.annotation.Primary;
    import org.springframeworkcore.io.support.PathMatchingResourcePatternResolver;
    import org.spr ingframework.jdbc.datasource.DataSourceTransactionManager;
    import org.springframework.transaction.PlatformTransactionManager;
    import javax.sql.DataSource;
    
    @Configuration
    @MapperScan (basePackages = "com.**.mapper", sqlSessionTemplateRef = "primarySqlSessionTemplate")
    public class SqlSessionTemplate1 {
    
        @Bean (name = "primarySqlSessionFactory")
        @Primary
        public SqlSessionFactory primarySqlSessionFactory  (@Qualifier("primaryDataSource") DataSource dataSource)
                throws Exception{
            SqLSessionFactoryBean bean = new SqlSessionFactoryBean ();
            bean.setDataSource (dataSource);
            bean.setMapperLocations (new PathMatchingResourcePatternResolver().getResources (locationPattern: "classpath: mybatis/mapper/*. XmL"));
            return bean.getObject();
        }
    
        /**
         * 配置声明式事务管理器
         */
        @Bean (name = "primaryTransactionManager")
        @Primary
        public PlatformTransactionManager primaryTransactionManager  (@Qualifier("primaryDataSource") DataSource dataSource) {
            return new DataSourceTransactionManager  (dataSource);
        }
    
        @Bean (name = "primarySqlSessionTemplate")
        @Primary
        public SqlSessionTemplatel primarySqlSessionTemplate(@Qualifier("primarySqlSesionFactory") SqlSessionFactory sqlSessionFactory) throws Exception {
            return new SqlSessionTemplatel(sqlSessionFactory);
        }
    }

    4、第二数据源配置,指定扫描对应mapper文件以及对应xml文件,在使用mapper包下的mapper文件时会自动使用对应sql会话

    Package com.**.config;
    import org.apache.ibatis.session.SqlSessionFactory;
    import org.mybatis.spring.SqLSessionFactoryBean;
    import org.mybatis.spring.SqLSessionTemplate;
    import org.mybatis.spring.annotation.MapperScan;
    import org.springframework.beans.factory.annotation.Qualifier;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.context.annotation.secondary;
    import org.springframeworkcore.io.support.PathMatchingResourcePatternResolver;
    import org.spr ingframework.jdbc.datasource.DataSourceTransactionManager;
    import org.springframework.transaction.PlatformTransactionManager;
    import javax.sql.DataSource;
    @Configuration
    @MapperScan (basePackages = "com.**.oraclemapper", sqlSessionTemplateRef = "secondarySqlSessionTemplate")
    public class SqlSessionTemplate2 {
        @Bean (name = "secondarySqlSessionFactory")
        public SqlSessionFactory secondarySqlSessionFactory  (@Qualifier("secondaryDataSource") DataSource dataSource)
                throws Exception{
            SqLSessionFactoryBean bean = new SqlSessionFactoryBean ();
            bean.setDataSource (dataSource);
            bean.setMapperLocations (new PathMatchingResourcePatternResolver().getResources (locationPattern: "classpath: mybatis/oraclemapper/*. XmL"));
            return bean.getObject();
        }
    
        /**
         * 配置声明式事务管理器
         */
        @Bean (name = "secondaryTransactionManager")
        public PlatformTransactionManager secondaryTransactionManager  (@Qualifier("secondaryDataSource") DataSource dataSource) {
            return new DataSourceTransactionManager  (dataSource);
        }
    
        @Bean (name = "secondarySqlSessionTemplate")
        public SqlSessionTemplatel secondarySqlSessionTemplate(@Qualifier("secondarySqlSesionFactory") SqlSessionFactory sqlSessionFactory) throws Exception {
            return new SqlSessionTemplatel(sqlSessionFactory);
        }
    }

    至此,在service层可以像单数据源一样使用了。

    以上就是springboot项目配置两个数据源的方法的详细内容,更多请关注php中文网其它相关文章!

    声明:本文原创发布php中文网,转载请注明出处,感谢您的尊重!如有疑问,请联系admin@php.cn处理
    专题推荐:springboot
    上一篇:springboot中配置RestTemplate的方法 下一篇:Java反射机制是什么?Java反射机制的使用方法
    大前端线上培训班

    相关文章推荐

    • SpringBoot+Thymeleaf实现html文件引入(类似include功能)_html/css_WEB-ITnose• 解析springboot使用thymeleaf时报html没有结束标签• 详解springboot集成mybatis的代码实例• SpringBoot实现Spring Data JPA集成的实例详解• jdbctemplate在SpringBoot中运行MYSQL的代码实例• SpringBoot入门第一章:Hello World• SpringBoot之集成Spring aop实例介绍

    全部评论我要评论

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

    PHP中文网