我试图将我的应用程序之外的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)
}
由于您将命令行参数传递给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)
}
如果您不喜欢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