Saltar al contenido

Spring Boot: múltiples propiedades de configuración similares con diferentes prefijos

Solución:

Logré casi lo mismo que tú intentaste. primero, registre cada propiedad de los beans.

@Bean
@ConfigurationProperties(prefix = "serviceA")
public ServiceProperties  serviceAProperties() {
    return new ServiceProperties ();
}

@Bean
@ConfigurationProperties(prefix = "serviceB")
public ServiceProperties  serviceBProperties() {
    return new ServiceProperties ();
}

y en el servicio (o en algún lugar donde se usarán las propiedades) coloque un @Qualifier y especifique qué propiedad se conectará automáticamente.

public class ServiceA {
    @Autowired
    @Qualifier("serviceAProperties")
    private ServiceProperties serviceAProperties;

}

Siguiendo esta publicación Guía para @ConfigurationProperties en Spring Boot, puede crear una clase simple sin anotaciones:

public class ServiceProperties {
   private String url;
   private String port;

   // Getters & Setters
}

Y luego crea la clase @Configuration usando la anotación @Bean:

@Configuration
@PropertySource("classpath:name_properties_file.properties")
public class ConfigProperties {

    @Bean
    @ConfigurationProperties(prefix = "serviceA")
    public ServiceProperties serviceA() {
        return new ServiceProperties ();
    }

    @Bean
    @ConfigurationProperties(prefix = "serviceB")
    public ServiceProperties serviceB(){
        return new ServiceProperties ();
    }
}

Finalmente, puede obtener las propiedades de la siguiente manera:

@SpringBootApplication
public class Application implements CommandLineRunner {

    @Autowired
    private ConfigProperties configProperties ;

    private void watheverMethod() {
        // For ServiceA properties
        System.out.println(configProperties.serviceA().getUrl());

        // For ServiceB properties
        System.out.println(configProperties.serviceB().getPort());
    }
}
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *