在Spring Boot中从属性文件注入值数组

好吧,所以我有一个config.properties..:

market.curpairs[0].name=EuroDollar

market.curpairs[0].symbol=EURUSD

market.curpairs[0].minamount=0.1

market.curpairs[1].name=EuroFranken

market.curpairs[1].symbol=EURCHF

market.curpairs[1].minamount=0.1

market.currs[0].name=Euro

market.currs[0].symbol=EUR

market.currs[0].minamount=1.0

market.currs[0].withfee=0.1

market.currs[1].name=Dollar

market.currs[1].symbol=USD

market.currs[1].minamount=1.0

market.currs[1].withfee=0.1

market.currs[2].name=Franken

market.currs[2].symbol=CHF

market.currs[2].minamount=1.0

market.currs[2].withfee=0.1

然后我尝试将其注入MarketConfig.java

@PropertySource("classpath:config.properties")

@ConfigurationProperties(prefix = "market")

@Validated

public class MarketConfig {

// the configured currencies

private List<MarketCurrency> currs;

// the configured currencypairs

private List<MarketCurrencypair> curpairs;

/* static classes */

public static class MarketCurrency {

String name;

String symbol;

double minamount;

// getter and setter ommitted

}

public static class MarketCurrencypair {

String name;

String symbol;

double minamount;

double withfee;

// getter and setter ommitted

}

// getter and setter ommitted

}

..然后用于MarketService.java

 @Service

public class MarketService implements IMarketService {

private final MarketConfig config;

// ....

public MarketService(MarketConfig config) {

this.config = config;

}

// ....

public void printConfig() {

System.out.println("________________ CONFIGURATION: ");

this.config.getCurpairs().forEach(System.out::println);

this.config.getCurrs().forEach(System.out::println);

}

}

…由调用Applicationmain

@SpringBoot" title="SpringBoot">SpringBootApplication

@EnableSwagger2

@ComponentScan

@EnableConfigurationProperties({MarketConfig.class})

public class MarketApplication implements CommandLineRunner {

private final MarketService service;

/**

* Constructor

* @param service ..the Service

*/

public MarketApplication(MarketService service) {

this.service = service;

}

public static void main(String[] args) {

SpringApplication.run(MarketApplication.class, args);

}

@Override

public void run(String... args) throws Exception {

this.service.printConfig();

}

}

…让我屈服 NullPointerException

Caused by: java.lang.NullPointerException: null

at forex.market.service.MarketService.printConfig(MarketService.java:67) ~[classes/:na]

基本上我做对了吗?

我在互联网上找不到如何处理属性文件中原始元组数组的任何帮助,甚至有可能将其注入到spring-boot配置中-

还是我需要使用以下命令将配置重写为字符串split()获取单个值(出于维护性和可读性的考虑,我真的不想这么做)?

在此先感谢-如果您错过了一些信息/来源,请发表评论,我会尽快提供。

回答:

您需要设置 ,不需要 @Configuration@Component, 并使用嵌入式 公共静态类 包装货币的属性

 @PropertySource("classpath:config.properties")

@ConfigurationProperties(prefix = "market")

@Validated

public class MarketConfig {

List<MarketCurrency> currs;

//getters setters

public static class MarketCurrency {

String name;

String symbol;

....

//getters setters

将MarketConfig.class添加到@EnableConfigurationProperties

 @SpringBootApplication

@EnableSwagger2

@EnableConfigurationProperties({MarketConfig.class})

public class MarketApplication implements CommandLineRunner {

private final MarketService service;

private final MarketConfig config;

public MarketApplication(MarketService service, MarketConfig config) {

this.service = service;

this.config = config;

}

以上是 在Spring Boot中从属性文件注入值数组 的全部内容, 来源链接: utcz.com/qa/434378.html

回到顶部