【发布时间】:2016-05-12 15:57:30
【问题描述】:
我创建了一个使用旧库的 Spring Boot 应用程序。这个遗留库在 XML 中定义了许多 Spring Bean。其中之一将属性值作为构造函数参数:
<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 的值似乎覆盖了命令行值。
有人对发生的事情有任何想法吗?
【问题讨论】:
-
我认为使用 -D 会将属性作为 jvm 参数而不是 spring boot 属性传递。你试过使用
--my.url=http://www.override.net吗? -
您能发布您的完整版本的 XML 配置吗?
-
@RahulSharma 我已经按照下面安迪的建议进行了尝试,没有任何区别。
-
@AliDehghani。你的意思是 XML bean 配置?如果是这样,那里没有任何争议,但我已经编辑了问题以包含完整的配置。
-
只是好奇,你有没有试过只做
--my.url=http://www.override.net而没有任何-Drun.arguments=..?所以只是mvn spring-boot:run --my.url=http://www.override.net。那它有什么作用吗?
标签: java spring spring-boot spring-boot-maven-plugin spring-properties