Si j'ai les propriétés suivantes dans application.yaml:
myPro:
prop1: prop1value
prop2: prop2value
....
Est-il possible de charger cela dans un objet Java Properties
?
Par défaut, Spring place déjà toutes les propriétés de cette application dans son environnement qui encapsule Properties
, par exemple:
@Autowired
private Environment environment;
public void stuff() {
environment.getProperty("myPro.prop1");
environment.getProperty("myPro.prop2");
}
Toutefois, si vous souhaitez simplement utiliser les valeurs, vous pouvez toujours utiliser l'annotation @Value
, par exemple:
@Value("${myPro.prop1}")
private String prop1;
@Value("${myPro.prop2}")
private String prop2;
Enfin, si vous voulez vraiment un objet Properties
avec seulement tout dans myPro
, vous pouvez créer le bean suivant:
@ConfigurationProperties(prefix = "myPro")
@Bean
public Properties myProperties() {
return new Properties();
}
Vous pouvez maintenant autoriser les propriétés et les utiliser:
@Autowired
@Qualifier("myProperties")
private Properties myProperties;
public void stuff() {
myProperties.getProperty("prop1");
myProperties.getProperty("prop2");
}
Dans ce cas, vous n'avez pas nécessairement à le lier à Properties
, mais vous pouvez utiliser un POJO personnalisé à condition qu'il ait un nom de champ prop1
et un autre nom de champ prop2
.
Ces trois options sont également listées dans la documentation :
Les valeurs de propriété peuvent être injectées directement dans vos beans à l'aide de l'annotation
@Value
, accessible via l'abstraction Spring deEnvironment
ou liées à des objets structurés via@ConfigurationProperties
.
Spring gérera le chargement des propriétés si vous suivez les instructions doc de référence . En bref ...
Je suppose que vous utilisez Spring-Boot depuis le tagging . Si vous n'en avez pas déjà un, créez /src/main/resources/application.yml
avec le contenu suivant:
myPro:
prop1: prop1value
prop2: prop2value
Ensuite, vous pouvez simplement injecter vos valeurs de propriétés comme ceci:
@SpringBootApplication
public class DemoApplication implements CommandLineRunner {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
@Value("${myProp.prop1}")
String prop1;
@Value("${myProp.prop2}")
String prop2;
@Override
public void run(String... args) throws Exception {
System.out.println(prop1);
System.out.println(prop2);
}
}