Dernière modification : 24/08/2022

Les fichiers de configuration : Les Properties avec Spring

Dans cet article nous allons voir comment utiliser les fichiers de configuration "properties" avec Spring.

 

1. Définition de l'emplacement des fichiers de properties

Par défaut, les fichiers de properties doivent être positionnés dans le dossier src/main/ressources.

Afin de définir quels sont les fichiers de properties à utiliser, il est nécessaire d'utiliser l'annotation @PropertySource. Cette annotation peut être dupliquée plusieurs fois s'il y a plusieurs fichiers de properties (Java 8) :

@PropertySource("classpath:aaa.properties")
@PropertySource("classpath:bbb.properties")
public class PropertiesClass {
    //...
}

Il est également possible d'utiliser l'annotation @PropertySources pour définir plusieurs fichiers de properties :

@PropertySources({
    @PropertySource("classpath:aaa.properties"),
    @PropertySource("classpath:bbb.properties")
})
public class PropertiesClass {
    //...
}

2. Injection

Il est possible de définir manuellement quelle variable aura quelle valeur de properties via l'annotation @Value :

@PropertySource("classpath:app1.properties")
@Component
public class PropertiesClass {
    @Value("${email}")
    private String email;
    
    // getters and setters
}

3.  Environnment API

En utilisant l'API Environment, les properties sont accessibles via la méthode getProperty :

@Autowired
private Environment env;
...
String mail = env.getProperty("mail");

4. Modification du fichier de properties dans les tests

En utilisant l'annotation @TestPropertySource, les properties seront chargées à partir d'un autre fichier :

@RunWith(SpringRunner.class)
@TestPropertySource("/app2.properties")
public class ClassUnitTest {

    @Value("${mail}")
    private String mail;

    @Test
    public void whenFilePropertyProvided_thenProperlyInjected() {
        assertThat(mail).isEqualTo("test@mail.com");
    }
}

Remarque : L'annotation @TestPropertySource(properties = {"mail=test@mail.com"}) permet d'ajouter une propertie qui pourra être utilisé dans le test.