龙空技术网

SpringBoot项目如何使用Mybatis连接多个数据源

猿经验 112

前言:

现时朋友们对“jdbc连接oracle数据库url”大致比较注意,姐妹们都想要分析一些“jdbc连接oracle数据库url”的相关文章。那么小编也在网摘上汇集了一些有关“jdbc连接oracle数据库url””的相关资讯,希望看官们能喜欢,大家一起来了解一下吧!

说明

在SpringBoot项目中使用Mybatis访问数据库非常方便,同时也支持访问多个数据源,有一种实现方式是分包实现,就是将不同数据源生成的mybatis接口类、xml映射文件、pojo文件放到不同的package里面,以此实现互不干扰,独立使用的目的,下面分享一下我的使用经验。

多数据库连接配置

在yml文件中配置多个数据库连接:

spring:  #mysql数据库配置  mysqldatasource:    driver-class-name: com.mysql.jdbc.Driver    #    本地库    url: jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&characterEncoding=utf-8&useSSL=false    username: root    password: mysql    initialSize: 5    maxActive: 50    maxIdle: 10    minIdle: 1    maxWait: 60000    timeBetweenEvictionRunsMillis: 60000    minEvictableIdleTimeMillis: 300000    validationQuery: select 1 from dual    testWhileIdle: true    testOnBorrow: true    testOnReturn: false    poolPreparedStatements: true    maxOpenPreparedStatements: 50  # Oracle数据库配置  oracledatasource:    driver-class-name: oracle.jdbc.OracleDriver    url: jdbc:oracle:thin:@127.0.0.1:1521:orcl    username: TEST    password: TEST    initialSize: 5    maxActive: 50    maxIdle: 10    minIdle: 1    maxWait: 60000    timeBetweenEvictionRunsMillis: 60000    minEvictableIdleTimeMillis: 300000    validationQuery: select 1 from dual    testWhileIdle: true    testOnBorrow: true    testOnReturn: false    poolPreparedStatements: true    maxOpenPreparedStatements: 50

要给不同的数据源起不同的名字,比如mysql的数据源叫mysqldatasource,oracle的数据源叫oracledatasource。

配置多个数据源的连接文件

mysql数据源的配置文件MysqlDataSourceConfig:

//表示这个类是一个配置类@Configuration//配置mybatis接口类放置的地方@MapperScan(basePackages = "com.test.mapper", sqlSessionFactoryRef = "mysqlSqlSessionFactory")public class MysqlDataSourceConfig {    //表示这个数据源是默认的数据源    @Primary    //将这个对象放入Spring容器中    @Bean(name = "mysqlDBDataSource")    //读取yml中的数据库配置参数,映射成为一个对象,prefix表示参数的前缀    @ConfigurationProperties(prefix="spring.mysqldatasource") //告诉自动加载配置的属性    public DataSource dataSource() {        DruidDataSource ds=new DruidDataSource();        return ds;    }    @Bean(name = "mysqlSqlSessionFactory")    // 表示这个数据源是默认数据源    @Primary    // @Qualifier表示查找Spring容器中名字为mysqlDBDataSource的对象    public SqlSessionFactory mysqlSqlSessionFactory(@Qualifier("mysqlDBDataSource") DataSource datasource)            throws Exception {        SqlSessionFactoryBean bean = new SqlSessionFactoryBean();        bean.setDataSource(datasource);        bean.setMapperLocations(                // 设置mybatis的xml所在位置                new PathMatchingResourcePatternResolver().getResources("classpath*:mysqlmybatis/*.xml"));        return bean.getObject();    }    @Bean("mysqlSqlSessionTemplate")    // 表示这个数据源是默认数据源    @Primary    public SqlSessionTemplate mysqlsqlsessiontemplate(            @Qualifier("mysqlSqlSessionFactory") SqlSessionFactory sessionfactory) {        return new SqlSessionTemplate(sessionfactory);    }}

oracle数据源的配置文件OracleDataSourceConfig:

//表示这个类是一个配置类@Configuration//配置mybatis接口类放置的地方@MapperScan(basePackages = "com.test.oraclemapper", sqlSessionFactoryRef = "oracleSqlSessionFactory")public class OracleDataSourceConfig {    //将这个对象放入Spring容器中    @Bean(name = "oracleDataSource")    //读取yml中的数据库配置参数,映射成为一个对象,prefix表示参数的前缀    @ConfigurationProperties(prefix="spring.oracledatasource") //告诉自动加载配置的属性    public DataSource sqlserverDataSource() {        DruidDataSource ds=new DruidDataSource();        return ds;    }    @Bean(name = "oracleSqlSessionFactory")    // @Qualifier表示查找Spring容器中名字为oracleDataSource的对象    public SqlSessionFactory oracleSqlSessionFactory(@Qualifier("oracleDataSource") DataSource datasource)            throws Exception {        SqlSessionFactoryBean bean = new SqlSessionFactoryBean();        bean.setDataSource(datasource);        bean.setMapperLocations(                // 设置mybatis的xml所在位置                new PathMatchingResourcePatternResolver().getResources("classpath*:oraclemybatis/*.xml"));        return bean.getObject();    }    @Bean("oracleSqlSessionTemplate")    public SqlSessionTemplate oraclesqlsessiontemplate(            @Qualifier("oracleSqlSessionFactory") SqlSessionFactory sessionfactory) {        return new SqlSessionTemplate(sessionfactory);    }}

其中,比较关键的一个配置就是@ConfigurationProperties(prefix="spring.mysqldatasource"),这个配置说的就是从yml文件里面找到对应数据源的配置信息:

操作不同的数据源

按照上面的配置将不同数据源生成的mybatis接口类、xml映射文件、pojo文件放到不同的package里面以后就可以直接用各自数据源的mapper接口对象来操作相应的数据库了。

  @Autowired  private OracleTableMapper oracleMapper;		@Autowired	private MysqlTableMapper mysqlMapper;
注意事项

1、如果没有将不同数据源生成的mybatis接口类、xml映射文件、pojo文件放到完全独立的不同的package里面,而是放到了一个package下面,或者将一个数据源的相关文件放到了另一个数据源package下一级的package中,即使是分别配置了mybatis接口类的位置和xml映射文件的位置,也会导致数据库访问失败。

标签: #jdbc连接oracle数据库url