web-dev-qa-db-fra.com

Utilisation de l'annotation `@ ConfigurationProperties` sur la méthode` @ Bean`

Quelqu'un pourrait-il indiquer à un MWE comment utiliser l'annotation @ConfigurationProperties directement sur une méthode @Bean?

J'ai vu d'innombrables exemples d'utilisation des définitions de classe, mais pas encore pour les méthodes @Bean

Pour citer la documentation :

  • Ajoutez ceci à une définition de classe ou à une méthode a @Bean
  • @Target (value = {TYPE, METHOD})

Donc, je pense qu'il y a une possibilité et une utilisation envisagée également - mais malheureusement, je suis incapable de le comprendre.

12
tMJ
spring.datasource.url = [url]
spring.datasource.username = [username]
spring.datasource.password = [password]
spring.datasource.driverClassName = Oracle.jdbc.OracleDriver

@Bean
@ConfigurationProperties(prefix="spring.datasource")
public DataSource dataSource() {
    return new DataSource();
}

Ici, la classe DataSource a l'adresse URL, le nom d'utilisateur, le mot de passe, le nom driverClassName, de sorte que Spring Boot les mappe sur l'objet créé. 

Exemple de la classe DataSource:

    public class DataSource {
        private String url;
        private String driverClassName;
        private String username;
        private String password;
        //getters & setters, etc.
    }

En d'autres termes, cela a le même effet que si vous initialisiez un bean avec des annotations de stéréotypes (@Component, @Service, etc.)

@Component
@ConfigurationProperties(prefix="spring.datasource")
public class DataSource {
            private String url;
            private String driverClassName;
            private String username;
            private String password;
            //getters & setters, etc.
        }
19
Evgeni Dimitrov

24.8.1 Configuration tierce

En plus d'utiliser @ConfigurationProperties pour annoter une classe, vous pouvez également l'utiliser sur les méthodes publiques @Bean. Cela peut être particulièrement utile lorsque vous souhaitez lier des propriétés à des composants tiers en dehors de votre contrôle.

Pour configurer un bean à partir des propriétés de l'environnement, ajoutez @ConfigurationProperties à son enregistrement, comme indiqué dans l'exemple suivant:

@ConfigurationProperties(prefix = "another")
@Bean
public AnotherComponent anotherComponent() {
    ...
}

Toute propriété définie avec un autre préfixe est mappée sur ce bean AnotherComponent de manière similaire à l'exemple précédent AcmeProperties.

0
宏杰李

Vous pouvez utiliser @ConfigurationProperties comme ci-dessous

Modèle d'entité

public class MY_ENTITY {
    private String prop1;
    private String prop2;
    // setter & getter & toString()
}

Méthode de haricot

@Configuration
public class MyClass {

    @Bean
    @ConfigurationProperties(prefix = "my.entity")
    public MY_ENTITY getContract() {
        return new MY_ENTITY()
                .setProp1("prop1111111")
                .setProp2("prop2222222")
                ;
    }

    @Bean(name = "contract2")
    @ConfigurationProperties(prefix = "my.entity2")
    public MY_ENTITY getContract2() {
        return new MY_ENTITY()
                .setProp1("prop1111.2222")
                .setProp2("prop2222.222")
                ;
    }
}

application.properties

my.entity.prop1=2120180023
my.entity.prop2=CUSTOMER_NAME111

my.entity2.prop1=9994494949
my.entity2.prop2=CUSTOMER_NAME222

SpringBootApplication

@SpringBootApplication
public class DemoApplication implements CommandLineRunner {

    @Autowired
    @Qualifier("contract2")
    private MY_ENTITY myEntity;

    public static void main(String[] args) throws Exception {
        SpringApplication.run(DemoApplication.class, args);
    }

    @Override
    public void run(String... args) throws Exception {
        System.out.println(myEntity);
    }
}
0
KevinBui