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 You can also add a custom Spring `Validator` by creating a bean definition called
`configurationPropertiesValidator`. There is a `configurationPropertiesValidator`. The `@Bean` method should be declared `static`. The
{github-code}/spring-boot-samples/spring-boot-sample-property-validation[Validation sample] configuration properties validator is created very early in the application's lifecycle
so you can see how to set things up. 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 TIP: The `spring-boot-actuator` module includes an endpoint that exposes all
`@ConfigurationProperties` beans. Simply point your web browser to `/configprops` `@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"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
@ -16,42 +16,36 @@
package sample.propertyvalidation; package sample.propertyvalidation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.CommandLineRunner; import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder; import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Profile;
import org.springframework.stereotype.Service;
import org.springframework.validation.Validator; import org.springframework.validation.Validator;
@SpringBootApplication @SpringBootApplication
public class SamplePropertyValidationApplication { public class SamplePropertyValidationApplication implements CommandLineRunner {
private final SampleProperties properties;
public SamplePropertyValidationApplication(SampleProperties properties) {
this.properties = properties;
}
@Bean @Bean
public Validator configurationPropertiesValidator() { public static Validator configurationPropertiesValidator() {
return new SamplePropertiesValidator(); return new SamplePropertiesValidator();
} }
@Service @Override
@Profile("app") public void run(String... args) {
static class Startup implements CommandLineRunner { System.out.println("=========================================");
System.out.println("Sample host: " + this.properties.getHost());
@Autowired System.out.println("Sample port: " + this.properties.getPort());
private SampleProperties properties; 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 { public static void main(String[] args) throws Exception {
new SpringApplicationBuilder(SamplePropertyValidationApplication.class) new SpringApplicationBuilder(SamplePropertyValidationApplication.class).run(args);
.profiles("app").run(args);
} }
} }