我在Spring
应用程序中定义了属性。
@Configuration
public class WebappConfiguration {
@Value("${ext.storage.path}")
private String extDirectoryPath;
public String getExtDirectoryPath() {
return extDirectoryPath;
}
}
ext.storage.path
属性的默认值在application.properties
文件中定义。
application.properties
ext.storage.path=/home/user/ext/
当我使用VM选项WAR
将-Dext.storage.path=/var/webapp-data/
部署到tomcat时,会成功加载此值。但是我希望从每个环境的上下文文件中更加智能地加载属性值。
因此,我将WAR
部署到Tomcat的ROOT
,WAR文件的名称为ROOT.war
,并将其展开到ROOT
目录。我在路径context
上创建了{CATALINA_BASE}/Catalina/localhost/ROOT.xml
文件,其中包含以下内容。
的ROOT.xml
<Context
docBase="/opt/webapp-tomcat/webapps/ROOT.war"
path=""
reloadable="true">
<Parameter name="ext.storage.path" value="file:/var/webapp-data/" override="true"/>
</Context>
不幸的是,param没有按照方式加载,它的默认值来自application.properties
。
修改
经过一些调查后,我将Parameter
放入Tomcat的主context.xml
文件中,并重写了该值。
<Parameter name="ext.storage.path" value="file:/var/webapp-data/" override="true"/>
答案 0 :(得分:1)
我所知道的最好的技术是将特定于环境的东西放入Tomcat的conf / context.xml文件中。
<Environment name="myApp/extStoragePath" type="java.lang.String" value="/var/data/myapp"/>
这定义了一个JNDI变量,您可以在代码中使用以下内容查找:
Context initCtx = new InitialContext();
Context envCtx = (Context) initCtx.lookup("java:comp/env");
String extStoragePath = (String) envCtx.lookup("myApp/extStoragePath");
您还可以使用此技术加载复杂对象,如数据库数据源等。它具有巨大的优势:
另外,Spring提供了一个org.springframework.jndi.JndiObjectFactoryBean
,它可以从你的spring配置文件中访问JNDI。