[SPRING] @Value 스프링 주석을 사용하여지도를 삽입하는 방법은 무엇입니까?
SPRING@Value 스프링 주석을 사용하여지도를 삽입하는 방법은 무엇입니까?
Spring의 @Value 주석을 사용하여 속성 파일에서 값을 Map에 삽입하려면 어떻게해야합니까?
내 봄 자바 클래스와 나는 $를 사용하여 시도했지만, 다음과 같은 오류 메시지가 있어요
@ConfigurationProperty("com.hello.foo")
public class Test {
@Value("${com.test.standard}")
private Map<String,Pattern> standard = new LinkedHashMap<String,Pattern>
private String enabled;
}
.properties 파일에 다음과 같은 속성이 있습니다.
com.test.standard.name1=Pattern1
com.test.standard.name2=Pattern2
com.test.standard.name3=Pattern3
com.hello.foo.enabled=true
해결법
-
==============================
1.나는 Spring Boot가 @ConfigurationProperties 주석으로 상자 밖으로 속성 테이블을로드하는 것을 지원한다고 믿는다.
나는 Spring Boot가 @ConfigurationProperties 주석으로 상자 밖으로 속성 테이블을로드하는 것을 지원한다고 믿는다.
해당 문서에 따라 속성을로드 할 수 있습니다.
my.servers[0]=dev.bar.com my.servers[1]=foo.bar.com
이런 bean으로 :
@ConfigurationProperties(prefix="my") public class Config { private List<String> servers = new ArrayList<String>(); public List<String> getServers() { return this.servers; } }
전에 @ConfigurationProperties 기능을 사용했지만지도에로드하지 않았습니다. 이 기능을 사용하려면 @EnableConfigurationProperties 주석을 사용해야합니다.
이 기능에 대한 유용한 정보는 속성의 유효성을 검사 할 수 있다는 것입니다.
-
==============================
2.이와 같이 @Value 주석을 사용하여 특성 파일에서 Map에 값을 삽입 할 수 있습니다.
이와 같이 @Value 주석을 사용하여 특성 파일에서 Map에 값을 삽입 할 수 있습니다.
특성 파일의 특성.
propertyname={key1:'value1',key2:'value2',....}
당신의 코드에서.
@Value("#{${propertyname}}") private Map<String,String> propertyname;
해시 태그를 주석의 일부로 기록하십시오.
-
==============================
3.@Resource 주석을 사용하여 .properties를 클래스의 맵으로 삽입 할 수 있습니다.
@Resource 주석을 사용하여 .properties를 클래스의 맵으로 삽입 할 수 있습니다.
XML 기반 구성으로 작업하는 경우 스프링 구성 파일에 아래 bean을 추가하십시오.
<bean id="myProperties" class="org.springframework.beans.factory.config.PropertiesFactoryBean"> <property name="location" value="classpath:your.properties"/> </bean>
들어, 어노테이션 기반 :
@Bean(name = "myProperties") public static PropertiesFactoryBean mapper() { PropertiesFactoryBean bean = new PropertiesFactoryBean(); bean.setLocation(new ClassPathResource( "your.properties")); return bean; }
그런 다음 애플리케이션에서지도로 가져올 수 있습니다.
@Resource(name = "myProperties") private Map<String, String> myProperties;
-
==============================
4.우리가 어떻게했는지가 여기에 있습니다. 다음과 같은 두 개의 샘플 클래스가 있습니다.
우리가 어떻게했는지가 여기에 있습니다. 다음과 같은 두 개의 샘플 클래스가 있습니다.
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.kafka.annotation.EnableKafka; @EnableKafka @Configuration @EnableConfigurationProperties(KafkaConsumerProperties.class) public class KafkaContainerConfig { @Autowired protected KafkaConsumerProperties kafkaConsumerProperties; @Bean public ConsumerFactory<String, String> consumerFactory() { return new DefaultKafkaConsumerFactory<>(kafkaConsumerProperties.getKafkaConsumerConfig()); } ... @Configuration @ConfigurationProperties public class KafkaConsumerProperties { protected Map<String, Object> kafkaConsumerConfig = new HashMap<>(); @ConfigurationProperties("kafkaConsumerConfig") public Map<String, Object> getKafkaConsumerConfig() { return (kafkaConsumerConfig); } ...
특성 파일에서 kafkaConsumer 구성을 제공하려면 다음을 사용할 수 있습니다. mapname [key] = value
//application.properties kafkaConsumerConfig[bootstrap.servers]=localhost:9092, localhost:9093, localhost:9094 kafkaConsumerConfig[group.id]=test-consumer-group-local kafkaConsumerConfig[value.deserializer]=org.apache.kafka.common.serialization.StringDeserializer kafkaConsumerConfig[key.deserializer=org.apache.kafka.common.serialization.StringDeserializer
yaml 파일에서 kafkaConsumer 설정을 제공하려면 "[key]"를 사용할 수 있습니다 : value application.yml 파일에서 :
kafkaConsumerConfig: "[bootstrap.servers]": localhost:9092, localhost:9093, localhost:9094 "[group.id]": test-consumer-group-local "[value.deserializer]": org.apache.kafka.common.serialization.StringDeserializer "[key.deserializer]": org.apache.kafka.common.serialization.StringDeserializer
-
==============================
5.스프링 클라우드 설정을위한 간단한 코드가있다.
스프링 클라우드 설정을위한 간단한 코드가있다.
이렇게 :
application.properties에서
@Bean(name = "mongoConfig") @ConfigurationProperties(prefix = "spring.data.mongodb") public Map<String, Map<String, String>> mongoConfig() { return new HashMap(); }
@Autowired @Qualifier(value = "mongoConfig") private Map<String, String> mongoConfig; @Bean(name = "mongoTemplates") public HashMap<String, MongoTemplate> mongoTemplateMap() throws UnknownHostException { HashMap<String, MongoTemplate> mongoTemplates = new HashMap<>(); for (Map.Entry<String, String>> entry : mongoDbUris.entrySet()) { String k = entry.getKey(); String v = entry.getValue(); MongoTemplate template = new MongoTemplate(new SimpleMongoDbFactory(new MongoClientURI(v))); mongoTemplates.put(k, template); } return mongoTemplates; }
from https://stackoverflow.com/questions/30691949/how-to-inject-a-map-using-the-value-spring-annotation by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] 클래스 경로에서 Spring WebApplicationInitializer 유형을 감지하지 못함 (0) | 2018.12.15 |
---|---|
[SPRING] Java Spring @ 스케줄 된 작업 두 번 실행 (0) | 2018.12.15 |
[SPRING] 일치하는 와일드 카드는 엄격하지만 'tx : annotation-driven'요소에 대한 선언을 찾을 수 없습니다. (0) | 2018.12.15 |
[SPRING] Spring 3.1 상속을위한 Hibernate 4 예외 [org.hibernate.mapping.RootClass에 캐스트 할 수 없음] (0) | 2018.12.15 |
[SPRING] JPA / JTA / @ Transactional Spring 주석 (0) | 2018.12.15 |