$符号叫什么
$符号加上一个大括号,学术名称叫做 占位符 ,用来占住位置,让其它功能在某一个时间替换掉它,替换的来源一般是properties文件。
1 | ${data} |
通常在各种配置文件中会有三次替换过程
替换过程 | 操作者 | 状态 | War包文件 |
---|---|---|---|
pom.xml的Validate时期 | Maven | 静态 | pom文件不会进入War包 |
Maven根据pom文件的Package时期 | Maven | 静态 | War包中会被替换文本 |
Spring启动后的启动后 | Spring | 动态 | 不会被替换文本,运行时获取 |
关于这三次替换过程的具体应用,可以参考文章Maven通过Profile切换环境
Maven-Validate
在Maven中可以采用properties标签定义一些变量,然后使用占位符使用这些变量
1 | <properties> |
例如控制dependency的版本,这些会在Validate的时候去取值,不会进入War包
Maven-Package
Maven可以通过Build选项中的filters来指定一些properties文件,来获取变量值
然后用获得值去替换resource下指定了filtering==true的文件中的占位符${}
1 | <build> |
通常resources都是web层的Spring配置文件,例如 applicationContext.xml 或 spring-mvc.xml 等等 在Package后的War包中,${}会被替换掉,替换成propertes中对应的文本
Spring配置文件占位符
Spring可以通过 PropertiesFactoryBean 来加载配置文件,然后使用 PreferencesPlaceholderConfigurer 来进行替换
1 | <!--读取配置文件--> |
这个替换过程发生在Spring启动之后的运行时(Runtime),与上一步Maven-Package不同,在War包中的xml文件里${}符号仍在存在,由启动后的Spring去替换PropertiesFactoryBean加载的文本