springboot添加动态数据源(配置默认数据源和不配置默认数据源)

       初入职场,菜鸟程序员接到个小任务,其中有部分功能是需要动态添加数据源的,着实有些头痛,经过网上一些资料的查找和整理,现将最后的结果与大家进行分享。

一、不配置默认数据源

       刚开始需求所需不配置默认数据源。参考了下方连接的文章。

       参考链接:https://blog.csdn.net/ylforever/article/details/79600631.
       原文项目Github代码:https://github.com/ylforever/elon-dynamicdatasource.

       由于我方需求需要从前台页面填写数据链接信息,保存到文件中,在从文件中获取到该信息,根据前台所传的SQL语句进行动态查询,经过对项目的修改进行简单实现,省略了前台操作,直接进行了文件操作与sql的动态注入。需要支持不同数据库的,只需在pom文件中加入不同的依赖即可,修改后的代码放到了Github上,有需要的朋友可以看一下,同时希望大佬们对我进行一些指导。https://github.com/jian-sir/study-db-dynamic-notdefault.

部分截图

       配置文件
在这里插入图片描述
       mapper文件,采用注入sql方式
在这里插入图片描述

       动态注入mapper提供sql语句的类,可以自己从文件中读取sql语句,或者根据自己的需求来,这里将数据写死。
在这里插入图片描述
       该方式在使用时遇到了一些问题,当时用xml文件时,在yml配置文件配置mapper映射文件路径无效,必须mapper.java的路径和resource下mapper.xml文件的路径相同。

二、配置默认数据源

       写完上面那个之后,启动项目后发现,项目中其他地方需要配置默认的数据源,只好重新改写代码,改为启动配置默认数据源,后续在前台动态添加数据源。该部分参考了下方文章。同时附上自己遇到的问题与解决方案。

       文章来源:博客园–听说我很强
       参考链接:https://www.cnblogs.com/tswhq/p/11668078.html.

       根据我方需求修改后的代码也传到了Github上:https://github.com/jian-sir/study-db-dynamic-default.

       配置文件信息
在这里插入图片描述
       该项目运行期间上文中的mapper问题没有出现,但是出现了另一问题,项目中的其他service层注入到controller层中报错,提示Consider marking one of the beans as @Primary, updating the consumer to accept multiple beans, or using @Qualifier to identify the bean that should be consumed。可能与数据源的优先级有关。由于获取数据源的方式与上文不同,没有通过使用@Primary方式解决,而是在service层的实现类中添加@Service(“xxx”),在controller层注入的时候使用@Qualifier(“xxx”)解决。

       第一次写文章,不知道写些什么,只是把自己所遇到的问题和解决方式说了一下,当然还有一些没有解决的,如果有大佬看到这篇文章,希望能够指点一二。

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Spring Boot配置动态数据源,需要完成以下几个步骤: 1. 创建一个继承自`AbstractRoutingDataSource`的类,比如`DynamicDataSource`,用于实现数据源选择逻辑。在这个类中,可以通过重写`determineCurrentLookupKey`方法来确定当前使用的数据源。可以根据需要进行动态切换,并返回对应的数据源标识。 2. 创建动态数据源配置类,用于配置数据源的生成逻辑。在这个配置类中,可以通过调用`addDataSource`方法将数据源动态添加到上下文中,并支持动态切换。 3. 配置默认数据源。可以使用Spring Boot提供的`spring.datasource`配置项来配置默认数据源,包括驱动类名、JDBC URL、用户名、密码等信息。 下面是一个示例代码: ```java 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; } } ``` 在配置类中,可以通过`@Configuration`注解将其声明为一个配置类,并使用`@Bean`注解将`DynamicDataSource`类注册为一个Bean: ```java @Configuration public class DataSourceConfig { // 其他配置... @Bean public DataSource dynamicDataSource() { DynamicDataSource dynamicDataSource = new DynamicDataSource(); // 配置其他数据源... return dynamicDataSource; } } ```

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值