java - 基于命令行参数注入实现
问题描述
有没有办法根据 Spring Boot 中的命令行参数注入特定的接口实现?
我有一个数据加载应用程序,我需要根据命令行参数加载特定类型的数据。
这是我的主要课程和CommandLineRunner
:
@SpringBootApplication
public class DataLoadersApplication implements CommandLineRunner {
private Type1LoadProcess type1LoadProcess;
private Type2LoadProcess type2LoadProcess;
public DataLoadersApplication(Type1LoadProcess type1LoadProcess,
Type2LoadProcess type2LoadProcess) {
this.type1LoadProcess = type1LoadProcess;
this.type2LoadProcess = type2LoadProcess;
}
public static void main(String[] args) {
SpringApplication.run(DataLoadersApplication.class, args);
}
@Override
public void run(String... args) {
if (args[0].equalsIgnoreCase("load-type1")) {
type1LoadProcess.process();
} else if (args[0].equalsIgnoreCase("load-type2")) {
type2LoadProcess.process();
}
}
}
有没有一种方法可以创建一个DataLoadeProcess
具有两个实现的接口Type1DataLoadProcess
并Type2DataLoadProcess
根据命令行参数在主类中注入实现?
解决方案
您可以使用 Spring 配置文件来实现您的目标: https ://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-profiles.html
创建接口DataLoadProcess
然后上课:
@Component
@Profile("type1")
public class Type1LoadProcess implements DataLoadProcess {
}
@Component
@Profile("type2")
public class Type2LoadProcess implements DataLoadProcess {
}
然后你可以注入接口类型,如:
@Autowired
DataLoadProcess dataLoadProcessor;
现在您可以使用其中一个配置文件启动您的应用程序,例如使用系统属性集:
-Dspring.profiles.active=type1
推荐阅读
- initialization - 使用 cygwin(终端 wxt)初始化 gnuplot 时出错
- python - BeautifulSoup 4 HTML Web Scraping - 查找 Mailto 链接并导出到电子表格
- spring-boot - Kafka消费者健康检查和重新创建
- node.js - 在 Angular/Node.js 中发出 HTTP 发布请求时出现 500 错误
- c# - C# 使用 POST 方法向 API 发送数据
- regex - 需要匹配四位数字中的三个精确数字的正则表达式
- typescript - 'AxiosRequestConfig' 类型中不存在 Axios 'mode'
- phpspreadsheet - PHPSpreadsheet 1.15.0,按名称访问单元格
- flutter - ChangeNotifierProvider中Consumer/Provider.of的区别
- angular - Ng2智能表,从一个对象获取多列