Sto lavorando a un'applicazione Spring e mi sto rendendo conto di avere un problema con il modo in cui gestisco le mie proprietà. Uso i profili di ambiente Spring per caricare le mie proprietà e recentemente ho aggiunto altri profili che hanno reso i miei file di proprietà non gestibili.Utilizzare correttamente i profili di ambiente Spring per gestire PropertySourcesPlaceholderConfigurer e set di file di proprietà
I file delle proprietà si trovano in diverse cartelle all'interno di src/main/resources/META-INF/props/
, con la cartella eah che corrisponde a un diverso profilo ambiente Spring.
Ho almeno 5 profili ora che significa che ho 5 sottocartelle ciascuna contenente i file delle proprietà con lo stesso nome ma con valori diversi per solo alcuni tasti.
Ecco come appare:
Ecco come ho configurato il mio PropertyPlaceholders:
@Configuration
public class PropertyPlaceholderConfiguration {
@Profile(Profiles.CLOUD)
static class cloudConfiguration {
@Bean
public static PropertySourcesPlaceholderConfigurer propertySourcesPlaceholderConfigurer() throws IOException {
PropertySourcesPlaceholderConfigurer propertySourcesPlaceholderConfigurer = new PropertySourcesPlaceholderConfigurer();
propertySourcesPlaceholderConfigurer.setIgnoreUnresolvablePlaceholders(Boolean.TRUE);
propertySourcesPlaceholderConfigurer.setLocations(new PathMatchingResourcePatternResolver().getResources("classpath*:META-INF/props/cloud/*.properties"));
return propertySourcesPlaceholderConfigurer;
}
}
@Profile(Profiles.DEFAULT)
static class defaultConfiguration {
@Bean
public static PropertySourcesPlaceholderConfigurer propertySourcesPlaceholderConfigurer() throws IOException {
PropertySourcesPlaceholderConfigurer propertySourcesPlaceholderConfigurer = new PropertySourcesPlaceholderConfigurer();
propertySourcesPlaceholderConfigurer.setIgnoreUnresolvablePlaceholders(Boolean.TRUE);
propertySourcesPlaceholderConfigurer.setLocations(new PathMatchingResourcePatternResolver().getResources("classpath*:META-INF/props/default/*.properties"));
return propertySourcesPlaceholderConfigurer;
}
}
@Profile(Profiles.TEST)
static class testConfiguration {
@Bean
public static PropertySourcesPlaceholderConfigurer propertySourcesPlaceholderConfigurer() throws IOException {
PropertySourcesPlaceholderConfigurer propertySourcesPlaceholderConfigurer = new PropertySourcesPlaceholderConfigurer();
propertySourcesPlaceholderConfigurer.setIgnoreUnresolvablePlaceholders(Boolean.TRUE);
propertySourcesPlaceholderConfigurer.setLocations(new PathMatchingResourcePatternResolver().getResources("classpath*:META-INF/props/test/*.properties"));
return propertySourcesPlaceholderConfigurer;
}
}
@Profile(Profiles.DEV)
static class devConfiguration {
@Bean
public static PropertySourcesPlaceholderConfigurer propertySourcesPlaceholderConfigurer() throws IOException {
PropertySourcesPlaceholderConfigurer propertySourcesPlaceholderConfigurer = new PropertySourcesPlaceholderConfigurer();
propertySourcesPlaceholderConfigurer.setIgnoreUnresolvablePlaceholders(Boolean.TRUE);
propertySourcesPlaceholderConfigurer.setLocations(new PathMatchingResourcePatternResolver().getResources("classpath*:META-INF/props/dev/*.properties"));
return propertySourcesPlaceholderConfigurer;
}
...
}
Per riassumere, il mio problema è il seguente:
- coppie chiave/valore sono duplicate in tutte le 5 cartelle diverse perché solo alcune val voi siete diversi
Sono quindi alla ricerca di una nuova strategia per gestire le differenze tra i diversi ambienti.
Qualcuno può aiutare per favore?
Grazie Alan! Ummm, l'unica cosa è che la tua forza costringe uno ad avere proprietà non correlate nello stesso file (cioè common.profile.properties) ... – balteo
Un altro problema con la soluzione suggerita è che se per qualche motivo ad un certo punto ho bisogno di valori diversi per una delle proprietà ho bisogno di estrarlo dal file comune e metterlo nei file specifici del profilo. – balteo