考虑到Spring Boot CommandLineRunner应用程序,我想知道如何过滤作为外部化配置传递给Spring Boot的“ switch”选项。
CommandLineRunner
例如,使用:
@Component public 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给这两个文件调用该服务。
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(当然不存在)。
java -jar myJar.jar /tmp/file1 /tmp/file2 --spring.config.name=myproject
./--spring.config.name=myproject
我知道我可以手动过滤文件名,例如
if (!filename.startsWith("--")) ...
但是由于所有这些组件都来自Spring,所以我想知道是否有某个选项可以让它进行管理,并确保strings传递给该run方法的参数在应用程序级别已解析的所有属性选项中均不包含。
strings
run
感谢@AndyWilkinson增强报告,ApplicationRunner在Spring Boot 1.3.0中添加了接口(目前仍在Milestones中,但我希望很快会发布)
ApplicationRunner
这里是使用它和解决问题的方法:
@Component public 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); } } }