[SPRING] Java에서 yaml로부터 맵 읽기
SPRINGJava에서 yaml로부터 맵 읽기
봄을 사용하여 자바를 통해 내 yaml을 읽는 데 문제가 있습니다. 먼저 코드를 보여 드리겠습니다.
@Component
@EnableConfigurationProperties
@ConfigurationProperties(prefix = "countries")
public class UserLimitReader {
private HashMap<String, Integer> orders;
private HashMap<String, Integer> requests;
public HashMap<String, Integer> getOrders() {
return orders;
}
public void setOrderRedeemableLimit(HashMap<String, Integer> orders)
{
this.orders= orders;
}
public HashMap<String, Integer> getRequests() {
return requests;
}
public void setMonthlyRedeemableLimit(HashMap<String, Integer> requests) {
this.requests= requests;
}
}
내 yaml 파일 :
cassandra:
hosts: localhost:9142, 127.0.0.1:9142
keyspace: test
countries:
orders:
JPY: 1000
USD: 1000
requests:
JPY: 100000
USD: 100000
스프링 컨텍스트 xml은 또한 다음과 같습니다.
<bean id="yamlProperties"
class="org.springframework.beans.factory.config.YamlPropertiesFactoryBean">
<property name="resources">
<value>classpath:config/application.yaml</value>
</property>
</bean>
<context:property-placeholder
properties-ref="yamlProperties" />
이제 내가 가지고있는 기대는 봄 테스트 응용 프로그램의 런타임 중에 (컨텍스트 XML이 테스트 리소스에 있고 yaml도 내 테스트에 포함됨) 이러한 주문 및 요청 값이 설정되고, 그러나 그들은 null입니다. 또한, 내 yaml에는 @Value ($ {...})를 사용하여 주입하는 다른 값이 있으며, 절대적으로 좋게 주입됩니다!
나는 이것을 보았다 : Spring Boot - application.yml로부터 맵 삽입하기
나는 거의 동일하게했으나, 아직 나의 가치는 설정되어 있지 않습니다. 친절하게 도와주세요.
나는 google을 통해이 링크를 찾았습니다. http://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/beans/factory/config/YamlPropertiesFactoryBean.html
여기에는 모든 것이 문자열이 아니라지도로 읽혀집니다. 여기 Yaml 파일을 읽는 것을 지원하는 다른 클래스가 있습니까? Spring Boot - application.yml에서 맵 주입
아니면 YamlPropertiesFactoryBean에 대한 나의 이해가 잘못 되었습니까?
compile 'org.springframework:spring-core:4.2.+'
compile 'org.springframework:spring-beans:4.2.+'
compile 'org.springframework:spring-context:4.2.+'
compile 'org.springframework.boot:spring-boot:1.3.1.RELEASE'
compile 'org.springframework.boot:spring-boot-configuration-processor:1.3.1.RELEASE'
이들은 gradle의 의존성입니다. 본질적으로 스프링 부트를 원하지 않는다는 것에 궁금해 할 것입니다.하지만 스프링 부트가 없으면 @EnableConfigurationProperties 및 @ConfigurationProperties를 추가하지 않을 것입니다. 솔직하게 말하면 yaml 콘텐츠를지도없이 읽을 수 있는지 확인합니다. 따라서이 두 가지 종속성이 추가되지만 제거 할 수있는 방법이있는 경우 두 가지 종속성을 제거하는 것이 더 이상 행복 할 것입니다.
따뜻한 안부, Pavan
해결법
-
==============================
1.다른 제네릭 형식에서도 동일한 문제가 발생했으며 맵 멤버를 초기화하고 setter 메서드를 제거하여 해결했습니다 (예 :
다른 제네릭 형식에서도 동일한 문제가 발생했으며 맵 멤버를 초기화하고 setter 메서드를 제거하여 해결했습니다 (예 :
@Component @EnableConfigurationProperties @ConfigurationProperties(prefix = "countries") public class UserLimitReader{ private Map<String, Integer> orders = new HashMap<>(); private Map<String, Integer> requests = new HashMap<>(); public Map<String, Integer> getOrders() { return orders; } ... }
Java 7 다이아몬드 연산자를 사용하고 HashMap 대신 Map에 멤버 유형을 변경합니다.
중요 : 코드에서는 XML 대신 Spring의 구성 클래스를 사용하고 EnableConfigurationProperties를 구성 클래스로 이동했습니다. 귀하의 경우 그것은 다음과 같아야합니다 :
@Configuration @EnableConfigurationProperties(value = {UserLimitReader.class}) public class SpringConfiguration { ... } @ConfigurationProperties(prefix = "countries", locations: "classpath:config/application.yaml") public class UserLimitReader { ... }
XML을 사용하여 구성하는 방법을 모르겠다. 그러나 내 의견에 썼을 때, 나는 여전히 Spring이 컴포넌트 스캔이나 비슷한 것을 사용하여 클래스를 찾도록해야한다고 생각한다.
Spring에서의 @Value 작업은 컨텍스트 파일을 사용하여 아무 문제없이 YAML 파일을로드하지만 Spring에서 UserLimitReader 파일을로드하고 구성한다는 의미는 아닙니다.
from https://stackoverflow.com/questions/34697611/reading-a-map-from-yaml-in-java-getting-null by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] 스프링 오버로드 된 생성자 삽입 (0) | 2019.01.24 |
---|---|
[SPRING] 스프링 데이터 jpa : 결과 튜플에서 별칭을 찾을 수 없습니다! 쿼리가 별칭을 정의하는지 확인하십시오. (0) | 2019.01.23 |
[SPRING] Transfer-Encoding 제거 : POST 요청에 청크가 있습니까? (0) | 2019.01.23 |
[SPRING] 속성 파일에서 값을 가져 와서 주석에 사용하는 방법? (0) | 2019.01.23 |
[SPRING] Spring 속성 파일에서 Escape 속성 참조 (0) | 2019.01.23 |