レガシー ライブラリを使用する Spring Boot アプリを作成しました。このレガシー ライブラリは、XML で多数の Spring Bean を定義します。そのうちの 1 つは、コンストラクターの引数としてプロパティ値を受け取ります。
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
<bean id="myBean" class="com.em.MyBean">
<constructor-arg name="url" value="${my.url}"/>
</bean>
</beans>
私の Spring Boot アプリには、application.properties
このプロパティを次のように定義する があります。
my.url=http://localhost:8080
次のように、Maven Spring Boot プラグインを使用してアプリをローカルで実行します。
mvn spring-boot:run
そして、期待どおりにプロパティ値が Bean に注入されます。
my.url
次のようにコマンドラインでプロパティをオーバーライドしようとすると:
mvn spring-boot:run -Dmy.url=http://www.override.net
オーバーライドされた値は使用されず、代わりに内部の値application.properties
が使用されます。
Spring Boot のドキュメントによると、コマンド ラインからの値を最優先として取得する必要があります: https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-external-config .html . プロパティを削除するapplication.properties
と、コマンドラインで渡された値が使用されるため、コマンドラインの値が完全に無視されるわけではないため、ここではそうではないようです。application.properties
値がコマンドラインの値を上書きしているようです。
誰が何が起こっているかについて何か考えを持っていますか?