我创建了一个使用旧库的 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
覆盖了命令行值。
有人对发生的事情有任何想法吗?