chr*_*ern 3 java spring spring-boot spring-properties spring-boot-maven-plugin
我创建了一个使用旧库的Spring Boot应用程序.这个遗留库在XML中定义了许多Spring Beans.其中一个将属性值作为构造函数参数:
<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>
Run Code Online (Sandbox Code Playgroud)
在我的Spring Boot应用程序中,我有一个application.properties定义此属性的方法如下:
my.url=http://localhost:8080
Run Code Online (Sandbox Code Playgroud)
我使用Maven Spring Boot插件在本地运行我的应用程序,如下所示:
mvn spring-boot:run
Run Code Online (Sandbox Code Playgroud)
并且属性值按预期注入bean中.
如果我尝试my.url在命令行上覆盖属性,如下所示:
mvn spring-boot:run -Dmy.url=http://www.override.net
Run Code Online (Sandbox Code Playgroud)
不使用overriden值,而是application.properties使用inside值.
根据Spring Boot文档,命令行中的值应作为第一优先级:https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-external-config .html.这似乎不是这种情况,因为如果我application.properties从那时删除属性,则使用命令行传入的值,因此不会完全忽略命令行值的情况.看起来该application.properties值会覆盖命令行值.
有没有人对于发生了什么有任何想法?
使用-D设置系统属性.Spring Boot可以使用System属性中的配置,因此,一般来说,它都可以工作.但是,如果spring-boot:run为您的应用程序分配单独的JVM ,它将无法工作,因为将在错误的JVM上设置System属性.由于它不起作用,我猜这就是发生的事情.
您可以使用-Drun.arguments将参数传递给正在运行的应用程序,而不管它是否在分叉的JVM中运行.参数应该是以逗号分隔的列表,每个都以前缀为前缀--.例如,设置my.url:
mvn spring-boot:run -Drun.arguments=--my.url=http://www.override.net
Run Code Online (Sandbox Code Playgroud)
此问题的另一个可能原因是您的main方法没有将它接收的参数传递给SpringApplication它创建的参数.您还应该检查您的main方法是否与此类似:
public static void main(String[] args) throws Exception {
SpringApplication.run(YourApplication.class, args);
}
Run Code Online (Sandbox Code Playgroud)
请注意,args正在传递给调用SpringApplication.run.
chr*_*ern -1
我最终通过更改为 Spring Boot 应用程序定义遗留库中的 Bean 的方式解决了这个问题。我没有使用定义 bean 的旧应用程序的 applicationContext.xml,而是将它们添加到@Bean配置类中的 as 中。这解决了这个问题。
| 归档时间: |
|
| 查看次数: |
5970 次 |
| 最近记录: |