2012-09-12 15 views
0

我正在Java Web項目中工作。 因爲測試,演示和版本對這些文件有不同的值,所以我需要根據環境更改文件「jdbc.properties」和「log4j.properties」的文件夾。動態更改jdbc.properties和log4j.properties的文件目錄

我有這樣的文件夾和子文件夾:

C:\ myProject的\的conf \ dev的 C:\ myProject的\的conf \測試 C:\ myProject的\的conf \演示

我需要把diferent \ myProject的\的conf \ dev的\ log4j.properties C:在每個這些文件夾

的C jdbc.properties和log4j.properties文件\ myProject的\的conf \ dev的\ jdbc.properties

C:\ myProject的\的conf \測試\ log4j.properties C:\ myProject的\ CONF \測試\ jdbc.properties

C:\ myProject的\ CONF \演示\ log4j.properties C:\ myProject的\ CONF \演示\ jdbc.properties

這三個項目是在同一個服務器和相同的Apache(這是一個Web項目)

首先我做了一些更改,使用Windows系統變量來獲取父文件夾(c:\ myProject)。要做到這一點,我做了這個春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」

我需要動態路徑的「開發」的一部分文件。

I無法使用Windows環境變量/系統變量,因爲3個環境部署在同一臺服務器上。

我想在web.xml上使用「屬性」(使用),但我不知道如何在我的Spring appContext文件中找到屬性。

我definy屬性是這樣的:

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

但我不知道如何訪問春

我不知道該怎麼辦「環境」屬性。我有點絕望

有人可以幫助我嗎?

謝謝,對不起我的英文不好

回答

0

您在使用JNDI考慮?

使用JNDI,您將在tomcat自身內部定義數據庫連接屬性。這樣,您的彈簧配置獨立於環境,您可以在所有環境中部署相同的戰爭。另請參閱this

如果您需要在本地運行它,您始終可以使用'新'spring environment profiles功能。

其他選項(如果JNDI不是一個選項,並假設您使用maven)是maven replacer插件,您將在構建時生成db.properties。

+0

但我需要這樣做,至少JDBC和Log4j。我需要針對這兩個文件的解決方案,並且可能在將來還有另一個文件 –

+0

無論如何,最好在戰爭之外部署log4j.properties。如果這不是你想要的,那麼你可以考慮在啓動tomcat時設置JVM屬性,並在log4j.properties中重用這些屬性,或者設置不同的log4j.properties,並通過設置JVM屬性'-Dlog4j.configuration = log4j告訴tomcat使用哪個屬性。 xml' –

+0

這就是我想要做的。我有外部的「jdbc.properties」和「log4j.properties」文件。 我認爲你不明白我在說什麼 –