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.

部分截图

       配置文件
springboot添加动态数据源(配置默认数据源和不配置默认数据源)
       mapper文件,采用注入sql方式
springboot添加动态数据源(配置默认数据源和不配置默认数据源)

       动态注入mapper提供sql语句的类,可以自己从文件中读取sql语句,或者根据自己的需求来,这里将数据写死。
springboot添加动态数据源(配置默认数据源和不配置默认数据源)
       该方式在使用时遇到了一些问题,当时用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.

       配置文件信息
springboot添加动态数据源(配置默认数据源和不配置默认数据源)
       该项目运行期间上文中的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”)解决。

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