iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > JAVA >【Java】Spring Boot配置动态数据源
  • 716
分享到

【Java】Spring Boot配置动态数据源

javaspringboot开发语言 2023-09-15 06:09:23 716人浏览 独家记忆
摘要

SpringBoot配置动态数据源 一、动态多数据源的配置 1.1 创建动态数据源 通过实现spring提供的AbstractRoutingDataSource类,可以实现自己的数据源选择逻辑,从而可

SpringBoot配置动态数据源

一、动态多数据源的配置

1.1 创建动态数据源

通过实现spring提供的AbstractRoutingDataSource类,可以实现自己的数据源选择逻辑,从而可以实现数据源的动态切换。

public class DynamicDataSource extends AbstractRoutingDataSource {    @Value("${spring.datasource.default-db-key}")    private String defaultDbKey;·    @Override    protected Object determineCurrentLookupKey() {        String currentDb = DynamicDataSourceService.currentDb();        if (currentDb == null) {            return defaultDbKey;        }        return currentDb;    }}

1.2 创建动态数据源配置类

跟配置静态多数据源一样,需要手动配置下面的三个 Bean,只不过DynamicDataSource类的targetDataSources是空的。

@Configurationpublic class DynamicDataSourceConfig {        @Bean    public DynamicDataSource dynamicDataSource() {        DynamicDataSource dataSource = new DynamicDataSource();        Map<Object, Object> targetDataSources = new HashMap<>();        dataSource.setTargetDataSources(targetDataSources);        return dataSource;    }        @Bean    public sqlSessionFactoryBean sqlSessionFactoryBean() throws IOException {        org.apache.ibatis.session.Configuration configuration = new org.apache.ibatis.session.Configuration();        configuration.setMapUnderscoreToCamelCase(true);        SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();        sqlSessionFactoryBean.setDataSource(dynamicDataSource());        sqlSessionFactoryBean.setConfiguration(configuration);        PathMatchingResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();        sqlSessionFactoryBean.setMapperLocations(resolver.getResources("classpath*:/repository    @Bean    public PlatfORMTransactionManager transactionManager() {        return new DataSourceTransactionManager(dynamicDataSource());    }    }

1.3 创建动态数据源服务类

这是一个比较核心的工具类,提供了一些静态方法从而可以实现一些功能,包括:
动态添加数据源切换数据源重置数据源获取数据源
在 DynamicDataSource 类中,就是调用了 DynamicDataSourceService 类的 switchDb
方法实现的数据源选择。
通过查看下面的代码就能看出来使用线程本地的技术实现的多个请求数据源互不相干。

@Slf4jpublic class DynamicDataSourceService {    private static final Map<Object, Object> dataSources = new HashMap<>();    private static final ThreadLocal<String> dbKeys = ThreadLocal.withInitial(() -> null);        public static void aDDDataSource(String name, DataSource dataSource) {        DynamicDataSource dynamicDataSource = App.context.getBean(DynamicDataSource.class);        dataSources.put(name, dataSource);        dynamicDataSource.setTargetDataSources(dataSources);        dynamicDataSource.afterPropertiesSet();        log.info("addDataSource 添加了数据源:{}", name);    }        public static void switchDb(String dbKey) {        dbKeys.set(dbKey);        log.info("switchDb 切换数据源:{}", dbKey);    }        public static void resetDb() {        dbKeys.remove();        log.info("resetDb 重置数据源");    }        public static String currentDb() {    log.info("currentDb 获取当前数据源");        return dbKeys.get();    }}

至此,动态多数据源的配置就完成了,只需要编写数据源生成的逻辑,在程序运行时调用 addDataSource 方法即可将数据源动态添加到上下文中,并支持动态切换。

下面简单介绍一下基于配置文件的数据源生成。

二、数据源生成器

2.1 自定义了一个数据源生成器接口用于定义动态生成数据源的要求。

public interface DataSourceProvider {    List<DataSource> provide();}

2.2 然后编写了一个根据配置文件提供数据源并配置的实现类。

@Component@ConfigurationProperties(prefix = "spring.datasource.hikari")public class YmlDataSourceProvider implements DataSourceProvider {    private List<Map<String, DataSourceProperties>> dataSources;    private DataSource buildDataSource(DataSourceProperties prop) {        DataSourceBuilder<?> builder = DataSourceBuilder.create();        builder.driverClassName(prop.getDriverClassName());        builder.username(prop.getUsername());        builder.passWord(prop.getPassword());        builder.url(prop.getJdbcUrl());        return builder.build();    }    @Override    public List<DataSource> provide() {        List<DataSource> res = new ArrayList<>();        dataSources.forEach(map -> {            Set<String> keys = map.keySet();            keys.forEach(key -> {                DataSourceProperties properties = map.get(key);                DataSource dataSource = buildDataSource(properties);                DynamicDataSourceService.addDataSource(key, dataSource);            });        });        return res;    }    @PostConstruct    public void init() {        provide();    }    public List<Map<String, DataSourceProperties>> getDataSources() {        return dataSources;    }    public void setDataSources(List<Map<String, DataSourceProperties>> dataSources) {        this.dataSources = dataSources;    }}

看一下对应的配置文件内容:

spring:  datasource:    default-db-key: db0    hikari:      data-sources:        - db0:            jdbc-url: jdbc:Mysql://127.0.0.1:3306/codingcea            username: codinGCe            password: 1234567890            driver-class-name: com.mysql.cj.jdbc.Driver        - db1:            jdbc-url: jdbc:mysql://127.0.0.1:3306/codingceb            username: codingce            password: 1234567890            driver-class-name: com.mysql.cj.jdbc.Driver

这样就实现了应用启动时自动将配置文件中的数据源配置读取并生成数据源注册到上下文中;
当然也可以有其他的实现,比如从数据库读取并配置,或者通过接口请求的方式生成都可以,只要实现自己的DataSourceProvider就可以。

来源地址:https://blog.csdn.net/weixin_43874301/article/details/131470225

--结束END--

本文标题: 【Java】Spring Boot配置动态数据源

本文链接: https://www.lsjlt.com/news/408217.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 【Java】Spring Boot配置动态数据源
    SpringBoot配置动态数据源 一、动态多数据源的配置 1.1 创建动态数据源 通过实现Spring提供的AbstractRoutingDataSource类,可以实现自己的数据源选择逻辑,从而可...
    99+
    2023-09-15
    java spring boot 开发语言
  • Spring boot中如何配置Mybatis多数据源
    本篇文章为大家展示了Spring boot中如何配置Mybatis多数据源,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。环境准备实验环境:JDK 1.8Spring...
    99+
    2024-04-02
  • spring boot 配置动态刷新详解
    本文测试使用的springcloud版本为: Dalston.SR1 很多朋友只知道springcloudconfig可以刷新远程git的配置到内存中, 却不知道springclou...
    99+
    2024-04-02
  • 动态数据源dynamic-datasource-spring-boot-starter怎么使用
    这篇文章主要讲解了“动态数据源dynamic-datasource-spring-boot-starter怎么使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“动态数据源dynamic-da...
    99+
    2023-07-05
  • Spring boot 数据源未配置异常的解决
    Spring boot 数据源未配置异常 问题 在使Springboot自动生成的项目框架时如果选择了数据源,比如选择了mysql,生成项目之后,启动会报一下异常: Descrip...
    99+
    2024-04-02
  • spring boot下mybatis配置双数据源的实例
    目录单一数据源配置多个数据源配置多数据源配置文件多数据源配置类最近项目上遇到需要双数据源的来实现需求,并且需要基于spring boot,mybatis的方式来实现,在此做简单记录。...
    99+
    2024-04-02
  • Spring Boot配置多数据源的四种方式
    1、导读 在日常开发中我们都是以单个数据库进行开发,在小型项目中是完全能够满足需求的。 但是,当我们牵扯到像淘宝、京东这样的大型项目的时候,单个数据库就难以承受用户的CRUD操作。 那么此时,我们就需要使用多个数据源进行读写分离的操作,这种...
    99+
    2023-08-20
    spring boot java 数据库 mybatis 后端
  • Spring Boot 2.7.5 HikariCP 连接池多数据源配置
    一. 引言 当前项目遇到需要连接多个数据库的场景,此时需要引入多数据源了. 还有一些诸如以下的场景: 与第三方对接时,有些合作方并不会为了你的某些需求而给你开发一个功能,他们可以提供给你一个可以访...
    99+
    2023-08-31
    spring boot mybatis java
  • BIRT怎么配置动态数据源
    小编今天带大家了解BIRT怎么配置动态数据源,文中知识点介绍的非常详细。觉得有帮助的朋友可以跟着小编一起浏览文章的内容,希望能够帮助更多想解决这个问题的朋友找到问题的答案,下面跟着小编一起深入学习“BIRT怎么配置动态数据源”的知识吧。BI...
    99+
    2023-06-03
  • Jasper如何配置动态数据源
    Jasper如何配置动态数据源,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。Jasper 本身是不支持动态数据源的,能用的解决方式是通过 api 自定义数据源,...
    99+
    2023-06-03
  • 多数据源怎么利用spring boot进行配置
    本篇文章给大家分享的是有关多数据源怎么利用spring boot进行配置,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。多数据源配置创建一个Spring配置类,定义两个DataS...
    99+
    2023-05-31
    springboot 多数据源
  • 如何解决Spring boot数据源未配置异常
    本篇内容主要讲解“如何解决Spring boot数据源未配置异常”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何解决Spring boot数据源未配置异常”吧!Spring boot 数据源未...
    99+
    2023-06-20
  • 解决spring boot 1.5.4 配置多数据源的问题
    spring boot 已经支持多数据源配置了,无需网上好多那些编写什么类的,特别麻烦,看看如下解决方案,官方的,放心!1.首先定义数据源配置#=====================multiple database config===...
    99+
    2023-05-31
    springboot 多数据源 配置
  • 解读动态数据源dynamic-datasource-spring-boot-starter使用问题
    目录dynamic-datasource-spring-boot-starter使用特性约定使用方法总结dynamic-datasource-spring-boot-starter使...
    99+
    2023-03-21
    解读动态数据源 dynamic-datasource-spring-boot-starter
  • 详解基于Spring Boot与Spring Data JPA的多数据源配置
    由于项目需要,最近研究了一下基于spring Boot与Spring Data JPA的多数据源配置问题。以下是传统的单数据源配置代码。这里使用的是Spring的Annotation在代码内部直接配置的方式,没有使用任何XML文件。@Con...
    99+
    2023-05-31
    spring boot 多数据源
  • 详解Spring Boot整合Mybatis实现 Druid多数据源配置
    一、多数据源的应用场景目前,业界流行的数据操作框架是 Mybatis,那 Druid 是什么呢?Druid 是 Java 的数据库连接池组件。Druid 能够提供强大的监控和扩展功能。比如可以监控 SQL ,在监控业务可以查询慢查询 SQL...
    99+
    2023-05-31
    spring 多数据源 spring boo
  • Spring Boot多数据源及其事务管理配置方法
    准备工作先给我们的项目添加Spring-JDBC依赖和需要访问数据库的驱动依赖。配置文件spring.datasource.prod.driverClassName=com.mysql.jdbc.Driverspring.datasourc...
    99+
    2023-05-31
    spring boot 多数据源
  • Spring boot 应用实现动态刷新配置详解
    目录1. 依赖2. 配置暴露接口3. @RefreshScope4. 启动服务6. 获取配置值7. 刷新配置 重新获取总结前面写过一篇《Spring Cloud Bus 实现配置实时...
    99+
    2024-04-02
  • spring boot怎么配置静态路径
    这篇文章主要介绍了spring boot怎么配置静态路径的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇spring boot怎么配置静态路径文章都会有所收获,下面我们一起来看看吧。一&nbs...
    99+
    2023-06-29
  • springboot配置多数据源的一款框架(dynamic-datasource-spring-boot-starter)
    目录前言框架简介基本使用 框架说明与 springboot 的整合数据准备引入依赖springboot 配置文件启动类实体类service 层controller 层测试前...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作