如何在 Spring 启动时从命令行解析 link?
How to parse link from command line in Spring boot?
link 到 XML 文件作为命令行参数传递给应用程序。 link 具有以下格式:type: path,其中 type 是 link 的类型,path 是文件的路径。 link 定义以 XML 格式加载数据的来源。 Link type(类型):file(外部文件),classpath(类路径中的文件),url(URL)。示例:文件:input.xml,类路径:input.xml,url:文件:/input.xml。
我怎样才能收到文件?我试过@Value,但它只能传递常量。
实施
ApplicationRunner
通过获得第一个位置参数
ApplicationArguments。
有多种方法可以定位资源,示例使用
DefaultResourceLoader.
import org.springframework.boot.ApplicationArguments;
import org.springframework.boot.ApplicationRunner;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.core.io.DefaultResourceLoader;
import org.springframework.core.io.Resource;
@SpringBootApplication
@NoArgsConstructor @ToString @Log4j2
public class Command implements ApplicationRunner {
public static void main(String[] argv) throws Exception {
new SpringApplicationBuilder(Command.class).run(argv);
}
@Override
public void run(ApplicationArguments arguments) throws Exception {
/*
* Get the first optional argument.
*/
String link = arguments.getNonOptionArgs().get(0);
/*
* Get the resource.
*/
Resource resource = new DefaultResourceLoader().getResource(link);
/*
* Command implementation; command completes when this method
* completes.
*/
}
}
link 到 XML 文件作为命令行参数传递给应用程序。 link 具有以下格式:type: path,其中 type 是 link 的类型,path 是文件的路径。 link 定义以 XML 格式加载数据的来源。 Link type(类型):file(外部文件),classpath(类路径中的文件),url(URL)。示例:文件:input.xml,类路径:input.xml,url:文件:/input.xml。 我怎样才能收到文件?我试过@Value,但它只能传递常量。
实施 ApplicationRunner 通过获得第一个位置参数 ApplicationArguments。 有多种方法可以定位资源,示例使用 DefaultResourceLoader.
import org.springframework.boot.ApplicationArguments;
import org.springframework.boot.ApplicationRunner;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.core.io.DefaultResourceLoader;
import org.springframework.core.io.Resource;
@SpringBootApplication
@NoArgsConstructor @ToString @Log4j2
public class Command implements ApplicationRunner {
public static void main(String[] argv) throws Exception {
new SpringApplicationBuilder(Command.class).run(argv);
}
@Override
public void run(ApplicationArguments arguments) throws Exception {
/*
* Get the first optional argument.
*/
String link = arguments.getNonOptionArgs().get(0);
/*
* Get the resource.
*/
Resource resource = new DefaultResourceLoader().getResource(link);
/*
* Command implementation; command completes when this method
* completes.
*/
}
}