gpt4 book ai didi

java - Spring 属性占位符不起作用

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:49:09 26 4
gpt4 key购买 nike

我在 stackoverflow.com 上阅读过类似的问题,但没有一个解决方案对我有帮助。我使用的以下配置(maven项目结构):src/main/resources/properties/app.properties文件

#possible values: dev test prod
mode: dev

在 Spring 配置中:

<context:property-placeholder location="classpath:properties/app.properties"/>
<import resource="classpath:/spring/db/${mode}-datasource-config.xml"/>

基于${mode}的值我要导入对应的数据源配置文件。

当我使用 mvn clean install tomcat7:run 运行嵌入式 tomcat7 时命令我收到错误:

10, 2013 5:52:29 PM org.apache.catalina.core.StandardContext loadOnStartup
SEVERE: Servlet /SpringWebFlow threw load() exception
java.lang.IllegalArgumentException: Could not resolve placeholder 'mode' in string value "classpath:/spring/db/${mode}-datasource-config.xml"

target/classes/properties/app.properties文件存在。

我正在使用 IntelliJ IDEA,在编辑器中我可以点击 <import resource="classpath:/spring/db/${mode}-datasource-config.xml"/> 中的“${mode}”并在属性文件中查看它的值。编辑器本身也会更改 ${mode}到灰色dev显示它可以识别属性值。在编辑器中我看到:<import resource="classpath:/spring/db/dev-datasource-config.xml"/>

我为什么会收到错误以及如何解决它有什么想法吗?

最佳答案

导入中的属性占位符仅针对环境变量或系统属性进行解析。

从 3.1 版开始,您可以使用 ApplicationContextInitializerPropertySources 添加到 Enviroment 中,这将解决您的问题。

参见 http://blog.springsource.org/2011/02/15/spring-3-1-m1-unified-property-management/

执行相同操作的其他选项是使用配置文件:http://blog.springsource.org/2011/02/14/spring-3-1-m1-introducing-profile/

编辑

例如:

将初始化程序添加到 web.xml

<context-param>
<param-name>contextInitializerClasses</param-name>
<param-value>foo.bar.AppContextInitializer</param-value>
</context-param>

初始化器:

public class AppContextInitializer implements ApplicationContextInitializer<ConfigurableWebApplicationContext> {

@Override
public void initialize(ConfigurableWebApplicationContext applicationContext) {
Properties props;
try {
props = PropertiesLoaderUtils.loadAllProperties("/some/path");
PropertiesPropertySource ps = new PropertiesPropertySource("profile", props);
applicationContext.getEnvironment().getPropertySources().addFirst(ps);
} catch (IOException e) {
// handle error
}
}
}

关于java - Spring 属性占位符不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16481206/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com