Java 在.war之外引用configuration.properties
我想部署一个war,war应该从war外部获取一些属性(比如说.war文件所在的目录) 目前,这是我找到的最佳解决方案:Java 在.war之外引用configuration.properties,java,xml,spring,datasource,Java,Xml,Spring,Datasource,我想部署一个war,war应该从war外部获取一些属性(比如说.war文件所在的目录) 目前,这是我找到的最佳解决方案: <context:property-placeholder location="file:${user.home}/configuration.properties" ignore-unresolvable="true"/> 但这个解决方案迫使我将其始终保留在主目录中。我希望它位于部署.war的TomcatWebApps目录中。我只是在寻找一个涉及绝对路径的
<context:property-placeholder location="file:${user.home}/configuration.properties" ignore-unresolvable="true"/>
但这个解决方案迫使我将其始终保留在主目录中。我希望它位于部署.war的TomcatWebApps目录中。我只是在寻找一个涉及绝对路径的解决方案。如果相对路径是绝对不可能的,那么我将考虑一个绝对路径。
提前感谢。您可以将属性文件放在类路径中,只需指定属性文件名。 通过java代码,您可以做到这一点 我想spring也应该检查类路径中的属性文件。 您可以尝试将属性文件放在类路径中,只提及文件名。这里有一个解决方案:
<context:property-placeholder
location="file:${catalina.home}/webapps/datasource.properties"
ignore-unresolvable="true"/>
让我知道是否有更好的方法,例如,如果我可以摆脱catalina home reference,并以某种方式使其更通用。我可以提供的一种解决方案是使用系统属性传递到配置文件的路径 有两个级别的属性:
- java系统属性使用switch-D发送到JVM,并由
system.getProperty()
- 在操作系统级别定义的操作系统环境变量,可以使用
System.getenv()
步骤2:在应用程序中使用它。例如:
(1) publicmodelandview-doWhatever(@Value(“#{myProperties['some.outside.property']}”)字符串,无论什么){…}
或者(2)Properties=appContext.getBean(“myProperties”,Properties.class)代码>
参加这个聚会有点晚了,但我想我应该发布一个答案,因为这个问题首先出现在谷歌上。我不确定在提出问题时这是否有效,但从Spring 3.1开始,您可以使用绝对路径:
<context:property-placeholder location="file:///etc/myApp/myApp.conf"/>
请注意,有三个正斜杠。前两个用于协议:“file://”。您可以在Tomcat中定义任何变量作为上下文参数,并在war中的applicationContext.xml中使用它
例如,context.xml:
<Context>
<Parameter name="configlocation" value="/etc/application/my.properties" override="false"/>
</Context>
<beans ...>
<context:property-placeholder location="file:${configlocation}" ... />
</beans>
applicationContext.xml:
<Context>
<Parameter name="configlocation" value="/etc/application/my.properties" override="false"/>
</Context>
<beans ...>
<context:property-placeholder location="file:${configlocation}" ... />
</beans>
您写道:“我只是在寻找涉及绝对路径的解决方案”,但我想您的意思是相反的。不,我没有。看看你使用的路径,它不是绝对的。user.home类型的变量可以是任何类型。请问您为什么要在web应用程序上下文之外配置?是因为您想与其他web应用共享配置吗?如果是这样的话,那么有更好的方法可以做到这一点。这样用户就可以轻松地输入数据库服务器详细信息谢谢您的评论。我们的目的不是使用我们已经在使用spring的代码,下一步应该是最简单的。谢谢AlexR,但请看一看我在不涉及java的情况下编写的一个可能的解决方案。我很乐意使用jndi,java代码的使用将是最后一件事。我认为这是最好的方法,但它破坏了我选择的IDE intellij