Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/11.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 动态更改jdbc.properties和log4j.properties的文件目录_Java_Spring_Tomcat_Web.xml - Fatal编程技术网

Java 动态更改jdbc.properties和log4j.properties的文件目录

Java 动态更改jdbc.properties和log4j.properties的文件目录,java,spring,tomcat,web.xml,Java,Spring,Tomcat,Web.xml,我在一个JavaWeb项目中工作。 我需要根据环境更改文件“jdbc.properties”和“log4j.properties”的文件夹,因为测试、演示和发布对这些文件有不同的值 我有以下文件夹和子文件夹: c:\myProject\conf\dev c:\myProject\conf\test c:\myProject\conf\demo 我需要在每个文件夹中放置不同的jdbc.properties和log4j.properties文件 c:\myProject\conf\dev\log4j

我在一个JavaWeb项目中工作。 我需要根据环境更改文件“jdbc.properties”和“log4j.properties”的文件夹,因为测试、演示和发布对这些文件有不同的值

我有以下文件夹和子文件夹:

c:\myProject\conf\dev c:\myProject\conf\test c:\myProject\conf\demo

我需要在每个文件夹中放置不同的jdbc.properties和log4j.properties文件

c:\myProject\conf\dev\log4j.properties c:\myProject\conf\dev\jdbc.properties

c:\myProject\conf\test\log4j.properties c:\myProject\conf\test\jdbc.properties

c:\myProject\conf\demo\log4j.properties c:\myProject\conf\demo\jdbc.properties

这三个项目位于同一台服务器和同一个Apache中(这是一个Web项目)

首先,我做了一些更改,使用windows系统变量获取父文件夹(c:\myProject)。为此,我在Spring appContext文件上做了如下操作:

<bean id="propertyConfigurer"
class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="location">
<value>file:${PARENT_FOLDER}/conf/dev/jdbc.properties</value> 
</property>
</bean>

文件:${PARENT_FOLDER}/conf/dev/jdbc.properties
“父文件夹”是在Windows环境变量/系统变量上定义的

这些改变很有效

但是,正如您所看到的,我总是在“/conf/dev”上查找文件

我需要使动态成为路径的“dev”部分

我无法使用Windows环境变量/系统变量,因为这3个环境部署在同一台服务器上

我试图在web.xml上使用一个“属性”(using),但我不知道如何在Spring appContext文件中找到该属性

我定义的属性如下:

<env-entry>
    <env-entry-name>ENVIRONMENT</env-entry-name>
    <env-entry-type>java.lang.String</env-entry-type>
    <env-entry-value>Dev</env-entry-value>
</env-entry>

环境
java.lang.String
发展
但我不知道如何访问Spring上的“环境”属性

我不知道该怎么办。我有点绝望

有人能帮我吗

感谢并为我糟糕的英语道歉

你考虑过使用吗

使用JNDI,您将在tomcat本身内部定义db连接属性。这样,您的spring配置独立于环境,您可以在所有环境上部署相同的war。另见

如果需要在本地运行,则始终可以使用“新建”功能


另一个选项(如果JNDI不是一个选项,并且假设您使用maven)是maven replacer插件,您将在构建时在该插件中生成db.properties。

但我至少需要为JDBC和Log4j这样做。我需要这两个文件的解决方案,也许将来还会有另一个文件。无论如何,最好在war之外部署log4j.properties。如果这不是您想要的,那么您可以在启动Tomcat时考虑设置JVM属性并在Log4j.Realts中重用这些属性,或者使用不同的Log4j.Fielts并告诉Tomcat使用JVM属性<代码> > DLog4j.Stase= Log4j.xml < /Comp>来使用,这就是我正在尝试做的。我有外部的“jdbc.properties”和“log4j.properties”文件。我想你还不明白我在说什么,我仍然会对数据库属性使用JNDI。但是上面提到的JVM选项也应该可以工作。你能给我一个JVM属性的例子吗?谢谢