好吧,所以我有一个config.properties..:
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:
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:
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:
Applicationmain
@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
NullPointerException
Caused by: java.lang.NullPointerException: null at forex.market.service.MarketService.printConfig(MarketService.java:67) ~[classes/:na]
问题1: 基本上我做对了吗?
问题2: 我在互联网上找不到如何处理属性文件中原始元组数组的任何帮助,甚至有可能将其注入到spring-boot配置中- 还是我需要使用以下命令将配置重写为字符串split()获取单个值(出于维护性和可读性的考虑,我真的不想这么做)?
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; }