SpringBoot2x 升级踩坑-新增 Configuration property name 限


更新时间:2020-01-30

  最近公司项目在做 SpringBoot 的升级,在升级过程中遇到了一些问题,简单记录一下,做个分享。另外,本文中的程序只为示例代码,并非公司生产环境代码。

  无效字符:_, 原因:规范名称应为 kebab-case(用-分隔),小写字母数字字符,并且必须以字母开头

  无效字符:_, 原因:规范名称应为 kebab-case(用-分隔),小写字母数字字符,并且必须以字母开头

  结合报错日志,我们可以很容易的解决这个问题,去掉配置项中的_,将配置项 name 修改为com.shen.name即可。

  你以为文章写到这里就结束了吗?其实并没有。hhhhhh,通过这个问题,我们来看一下 SpringBoot2.x 的内部源码。什么,你不知道该从哪里入手来看这个源码,没关系,我们一步一步来。香港来料抓码王

  通过 debug 发现的确是这个方法在进行属性绑定。而且底层调用了方法:

  由点分隔的元素组成的配置属性名称。用户创建的名称可以包含字符“ a-z”,“ 0-9”)和“-”,它们必须为小写字母,并且必须以字母数字字符开头。“-”仅用于格式化,即“ foo-bar”和“ foobar”被认为是等效的。“ [”和“]”字符可用于表示关联索引(即 Map 键或 Collection 索引。索引名称不受限制,并且区分大小写。

  由点分隔的元素组成的配置属性名称。用户创建的名称可以包含字符“ a-z”,“ 0-9”)和“-”,它们必须为小写字母,并且必须以字母数字字符开头。“-”仅用于格式化,即“ foo-bar”和“ foobar”被认为是等效的。“ [”和“]”字符可用于表示关联索引(即 Map 键或 Collection 索引。索引名称不受限制,并且区分大小写。

  在这种情况下,项目依旧启动成功了,而且成功的获取到了com_shen.name的属性值。也就是说,@Value注解中并没有表达式做限制。