Spring Boot CommandLineRunner:过滤器选项参数

考虑到Spring Boot CommandLineRunner应用程序,我想知道如何过滤作为外部化配置传递给Spring Boot的“

switch”选项。

例如,使用:

@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给这两个文件调用该服务。

但是,如果我添加一个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中,但我希望很快会发布)

这里是使用它和解决问题的方法:

@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);

}

}

}

以上是 Spring Boot CommandLineRunner:过滤器选项参数 的全部内容, 来源链接: utcz.com/qa/399024.html

回到顶部