web-dev-qa-db-fra.com

Comment accéder à une valeur définie dans le fichier application.properties dans Spring Boot

Je souhaite accéder aux valeurs fournies dans application.properties, par exemple:

logging.level.org.springframework.web: DEBUG
logging.level.org.hibernate: ERROR
logging.file=${HOME}/application.log

userBucket.path=${HOME}/bucket

Je souhaite accéder à userBucket.path dans mon programme principal dans une application Spring Boot.

247
Qasim

Vous pouvez utiliser l'annotation @Value et accéder à la propriété dans le bean Spring que vous utilisez.

@Value("${userBucket.path}")
private String userBucketPath;

La section Configuration externalisée des documents Spring Boot explique tous les détails dont vous pourriez avoir besoin.

358
Master Slave

Une autre méthode consiste à injecter Environment dans votre haricot.

@Autowired
private Environment env;
....

public void method() {
    .....  
    String path = env.getProperty("userBucket.path");
    .....
}
174

@ConfigurationProperties peut être utilisé pour mapper les valeurs de .properties (.yml également pris en charge) vers un POJO.

Considérons le fichier d'exemple suivant.

. propriétés

cust.data.employee.name=Sachin
cust.data.employee.dept=Cricket

Employee.Java

import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Configuration;

@ConfigurationProperties(prefix = "cust.data.employee")
@Configuration("employeeProperties")
public class Employee {

    private String name;
    private String dept;

    //Getters and Setters go here
}

Vous pouvez maintenant accéder à la valeur des propriétés par autowiring employeeProperties comme suit.

@Autowired
private Employee employeeProperties;

public void method() {

   String employeeName = employeeProperties.getName();
   String employeeDept = employeeProperties.getDept();

}
22
Jobin Joseph

Vous pouvez le faire de cette façon aussi ....

@Component
@PropertySource("classpath:application.properties")
public class ConfigProperties {

    @Autowired
    private Environment env;

    public String getConfigValue(String configKey){
        return env.getProperty(configKey);
    }
}

Ensuite, partout où vous voulez lire depuis application.properties, il suffit de passer la clé à la méthode getConfigValue.

@Autowired
ConfigProperties configProp;

// Read server.port from app.prop
String portNumber = configProp.getConfigValue("server.port"); 
3
lucifer

Vous pouvez utiliser le @Value pour charger des variables du application.properties si vous voulez utiliser cette valeur à un endroit, mais si vous avez besoin d'une méthode plus centralisée pour charger cette variable @ConfigurationProperties est une meilleure approche. .

De plus, vous pouvez charger des variables et les transtyper automatiquement si vous avez besoin de différents types de données pour effectuer vos validations et votre logique métier.

application.properties
custom-app.enable-mocks = false

@Value("${custom-app.enable-mocks}")
private boolean enableMocks;
1
JorgeTovar

Spring-boot nous permet plusieurs méthodes pour fournir des configurations externalisées, vous pouvez essayer d’utiliser des fichiers application.yml ou yaml au lieu du fichier de propriété et de fournir différents fichiers de propriétés d’installation en fonction de différents environnements.

Nous pouvons séparer les propriétés de chaque environnement en fichiers yml distincts sous des profils de ressort distincts. Ensuite, pendant le déploiement, vous pouvez utiliser:

Java -jar -Drun.profiles=SpringProfileName

spécifier le profil de ressort à utiliser.Notez que les fichiers yml doivent être nommés comme

application-{environmentName}.yml

pour qu'ils soient automatiquement repris par springboot.

Référence: https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-external-config.html#boot-features-external-config-profile-specific- propriétés

Pour lire à partir du fichier application.yml ou du fichier de propriétés:

Le moyen le plus simple de lire une valeur à partir du fichier de propriétés ou yml consiste à utiliser l'annotation spring @value.Spring charge automatiquement toutes les valeurs du yml au environnement de printemps, afin que nous puissions directement utiliser ces valeurs de l’environnement comme:

@Component
public class MySampleBean {

@Value("${name}")
private String sampleName;

// ...

}

Une autre méthode fournie par le printemps pour lire les haricots fortement typés est la suivante:

YML

ymca:
    remote-address: 192.168.1.1
    security:
        username: admin

POJO correspondant pour lire le yml:

@ConfigurationProperties("ymca")
public class YmcaProperties {
    private InetAddress remoteAddress;
    private final Security security = new Security();
    public boolean isEnabled() { ... }
    public void setEnabled(boolean enabled) { ... }
    public InetAddress getRemoteAddress() { ... }
    public void setRemoteAddress(InetAddress remoteAddress) { ... }
    public Security getSecurity() { ... }
    public static class Security {
        private String username;
        private String password;
        public String getUsername() { ... }
        public void setUsername(String username) { ... }
        public String getPassword() { ... }
        public void setPassword(String password) { ... }
    }
}

La méthode ci-dessus fonctionne bien avec les fichiers yml.

Référence: https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-external-config.html

0

Pour moi, rien de ce qui précède n'a fonctionné directement pour moi. Ce que j'ai fait est le suivant:

En plus de @Rodrigo Villalba Zayas répondre là j'ai ajouté
implements InitializingBean à la classe
et mis en œuvre la méthode

@Override
public void afterPropertiesSet() {
    String path = env.getProperty("userBucket.path");
}

Alors ça va ressembler

import org.springframework.core.env.Environment;
public class xyz implements InitializingBean {

    @Autowired
    private Environment env;
    private String path;

    ....

    @Override
    public void afterPropertiesSet() {
        path = env.getProperty("userBucket.path");
    }

    public void method() {
        System.out.println("Path: " + path);
    }
}
0
Rapalagui