java吧 关注:1,219,974贴子:12,672,367

有大佬知道在不重启项目的前提下,怎么重新初始化这个bean,

只看楼主收藏回复

有大佬知道在不重启项目的前提下,怎么重新初始化这个bean,因为这个bean的配置是读取的数据库,但如果数据库改了数据,这个bean并不会重新读取数据库的数据。有人知道这个怎么破吗


IP属地:湖南来自Android客户端1楼2022-04-10 20:34回复
    为啥要改数据库数据呢,是直接远程改,还是代码层面改啊,代码层面改的话改数据库同时就顺便连bean一起改啊


    IP属地:广东来自Android客户端2楼2022-04-10 20:48
    收起回复
      定时任务吧


      IP属地:浙江来自Android客户端3楼2022-04-10 21:26
      收起回复
        尝试一下@refreshscope,不行的话就用canal监听数据库然后动态注册bean


        IP属地:辽宁来自Android客户端4楼2022-04-10 21:47
        收起回复
          ApplicationContext


          IP属地:江西来自Android客户端6楼2022-04-10 22:45
          回复
            实时试试刷新一下试看


            IP属地:四川7楼2022-04-10 23:32
            回复
              第一种方案:像这种会存在实时变化的热点数据建议放在Redis,Redis的java客户端提供了监听器,你可以利用监听器获取实时变化的数据去更新****ean;第二种方案:将更改数据库和更新bean放在同一个事务中去做,如果项目分布式部署的话,还需要同时通知其他的机器同时修改;第三种最笨的就是定时任务去reloadbean


              IP属地:陕西来自Android客户端8楼2022-04-11 00:43
              收起回复
                至于说如何重新初始化bean,第一种你可以在这个对象里面放一个reload方法去更新该bean的成员变量属性就相当于重新初始化了,这种情况下需要加上@refreshscope注解;第二种可以卸载掉这个容器里面的bean再重新安装(这种情况下可能导致瞬间刚卸载完还没有安装进去的时候bean的不可用)


                IP属地:陕西来自Android客户端9楼2022-04-11 00:48
                回复
                  你把你的get那些方法写成查数据库不就行了吗


                  IP属地:贵州来自Android客户端11楼2022-04-11 09:08
                  回复
                    楼上的几种方案都不错,首推refreshscope,如果你没有引入springcloud和配置中心的话,就要自己发布修改配置的事件,才会触发refreshscope的回调去重新构建bean;
                    或者是自己改写获取数据地方,你可以通过动态代理的方式,从你想要地方获取数据
                    ps:不是所有的bean都能让你动态改的,像HikariDataSource直接在内部就写了逻辑,你改直接就给你报错了


                    IP属地:湖南12楼2022-04-11 09:22
                    回复
                      改数据库时,通知这里重新加油


                      IP属地:广东来自Android客户端13楼2022-04-11 10:32
                      回复
                        改了以后给这里发个通知,然后重新读取


                        IP属地:北京来自Android客户端14楼2022-04-11 11:48
                        回复
                          按照网上的做法,这个第一次刷新可以,第二次刷就没效果了,不知道什么原因



                          IP属地:湖南来自Android客户端15楼2022-04-11 12:22
                          收起回复
                            Redis 这种数据


                            IP属地:陕西来自iPhone客户端16楼2022-04-11 12:52
                            回复