Spring Boot CommandLineRunner:过滤器选项参数
考虑到Spring Boot CommandLineRunner
应用程序,我想知道如何过滤作为外部化配置传递给Spring Boot的“
switch”选项。
例如,使用:
@Componentpublic class FileProcessingCommandLine implements CommandLineRunner {
@Override
public void run(String... strings) throws Exception {
for (String filename: strings) {
File file = new File(filename);
service.doSomething(file);
}
}
}
我可以打电话java -jar myJar.jar /tmp/file1 /tmp/file2
给这两个文件调用该服务。
但是,如果我添加一个Spring参数,例如java -jar myJar.jar /tmp/file1 /tmp/file2
--spring.config.name=myproject,配置名称将被更新(正确!),但是该服务也将被请求为文件./--spring.config.name=myproject
(当然不存在)。
我知道我可以手动过滤文件名,例如
if (!filename.startsWith("--")) ...
但是由于所有这些组件都来自Spring,所以我想知道是否有某个选项可以让它进行管理,并确保strings
传递给该run
方法的参数在应用程序级别已解析的所有属性选项中均不包含。
回答:
感谢@AndyWilkinson增强报告,ApplicationRunner
在Spring Boot
1.3.0中添加了接口(目前仍在Milestones中,但我希望很快会发布)
这里是使用它和解决问题的方法:
@Componentpublic class FileProcessingCommandLine implements ApplicationRunner {
@Override
public void run(ApplicationArguments applicationArguments) throws Exception {
for (String filename : applicationArguments.getNonOptionArgs())
File file = new File(filename);
service.doSomething(file);
}
}
}
以上是 Spring Boot CommandLineRunner:过滤器选项参数 的全部内容, 来源链接: utcz.com/qa/399024.html