복붙노트

[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. ==============================

    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. ==============================

    2.이와 같이 @Value 주석을 사용하여 특성 파일에서 Map에 값을 삽입 할 수 있습니다.

    이와 같이 @Value 주석을 사용하여 특성 파일에서 Map에 값을 삽입 할 수 있습니다.

    특성 파일의 특성.

    propertyname={key1:'value1',key2:'value2',....}
    

    당신의 코드에서.

    @Value("#{${propertyname}}")  private Map<String,String> propertyname;
    

    해시 태그를 주석의 일부로 기록하십시오.

  3. ==============================

    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. ==============================

    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. ==============================

    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;
    }
    
  6. from https://stackoverflow.com/questions/30691949/how-to-inject-a-map-using-the-value-spring-annotation by cc-by-sa and MIT license