Properties in Spring 4 und Spring Boot

In Spring kann man zur Konfiguration eines Projektes unter anderem Properties welche in Property Dateien definiert sind verwenden. Im einfachsten Fall ist dies eine simple Text-Dateien mit Einträgen [name]=[Wert]. Es können aber auch YAML-Dateien oder Kommandozeilen-Parameter sein. Egal woher die Parameter kommen, sie werden automatisch als Properties zusammengefasst und können dann zum konfigurieren z.B. der Datenbank-Einstellungen, Mail-Server-Einstellungen und ähnliches verwendet werden.

Definition in der XML-Konfiguration

Zum einen kann man die Datei mit den Konfigurationswerten in der XML-Konfiguration angeben, in dem man den <context:property-placeholder ..> Tag verwendet:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xmlns:context="http://www.springframework.org/schema/context"
   xsi:schemaLocation="
      http://www.springframework.org/schema/beans 
      http://www.springframework.org/schema/beans/spring-beans-4.2.xsd
      http://www.springframework.org/schema/context 
      http://www.springframework.org/schema/context/spring-context-4.2.xsd">
 
      <context:property-placeholder location="classpath:db.properties" />
 
</beans>

In der Datei db.properties können dann Werte für den DB-Zugriff folgendermaßen definiert sein:

database.driver=org.postgresql.Driver
database.url=jdbc:postgresql://localhost:5432/mydb
database.user=dbuser
database.password=dbpasswd

Über Java-Annotation

Bei Java-basierter Konfiguration kann bei der @Configuration-Annotation über die @PropertySource-Annotation eine Datei angegeben werden:

@Configuration
@PropertySource("classpath:db.properties")
public class PropertiesConfig {
    @Bean
    public static PropertySourcesPlaceholderConfigurer 
       propertyPlaceholderConfigurer() {
           return new PropertySourcesPlaceholderConfigurer();
    }
}

Oder man gibt dem PropertySourcesPlaceholderConfigurer-Objekt die Datei an:

@Configuration
public class PropertiesConfig {
    @Bean
    public static PropertySourcesPlaceholderConfigurer 
       propertyPlaceholderConfigurer() {
          PropertySourcesPlaceholderConfigurer configurer = new PropertySourcesPlaceholderConfigurer(); 
          Resource res = new ClassPathResource("db.properties"); 
          // oder wenn die Datei außerhalb des classpath liegt
          // Resource res = new FileSystemResource("C:\config\db.properties");
          configurer.setLocation(res);
          return configurer;
    }
}

Spring Boot

Spring Boot vereinfacht die Verwendung von Properties unter anderem, indem es Standard-Dateien gibt, welche automatisch verwendet werden. So genügt es z.B. einfach eine application.properties in unser /src/main/Resources-Verzeichnis zu geben, und diese Datei wird dann automatisch gelesen.

Eine genauere Beschreibung der verschiedenen Möglichkeiten die Properties in Spring Boot zu definieren, kann unter https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-external-config.html nachgelesen werden.

Verwendung

Die Properties können einerseits in der XML-Konfiguration verwendet werden, z.B.:

	<bean id="jdbcDataSource"
		class="org.springframework.jdbc.datasource.DriverManagerDataSource">
		<property name="driverClassName" value="${database.driver}" />	
		<property name="url" value="${database.url}" />
		<property name="username" value="${database.user}" />
		<property name="password" value="${database.password}" />
	</bean>

Andererseits kann auf die Werte mittels @Value-Annotation zugegriffen werden (siehe auch http://www.codersblog.de/werte-aus-spring-properties-verwenden/)

	@Value("${config.filesPath}")
	private String filesPath = null;

 

Schreibe einen Kommentar