Spring Properties je nach Systemumgebung

Im Beitrag Properties in Spring 4 und Spring Boot haben wir die Properties für ein Spring-Projekt gesetzt. Nun wollen wir uns noch ein Beispiel ansehen, wie wir diese Properties je nach Systemumgebung durch Setzen eine JVM Parameters unterschiedlich einstellen können:

Eine von vielen Möglichkeiten, z.B. am Entwicklungsrechner andere Properties zu setzen als in der Produktivumgebung ist über einen JVM-Parameter. Diese beim Start der JVM mittels dem -D Parameter übergebenen Variablen können mit System.getProperty() abgerufen werden.

Im folgenden Codebeispiel wird davon ausgegangen, dass der JVM der Parameter -DDEV_ENV=true am Entwicklungsrechner mitgegeben wird. Dann laden wir zuerst die properties-Datei und können in einer dev.properties alle Parameter überschreiben, welche wir in der Entwicklungsumgebung unterschiedlich haben wollen:

@Configuration
public class PropertiesConfig {
    @Bean
    public static PropertySourcesPlaceholderConfigurer propertyPlaceholderConfigurer() {
          PropertySourcesPlaceholderConfigurer configurer = new PropertySourcesPlaceholderConfigurer(); 
          String devEnvStr = System.getProperty("DDEV_ENV");
          boolean devEnv = false;
          if ((devEnvStr != null) && (devEnvStr.toLowerCase().equals("true"))){
               devEnv = true;
          }          
  
          List<Resource> resourcesList = new ArrayList<Resource>();

          resourcesList.add(new ClassPathResource("properties"));
          if (devEnv) {
        	resourcesList.add(new ClassPathResource("debug.properties"));
          }

          configurer.setLocations(resourcesList.stream().toArray(Resource[]::new));  
          return configurer;
    }
}

 

Schreibe einen Kommentar