0

例如:

java -jar mySpringApplication --myJsonParameter="{\"myKey\":\"myValue\"}"

这应该这样解决:

public class MyService {
    @Autowired
    //or @Value("myJsonParameter") ? 
    private MyInputDto myInputDto;
}

public class MyInputDto {
    private String myKey;
}

这个想法是从命令行传递命名参数(并遵循 spring 外部化实践),但注入从 json 解析的 Typed 值,而不是字符串。

4

2 回答 2

0

你可以实现CommandLineRunner你的springboot主类,然后Bean像这样准备:

@Bean
public MyInputDto prepareMyInputDto(){
    return new MyInputDto();
}

然后在您的run方法中,您可以从命令行参数设置值。

@Override
public void run(String... args) throws Exception {
    MyInputDto bean = context.getBean(MyInputDto.class);
    bean.setMyKey(args[0]);
}
于 2018-06-05T08:27:43.330 回答
0

您可以尝试使用属性spring.application.json并注释您的MyInputDtoas @org.springframework.boot.context.properties.ConfigurationProperties

像这样启动您的应用程序:

java -Dspring.application.json='{"myKey":"myValue"}' -jar mySpringApplication.jar

实施您的服务:

@EnableConfigurationProperties(MyInputDto.class)
public class MyService {

    @Autowired
    private MyInputDto myInputDto;

    // use myInputDto.getMyKey();

}

@ConfigurationProperties
public class MyInputDto {
    private String myKey;

    public String getMyKey() { return this.myKey; }

    public void setMyKey(String myKey) { this.myKey = myKey; }
}

有关更多信息,请参阅Spring 外部配置文档

于 2018-06-05T07:58:00.323 回答