当前位置: 首页 > 知识库问答 >
问题:

用命令行参数覆盖spring boot中的yml配置无效

昝浩阔
2023-03-14

我有一个spring boot应用程序。我想覆盖应用程序中配置的一些属性。执行jar时使用yml。

我的代码如下:

@Service
public class CommandService {

    @Value("${name:defaultName}")
    private String name;

    public void print() {
        System.out.println(name);
    }
}

Application.java是

@SpringBootApplication
public class Application implements CommandLineRunner {

    @Autowired
    private CommandService commandService;

    public static void main(String[] args) {
        SpringApplication.run(Application.class);
    }

    @Override
    public void run(String... args) throws Exception {
        commandService.print();
    }
}

应用程序。yml公司

名称:nameInApplication

当我像这样执行命令时:

java-jar应用程序。jar—name=nameInCommand

这不是工作

第二个命令也不起作用:

javaapp.jar

但是如果application.yml没有配置名称,第二个命令会很好地工作,第一个命令也不会以任何方式工作。

共有1个答案

阮阳曦
2023-03-14

这是几个月前的事了,但我要回答它,因为我刚刚遇到这个问题,通过谷歌找到了你的问题,伊凡的评论唤起了我的记忆。由于他没有详细说明,我不确定你是否解决了你的问题(你现在可能已经解决了),你将想要改变:

public static void main(String[] args) {
    SpringApplication.run(Application.class);
}

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

就这么简单。以前的参数在传入时从未出现过,因此不会覆盖您的应用程序。yml属性。所以,以防万一你还没弄明白,或者有人像我一样偶然发现了这个问题,这就是伊凡的意思

启动SpringApplication时是否传递命令行参数。运行(…)

 类似资料:
  • 我不想使用命令行覆盖现有的YML文件配置文件,所以我这样做了。 null

  • 问题内容: 我有一个带有默认变量值的application.properties文件。我希望能够在运行时更改其中之一。我找到了如何更改整个文件的方法,但是我只想更改其中一个或两个属性。 问题答案: 您可以将各个属性作为命令行参数传递。例如,如果要设置,则在启动可执行jar时可以执行以下操作: 另外,如果您使用的是Spring Boot 2.x,则: 或者,如果您使用的是Spring Boot 1.

  • 问题内容: 我目前有量角器安装程序,可以在我们的集成服务器上运行。在protractor.conf.js文件中,我具有以下内容: 从命令行本地运行时,我想覆盖此设置。我尝试了以下失败的尝试 问题: 从命令行本地运行时,如何切换为仅使用chrome的单个实例? 问题答案: 这是个问题。 根据源代码,命令行参数是的别名。 根据文档: 换句话说,由于已指定,因此将被忽略。 您可以尝试从命令行重置: 作为

  • 我有个身材。我的android应用程序中的gradle文件具有以下设置: My AndroidManifest.xml不包含版本代码,也不包含 versionName。 现在我想在Jenkins上构建这个应用程序,并将build_NUMBER作为应用程序的版本代码传递,以便每个构建都有更高的版本。 所以在工作中,我接到了一个电话: 当我使用“versionCode”重命名“app release.

  • 在默认情况下加载的文件夹中有一个类型安全配置。 可以通过指定以下内容重写单个值: 将无法加载。相反,将加载resources文件夹中的原始文件。尝试以下技巧:在纱线上使用typesafe config和Spark也没有帮助。 当使用uberjar部署时,重写类型安全配置中的多个配置值似乎是普通(没有spark)程序的解决方案。问题仍然是如何使这一点产生火花。 同样通过的是: https://git

  • 问题内容: 我有一个结构如下的文件: 我想在命令行中覆盖。 对于其他值为简单类型(字符串,数字)的配置键,我可以使用进行覆盖,并且效果很好。 但是,我似乎找不到为 list 做到这一点的方法。在上面的示例中,我尝试将其设置为如下所示:,但是我得到了一个例外,即键值是字符串,而不是列表。 有没有一种方法可以通知类型安全配置库此值是一个列表? 问题答案: 为此,在1.0.1版中实现了另一种语法: