java添加多数据源

主数据源的配置类:数据库用的是MySQL

package com.juqent.cps.system.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.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.jdbc.DataSourceBuilder;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.*;

import javax.sql.DataSource;

@Configuration
//这个是你需要使用主数据源要扫描的mapper接口文件的路径
@MapperScan(basePackages = "com.juqent.cps.**.mapper", sqlSessionTemplateRef = "sqlSessionTemplatePrimary")
public class PrimaryDataSourceConfig {

    @Primary
    @Bean(name = "primaryDataSource")
    //@ConfigurationProperties(prefix = "spring.datasource.dynamic.druid.datasource.master")
    public DataSource dataSource() {
        return DataSourceBuilder.create().driverClassName("com.mysql.cj.jdbc.Driver")
                .url("jdbc:mysql://192.168.0.157:3306/data?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&allowMultiQueries=true")
                .username("root")
                .password("123456").build();
    }

    @Primary
    @Bean(name = "sqlSessionFactoryPrimary")
    public SqlSessionFactory sqlSessionFactory(@Qualifier("primaryDataSource") DataSource dataSource, ApplicationContext applicationContext) throws Exception {
        SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();
        sqlSessionFactoryBean.setDataSource(dataSource);
//applicationContext.getResources( "classpath*:**/mapper/*/*.xml")这个路径是你要映射XML文件,也就是mapper接口对应的...Mapper.xml文件的路径
        sqlSessionFactoryBean.setMapperLocations(applicationContext.getResources( "classpath*:**/mapper/*/*.xml"));
        return sqlSessionFactoryBean.getObject();
    }

    @Primary
    @Bean(name = "sqlSessionTemplatePrimary")
    public SqlSessionTemplate sqlSessionTemplate(@Qualifier("sqlSessionFactoryPrimary") SqlSessionFactory sqlSessionFactory) throws Exception {
        return new SqlSessionTemplate(sqlSessionFactory);
    }
}

第二数据源的配置文件:用的数据库是SQLSever

package com.juqent.cps.system.config;

import com.juqent.cps.base.syn.SynchronizationMaterialTypeMapper;
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.jdbc.DataSourceBuilder;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import javax.sql.DataSource;

@Configuration
//这个mapper路径我为了防止主数据源扫描到所以没有把第二数据源mapper目录放到mapper目录下,我放到了syn目录下。
@MapperScan(basePackages = "com.juqent.cps.base.**.syn", sqlSessionTemplateRef = "sqlSessionTemplateSecondary")
public class SecondaryDataSourceConfig {
    @Bean(name = "secondaryDataSource")
    //@ConfigurationProperties(prefix = "mybatis.datasource.secondary")
    public DataSource dataSource() {
        return DataSourceBuilder.create().driverClassName("com.microsoft.sqlserver.jdbc.SQLServerDriver")
                .url("jdbc:sqlserver://192.168.0.158:1433;databaseName=UFDATA_001_2018")
                .username("sa")
                .password("SA123sajuqent").build();
    }

    @Bean(name = "secondarySqlSessionFactory")
    public SqlSessionFactory sqlSessionFactory(@Qualifier("secondaryDataSource") DataSource dataSource,
                                               ApplicationContext applicationContext) throws Exception {
        SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();
        sqlSessionFactoryBean.setDataSource(dataSource);
//这个xml路径我是在mapper路径下多放了一层叫syn的目录下
        sqlSessionFactoryBean.setMapperLocations(applicationContext.getResources("classpath*:mapper/base/syn/*Mapper.xml"));
        return sqlSessionFactoryBean.getObject();
    }

    @Bean(name = "sqlSessionTemplateSecondary")
    public SqlSessionTemplate sqlSessionTemplate(@Qualifier("secondarySqlSessionFactory") SqlSessionFactory sqlSessionFactory) throws Exception {
        return new SqlSessionTemplate(sqlSessionFactory);
    }


}

如果不想把数据库的账号密码写到代码里其实你可以用这个注解

@ConfigurationProperties(prefix = "mybatis.datasource.secondary")

注解下面的路径就是你数据源在配置文件中的配置路径。

目录结构这是两个数源配置文件的路径

至于pom里面的依赖我就不一一展示了,MySQL的比较简单,但是我第二数据源用的是sqlSever说以一定要把SqlServer的驱动依赖放进去

                <dependency>
                <groupId>com.microsoft.sqlserver</groupId>
                <artifactId>mssql-jdbc</artifactId>
                <version>8.4.1.jre8</version> <!-- 版本号可能需要根据实际情况调整 -->
                </dependency>

  • 6
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值