服务启动时,如何在druid数据源连接数据库失败时spring容器能正常启动

zf9nrax1  于 2021-11-27  发布在  Java
关注(0)|答案(7)|浏览(977)

现在场景是这样的,在我们java服务启动时,数据库并没有准备好,我们数据源去连接数据库,连接失败,导致整个spring容器异常,然后整个应用启动失败。
我们问题是这样的:
我们是否支持,在数据库连接失败时,让应用正常启动,程序内部异常处理,当数据库上线后,应用调用spring容器时,能正常访问数据库。

yb3bgrhw

yb3bgrhw1#

spring在启动时会初始化Applicationcontext容器,然后配置了数据库连接时,会初始化数据库连接,你们现在的需求是希望将初始化数据库连接这个动作手动触发?那么这个时候就有个问题,初始化后的bean怎么加载到容器里?貌似spring不支持这样做吧?

s71maibg

s71maibg2#

@jameBoy ,谢谢您的关注,我们设想是这样的,希望初始化或连接数据库的动作不要使整个spring容器关闭掉,如果数据源初始化遇到各种问题,只是处理掉异常的话,成功创建数据源bean,那么其他bean是可以陆续创建成功的,但是我们外部的操作是提示失败的,不是启动失败的。
当我们发现数据库上线后,对bean是没有影响的,操作可以正常进行了。
proxool是可以这样做的。

hfyxw5xn

hfyxw5xn3#

我也遇到同样问题,设定初始化数为0可解决问题,但是,如果在启动时就需要连接数据库查询,那么也会出现这样的问题,如果一不小心填写错误的密码,启动的时候疯狂连接数据库,很容易就导致Oracle的账户被锁,能否修改为不重新连接或者只重连几次,重连最大次数仍然失败后先让Spring应用启动再说。

nxowjjhe

nxowjjhe4#

@fsyyyhl 咱们一起等待能有解决

ct3nt3jp

ct3nt3jp5#

这个问题请问怎么设置呢?@wenshao
比如,某个db故障了,重启服务仍然可以启动。

现在spring cloud+druild,db挂掉的情况下,服务好像不会起来

mu0hgdu0

mu0hgdu06#

设置spring配置文件的数据源bean为lazy-init="true",先不要加其他属性试下

50few1ms

50few1ms7#

@caarto 老哥这个问题解决了吗?我也想这样操作:系统连接了多个数据库,有些数据库是特定的业务下才使用的,不是必须的,如何做到某一个库连接失败的时候,应用也能正常启动呢?

相关问题