我可能遗漏了一些显而易见的东西,但我试图弄清楚如何在运行应用程序时以编程方式从Spring Boot SpringApplication设置/覆盖属性。
默认情况下,我知道我可以将命令行参数传递给启动应用程序,但我想将spring启动应用程序嵌入到另一个java应用程序中,并在父应用程序中执行。我把它作为我项目的依赖项。
在我的Spring Boot应用程序中,我有以下内容:
static public main(String [] args){
SpringApplication app = new SpringApplication(Sync.class);
app.setWebEnvironment(false);
app.setShowBanner(false);
app.run(args);
}
这允许我设置命令行参数,例如--userName=Eric
等。
虽然我意识到我可以在技术上以编程方式执行相同操作并在代码中将--userName=Eric
添加到我的args []数组中,但我认为必须有另一种更清洁/更整洁的方法将参数/属性传递给我的{{1 }}。但我似乎无法在app
中找到允许我设置该类型值的任何其他方法。
我正在寻找能让我做以下事情的事情:
SpringApplication
我错过了一些明显的东西吗?
答案 0 :(得分:5)
当您需要对正在创建的应用程序进行更多控制时,可以使用SpringApplicationBuilder
,在这种情况下,使用properties
方法。例如:
new SpringApplicationBuilder(Application.class)
.properties("foo=bar").run(args);
还有一些变体采用Properties
和Map
。
答案 1 :(得分:1)
除了你的建议之外,我没有找到修改app参数的方法,但我认为你的用例适合外部配置:
https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-external-config.html
如果您提前知道所需的值,我认为application.config文件就是它们应该存在的位置。然后你可以通过@Value注释等访问它们。