web-dev-qa-db-fra.com

Amorçage printanier - variables personnalisées dans Application.properties

J'ai un client de démarrage de printemps qui consomme une api reposante. Au lieu de coder en dur l'adresse IP de l'API REST dans la classe Java, existe-t-il une entrée de clé dans le fichier application.properties que je puisse utiliser?).

Et si non, puis-je créer une entrée personnalisée?

Merci

25
Kingamere

L'infrastructure utilisée par Spring Boot peut être utilisée de la même manière dans votre propre projet. Vous avez commenté dans la réponse @zmitrok à propos d'un avertissement de "propriété inconnue". En effet, votre propriété n'a pas de méta-données, donc le IDE) n'est pas au courant.

Je vous conseillerais vivement de ne pas utiliser @Value Si vous le pouvez car il est plutôt limité par rapport à ce que propose Spring Boot (@Value Est une fonctionnalité de Spring Framework).

Commencez par créer des POJO pour votre IP:

@ConfigurationProperties("app.foo")
public class FooProperties {

    /**
     * IP of foo service used to blah.
     */
    private String ip = 127.0.0.1;

    // getter & setter
}

Ensuite, vous avez deux choix

  1. Placez @Component Sur FooProperties et activez le traitement des propriétés de configuration en ajoutant @EnableConfigurationProperties À n’importe laquelle de vos classes @Configuration (Cette dernière étape n’est plus nécessaire à partir de Botte de printemps 1.3.0.M3)
  2. Laissez FooProperties tel quel et ajoutez @EnableConfigurationProperties(FooProperties.class) à l'une de vos classes @Configuration, Ce qui créera automatiquement un bean Spring.

Une fois que vous avez fait cela, app.foo.ip Peut être utilisé dans application.properties Et vous pouvez @AutowiredFooProperties dans votre code pour rechercher la valeur de la propriété.

@Component
public MyRestClient {

    private final FooProperties fooProperties;

    @Autowired
    public MyRestClient(FooProperties fooProperties) { ... }

    public callFoo() {
       String ip = this.fooProperties.getIp();
       ...
    }

}

D'accord, votre clé est toujours jaune dans votre IDE. La dernière étape consiste à ajoutez une dépendance supplémentaire qui examinera votre code et générera les métadonnées pertinentes au moment de la construction . Ajoutez ce qui suit à votre pom.xml

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-configuration-processor</artifactId>
    <optional>true</optional>
</dependency>

Et voilà, votre clé est reconnue, vous avez javadoc et le IDE vous donne la valeur par défaut (la valeur que vous avez initialisée sur le champ). Une fois que vous pouvez utiliser n'importe quel type de conversion les descripteurs de service (c.-à-d. URL) et le javadoc sur le terrain sont utilisés pour générer la documentation de vos clés.

Vous pouvez également ajouter n'importe quelle validation de contrainte JSR-303 Sur votre champ (par exemple, une expression régulière pour vérifier que c'est une adresse IP valide).

Consultez ce projet exemple et la documentation pour plus de détails.

82
Stephane Nicoll

Au lieu de coder l’adresse IP dans le fichier de propriétés, vous pouvez démarrer l’application avec

-Dmy.property=127.127.10.20

Et Spring Boot le prendra automatiquement avec

@Value("${my.property}")
private String myProperty;
14
cahen

Vous pouvez ajouter vos propres entrées au fichier application.properties. Assurez-vous simplement que le nom de la propriété n'entre pas en conflit avec les propriétés communes répertoriées à l'adresse http://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#common-application-properties =

3
zmitrok