que propiedades leer example crear bean archivo application java spring dependency-injection annotations spring-annotations

java - propiedades - ¿Cómo inyectar un mapa usando la anotación Spring @Value?



leer properties java spring (6)

Así es como lo hicimos. Dos clases de muestra de la siguiente manera:

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); } ...

Para proporcionar la configuración de kafkaConsumer desde un archivo de propiedades, puede usar: 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

Para proporcionar la configuración kafkaConsumer de un archivo yaml, puede usar "[clave]": valor en el archivo 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

¿Cómo puedo inyectar valores en un Mapa desde el archivo de propiedades usando la anotación @Value en Spring?

Mi clase de Spring Java es e intenté usar el $ pero recibí el siguiente mensaje de error

No se pudo conectar automáticamente el campo: privado java.util.Map Test.standard; la excepción anidada es java.lang.IllegalArgumentException: no se pudo resolver el marcador de posición ''com.test.standard'' en el valor de cadena "$ {com.test.standard}"

@ConfigurationProperty("com.hello.foo") public class Test { @Value("${com.test.standard}") private Map<String,Pattern> standard = new LinkedHashMap<String,Pattern> private String enabled; }

Tengo las siguientes propiedades en un archivo .properties

com.test.standard.name1=Pattern1 com.test.standard.name2=Pattern2 com.test.standard.name3=Pattern3 com.hello.foo.enabled=true


Creo que Spring Boot admite la carga de mapas de propiedades fuera de la caja con la anotación @ConfigurationProperties .

Según los documentos, puede cargar propiedades:

my.servers[0]=dev.bar.com my.servers[1]=foo.bar.com

en frijol como este:

@ConfigurationProperties(prefix="my") public class Config { private List<String> servers = new ArrayList<String>(); public List<String> getServers() { return this.servers; } }

Utilicé la función @ConfigurationProperties antes, pero sin cargar en el mapa. Debe usar la anotación @EnableConfigurationProperties para habilitar esta función.

Lo bueno de esta característica es que puede validar sus propiedades .


Para que esto funcione con YAML, haga esto:

@Bean(name = "mongoConfig") @ConfigurationProperties(prefix = "spring.data.mongodb") public Map<String, Map<String, String>> mongoConfig() { return new HashMap(); }


Puede inyectar .properties como un mapa en su clase utilizando la anotación @Resource .

Si está trabajando con una XML based configuration , agregue el siguiente bean en su archivo de configuración de Spring:

<bean id="myProperties" class="org.springframework.beans.factory.config.PropertiesFactoryBean"> <property name="location" value="classpath:your.properties"/> </bean>

Para, Anotación basada:

@Bean(name = "myProperties") public static PropertiesFactoryBean mapper() { PropertiesFactoryBean bean = new PropertiesFactoryBean(); bean.setLocation(new ClassPathResource( "your.properties")); return bean; }

Luego puede recogerlos en su aplicación como un Mapa:

@Resource(name = "myProperties") private Map<String, String> myProperties;


Puede inyectar valores en un Mapa desde el archivo de propiedades utilizando la anotación @Value como esta.

La propiedad en el archivo de propiedades.

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

En su código

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

Tenga en cuenta el hashtag como parte de la anotación.


Tenía un código simple para Spring Cloud Config

Me gusta esto:

En application.properties

spring.data.mongodb.db1 = mongodb: //[email protected]

spring.data.mongodb.db2 = mongodb: //[email protected]

leer

@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 : mongoConfig.entrySet()) { String k = entry.getKey(); String v = entry.getValue(); MongoTemplate template = new MongoTemplate(new SimpleMongoDbFactory(new MongoClientURI(v))); mongoTemplates.put(k, template); } return mongoTemplates; }

utilizar

property-name: ''{ key1: "value1", key2: "value2" }''