Old*_*eer 1 java configuration spring-boot
如何从 java springboot 应用程序中的配置 yml 文件加载对象列表?
我已经尝试了几个来源:
spring-boot-configurationproperties-example
堆栈:Java 11、SpringBoot 2.1.4、Lombok、.yml 格式的配置文件。
我尝试实现简单的@Component,它将从配置文件加载数据。
配置值为:
allowed:
- first-crossroad: ONE
second-crossroad: TWO
third-crossroad: TWO
fourth-crossroad: THREE
- first-crossroad: ONE
second-crossroad: THREE
third-crossroad: TWO
fourth-crossroad: ONE
Run Code Online (Sandbox Code Playgroud)
用于数据加载的 Java 类是:
allowed:
- first-crossroad: ONE
second-crossroad: TWO
third-crossroad: TWO
fourth-crossroad: THREE
- first-crossroad: ONE
second-crossroad: THREE
third-crossroad: TWO
fourth-crossroad: ONE
Run Code Online (Sandbox Code Playgroud)
Java CrossroadCombination 对象定义:
@Configuration
@EnableConfigurationProperties
@ConfigurationProperties(prefix = "")
@Data
public class AllowedCrossroads {
private List<CrossroadCombination> allowed;
}
Run Code Online (Sandbox Code Playgroud)
我希望在应用程序运行期间加载值。但我收到错误:
Property: allowed[0].first-crossroad
Value: ONE
Origin: class path resource [application.yml]:644:17
Reason: The elements [allowed[0].first-crossroad,allowed[0].fourth-crossroad,allowed[0].second-crossroad,allowed[0].third-crossroad,allowed[1].first-crossroad,allowed[1].fourth-crossroad,allowed[1].second-crossroad,allowed[1].third-crossroad,allowed[2].first-crossroad,allowed[2].fourth-crossroad,allowed[2].second-crossroad,allowed[2].third-crossroad] were left unbound.
Run Code Online (Sandbox Code Playgroud)
Old*_*eer 11
(众多之一)解决方案:
到java类:
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class CrossroadCombination {
private String firstCrossroad;
private String secondCrossroad;
private String thirdCrossroad;
private String fourthCrossroad;
}
Run Code Online (Sandbox Code Playgroud)
解释:
因为我们在创建对象的时候,需要有一个空的对象,然后填充数据。这就是我们不需要 args 构造函数的原因。
无论如何,“@Daniel V”的解决方案也是正确的,谢谢!
小智 6
将内部类设为静态将起作用
@Configuration
@EnableConfigurationProperties
@ConfigurationProperties(prefix = "")
@Data
public class AllowedCrossroads {
private List<CrossroadCombination> allowed;
@Data
public static class CrossroadCombination {
private String firstCrossroad;
private String secondCrossroad;
private String thirdCrossroad;
private String fourthCrossroad;
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
12223 次 |
| 最近记录: |