5

Spring プロファイルが yaml およびプロパティ ファイルでどのように機能するかをよく理解しているかどうかはわかりません。これらの 2 種類の構成をミスしようとしていました (2 つのファイルは構成を共有していません) が、yaml 構成からプロファイルを読み取るときに問題が発生しています。

Spring 4.1.1を使用しています

これがコードです。これは context:property-placeholder 構成です:

<context:property-placeholder location="classpath:/job-config.properties" order="1" 
ignore-unresolvable="true" ignore-resource-not-found="false"/>


<context:property-placeholder properties-ref="yamlProperties" order="2"
ignore-resource-not-found="false" ignore-unresolvable="true"/>

ここで、yamlProperties は次の Bean です

    <bean id="yamlProperties" 
    class="org.springframework.beans.factory.config.YamlPropertiesFactoryBean">
                <property name="resources" 
value="file:${catalina.home}/properties/test.yml"/>
            </bean>

ここにtest.ymlがあります

spring:
  profiles.default: default
---
spring:
  profiles: default
db:
  url: jdbc:oracle:thin:@##hostname##:##port##:##SID##
  usr: ##USER##
  pwd: ##PWD##
---
spring:
  profiles: development
db:
  url: jdbc:oracle:thin:@##hostname##:##port##:##SID_DEVELOPMENT##
  usr: ##USER_DEVELOPMENT##
  pwd: ##PWD_DEVELOPMENT##

私の問題は、これを実行してデータソースを (xml 経由で) 構成しようとすると、次のようになることです。

<property name="url" value="${db.url}"/>
<property name="username" value="${db.usr}"/>
<property name="password" value="${db.pwd}"/>

Spring は常に、プロファイルを無視して YAML ファイルの最後の構成を使用します。web.xml の contex-parameter を介して、または直接 JVM にアクティブ プロファイルを渡そうとしました (アクティブ/デフォルト プロファイルを取得するために EnvironmentAware インターフェイスを実装する Bean を実装しましたが、それは正しいです)。値を挿入すると、プロファイルは無視されます。

プロパティプレースホルダーコンテキスト(注文付き)を使用すると、PropertySourcesPlaceholderConfigurerのインスタンスであるプロパティプレースホルダーが1つ取得されるため、環境にアクセスできると思いますが、プロファイルが無視され、Springが最後のyamlファイル構成を取得する理由を理解できません。

セクション 63.6 http://docs.spring.io/spring-boot/docs/current/reference/html/howto-properties-and-configuration.htmlに、ドキュメント (spring-boot) への参照を追加し ます。

前もって感謝します

4

1 に答える 1