SpringBoot项目配置Oracle和SqlServer数据库(分包实现),亲测有效。

主要的包结构

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
首先,包结构要规范。
然后,依赖导入。

<!--这是Oracle和SqlServer的依赖-->
        <dependency>
            <groupId>com.oracle</groupId>
            <artifactId>ojdbc6</artifactId>
            <version>12.1.0.1-atlassian-hosted</version>
        </dependency>
        <dependency>
            <groupId>com.microsoft.sqlserver</groupId>
            <artifactId>mssql-jdbc</artifactId>
            <scope>provided</scope>
        </dependency>

接下来是两个配置文件的代码。

package com.XX.XX.config.DataSource;

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.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 org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;

import javax.sql.DataSource;

/**
 * @author Yover.Huang
 * @Description TODO
 * @date 2020/5/16
 */
@Configuration
@MapperScan(basePackages = "com.XX.XX.dao.Oracle", sqlSessionTemplateRef = "test1SqlSessionTemplate")
public class OracleDataSourceConfig {

    @Bean(name = "test1DataSource")
    @Primary
    @ConfigurationProperties(prefix = "spring.datasource.db1")
    public DataSource testDataSource(){
        return DataSourceBuilder.create().build();
    }

    @Primary
    @Bean(name = "test1SqlSessionFactory")
    public SqlSessionFactory testSqlSessionFactory(
             @Qualifier("test1DataSource")DataSource dataSource) throws Exception {
        SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
        bean.setDataSource(dataSource);
        bean.setMapperLocations(
                new PathMatchingResourcePatternResolver().getResources("classpath:mapper/Oracle/*.xml"));
        return bean.getObject();
    }

    @Bean(name = "test1TransactionManager")
    @Primary
    public DataSourceTransactionManager testTransactionManager(
            @Qualifier("test1DataSource") DataSource dataSource){
        return new DataSourceTransactionManager(dataSource);
    }

    @Bean(name = "test1SqlSessionTemplate")
    @Primary
    public SqlSessionTemplate testSqlSessionTemplate(
            @Qualifier("test1SqlSessionFactory") SqlSessionFactory sqlSessionFactory
    ){
        return new SqlSessionTemplate(sqlSessionFactory);
    }
}

SqlServerDataSourceConfig.java

package com.XX.XX.config.DataSource;

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.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.core.io.support.PathMatchingResourcePatternResolver;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;

import javax.sql.DataSource;

/**
 * @author Yover.Huang
 * @Description TODO
 * @date 2020/5/16
 */
@Configuration
@MapperScan(basePackages = "com.XX.XX.dao.SqlServer", sqlSessionTemplateRef = "test2SqlSessionTemplate")
public class SqlServerDataSourceConfig {

    @Bean(name = "test2DataSource")
    @ConfigurationProperties(prefix = "spring.datasource.db2")
    public DataSource testDataSource(){
        return DataSourceBuilder.create().build();
    }

    @Bean(name = "test2SqlSessionFactory")
    public SqlSessionFactory testSqlSessionFactory(
            @Qualifier("test2DataSource")DataSource dataSource) throws Exception {
        SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
        bean.setDataSource(dataSource);
        bean.setMapperLocations(
                new PathMatchingResourcePatternResolver().getResources("classpath:mapper/SqlServer/*.xml"));
        return bean.getObject();
    }

    @Bean(name = "test2TransactionManager")
    public DataSourceTransactionManager testTransactionManager(
            @Qualifier("test2DataSource") DataSource dataSource){
        return new DataSourceTransactionManager(dataSource);
    }

    @Bean(name = "test2SqlSessionTemplate")
    public SqlSessionTemplate testSqlSessionTemplate(
            @Qualifier("test2SqlSessionFactory") SqlSessionFactory sqlSessionFactory
    ){
        return new SqlSessionTemplate(sqlSessionFactory);
    }
h1}

如果你是复制粘贴狂魔,那么配置文件的代码可要看仔细了,无法运行的话欢迎留言。另外需要注意的是,在配置文件中,已经有了@MapperScan注解,如果你的启动类里有@MapperScan注解需要删除,否则会报错,会发生Bean注入冲突,因为扫描了两次同样的Bean。

mapper和mapper.xml的代码就不导入了。

我的配置文件时application.yml,不管你是.yml还是.properties都是一样的。
SpringBoot项目配置Oracle和SqlServer数据库(分包实现),亲测有效。_第1张图片
红色标注的地方是需要注意的,这是springBoot 2.0+读取数据源的时候需要的命名规范,

不能只写一个url和driverclass,要写成jdbc-url,driver-class-name。

这一块的详情就去百度吧。

图片上的db1和db2是有用处的,在前面写的配置文件上有用到,可以认为是一个选择器,当调用mapper操作数据库的时候,就会根据这个标识来选择需要使用到哪一个数据源。

你可能感兴趣的:(mybatis,spring,boot,spring,数据库)