我正在尝试将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)
}
答案 0 :(得分:0)
如果您不喜欢application.properties作为配置文件 名称,您可以通过指定一个来切换到另一个文件名 spring.config.name环境属性。您也可以参考 通过使用spring.config.location环境进行显式定位 属性(这是目录位置的逗号分隔列表,或者 文件路径)。以下示例显示了如何指定其他 文件名:
java -jar myproject.jar --spring.config.name=myproject
或者您可以使用位置(如果rour文件在您的应用程序外部,则以file:
作为前缀):
java -jar myproject.jar --spring.config.location=classpath:/default.properties
spring.config.name和spring.config.location很早就用于 确定必须加载哪些文件,因此必须将它们定义为 环境属性(通常是OS环境变量,系统 属性或命令行参数)。
如果您想在不更改启动脚本的情况下进行操作,则可以这样操作:
@SpringBootApplication
public class SimpleBoot {
public static void main(String[] args) {
System.setProperty("spring.config.location","file:/path/to/application.yml")
SpringApplication.run(SimpleBoot.class, args);
}
}
答案 1 :(得分: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)
}