0

我在一个 Java Web 项目中工作。我需要根据环境更改文件“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”在 Windows 环境变量/系统变量中定义

这些更改工作正常。

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

我需要使动态成为路径的“开发”部分。

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

我正在尝试在 web.xml 上使用“属性”(使用),但我不知道如何在我的 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>

但我不知道如何在 Spring 上访问“ENVIRONMENT”属性

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

有人能帮我吗?

感谢并为我糟糕的英语感到抱歉

4

1 回答 1

0

你考虑过使用JNDI吗?

使用 JNDI,您将在 tomcat 内部定义数据库连接属性。这样你的 spring 配置就独立于环境,你可以在所有环境中部署相同的 war。另请参阅

如果您需要在本地运行它,您可以随时使用“新”弹簧环境配置文件功能。

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

于 2012-09-12T13:54:38.307 回答