複数のプロパティファイルを一緒に読み込んでプロパティの1つのソースとして使用する必要があります。 <util:properties>
ではカンマ区切りのファイルリストを渡すことができ、これまでのところすべて正常に動作します。だから、次は良いです:ファイルのリストがパラメータである場合に、複数のプロパティファイルをSpring <util:properties />にロードする際の問題
<util:properties loaction="conf/file1.properties,conf/file2.properties,abc-*.properties" />
しかし、我々の場合には、プロパティファイルのリストが固定されておらず、それが前にロードされている別のマスタープロパティファイルから来ています。そのリストをパラメータとして<util:properties>
に渡したいが、うまくいかない。
${allPropertiesFiles}
が
allPropertiesFiles=conf/file1.properties,conf/file2.properties,abc-*.properties
これが原因で、ファイルの一覧でコンマで失敗したとして定義されて
<util:properties location="${allPropertiesFiles}" />
。それらを単一のファイル名として扱い、FileNotFoundExceptionをスローします。
春はカンマでファイルを分割しようとしますが、$ {allPropertiesFiles}を解決する前にそれが起こっているようです。たとえば、以下のようにすれば正常に動作しますが、そのリストに含まれるファイルの数がわからないため、実際的な解決策ではありません。
<util:properties location="${propFile.location1},${propFile.location2},${propFile.location3}" />
UPDATE:
${...}
でプロパティ値を解決する前に、「」で処理し、分割での春の問題のようです。私はそれを分割するためにSpring ELを使ってみましたが、有効なELを解析することでもう一度失敗します。なぜなら、 '、'に基づいて最初にそれを壊してから式を評価するからです。以下の例は、ELの解析例外で失敗します。
<util:properties location="#{'${allPropertiesFiles}'.split(',')}" />
FYIこの観察はSpring 4.2.xです。どんな提案も大歓迎です。
プロパティファイルのリストをjvm argとして渡し、リストにコンマの後にスペースがあるため、二重引用符が必要です。私のリストは別のプロパティーファイルから来ています。私がそれを ""囲むとプロパティー値の一部になります。 – user3739116
第2に、私はあなたの例を試してみましたが、リストがSpring 4.3.xでjvm argとして渡された場合にのみ私のために働きます。以前のバージョンのSpring(4.2.xなど)は、リスト内のカンマのためにまだ失敗します。今はSpring 4.2.xを使用しており、現時点ではアップグレードできません。第3に、あなたの例は 'によって読み込まれたプロパティファイルからリストを渡そうとしたときに失敗します。 Spring 4.3.xがjvm argをうまく処理しているように見えますが、その理由はわかりません。私が間違っている場合は教えてください。 –
user3739116