java - 基于命令行参数注入(inject)实现

标签 java spring-boot command-line interface autowired

有没有办法在 Spring Boot 中根据命令行参数注入(inject)特定的接口(interface)实现?

我有一个数据加载应用程序,我需要根据命令行参数加载特定类型的数据。

这是我的主类和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 接口(interface),其中包含两个实现 Type1DataLoadProcessType2DataLoadProcess 并根据命令行参数?

最佳答案

您可以使用 Spring 配置文件来实现您的目标: https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-profiles.html

创建接口(interface)DataLoadProcess

然后是类:

@Component
@Profile("type1")
public class Type1LoadProcess implements DataLoadProcess {
}

@Component
@Profile("type2")
public class Type2LoadProcess implements DataLoadProcess {
}

然后你可以像这样注入(inject)接口(interface)类型:

@Autowired 
DataLoadProcess dataLoadProcessor;

现在您可以使用其中一个配置文件启动您的应用程序,例如使用系统属性集:

-Dspring.profiles.active=type1

关于java - 基于命令行参数注入(inject)实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51877585/

相关文章:

java - 线程中的异常 "main"org.hibernate.hql.ast.QuerySyntaxException : Users is not mapped [from Users]

java - 只是 'DELETE' 请求方法不支持

java - spring mvc 项目返回 406 错误 - 将对象列表序列化为 xml 和 json

java - 如何使用 java 流对 JPA 存储库中的字段进行分组和平均并放入新集合中

Java 语法突出显示和代码建议对某些文件停止工作

java - @Transactional 在 Spring Boot 中不起作用

spring - Keycloak 与 Spring boot - 如何应用资源范围

linux - Grep 在不使用管道的情况下获取文件中的字符串

java - micro-payara 实例如何仅绑定(bind)到 localhost?

svn - 我的机器上的 svn.exe 在哪里?