如何以编程方式告诉Spring Boot应用程序application.yml是否在app用户主目录中?

问题描述 投票:0回答:2

我试图将我的应用程序之外的application.yml移动到运行应用程序的用户目录中。我知道一个常见的方法是在运行时使用启动参数,例如-Dconfig.location=/path/to/external.properties(顺便说一下,我似乎无法使其工作性能),但我需要能够在不改变启动脚本的情况下执行此操作(如果可能的话)。

我的目标是在启动应用程序的应用程序groovy文件的main()方法中执行此操作。在该方法中,我正在检测用户的主目录,并尝试将其设置为应用程序使用的属性。但是,我尝试的所有方法都以FileNotFound(application.yml)结束。有人能提供任何关于实现我想要的建议吗?以下是最近的尝试

static void main(String[] args)  throws NoSuchAlgorithmException, IOException, URISyntaxException  {
    String configPath = "${System.getProperty('user.home')}"
    ConfigurableApplicationContext applicationContext = new SpringApplicationBuilder(Angular4SpringbootApplication)
            .properties("spring.config.name:application,conf",
            "spring.config.location=classpath:$configPath/application.yml")
            .build().run(args)

    SpringApplication.run(Angular4SpringbootApplication, args)
}
spring spring-boot groovy configuration
2个回答
0
投票

由于您将命令行参数传递给SpringApplication.run,因此您可以先修改它们。我对Groovy了解不多,但我认为这应该有效:

static void main(String[] args) {
    SpringApplication.run(Angular4SpringbootApplication, ["--spring.config.location=file:${System.getProperty('user.home')}/application.yml"] + args)
}

您还可以在启动Spring上下文之前设置系统属性:

static void main(String[] args) {
    System.setProperty('spring.config.location', "${System.getProperty('user.home')}/application.yml")
    SpringApplication.run(Angular4SpringbootApplication, args)
}

0
投票

如果您不喜欢application.properties作为配置文件名,则可以通过指定spring.config.name环境属性来切换到另一个文件名。您还可以使用spring.config.location环境属性(以逗号分隔的目录位置或文件路径列表)来引用显式位置。以下示例显示如何指定其他文件名:

java -jar myproject.jar --spring.config.name=myproject

或者您可以使用位置(如果您的文件在您的应用之外,前缀为qazxsw poi):

file:

spring.config.name和spring.config.location很早就用来确定必须加载哪些文件,因此必须将它们定义为环境属性(通常是OS环境变量,系统属性或命令行参数) )。

编辑

如果您想在不更改启动脚本的情况下执行此操作,则可以这样执行:

java -jar myproject.jar --spring.config.location=classpath:/default.properties
© www.soinside.com 2019 - 2024. All rights reserved.