Externalized Configuration with Spring Boot

Spring Boot makes Spring configurations easier and safer.  Spring Boot supports formats such as YAML as well as the .properties file, for externalized configuration. YAML is a human friendly data serialization standard, which is mainly made for configuration files. YAML stands for YAML Ain't Markup Language.

YAML supports Maps, lists and scalar types. YAML is hierarchical and may use consistent spaces to denote hierarchy. It will also support inline maps. YAML also supports multiple Spring profiles in single YAML config file. One limitation of YAML however is that it does not work with @PropertySource annotation. Properties file is mainly used with Java, supports only String types and is non-hierarchical; we can have maps by denoting hierarchies as dots. Properties file will also work with @PropertySource annotation. One of the limitation of properties file is that we can only configure one Spring profile per properties file.

Even though Spring supports type safe configuration, Spring Boot makes it much easier. The annotation @ConfigurationProperties can turn your application properties into type safe POJOs, and then Spring can do the binding and injection part. You will need to annotate a class with @ConfigurationProperties and define the properties along with setters and getters. Maps and collections can be extended with only a getter, whereas arrays will require a setter. You can either annotate this class with @Component or add this class to the configuration using @EnableConfigurationProperties. Now you can autowire the config class in other components using @Inject annotation.

You can validate your configuration properties using JSR 303 annotations such as @NotNull, @Pattern, @Max, @Min, @Digits etc. @ConfigurationProperties can be used to configure your beans as well as third party beans.

Spring Boot jars are shipped with meta-data files that provide details of all supported configuration properties. The files are designed to allow IDE developers to offer contextual help and “code completion” as users are working with application.properties or application.yml files. You can generate your own configuration meta-data file from items annotated with @ConfigurationProperties by using the spring-boot-configuration-processor jar. Read more @ http://docs.spring.io/spring-boot/docs/current/reference/html/configuration-metadata.html.

Spring boot uses relaxed names for configuration properties. For instance, feature-enabled or FEATURE_ENABLED will be matched to featureEnabled.

Spring Boot provides cascading resolution of configuration. Order of resolution is as follows: command line arguments (prefix any property with a double dash),  embedded JSON in SPRING_APPLICATION_JSON environment variable, StandardServletEnvironment, RandomValuePropertySource, application.properties/application.yml (variants),  @PropertySource, Default Properties.

StandardServletEnvironment implementation is a hierarchy within itself and looks in following in order: ServletConfig init parameters, ServletContext init parameters, JNDI attributes, System.getProperties(), OS environment variables. In case of application.properties/application.yml variants, first profile specific files (e.g. application-{profile}.properties) and then the generic application.properties/application.yml. The default properties can be set in the main class using SpringApplication.setDefaultProperties().

Search the Web

Custom Search

Searches whole web. Use the search in the right sidebar to search only within javajee.com!!!