Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

dynamic-datasource多库配置,一个库连不上,整个程序都会终止运行,这个问题要如何避免? #311

Closed
Hu-J-H opened this issue Dec 3, 2020 · 9 comments

Comments

@Hu-J-H
Copy link

Hu-J-H commented Dec 3, 2020

baomidou团队推出dynamic-datasource模块,用来配置多数据库源还是十分方便的 —— 不用写繁琐的Config Bean,直接在dao类里打@ds注解就可以了。

        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>dynamic-datasource-spring-boot-starter</artifactId>
            <version>2.5.6</version>
        </dependency>

但我最近发现一个问题:当你所配置的多个数据源里面,只要有1个数据源无法访问,整个程序在启动时就会报错终止,不再运行。

虽然这个问题发生的情况不算多,但还是有可能会遇到,因此我希望能够避免。

换言之:我希望当某个数据源连不上时,仅影响该数据源本身,而不是终止整个程序。 让其他能够正常连接的数据源依然能够正常运作。

这个要如何配置呢?或者有什么改进方案没?

https://www.zhihu.com/question/395982380

@huayanYu
Copy link
Member

huayanYu commented Dec 3, 2020

暂时无法配置,很难处理。 你可以看源码尝试修改试试。

@huayanYu
Copy link
Member

huayanYu commented Dec 4, 2020

@Hu-J-H 项目启动的时候参数配置有错误无法启动是很正常的。 你也可以项目只配置一个主数据源,然后通过高级里的动态加载再项目启动完成后再动态的去增加。

@Hu-J-H
Copy link
Author

Hu-J-H commented Dec 4, 2020

@huayanYu 您好!感谢回复!
如果我没记错的话,原生mybatis 的规则是:

  • 数据库配置只要格式没错,哪怕数据库连接中断,也是可以启动程序的。
  • 至于数据库不通的异常,只有在调用Dao类方法的时候,才会抛出来。

不知道 dynamic-datasource模块 为何把这个规则改了?是基于什么样的考虑么?

@huayanYu
Copy link
Member

huayanYu commented Dec 4, 2020

@Hu-J-H 不是我改了,是现在代码没法支持。看源码的provider,先生成的数据源,再去分类。 如果改动对已经使用的人改动太大。 配置是一次性的,错了改正不就可以么?

@Hu-J-H
Copy link
Author

Hu-J-H commented Dec 4, 2020

@huayanYu 您好!配置基本是一次性的没错,但如果数据库连不上,就会启动报错的话,那么可能会造成程序在本地无法打包。或者即便能打包也会要绕弯子变通,有些麻烦。
因为project里的数据库配置,是填的服务器上的,而我的本地笔记本的开发环境,是不一定能连上生产库的。

@huayanYu
Copy link
Member

huayanYu commented Dec 4, 2020

@Hu-J-H 现在的结论是:在不大范围变更代码的前提下无法解决, 只有自己注意配置。 你的需求可能满足了,别人的需求就不一定满足了。 比如会有人说明明启动阶段就能校验的,非要运行了你给我报错或者给我切到了默认库,数据混乱了。 我排查半天才发现有一个数据源没设置进去。

没有特别强力的理由支持我改动整体设计, 建议自行检查配置。

@huayanYu huayanYu closed this as completed Dec 4, 2020
@Hu-J-H
Copy link
Author

Hu-J-H commented Dec 4, 2020

@huayanYu 大佬好!确实存在萝卜白菜各有所爱的情况,其实在配置里面留个开关就可以了。
例如你们的mybatis-plus,对于是否做驼峰命令与下划线的转换,也是留了开关的,这个就非常方便。

@Hu-J-H
Copy link
Author

Hu-J-H commented Dec 4, 2020

@huayanYu 我看了知乎上的一个回答,似乎并不需要大范围修改代码,给这里的try后面加个catch就可以了

https://www.zhihu.com/question/395982380/answer/1234573317

@Hu-J-H
Copy link
Author

Hu-J-H commented Dec 4, 2020

其实,如果要说理由的话,原生mybatis 的默认规则没有启动校验,也可以算是个理由啦。
毕竟 苞米豆 的作品,都是基于 原生mybatis 之上的拓展和延伸,延续 原生mybatis 的某些惯例也可以说得过去。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants