apollo配置更新HikariDataSource报错

1.使用HikariDataSource,在apollo配置更新出现异常

如图:

在我们使用druid创建多数据源,连接Orcale创建Bean,HkariDataSoure,明明启动创建bean没有报错,为什么在apollo配置更新的时候出现的这个错误。这让我百思不得其解

然后我搜搜的去网上百度找问题,发现网上跟我相关的问题太少了。

这时百度失灵,迫于无奈,踏上了看源码之入看看到底是那些问题?

废话不多说,先上几个关键的源码图

这里就是我们apollo配置中的值,加载bean设置值的类型的地方这样到后面可以通过反射调用,ConfigurationPropertyName就是我们apollo上配置加载的key。

在我一路跟踪之下发现了更HikariDataSource数据源创建的jdbc-url,设置有问题,我就在想看表面还是看不出什么,但我锁定了那个配置的数据配置key出了问题?

再往下看,我们继续跟踪一下

一张图截不完,请原谅我电脑垃圾,现在跟踪到这里,这里就是绑定bean的办法,找到他的字类javaBeanBinder。下面标红就是他设置值的方法

咋一看invoke是不是很熟悉,这不就是反射调用会出现的吗?我开始以为jdbc-url,不会不会映射jdbcUrl吧,实时我想错了,映射HikariConfig中的jdbcUrl是没问题的(注明一下:在DataSource进行build构建是有解析选择的两种类型,一种url,一种jdbc-url,这里不贴图了,大家可以去看源码)

在这一步我确认了调用的方法是jdbcUrl,我就觉得为啥设置jdbcUrl会报错?然后锁定到了HikariConfig的设置配置

万万没想到暗藏玄机啊,还有一层校验

不出意外是这个问题了,我一看sealed是true,没想到居然是这个错误。。。

我们看一下异常描述

The configuration of the pool is sealed once started. Use HikariConfigMXBean for runtime changes.

原来是数据源池加载时封装了,检查封闭了就不允许更新,如果要更新使用HikariconfigMxBean

咋一看,咦咋没有更新的接口呢?于是我锁定了他的字类也就是配置类找到HikariConfig中的copyStateTo方法

整个类看了一圈,只有这里设置为false,在一看方法,emmm......很像,然后我一试

在apollo监听配置更新前设置这个,果然让他的检索池封闭开关为false,然后就配没报错了

运行一下

成功

问题已解决,果然,通过自己努力找出问题感觉就是不一样

谢谢大家观看,新人初来乍到,第一次发文章,有说的不对的地方欢迎大佬更正指点。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值