Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/317.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在.war之外引用configuration.properties_Java_Xml_Spring_Datasource - Fatal编程技术网

Java 在.war之外引用configuration.properties

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目录中。我只是在寻找一个涉及绝对路径的

我想部署一个war,war应该从war外部获取一些属性(比如说.war文件所在的目录)

目前,这是我找到的最佳解决方案:

<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()

步骤1:定义属性:

步骤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