Simplify property validation sample and document need for static bean method

Closes gh-6627
This commit is contained in:
Andy Wilkinson 2016-09-20 21:33:22 +01:00
parent 43e020ef7b
commit be33827f49
2 changed files with 23 additions and 25 deletions

View File

@ -1070,9 +1070,13 @@ as `@Valid` to trigger its validation. For example, building upon the above
----
You can also add a custom Spring `Validator` by creating a bean definition called
`configurationPropertiesValidator`. There is a
{github-code}/spring-boot-samples/spring-boot-sample-property-validation[Validation sample]
so you can see how to set things up.
`configurationPropertiesValidator`. The `@Bean` method should be declared `static`. The
configuration properties validator is created very early in the application's lifecycle
and declaring the `@Bean` method as static allows the bean to be created without having to
instantiate the `@Configuration` class. This avoids any problems that may be caused by
early instantiation. There is a
{github-code}/spring-boot-samples/spring-boot-sample-property-validation[property
validation sample] so you can see how to set things up.
TIP: The `spring-boot-actuator` module includes an endpoint that exposes all
`@ConfigurationProperties` beans. Simply point your web browser to `/configprops`

View File

@ -1,5 +1,5 @@
/*
* Copyright 2012-2015 the original author or authors.
* Copyright 2012-2016 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@ -16,42 +16,36 @@
package sample.propertyvalidation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Profile;
import org.springframework.stereotype.Service;
import org.springframework.validation.Validator;
@SpringBootApplication
public class SamplePropertyValidationApplication {
public class SamplePropertyValidationApplication implements CommandLineRunner {
private final SampleProperties properties;
public SamplePropertyValidationApplication(SampleProperties properties) {
this.properties = properties;
}
@Bean
public Validator configurationPropertiesValidator() {
public static Validator configurationPropertiesValidator() {
return new SamplePropertiesValidator();
}
@Service
@Profile("app")
static class Startup implements CommandLineRunner {
@Autowired
private SampleProperties properties;
@Override
public void run(String... args) {
System.out.println("=========================================");
System.out.println("Sample host: " + this.properties.getHost());
System.out.println("Sample port: " + this.properties.getPort());
System.out.println("=========================================");
}
@Override
public void run(String... args) {
System.out.println("=========================================");
System.out.println("Sample host: " + this.properties.getHost());
System.out.println("Sample port: " + this.properties.getPort());
System.out.println("=========================================");
}
public static void main(String[] args) throws Exception {
new SpringApplicationBuilder(SamplePropertyValidationApplication.class)
.profiles("app").run(args);
new SpringApplicationBuilder(SamplePropertyValidationApplication.class).run(args);
}
}