JMS 通知を送信するカスタム ライブラリがあります。プロジェクトでいくつかのプロパティを設定するだけでライブラリを使用できるという考え方です。
カスタム ライブラリは Apache Commons Configuration を使用しています。(私がこれに言及する理由は、それが私の問題で役割を果たしているのではないかと思うからです). Commons Config を使用せず、PropertyPlaceholderConfigurer を使用する現在の Spring プロジェクトで使用しようとしています。必要なプロパティを .properties ファイルに書き出しました。
ライブラリを依存関係として pom.xml ファイルに追加しました。私はそれを私のweb.xmlに追加しようとしました
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
...
classpath:mylibrary-context.xml
</param-value>
</context-param>
Spring プロジェクトで Bean を作成するときに、ライブラリで定義されている Bean の 1 つを参照しようとしたので、それを使用できました。プロパティ ファイルのプロパティを必要とするライブラリ Bean の 1 つを作成中にエラーが発生しました。
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'libraryBean' defined in class path resource [mylibrary-context.xml]: Initialization of bean failed; nested exception is org.springframework.beans.TypeMismatchException: Failed to convert property value of type 'java.lang.String' to required type 'boolean' for property 'useCompression'; nested exception is java.lang.IllegalArgumentException: Invalid boolean value [${foo.bar.use.compression}]
プロジェクト内の他のプロパティ ファイルのいくつかには、ブール値のプロパティがまったく同じ方法で問題なく設定されていることがわかっています。これは、 applicationContext.xmlにプロパティ ファイルをロードする方法です(ログを確認した後、正しくロードされているようです)。
<bean id="propertyPlaceholderConfigurer"
class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="locations">
<list>
...
<!-- loaded in order-->
<value>classpath:foo/bar/some-props.properties</value>
<value>classpath:foo/bar/some-monitoring.properties</value>
<value>file:/${user.home}/foo/bar/some-monitoring.properties</value>
<value>file:/etc/foo/bar/some-monitoring.properties</value>
</list>
</property>
<property name="ignoreResourceNotFound" value="true"/>
<property name="ignoreUnresolvablePlaceholders" value="true"/>
最後に私の some-monitoring.properties ファイル:
foo.bar.use.compression=true
foo.bar.name=foobar
foo.bar.broker.url=someurl
だから、ブール値のプロパティで何が起こっているのか、そしてその理由は何なのかと思っています。PropertyPlaceholderConfigurer がブール値のプロパティをロードしないという一般的な問題がある場合、他のプロパティ ファイルに問題がないのは奇妙です。ライブラリが Commons Configuration を使用しているため、競合が発生しているということですか? Spring がこれらのプロパティをどのようにロードするかについての私の知識はかなり浅いので、これは内部で何が起こっているかをよりよく理解するチャンスのように思えます。
何が起こっているのか、それを修正/回避する方法について誰かが光を当てることができれば、どんな助けも大歓迎です!