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.
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.
Une autre méthode consiste à injecter Environment dans votre haricot.
@Autowired
private Environment env;
....
public void method() {
.....
String path = env.getProperty("userBucket.path");
.....
}
@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();
}
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");
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;
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.
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
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);
}
}