java吧 关注:1,185,074贴子:12,585,367
  • 15回复贴,共1

一个有意思的参数读取错误的问题

只看楼主收藏回复





IP属地:湖南1楼2021-08-28 11:00回复
    虽然都2021了,xml已经退出历史舞台了,不过有个偶然机会,又刷到了这个问题


    IP属地:湖南2楼2021-08-28 11:01
    回复
      估计看视频的小伙伴,经常会出现这个问题:为啥我数据库连接失败了,百度一通说我密码错误,我确定我密码绝对没错


      IP属地:湖南3楼2021-08-28 11:03
      回复
        如果观察仔细的小伙伴,根据错误信息会发现,为啥账户名不是我配置的数据,而是我登录名


        IP属地:湖南4楼2021-08-28 11:04
        回复
          咱们就来八一八这里面的小细节


          IP属地:湖南5楼2021-08-28 11:04
          回复
            这玩意想要知道原因,就只能跟着debug了,一般咱们只要从org.springframework.context.support.AbstractApplicationContext#refresh方法入手即可


            IP属地:湖南6楼2021-08-28 11:06
            回复
              创建完容器以后,我们发现此时结果仍然还是我们的配置,说明此时并未解析,此时容器中元数据发现除了我们的bean以外,还有一个类 咱们仔细看看这个类



              IP属地:湖南7楼2021-08-28 11:10
              回复
                这个bean是BeanFactoryPostProcessor的实现类,嗦嘎(不了解的盆友,可以去百度下这个玩意到底干啥的)


                IP属地:湖南8楼2021-08-28 11:13
                回复
                  我们看看他的postProcessBeanFactory方法(beanfactorypostprocess接口提供的方法),


                  IP属地:湖南9楼2021-08-28 11:15
                  回复
                    太难


                    IP属地:广东来自iPhone客户端10楼2021-08-28 11:18
                    回复





                      IP属地:湖南11楼2021-08-28 11:20
                      回复
                        其实数据都在,只是因为PropertySourcesPlaceholderConfigurer.localOverride 默认是false,优先级比较低,默认添加到末尾去了


                        IP属地:湖南12楼2021-08-28 11:22
                        回复
                          所以解决方法也很简单:
                          方法1:修改key,避免和系统配置冲突,比如添加固定前缀,例如jdbc.username,在循环获取value的时候,一直会循环到最终的propertySource,然后获取到你的配置(推荐)
                          方法2:既然localOverride默认是false,会将数据添加到末尾,那直接改为true,不就到最前面了,也能正确获取到你的配置,xml的话,提供了属性local-override="true"


                          IP属地:湖南13楼2021-08-28 11:25
                          回复
                            例如<context:property-placeholder location="classpath:jdbcInfo.properties" local-override="true" />


                            IP属地:湖南14楼2021-08-28 11:25
                            回复
                              回来打牌


                              IP属地:四川来自Android客户端16楼2021-08-28 18:34
                              收起回复