加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – Spring Boot命令行属性不覆盖application.properties中

发布时间:2020-12-15 04:34:14 所属栏目:Java 来源:网络整理
导读:我创建了一个使用旧库的 Spring Boot应用程序.这个遗留库在XML中定义了许多Spring Beans.其中一个将属性值作为构造函数参数: beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schem
我创建了一个使用旧库的 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>

在我的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

不使用overriden值,而是使用application.properties中的值.

根据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,则它将无法工作,因为System属性将在错误的JVM上设置.由于它不起作用,我猜这就是发生的事情.

您可以使用-Drun.arguments将参数传递给正在运行的应用程序,而不管它是否在分叉的JVM中运行.参数应该是逗号分隔的列表,每个列表都以 – 为前缀.例如,要设置my.url:

mvn spring-boot:run -Drun.arguments=--my.url=http://www.override.net

此问题的另一个可能原因是您的main方法没有将它接收的参数传递给它创建的SpringApplication.您还应该检查您的main方法是否与此类似:

public static void main(String[] args) throws Exception {
    SpringApplication.run(YourApplication.class,args);
}

请注意,args正在传递给SpringApplication.run的调用.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读