IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> SpringBoot 整合多数据源 -> 正文阅读

[Java知识库]SpringBoot 整合多数据源

mybatis提供的@MapperScan注解中有一个属性叫做sqlSessionTemplateRef,通过给这个属性提供不同的模板实现,可以在同一个项目中使用多数据源。

不过这种方式只能以包的粒度划分,最终的效果大概是:对com.XX.A包使用1号数据源,对com.XX.B包使用2号数据源。

如果需要更精细化的控制,可以考虑使用第三方框架,但不在本文涉及范围内。

GitHub - baomidou/dynamic-datasource-spring-boot-starter: dynamic datasource for springboot 多数据源 动态数据源 主从分离 读写分离 分布式事务https://github.com/baomidou/dynamic-datasource-spring-boot-starter

依赖

首先引入依赖:

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>

        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
        </dependency>

SpringBoot2.X自带了数据源Hikari,如果是SpringBoot1.X,则需要自己单独引入一下。

当然,用其他数据源(比如druid)也可以。

        <dependency>
            <groupId>com.zaxxer</groupId>
            <artifactId>HikariCP</artifactId>
            <version>3.4.5</version>
        </dependency>

配置文件

为了更清晰点,就不把数据库配置文件和主配置文件放一起了。

新建两个properties文件,放在resources目录下,分别存放两个数据源的配置

wms-mysql.properties

jdbc.wms.driverClassName = com.mysql.jdbc.Driver
jdbc.wms.url = jdbc:mysql://localhost:3306/wms_test?useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&useSSL=false
jdbc.wms.username = root
jdbc.wms.password = root

wcs-mysql.properties

jdbc.wcs.driverClassName = com.mysql.jdbc.Driver
jdbc.wcs.url = jdbc:mysql://localhost:3306/wcs_test?useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&useSSL=false
jdbc.wcs.username = root
jdbc.wcs.password = root

配置类

注意:basePackages配置的包路径,是Dao接口存放的路径,也是当前数据源配置项生效的范围。

第一个数据源配置类:

@Configuration
@PropertySource("classpath:wms-mysql.properties")
@MapperScan(basePackages = "com.zikoo.datasource.demo.wmsdao", sqlSessionTemplateRef = "wmsSqlSessionTemplate")
public class WmsDataSourceConfig {
    @Value("${jdbc.wms.driverClassName}")
    private String driverClassName;

    @Value("${jdbc.wms.url}")
    private String url;

    @Value("${jdbc.wms.username}")
    private String userName;

    @Value("${jdbc.wms.password}")
    private String password;

    @Primary
    @Bean(name = "wmsDataSource")
    public DataSource wmsDataSource() {
        HikariDataSource hikariDataSource = new HikariDataSource();
        hikariDataSource.setDriverClassName(driverClassName);
        hikariDataSource.setJdbcUrl(url);
        hikariDataSource.setUsername(userName);
        hikariDataSource.setPassword(password);
        hikariDataSource.setPoolName("wms");
        hikariDataSource.setMaxLifetime(290000);
        hikariDataSource.setMaximumPoolSize(64);
        hikariDataSource.setMinimumIdle(4);
        return hikariDataSource;
    }

    @Primary
    @Bean(name = "wmsSqlSessionFactory")
    public SqlSessionFactory wmsSqlSessionFactory(@Qualifier("wmsDataSource") DataSource dataSource) throws Exception {
        SqlSessionFactoryBean sqlSessionFactory = new SqlSessionFactoryBean();
        sqlSessionFactory.setDataSource(dataSource);
        sqlSessionFactory.setVfs(SpringBootVFS.class);

        //配置xml
//        sqlSessionFactory.setMapperLocations(new PathMatchingResourcePatternResolver().
//                getResources(""));
        return sqlSessionFactory.getObject();
    }

    @Primary
    @Bean(name = "wmsTransactionManager")
    public DataSourceTransactionManager wmsTransactionManager(@Qualifier("wmsDataSource") DataSource dataSource) {
        return new DataSourceTransactionManager(dataSource);
    }

    @Primary
    @Bean(name = "wmsSqlSessionTemplate")
    public SqlSessionTemplate wmsSqlSessionTemplate(@Qualifier("wmsSqlSessionFactory") SqlSessionFactory sqlSessionFactory) {
        return new SqlSessionTemplate(sqlSessionFactory);
    }
}

第二个数据源配置类

@Configuration
@PropertySource("classpath:wcs-mysql.properties")
@MapperScan(basePackages = "com.zikoo.datasource.demo.wcsdao", sqlSessionTemplateRef = "wcsSqlSessionTemplate")
public class WcsDataSourceConfig {

    @Value("${jdbc.wcs.driverClassName}")
    private String driverClassName;

    @Value("${jdbc.wcs.url}")
    private String url;

    @Value("${jdbc.wcs.username}")
    private String userName;

    @Value("${jdbc.wcs.password}")
    private String password;

    @Bean(name = "wcsDataSource")
    public DataSource wcsDataSource() {
        HikariDataSource hikariDataSource = new HikariDataSource();
        hikariDataSource.setDriverClassName(driverClassName);
        hikariDataSource.setJdbcUrl(url);
        hikariDataSource.setUsername(userName);
        hikariDataSource.setPassword(password);
        hikariDataSource.setPoolName("wcs");
        hikariDataSource.setMaxLifetime(290000);
        hikariDataSource.setMaximumPoolSize(64);
        hikariDataSource.setMinimumIdle(4);
        return hikariDataSource;
    }

    @Bean("wcsSqlSessionFactory")
    public SqlSessionFactory wcsSqlSessionFactory(@Qualifier("wcsDataSource") DataSource dataSource) throws Exception {
        SqlSessionFactoryBean sqlSessionFactory = new SqlSessionFactoryBean();
        sqlSessionFactory.setDataSource(dataSource);
        sqlSessionFactory.setVfs(SpringBootVFS.class);

        //配置xml
//        sqlSessionFactory.setMapperLocations(new PathMatchingResourcePatternResolver().
//                getResources(""));
        return sqlSessionFactory.getObject();
    }

    @Bean(name = "wcsTransactionManager")
    public DataSourceTransactionManager wcsTransactionManager(@Qualifier("wcsDataSource") DataSource dataSource) {
        return new DataSourceTransactionManager(dataSource);
    }

    @Bean(name = "wcsSqlSessionTemplate")
    public SqlSessionTemplate wcsSqlSessionTemplate(@Qualifier("wcsSqlSessionFactory") SqlSessionFactory sqlSessionFactory) {
        return new SqlSessionTemplate(sqlSessionFactory);
    }
}

目录结构

  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2022-06-26 16:47:16  更:2022-06-26 16:47:30 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 17:18:22-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码