Annotation Interface ConfigurationPropertiesSource


@Target(TYPE) @Retention(RUNTIME) @Documented public @interface ConfigurationPropertiesSource
Indicates that the annotated type is a source of configuration properties metadata.

This annotation has no effect on the actual binding process, but serves as a hint to the spring-boot-configuration-processor to generate full metadata for the type.

Typically, this annotation is only required for types located in a different module than the @ConfigurationProperties class that references them. When both types are in the same module, the annotation processor can automatically discover full metadata as long as the source is available.

Use this annotation when metadata for types located outside the module is needed:

  1. Nested types annotated by @NestedConfigurationProperty
  2. Base classes that a @ConfigurationProperties-annotated type extends from

In the example below, ServerProperties is located in module "A" and Host in module "B":


 @ConfigurationProperties("example.server")
 class ServerProperties {

     @NestedConfigurationProperty
     private final Host host = new Host();

     public Host getHost() { ... }

     // Other properties, getter, setter.

 }

Properties from Host are detected as they are based on the type, but description and default value are not. To fix this, add the spring-boot-configuration-processor to module "B" if it is not present already and update Host as follows::


 @ConfigurationPropertiesSource
 class Host {

     /**
      * URL to use.
      */
     private String url = "https://example.com";

     // Other properties, getter, setter.

 }

Similarly the metadata of a base class that a @ConfigurationProperties-annotated type extends from can also be detected. Consider the following example:


 @ConfigurationProperties("example.client.github")
 class GitHubClientProperties extends AbstractClientProperties {

     // Additional properties, getter, setter.

 }

As with nested types, adding @ConfigurationPropertiesSource to AbstractClientProperties and the spring-boot-configuration-processor to its module ensures full metadata generation.

Since:
4.0.0
Author:
Stephane Nicoll