2011-06-24 3 views
2

これは "単純な"問題であり、ハウツーとか、あなたの馬鹿馬鹿しいことを求めています。私は両方にオープンです。SpringとWebappプロパティのプレースホルダーを使用してプロパティを見つける

私はwarファイルを構築した構造になりたいのです:

WEB-INF/ 
    properties/ 
    <my properties files> 
    classes/ 
    ... 
    spring/ 
    <my spring files> 

はその馬鹿ですか?私はproperty-placeholderを使ってプロパティファイルにアクセスできることを知っていますが、クラスセクションのプロパティを入れ子にするのではなく、私には意味がありません。

だから、春のファイルは次のようになります。私はクラスエリアでそれらにアクセスしたい場合は

<context:property-placeholder location="classpath:properties/*.properties" /> 

。私は

<context:property-placeholder location="properties/*.properties" /> 

は私がちょうど直接WEB-INFディレクトリの下に置いてみましょうということ...私は(psの私は:)と思う)間違っていると思いました。

アドバイスはありますか?

答えて

3
あなたがパスにWEB-INFを追加する必要があるので、

これは

<context:property-placeholder location="WEB-INF/properties/*.properties" /> 

WEB-INFは、ウェブアプリののルートではないされて動作するはずです。

spring-context-3.1.xsd

<xsd:attribute name="location" type="xsd:string"> 
<xsd:annotation> 
<xsd:documentation> 
<![CDATA[ 
    The location of the properties file to resolve placeholders against, as a Spring 
    resource location: a URL, a "classpath:" pseudo URL, or a relative file path. 
    Multiple locations may be specified, separated by commas. If neither location nor properties-ref is 
    specified, placeholders will be resolved against system properties. 


    ]]> 
</xsd:documentation> 
</xsd:annotation> 
</xsd:attribute> 
+0

soooありがとう! – rybit

+0

ようこそ。それが助けてくれてうれしいです。 – Jeesmon

0

私はあなたが達成したいとは思っていません。ここで私は基本的なプロパティからプロパティを注入するために使用する方法は、Beanにファイル:春ファイルで

(XMLのBean定義を)、私は私のプロパティファイルへの参照を追加(myfile.properties):

<bean id="propertyConfigurer" 
      class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> 
    <property name="location" value="classpath:myfile.properties" /> 
</bean> 

を入力し、プロパティに自分の参照を追加します(db.urlはデータベース接続のURLアドレスです。プロパティファイルで参照されているBeanプロパティのみを保持していました)。

<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" 
    destroy-method="close"> 
    <!-- results in a setDriverClassName(String) call --> 
    <property name="driverClassName" value="com.mysql.jdbc.Driver" /> 
    <property name="url"><value>${db.url}</value></property> 
    <property name="username"><value>${db.login}</value></property> 
    <property name="password"><value>${db.password}</value></property> 

</bean> 

デフォルトでは、プロパティがプロパティファイルで定義されていない場合、Springはシステムプロパティを使用します(この動作は変更可能です)。

+0

プロパティにアクセスしても問題ありません。ファイルを保存する場所です。 WEB-INF/classes/properties/*。プロパティの代わりに、私はむしろWEB-INF/properties/*を持っています。プロパティ – rybit

2

Classloaderのクラスパスは、/ classesディレクトリと/ libディレクトリ内の任意のjarsになるので、希望通りの操作はできません。これはwarファイルの標準設定です。

戦争と耳には、ファイルを有効にするために従わなければならない特定の構成があります。それについて考えると、標準フォーマットがない場合でも同じwarファイルを展開できるWebコンテナを異なるベンダーに提供することが難しくなります。 pretty informative page hereがあります。

あなたが望むものに似た何かを達成するために、あなたは、単にの/クラス/プロパティおよび/クラス/春のディレクトリを持っており、あなたのクラスパス(「クラスパス:プロパティ/ myfile.properties)からそれらを適切に調べることができます。

+0

私はバネファイルの好ましい場所がWEB-INF/spring /であると考えました。私はそれをどこで読むのか覚えていませんが、web.xmlファイルで設定します。 – rybit

+0

ビルドする前にディレクトリが「春」だと思いますが、WARが生成されると、クラスパスで終わるように、すべてが「クラス」で終わります。あなたの望みではないかもしれませんが、WAR構造は既に標準化されています。カスタマイズする必要はありません。 –

+0

私はプロパティファイルをそのまま残します:)。さて、バネファイルはclassesフォルダにコピーされません。 petshop [link](https://src.springframework.org/svn/spring-samples/petclinic/trunk/)を見てください。 WEB-INFを直接コピーした後、src/main/resourcesをWEB-INF/classes /にコピーするMavenによって構築されます。通常はsrc/main/resourcesにあります。 – rybit

関連する問題