Spring のプロパティ プレースホルダーを使用してプロパティ ファイルの読み込みを制御し、システム プロパティを設定したいと考えています。これは次のように機能します。
<context:property-placeholder
location="classpath:jdbc/jdbc.${TARGET_ENV}.properties" />
アプリケーションを別の環境で実行すると、システム プロパティ TARGET_ENV を設定すると、正しいプロパティ ファイルが取得されます。
これで統合テストができました。特定のプロパティ ファイル (jdbc.INTEGRATION_TESTS.properties) を常にロードするように構成を強制したいと考えています。
私は持っている
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {
"classpath:/META-INF/spring/set-system-property.xml",
"classpath:/META-INF/spring/applicationContext.xml"})
public class AbstractIntegrationTest extends AbstractTransactionalJUnit4SpringContextTests {
および set-system-property.xml ( Set System Property With Spring Configuration Fileのアドバイスを使用):
<beans>
<bean id="systemPrereqs"
class="org.springframework.beans.factory.config.MethodInvokingFactoryBean">
<property name="targetObject" value="#{@systemProperties}" />
<property name="targetMethod" value="putAll" />
<property name="arguments">
<util:properties>
<prop key="TARGET_ENV">INTEGRATION_TESTS</prop>
</util:properties>
</property>
</bean>
しかし、プロパティはSpringによって取得されません:
Caused by: java.io.FileNotFoundException: class path resource [jdbc/jdbc.${TARGET_ENV}.properties] cannot be opened because it does not exist
at org.springframework.core.io.ClassPathResource.getInputStream(ClassPathResource.java:157)
これが機能しないのはなぜですか?Bean のインスタンス化、ファクトリ Bean などについて、取得していないものはありますか?