Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Sign in / Register
Toggle navigation
S
spring-boot
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
DEMO
spring-boot
Commits
1d55f5f6
Commit
1d55f5f6
authored
Jan 19, 2017
by
Phillip Webb
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'gh-7579' into 1.5.x
parents
43d432a5
10dbf3c5
Changes
55
Hide whitespace changes
Inline
Side-by-side
Showing
55 changed files
with
249 additions
and
89 deletions
+249
-89
HealthIndicatorProperties.java
...boot/actuate/autoconfigure/HealthIndicatorProperties.java
+1
-1
ManagementServerProperties.java
...oot/actuate/autoconfigure/ManagementServerProperties.java
+7
-2
MetricFilterProperties.java
...rk/boot/actuate/autoconfigure/MetricFilterProperties.java
+1
-1
AbstractEndpoint.java
...ringframework/boot/actuate/endpoint/AbstractEndpoint.java
+13
-4
LiquibaseEndpoint.java
...ingframework/boot/actuate/endpoint/LiquibaseEndpoint.java
+4
-2
AbstractMvcEndpoint.java
...mework/boot/actuate/endpoint/mvc/AbstractMvcEndpoint.java
+9
-4
DocsMvcEndpoint.java
...gframework/boot/actuate/endpoint/mvc/DocsMvcEndpoint.java
+1
-1
HalJsonMvcEndpoint.java
...amework/boot/actuate/endpoint/mvc/HalJsonMvcEndpoint.java
+1
-1
HeapdumpMvcEndpoint.java
...mework/boot/actuate/endpoint/mvc/HeapdumpMvcEndpoint.java
+1
-1
DiskSpaceHealthIndicatorProperties.java
...ot/actuate/health/DiskSpaceHealthIndicatorProperties.java
+1
-1
MetricExportProperties.java
...k/boot/actuate/metrics/export/MetricExportProperties.java
+1
-1
BatchProperties.java
...ngframework/boot/autoconfigure/batch/BatchProperties.java
+1
-1
RepositoryRestProperties.java
...oot/autoconfigure/data/rest/RepositoryRestProperties.java
+1
-1
JestProperties.java
...boot/autoconfigure/elasticsearch/jest/JestProperties.java
+1
-1
FlywayProperties.java
...framework/boot/autoconfigure/flyway/FlywayProperties.java
+4
-3
H2ConsoleProperties.java
...gframework/boot/autoconfigure/h2/H2ConsoleProperties.java
+9
-4
HazelcastProperties.java
...ork/boot/autoconfigure/hazelcast/HazelcastProperties.java
+1
-1
ProjectInfoProperties.java
...mework/boot/autoconfigure/info/ProjectInfoProperties.java
+1
-1
DataSourceConfiguration.java
...work/boot/autoconfigure/jdbc/DataSourceConfiguration.java
+4
-4
JerseyProperties.java
...framework/boot/autoconfigure/jersey/JerseyProperties.java
+1
-1
ActiveMQConnectionFactoryConfiguration.java
.../jms/activemq/ActiveMQConnectionFactoryConfiguration.java
+1
-1
LiquibaseProperties.java
...ork/boot/autoconfigure/liquibase/LiquibaseProperties.java
+7
-2
DeviceDelegatingViewResolverProperties.java
...figure/mobile/DeviceDelegatingViewResolverProperties.java
+1
-1
OAuth2ClientProperties.java
...autoconfigure/security/oauth2/OAuth2ClientProperties.java
+1
-1
AuthorizationServerProperties.java
...rity/oauth2/authserver/AuthorizationServerProperties.java
+1
-1
OAuth2AuthorizationServerConfiguration.java
...h2/authserver/OAuth2AuthorizationServerConfiguration.java
+1
-1
OAuth2ProtectedResourceDetailsConfiguration.java
...2/client/OAuth2ProtectedResourceDetailsConfiguration.java
+1
-1
OAuth2RestOperationsConfiguration.java
...rity/oauth2/client/OAuth2RestOperationsConfiguration.java
+1
-1
OAuth2SsoProperties.java
...configure/security/oauth2/client/OAuth2SsoProperties.java
+1
-1
ResourceServerProperties.java
...re/security/oauth2/resource/ResourceServerProperties.java
+1
-1
SessionProperties.java
...amework/boot/autoconfigure/session/SessionProperties.java
+1
-1
FacebookProperties.java
...amework/boot/autoconfigure/social/FacebookProperties.java
+1
-1
LinkedInProperties.java
...amework/boot/autoconfigure/social/LinkedInProperties.java
+1
-1
TwitterProperties.java
...ramework/boot/autoconfigure/social/TwitterProperties.java
+1
-1
ThymeleafProperties.java
...ork/boot/autoconfigure/thymeleaf/ThymeleafProperties.java
+1
-1
TransactionProperties.java
...boot/autoconfigure/transaction/TransactionProperties.java
+1
-1
BitronixJtaConfiguration.java
...toconfigure/transaction/jta/BitronixJtaConfiguration.java
+1
-1
ServerProperties.java
...ingframework/boot/autoconfigure/web/ServerProperties.java
+7
-2
WebMvcProperties.java
...ingframework/boot/autoconfigure/web/WebMvcProperties.java
+1
-1
WebServicesProperties.java
...boot/autoconfigure/webservices/WebServicesProperties.java
+10
-5
spring-boot-features.adoc
spring-boot-docs/src/main/asciidoc/spring-boot-features.adoc
+7
-3
pom.xml
spring-boot-samples/spring-boot-sample-simple/pom.xml
+4
-0
SampleConfigurationProperties.java
...ain/java/sample/simple/SampleConfigurationProperties.java
+39
-0
application.properties
...t-sample-simple/src/main/resources/application.properties
+3
-1
SampleSimpleApplicationTests.java
...test/java/sample/simple/SampleSimpleApplicationTests.java
+4
-0
application.properties
...t-sample-simple/src/test/resources/application.properties
+0
-1
RestDocsAutoConfiguration.java
...est/autoconfigure/restdocs/RestDocsAutoConfiguration.java
+1
-1
MockMvcAutoConfiguration.java
...t/autoconfigure/web/servlet/MockMvcAutoConfiguration.java
+1
-1
PropertiesConfigurationFactory.java
...ngframework/boot/bind/PropertiesConfigurationFactory.java
+4
-3
ConfigurationProperties.java
...work/boot/context/properties/ConfigurationProperties.java
+5
-3
ConfigurationPropertiesBindingPostProcessor.java
...operties/ConfigurationPropertiesBindingPostProcessor.java
+35
-13
AtomikosProperties.java
...springframework/boot/jta/atomikos/AtomikosProperties.java
+1
-1
ConfigurationPropertiesBindingPostProcessorTests.java
...ies/ConfigurationPropertiesBindingPostProcessorTests.java
+2
-0
EnableConfigurationPropertiesTests.java
...ontext/properties/EnableConfigurationPropertiesTests.java
+37
-0
BindFailureAnalyzerTests.java
...k/boot/diagnostics/analyzer/BindFailureAnalyzerTests.java
+2
-0
No files found.
spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/HealthIndicatorProperties.java
View file @
1d55f5f6
...
...
@@ -26,7 +26,7 @@ import org.springframework.boot.context.properties.ConfigurationProperties;
* @author Christian Dupuis
* @since 1.2.0
*/
@ConfigurationProperties
(
"management.health.status"
)
@ConfigurationProperties
(
prefix
=
"management.health.status"
)
public
class
HealthIndicatorProperties
{
/**
...
...
spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/ManagementServerProperties.java
View file @
1d55f5f6
...
...
@@ -20,8 +20,8 @@ import java.net.InetAddress;
import
java.util.Arrays
;
import
java.util.List
;
import
javax.annotation.PostConstruct
;
import
javax.servlet.http.HttpSession
;
import
javax.validation.constraints.NotNull
;
import
org.springframework.boot.autoconfigure.security.SecurityPrerequisite
;
import
org.springframework.boot.autoconfigure.security.SecurityProperties
;
...
...
@@ -29,6 +29,7 @@ import org.springframework.boot.autoconfigure.web.ServerProperties;
import
org.springframework.boot.context.embedded.Ssl
;
import
org.springframework.boot.context.properties.ConfigurationProperties
;
import
org.springframework.boot.context.properties.NestedConfigurationProperty
;
import
org.springframework.util.Assert
;
import
org.springframework.util.StringUtils
;
/**
...
...
@@ -78,7 +79,6 @@ public class ManagementServerProperties implements SecurityPrerequisite {
/**
* Management endpoint context-path.
*/
@NotNull
private
String
contextPath
=
""
;
/**
...
...
@@ -88,6 +88,11 @@ public class ManagementServerProperties implements SecurityPrerequisite {
private
final
Security
security
=
new
Security
();
@PostConstruct
private
void
validate
()
{
Assert
.
notNull
(
this
.
contextPath
,
"ContextPath must not be null"
);
}
/**
* Returns the management port or {@code null} if the
* {@link ServerProperties#getPort() server port} should be used.
...
...
spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/MetricFilterProperties.java
View file @
1d55f5f6
...
...
@@ -29,7 +29,7 @@ import org.springframework.boot.context.properties.ConfigurationProperties;
* @author Phillip Webb
* @since 1.4.0
*/
@ConfigurationProperties
(
"endpoints.metrics.filter"
)
@ConfigurationProperties
(
prefix
=
"endpoints.metrics.filter"
)
public
class
MetricFilterProperties
{
/**
...
...
spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/AbstractEndpoint.java
View file @
1d55f5f6
...
...
@@ -16,11 +16,13 @@
package
org
.
springframework
.
boot
.
actuate
.
endpoint
;
import
javax.validation.constraints.NotNull
;
import
javax.validation.constraints.Pattern
;
import
java.util.regex.Pattern
;
import
javax.annotation.PostConstruct
;
import
org.springframework.context.EnvironmentAware
;
import
org.springframework.core.env.Environment
;
import
org.springframework.util.Assert
;
/**
* Abstract base for {@link Endpoint} implementations.
...
...
@@ -31,14 +33,14 @@ import org.springframework.core.env.Environment;
*/
public
abstract
class
AbstractEndpoint
<
T
>
implements
Endpoint
<
T
>,
EnvironmentAware
{
private
static
final
Pattern
ID_PATTERN
=
Pattern
.
compile
(
"\\w+"
);
private
Environment
environment
;
/**
* Endpoint identifier. With HTTP monitoring the identifier of the endpoint is mapped
* to a URL (e.g. 'foo' is mapped to '/foo').
*/
@NotNull
@Pattern
(
regexp
=
"\\w+"
,
message
=
"ID must only contains letters, numbers and '_'"
)
private
String
id
;
private
final
boolean
sensitiveDefault
;
...
...
@@ -53,6 +55,13 @@ public abstract class AbstractEndpoint<T> implements Endpoint<T>, EnvironmentAwa
*/
private
Boolean
enabled
;
@PostConstruct
private
void
validate
()
{
Assert
.
notNull
(
this
.
id
,
"Id must not be null"
);
Assert
.
isTrue
(
ID_PATTERN
.
matcher
(
this
.
id
).
matches
(),
"ID must only contains letters, numbers and '_'"
);
}
/**
* Create a new sensitive endpoint instance. The endpoint will enabled flag will be
* based on the spring {@link Environment} unless explicitly set.
...
...
spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/LiquibaseEndpoint.java
View file @
1d55f5f6
...
...
@@ -62,9 +62,11 @@ public class LiquibaseEndpoint extends AbstractEndpoint<List<LiquibaseReport>> {
for
(
Map
.
Entry
<
String
,
SpringLiquibase
>
entry
:
this
.
liquibases
.
entrySet
())
{
try
{
DataSource
dataSource
=
entry
.
getValue
().
getDataSource
();
JdbcConnection
connection
=
new
JdbcConnection
(
dataSource
.
getConnection
());
JdbcConnection
connection
=
new
JdbcConnection
(
dataSource
.
getConnection
());
try
{
Database
database
=
factory
.
findCorrectDatabaseImplementation
(
connection
);
Database
database
=
factory
.
findCorrectDatabaseImplementation
(
connection
);
reports
.
add
(
new
LiquibaseReport
(
entry
.
getKey
(),
service
.
queryDatabaseChangeLogTable
(
database
)));
}
...
...
spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/mvc/AbstractMvcEndpoint.java
View file @
1d55f5f6
...
...
@@ -16,13 +16,13 @@
package
org
.
springframework
.
boot
.
actuate
.
endpoint
.
mvc
;
import
javax.validation.constraints.NotNull
;
import
javax.validation.constraints.Pattern
;
import
javax.annotation.PostConstruct
;
import
org.springframework.boot.actuate.endpoint.Endpoint
;
import
org.springframework.boot.actuate.endpoint.EndpointProperties
;
import
org.springframework.context.EnvironmentAware
;
import
org.springframework.core.env.Environment
;
import
org.springframework.util.Assert
;
import
org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter
;
/**
...
...
@@ -41,8 +41,6 @@ public abstract class AbstractMvcEndpoint extends WebMvcConfigurerAdapter
/**
* Endpoint URL path.
*/
@NotNull
@Pattern
(
regexp
=
"/.*|^$"
,
message
=
"Path must start with / or be empty"
)
private
String
path
;
/**
...
...
@@ -68,6 +66,13 @@ public abstract class AbstractMvcEndpoint extends WebMvcConfigurerAdapter
this
.
enabled
=
enabled
;
}
@PostConstruct
private
void
validate
()
{
Assert
.
notNull
(
this
.
path
,
"Path must not be null"
);
Assert
.
isTrue
(
this
.
path
.
length
()
==
0
||
this
.
path
.
startsWith
(
"/"
),
"Path must start with / or be empty"
);
}
@Override
public
void
setEnvironment
(
Environment
environment
)
{
this
.
environment
=
environment
;
...
...
spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/mvc/DocsMvcEndpoint.java
View file @
1d55f5f6
...
...
@@ -27,7 +27,7 @@ import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry
* @author Dave Syer
* @since 1.3.0
*/
@ConfigurationProperties
(
"endpoints.docs"
)
@ConfigurationProperties
(
prefix
=
"endpoints.docs"
)
public
class
DocsMvcEndpoint
extends
AbstractNamedMvcEndpoint
{
private
static
final
String
DOCS_LOCATION
=
"classpath:/META-INF/resources/spring-boot-actuator/docs/"
;
...
...
spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/mvc/HalJsonMvcEndpoint.java
View file @
1d55f5f6
...
...
@@ -31,7 +31,7 @@ import org.springframework.web.bind.annotation.ResponseBody;
* @author Andy Wilkinson
* @since 1.3.0
*/
@ConfigurationProperties
(
"endpoints.actuator"
)
@ConfigurationProperties
(
prefix
=
"endpoints.actuator"
)
public
class
HalJsonMvcEndpoint
extends
AbstractNamedMvcEndpoint
{
private
final
ManagementServletContext
managementServletContext
;
...
...
spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/mvc/HeapdumpMvcEndpoint.java
View file @
1d55f5f6
...
...
@@ -54,7 +54,7 @@ import org.springframework.web.bind.annotation.ResponseStatus;
* @author Phillip Webb
* @since 1.4.0
*/
@ConfigurationProperties
(
"endpoints.heapdump"
)
@ConfigurationProperties
(
prefix
=
"endpoints.heapdump"
)
@HypermediaDisabled
public
class
HeapdumpMvcEndpoint
extends
AbstractNamedMvcEndpoint
{
...
...
spring-boot-actuator/src/main/java/org/springframework/boot/actuate/health/DiskSpaceHealthIndicatorProperties.java
View file @
1d55f5f6
...
...
@@ -27,7 +27,7 @@ import org.springframework.util.Assert;
* @author Andy Wilkinson
* @since 1.2.0
*/
@ConfigurationProperties
(
"management.health.diskspace"
)
@ConfigurationProperties
(
prefix
=
"management.health.diskspace"
)
public
class
DiskSpaceHealthIndicatorProperties
{
private
static
final
int
MEGABYTES
=
1024
*
1024
;
...
...
spring-boot-actuator/src/main/java/org/springframework/boot/actuate/metrics/export/MetricExportProperties.java
View file @
1d55f5f6
...
...
@@ -32,7 +32,7 @@ import org.springframework.util.PatternMatchUtils;
* @author Simon Buettner
* @since 1.3.0
*/
@ConfigurationProperties
(
"spring.metrics.export"
)
@ConfigurationProperties
(
prefix
=
"spring.metrics.export"
)
public
class
MetricExportProperties
extends
TriggerProperties
{
/**
...
...
spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/batch/BatchProperties.java
View file @
1d55f5f6
...
...
@@ -26,7 +26,7 @@ import org.springframework.boot.context.properties.ConfigurationProperties;
* @author Vedran Pavic
* @since 1.2.0
*/
@ConfigurationProperties
(
"spring.batch"
)
@ConfigurationProperties
(
prefix
=
"spring.batch"
)
public
class
BatchProperties
{
private
static
final
String
DEFAULT_SCHEMA_LOCATION
=
"classpath:org/springframework/"
...
...
spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/data/rest/RepositoryRestProperties.java
View file @
1d55f5f6
...
...
@@ -27,7 +27,7 @@ import org.springframework.http.MediaType;
* @author Stephane Nicoll
* @since 1.3.0
*/
@ConfigurationProperties
(
"spring.data.rest"
)
@ConfigurationProperties
(
prefix
=
"spring.data.rest"
)
public
class
RepositoryRestProperties
{
/**
...
...
spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/elasticsearch/jest/JestProperties.java
View file @
1d55f5f6
...
...
@@ -27,7 +27,7 @@ import org.springframework.boot.context.properties.ConfigurationProperties;
* @author Stephane Nicoll
* @since 1.4.0
*/
@ConfigurationProperties
(
"spring.elasticsearch.jest"
)
@ConfigurationProperties
(
prefix
=
"spring.elasticsearch.jest"
)
public
class
JestProperties
{
/**
...
...
spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/flyway/FlywayProperties.java
View file @
1d55f5f6
...
...
@@ -37,10 +37,11 @@ import org.springframework.boot.context.properties.ConfigurationProperties;
public
class
FlywayProperties
{
/**
* Locations of migrations scripts. Can contain the special "{vendor}" placeholder
*
to
use vendor-specific locations.
* Locations of migrations scripts. Can contain the special "{vendor}" placeholder
to
* use vendor-specific locations.
*/
private
List
<
String
>
locations
=
new
ArrayList
<
String
>(
Collections
.
singletonList
(
"db/migration"
));
private
List
<
String
>
locations
=
new
ArrayList
<
String
>(
Collections
.
singletonList
(
"db/migration"
));
/**
* Check that migration scripts location exists.
...
...
spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/h2/H2ConsoleProperties.java
View file @
1d55f5f6
...
...
@@ -16,10 +16,10 @@
package
org
.
springframework
.
boot
.
autoconfigure
.
h2
;
import
javax.validation.constraints.NotNull
;
import
javax.validation.constraints.Pattern
;
import
javax.annotation.PostConstruct
;
import
org.springframework.boot.context.properties.ConfigurationProperties
;
import
org.springframework.util.Assert
;
/**
* Configuration properties for H2's console.
...
...
@@ -35,8 +35,6 @@ public class H2ConsoleProperties {
/**
* Path at which the console will be available.
*/
@NotNull
@Pattern
(
regexp
=
"/[^?#]*"
,
message
=
"Path must start with /"
)
private
String
path
=
"/h2-console"
;
/**
...
...
@@ -46,6 +44,13 @@ public class H2ConsoleProperties {
private
final
Settings
settings
=
new
Settings
();
@PostConstruct
private
void
validate
()
{
Assert
.
notNull
(
this
.
path
,
"Path must not be null"
);
Assert
.
isTrue
(
this
.
path
.
length
()
==
0
||
this
.
path
.
startsWith
(
"/"
),
"Path must start with / or be empty"
);
}
public
String
getPath
()
{
return
this
.
path
;
}
...
...
spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/hazelcast/HazelcastProperties.java
View file @
1d55f5f6
...
...
@@ -26,7 +26,7 @@ import org.springframework.util.Assert;
* @author Stephane Nicoll
* @since 1.3.0
*/
@ConfigurationProperties
(
"spring.hazelcast"
)
@ConfigurationProperties
(
prefix
=
"spring.hazelcast"
)
public
class
HazelcastProperties
{
/**
...
...
spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/info/ProjectInfoProperties.java
View file @
1d55f5f6
...
...
@@ -28,7 +28,7 @@ import org.springframework.core.io.Resource;
* @author Stephane Nicoll
* @since 1.4.0
*/
@ConfigurationProperties
(
"spring.info"
)
@ConfigurationProperties
(
prefix
=
"spring.info"
)
public
class
ProjectInfoProperties
{
private
final
Build
build
=
new
Build
();
...
...
spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/DataSourceConfiguration.java
View file @
1d55f5f6
...
...
@@ -50,7 +50,7 @@ abstract class DataSourceConfiguration {
static
class
Tomcat
extends
DataSourceConfiguration
{
@Bean
@ConfigurationProperties
(
"spring.datasource.tomcat"
)
@ConfigurationProperties
(
prefix
=
"spring.datasource.tomcat"
)
public
org
.
apache
.
tomcat
.
jdbc
.
pool
.
DataSource
dataSource
(
DataSourceProperties
properties
)
{
org
.
apache
.
tomcat
.
jdbc
.
pool
.
DataSource
dataSource
=
createDataSource
(
...
...
@@ -75,7 +75,7 @@ abstract class DataSourceConfiguration {
static
class
Hikari
extends
DataSourceConfiguration
{
@Bean
@ConfigurationProperties
(
"spring.datasource.hikari"
)
@ConfigurationProperties
(
prefix
=
"spring.datasource.hikari"
)
public
HikariDataSource
dataSource
(
DataSourceProperties
properties
)
{
return
createDataSource
(
properties
,
HikariDataSource
.
class
);
}
...
...
@@ -93,7 +93,7 @@ abstract class DataSourceConfiguration {
static
class
Dbcp
extends
DataSourceConfiguration
{
@Bean
@ConfigurationProperties
(
"spring.datasource.dbcp"
)
@ConfigurationProperties
(
prefix
=
"spring.datasource.dbcp"
)
public
org
.
apache
.
commons
.
dbcp
.
BasicDataSource
dataSource
(
DataSourceProperties
properties
)
{
org
.
apache
.
commons
.
dbcp
.
BasicDataSource
dataSource
=
createDataSource
(
...
...
@@ -118,7 +118,7 @@ abstract class DataSourceConfiguration {
static
class
Dbcp2
extends
DataSourceConfiguration
{
@Bean
@ConfigurationProperties
(
"spring.datasource.dbcp2"
)
@ConfigurationProperties
(
prefix
=
"spring.datasource.dbcp2"
)
public
org
.
apache
.
commons
.
dbcp2
.
BasicDataSource
dataSource
(
DataSourceProperties
properties
)
{
return
createDataSource
(
properties
,
...
...
spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jersey/JerseyProperties.java
View file @
1d55f5f6
...
...
@@ -29,7 +29,7 @@ import org.springframework.boot.context.properties.ConfigurationProperties;
* @author Stephane Nicoll
* @since 1.2.0
*/
@ConfigurationProperties
(
"spring.jersey"
)
@ConfigurationProperties
(
prefix
=
"spring.jersey"
)
public
class
JerseyProperties
{
/**
...
...
spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jms/activemq/ActiveMQConnectionFactoryConfiguration.java
View file @
1d55f5f6
...
...
@@ -54,7 +54,7 @@ class ActiveMQConnectionFactoryConfiguration {
@Bean
(
destroyMethod
=
"stop"
)
@ConditionalOnProperty
(
prefix
=
"spring.activemq.pool"
,
name
=
"enabled"
,
havingValue
=
"true"
,
matchIfMissing
=
false
)
@ConfigurationProperties
(
"spring.activemq.pool.configuration"
)
@ConfigurationProperties
(
prefix
=
"spring.activemq.pool.configuration"
)
public
PooledConnectionFactory
pooledJmsConnectionFactory
(
ActiveMQProperties
properties
)
{
PooledConnectionFactory
pooledConnectionFactory
=
new
PooledConnectionFactory
(
...
...
spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/liquibase/LiquibaseProperties.java
View file @
1d55f5f6
...
...
@@ -19,11 +19,12 @@ package org.springframework.boot.autoconfigure.liquibase;
import
java.io.File
;
import
java.util.Map
;
import
javax.
validation.constraints.NotNull
;
import
javax.
annotation.PostConstruct
;
import
liquibase.integration.spring.SpringLiquibase
;
import
org.springframework.boot.context.properties.ConfigurationProperties
;
import
org.springframework.util.Assert
;
/**
* Configuration properties to configure {@link SpringLiquibase}.
...
...
@@ -37,7 +38,6 @@ public class LiquibaseProperties {
/**
* Change log configuration path.
*/
@NotNull
private
String
changeLog
=
"classpath:/db/changelog/db.changelog-master.yaml"
;
/**
...
...
@@ -96,6 +96,11 @@ public class LiquibaseProperties {
*/
private
File
rollbackFile
;
@PostConstruct
private
void
validate
()
{
Assert
.
notNull
(
this
.
changeLog
,
"ChangeLog must not be null"
);
}
public
String
getChangeLog
()
{
return
this
.
changeLog
;
}
...
...
spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/mobile/DeviceDelegatingViewResolverProperties.java
View file @
1d55f5f6
...
...
@@ -24,7 +24,7 @@ import org.springframework.boot.context.properties.ConfigurationProperties;
* @author Stephane Nicoll
* @since 1.2.0
*/
@ConfigurationProperties
(
"spring.mobile.devicedelegatingviewresolver"
)
@ConfigurationProperties
(
prefix
=
"spring.mobile.devicedelegatingviewresolver"
)
public
class
DeviceDelegatingViewResolverProperties
{
/**
...
...
spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/security/oauth2/OAuth2ClientProperties.java
View file @
1d55f5f6
...
...
@@ -27,7 +27,7 @@ import org.springframework.boot.context.properties.ConfigurationProperties;
* @author Stephane Nicoll
* @since 1.3.0
*/
@ConfigurationProperties
(
"security.oauth2.client"
)
@ConfigurationProperties
(
prefix
=
"security.oauth2.client"
)
public
class
OAuth2ClientProperties
{
/**
...
...
spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/security/oauth2/authserver/AuthorizationServerProperties.java
View file @
1d55f5f6
...
...
@@ -24,7 +24,7 @@ import org.springframework.boot.context.properties.ConfigurationProperties;
* @author Dave Syer
* @since 1.3.0
*/
@ConfigurationProperties
(
"security.oauth2.authorization"
)
@ConfigurationProperties
(
prefix
=
"security.oauth2.authorization"
)
public
class
AuthorizationServerProperties
{
/**
...
...
spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/security/oauth2/authserver/OAuth2AuthorizationServerConfiguration.java
View file @
1d55f5f6
...
...
@@ -174,7 +174,7 @@ public class OAuth2AuthorizationServerConfiguration
}
@Bean
@ConfigurationProperties
(
"security.oauth2.client"
)
@ConfigurationProperties
(
prefix
=
"security.oauth2.client"
)
public
BaseClientDetails
oauth2ClientDetails
()
{
BaseClientDetails
details
=
new
BaseClientDetails
();
if
(
this
.
client
.
getClientId
()
==
null
)
{
...
...
spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/security/oauth2/client/OAuth2ProtectedResourceDetailsConfiguration.java
View file @
1d55f5f6
...
...
@@ -31,7 +31,7 @@ import org.springframework.security.oauth2.client.token.grant.code.Authorization
class
OAuth2ProtectedResourceDetailsConfiguration
{
@Bean
@ConfigurationProperties
(
"security.oauth2.client"
)
@ConfigurationProperties
(
prefix
=
"security.oauth2.client"
)
@Primary
public
AuthorizationCodeResourceDetails
oauth2RemoteResource
()
{
return
new
AuthorizationCodeResourceDetails
();
...
...
spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/security/oauth2/client/OAuth2RestOperationsConfiguration.java
View file @
1d55f5f6
...
...
@@ -74,7 +74,7 @@ public class OAuth2RestOperationsConfiguration {
protected
static
class
SingletonScopedConfiguration
{
@Bean
@ConfigurationProperties
(
"security.oauth2.client"
)
@ConfigurationProperties
(
prefix
=
"security.oauth2.client"
)
@Primary
public
ClientCredentialsResourceDetails
oauth2RemoteResource
()
{
ClientCredentialsResourceDetails
details
=
new
ClientCredentialsResourceDetails
();
...
...
spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/security/oauth2/client/OAuth2SsoProperties.java
View file @
1d55f5f6
...
...
@@ -24,7 +24,7 @@ import org.springframework.boot.context.properties.ConfigurationProperties;
* @author Dave Syer
* @since 1.3.0
*/
@ConfigurationProperties
(
"security.oauth2.sso"
)
@ConfigurationProperties
(
prefix
=
"security.oauth2.sso"
)
public
class
OAuth2SsoProperties
{
public
static
final
String
DEFAULT_LOGIN_PATH
=
"/login"
;
...
...
spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/security/oauth2/resource/ResourceServerProperties.java
View file @
1d55f5f6
...
...
@@ -37,7 +37,7 @@ import org.springframework.validation.Validator;
* @author Dave Syer
* @since 1.3.0
*/
@ConfigurationProperties
(
"security.oauth2.resource"
)
@ConfigurationProperties
(
prefix
=
"security.oauth2.resource"
)
public
class
ResourceServerProperties
implements
Validator
,
BeanFactoryAware
{
@JsonIgnore
...
...
spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/session/SessionProperties.java
View file @
1d55f5f6
...
...
@@ -30,7 +30,7 @@ import org.springframework.session.hazelcast.HazelcastFlushMode;
* @author Vedran Pavic
* @since 1.4.0
*/
@ConfigurationProperties
(
"spring.session"
)
@ConfigurationProperties
(
prefix
=
"spring.session"
)
public
class
SessionProperties
{
/**
...
...
spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/social/FacebookProperties.java
View file @
1d55f5f6
...
...
@@ -24,7 +24,7 @@ import org.springframework.boot.context.properties.ConfigurationProperties;
* @author Stephane Nicoll
* @since 1.2.0
*/
@ConfigurationProperties
(
"spring.social.facebook"
)
@ConfigurationProperties
(
prefix
=
"spring.social.facebook"
)
public
class
FacebookProperties
extends
SocialProperties
{
}
spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/social/LinkedInProperties.java
View file @
1d55f5f6
...
...
@@ -24,7 +24,7 @@ import org.springframework.boot.context.properties.ConfigurationProperties;
* @author Stephane Nicoll
* @since 1.2.0
*/
@ConfigurationProperties
(
"spring.social.linkedin"
)
@ConfigurationProperties
(
prefix
=
"spring.social.linkedin"
)
public
class
LinkedInProperties
extends
SocialProperties
{
}
spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/social/TwitterProperties.java
View file @
1d55f5f6
...
...
@@ -24,7 +24,7 @@ import org.springframework.boot.context.properties.ConfigurationProperties;
* @author Stephane Nicoll
* @since 1.2.0
*/
@ConfigurationProperties
(
"spring.social.twitter"
)
@ConfigurationProperties
(
prefix
=
"spring.social.twitter"
)
public
class
TwitterProperties
extends
SocialProperties
{
}
spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/thymeleaf/ThymeleafProperties.java
View file @
1d55f5f6
...
...
@@ -27,7 +27,7 @@ import org.springframework.util.MimeType;
* @author Stephane Nicoll
* @since 1.2.0
*/
@ConfigurationProperties
(
"spring.thymeleaf"
)
@ConfigurationProperties
(
prefix
=
"spring.thymeleaf"
)
public
class
ThymeleafProperties
{
private
static
final
Charset
DEFAULT_ENCODING
=
Charset
.
forName
(
"UTF-8"
);
...
...
spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/transaction/TransactionProperties.java
View file @
1d55f5f6
...
...
@@ -27,7 +27,7 @@ import org.springframework.transaction.support.AbstractPlatformTransactionManage
* @author Phillip Webb
* @since 1.5.0
*/
@ConfigurationProperties
(
"spring.transaction"
)
@ConfigurationProperties
(
prefix
=
"spring.transaction"
)
public
class
TransactionProperties
implements
PlatformTransactionManagerCustomizer
<
AbstractPlatformTransactionManager
>
{
...
...
spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/transaction/jta/BitronixJtaConfiguration.java
View file @
1d55f5f6
...
...
@@ -71,7 +71,7 @@ class BitronixJtaConfiguration {
@Bean
@ConditionalOnMissingBean
@ConfigurationProperties
(
"spring.jta.bitronix.properties"
)
@ConfigurationProperties
(
prefix
=
"spring.jta.bitronix.properties"
)
public
bitronix
.
tm
.
Configuration
bitronixConfiguration
()
{
bitronix
.
tm
.
Configuration
config
=
TransactionManagerServices
.
getConfiguration
();
if
(
StringUtils
.
hasText
(
this
.
jtaProperties
.
getTransactionManagerId
()))
{
...
...
spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/web/ServerProperties.java
View file @
1d55f5f6
...
...
@@ -26,11 +26,11 @@ import java.util.List;
import
java.util.Map
;
import
java.util.Set
;
import
javax.annotation.PostConstruct
;
import
javax.servlet.ServletContext
;
import
javax.servlet.ServletException
;
import
javax.servlet.SessionCookieConfig
;
import
javax.servlet.SessionTrackingMode
;
import
javax.validation.constraints.NotNull
;
import
io.undertow.Undertow.Builder
;
import
io.undertow.UndertowOptions
;
...
...
@@ -74,6 +74,7 @@ import org.springframework.boot.web.servlet.ServletContextInitializer;
import
org.springframework.context.EnvironmentAware
;
import
org.springframework.core.Ordered
;
import
org.springframework.core.env.Environment
;
import
org.springframework.util.Assert
;
import
org.springframework.util.ObjectUtils
;
import
org.springframework.util.StringUtils
;
...
...
@@ -122,7 +123,6 @@ public class ServerProperties
/**
* Path of the main dispatcher servlet.
*/
@NotNull
private
String
servletPath
=
"/"
;
/**
...
...
@@ -176,6 +176,11 @@ public class ServerProperties
private
Environment
environment
;
@PostConstruct
private
void
validate
()
{
Assert
.
notNull
(
this
.
servletPath
,
"ServletPath must not be null"
);
}
@Override
public
int
getOrder
()
{
return
0
;
...
...
spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/web/WebMvcProperties.java
View file @
1d55f5f6
...
...
@@ -33,7 +33,7 @@ import org.springframework.validation.DefaultMessageCodesResolver;
* @author Eddú Meléndez
* @since 1.1
*/
@ConfigurationProperties
(
"spring.mvc"
)
@ConfigurationProperties
(
prefix
=
"spring.mvc"
)
public
class
WebMvcProperties
{
/**
...
...
spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/webservices/WebServicesProperties.java
View file @
1d55f5f6
...
...
@@ -19,10 +19,10 @@ package org.springframework.boot.autoconfigure.webservices;
import
java.util.HashMap
;
import
java.util.Map
;
import
javax.validation.constraints.NotNull
;
import
javax.validation.constraints.Pattern
;
import
javax.annotation.PostConstruct
;
import
org.springframework.boot.context.properties.ConfigurationProperties
;
import
org.springframework.util.Assert
;
/**
* {@link ConfigurationProperties} for Spring Web Services.
...
...
@@ -31,18 +31,23 @@ import org.springframework.boot.context.properties.ConfigurationProperties;
* @author Stephane Nicoll
* @since 1.4.0
*/
@ConfigurationProperties
(
"spring.webservices"
)
@ConfigurationProperties
(
prefix
=
"spring.webservices"
)
public
class
WebServicesProperties
{
/**
* Path that serves as the base URI for the services.
*/
@NotNull
@Pattern
(
regexp
=
"/[^?#]*"
,
message
=
"Path must start with /"
)
private
String
path
=
"/services"
;
private
final
Servlet
servlet
=
new
Servlet
();
@PostConstruct
private
void
validate
()
{
Assert
.
notNull
(
this
.
path
,
"Path must not be null"
);
Assert
.
isTrue
(
this
.
path
.
length
()
==
0
||
this
.
path
.
startsWith
(
"/"
),
"Path must start with / or be empty"
);
}
public
String
getPath
()
{
return
this
.
path
;
}
...
...
spring-boot-docs/src/main/asciidoc/spring-boot-features.adoc
View file @
1d55f5f6
...
...
@@ -1090,13 +1090,16 @@ only rely on custom converters qualified with `@ConfigurationPropertiesBinding`.
[[boot-features-external-config-validation]]
==== @ConfigurationProperties Validation
Spring Boot will attempt to validate external configuration, by default using JSR-303
(if it is on the classpath). You can simply add JSR-303 `javax.validation` constraint
annotations to your `@ConfigurationProperties` class:
Spring Boot will attempt to validate `@ConfigurationProperties` classes whenever they
annotated with Spring's `@Validated` annotation. You can use JSR-303 `javax.validation`
constraint annotations directly on your configuration class. Simply ensure that a
compliant JSR-303 implementation is on your classpath, then add constraint annotations to
your fields:
[source,java,indent=0]
----
@ConfigurationProperties(prefix="foo")
@Validated
public class FooProperties {
@NotNull
...
...
@@ -1114,6 +1117,7 @@ as `@Valid` to trigger its validation. For example, building upon the above
[source,java,indent=0]
----
@ConfigurationProperties(prefix="connection")
@Validated
public class FooProperties {
@NotNull
...
...
spring-boot-samples/spring-boot-sample-simple/pom.xml
View file @
1d55f5f6
...
...
@@ -24,6 +24,10 @@
<groupId>
org.springframework.boot
</groupId>
<artifactId>
spring-boot-starter
</artifactId>
</dependency>
<dependency>
<groupId>
org.hibernate
</groupId>
<artifactId>
hibernate-validator
</artifactId>
</dependency>
<!-- Test -->
<dependency>
<groupId>
org.springframework.boot
</groupId>
...
...
spring-boot-samples/spring-boot-sample-simple/src/main/java/sample/simple/SampleConfigurationProperties.java
0 → 100644
View file @
1d55f5f6
/*
* Copyright 2012-2017 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.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package
sample
.
simple
;
import
javax.validation.constraints.NotNull
;
import
org.springframework.boot.context.properties.ConfigurationProperties
;
import
org.springframework.stereotype.Component
;
@Component
@ConfigurationProperties
(
prefix
=
"sample"
)
public
class
SampleConfigurationProperties
{
@NotNull
private
String
name
;
public
String
getName
()
{
return
this
.
name
;
}
public
void
setName
(
String
name
)
{
this
.
name
=
name
;
}
}
spring-boot-samples/spring-boot-sample-simple/src/main/resources/application.properties
View file @
1d55f5f6
name
:
Phil
name
=
Phil
sample.name
=
Andy
spring-boot-samples/spring-boot-sample-simple/src/test/java/sample/simple/SampleSimpleApplicationTests.java
View file @
1d55f5f6
...
...
@@ -58,6 +58,10 @@ public class SampleSimpleApplicationTests {
SampleSimpleApplication
.
main
(
new
String
[
0
]);
String
output
=
this
.
outputCapture
.
toString
();
assertThat
(
output
).
contains
(
"Hello Phil"
);
assertThat
(
output
).
contains
(
"The @ConfigurationProperties bean class "
+
"sample.simple.SampleConfigurationProperties contains "
+
"validation constraints but had not been annotated "
+
"with @Validated"
);
}
@Test
...
...
spring-boot-samples/spring-boot-sample-simple/src/test/resources/application.properties
deleted
100644 → 0
View file @
43d432a5
name
:
Phil
\ No newline at end of file
spring-boot-test-autoconfigure/src/main/java/org/springframework/boot/test/autoconfigure/restdocs/RestDocsAutoConfiguration.java
View file @
1d55f5f6
...
...
@@ -56,7 +56,7 @@ public class RestDocsAutoConfiguration {
}
@Bean
@ConfigurationProperties
(
"spring.test.restdocs"
)
@ConfigurationProperties
(
prefix
=
"spring.test.restdocs"
)
public
RestDocsMockMvcBuilderCustomizer
restDocumentationConfigurer
(
MockMvcRestDocumentationConfigurer
configurer
,
ObjectProvider
<
RestDocumentationResultHandler
>
resultHandler
)
{
...
...
spring-boot-test-autoconfigure/src/main/java/org/springframework/boot/test/autoconfigure/web/servlet/MockMvcAutoConfiguration.java
View file @
1d55f5f6
...
...
@@ -74,7 +74,7 @@ public class MockMvcAutoConfiguration {
}
@Bean
@ConfigurationProperties
(
"spring.test.mockmvc"
)
@ConfigurationProperties
(
prefix
=
"spring.test.mockmvc"
)
public
SpringBootMockMvcBuilderCustomizer
springBootMockMvcBuilderCustomizer
()
{
return
new
SpringBootMockMvcBuilderCustomizer
(
this
.
context
);
}
...
...
spring-boot/src/main/java/org/springframework/boot/bind/PropertiesConfigurationFactory.java
View file @
1d55f5f6
...
...
@@ -267,8 +267,9 @@ public class PropertiesConfigurationFactory<T>
relaxedTargetNames
);
dataBinder
.
bind
(
propertyValues
);
if
(
this
.
validator
!=
null
)
{
validate
(
dataBinder
);
dataBinder
.
validate
(
);
}
checkForBindingErrors
(
dataBinder
);
}
private
Iterable
<
String
>
getRelaxedTargetNames
()
{
...
...
@@ -338,8 +339,8 @@ public class PropertiesConfigurationFactory<T>
return
this
.
target
!=
null
&&
Map
.
class
.
isAssignableFrom
(
this
.
target
.
getClass
());
}
private
void
validate
(
RelaxedDataBinder
dataBinder
)
throws
BindException
{
dataBinder
.
validate
();
private
void
checkForBindingErrors
(
RelaxedDataBinder
dataBinder
)
throws
BindException
{
BindingResult
errors
=
dataBinder
.
getBindingResult
();
if
(
errors
.
hasErrors
())
{
logger
.
error
(
"Properties configuration failed validation"
);
...
...
spring-boot/src/main/java/org/springframework/boot/context/properties/ConfigurationProperties.java
View file @
1d55f5f6
...
...
@@ -23,6 +23,7 @@ import java.lang.annotation.RetentionPolicy;
import
java.lang.annotation.Target
;
import
org.springframework.core.annotation.AliasFor
;
import
org.springframework.validation.annotation.Validated
;
/**
* Annotation for externalized configuration. Add this to a class definition or a
...
...
@@ -80,9 +81,10 @@ public @interface ConfigurationProperties {
boolean
ignoreUnknownFields
()
default
true
;
/**
* Flag to indicate that an exception should be raised if a Validator is available and
* validation fails. If it is set to false, validation errors will be swallowed. They
* will be logged, but not propagated to the caller.
* Flag to indicate that an exception should be raised if a Validator is available,
* the class is annotated with {@link Validated @Validated} and validation fails. If
* it is set to false, validation errors will be swallowed. They will be logged, but
* not propagated to the caller.
* @return the flag value (default true)
*/
boolean
exceptionIfInvalid
()
default
true
;
...
...
spring-boot/src/main/java/org/springframework/boot/context/properties/ConfigurationPropertiesBindingPostProcessor.java
View file @
1d55f5f6
...
...
@@ -45,6 +45,7 @@ import org.springframework.context.event.ContextRefreshedEvent;
import
org.springframework.context.support.PropertySourcesPlaceholderConfigurer
;
import
org.springframework.core.Ordered
;
import
org.springframework.core.PriorityOrdered
;
import
org.springframework.core.annotation.AnnotatedElementUtils
;
import
org.springframework.core.annotation.AnnotationUtils
;
import
org.springframework.core.convert.ConversionService
;
import
org.springframework.core.convert.converter.Converter
;
...
...
@@ -61,6 +62,7 @@ import org.springframework.util.ClassUtils;
import
org.springframework.util.StringUtils
;
import
org.springframework.validation.Errors
;
import
org.springframework.validation.Validator
;
import
org.springframework.validation.annotation.Validated
;
import
org.springframework.validation.beanvalidation.LocalValidatorFactoryBean
;
/**
...
...
@@ -362,8 +364,8 @@ public class ConfigurationPropertiesBindingPostProcessor implements BeanPostProc
return
this
.
validator
;
}
if
(
this
.
localValidator
==
null
&&
isJsr303Present
())
{
this
.
localValidator
=
new
LocalValidatorFactory
()
.
run
(
this
.
applicationContext
);
this
.
localValidator
=
new
ValidatedLocalValidatorFactoryBean
(
this
.
applicationContext
);
}
return
this
.
localValidator
;
}
...
...
@@ -394,18 +396,38 @@ public class ConfigurationPropertiesBindingPostProcessor implements BeanPostProc
}
/**
*
Factory to create JSR 303 LocalValidatorFactoryBean. Inner class to prevent class
*
loader issues
.
*
{@link LocalValidatorFactoryBean} supports classes annotated with
*
{@link Validated @Validated}
.
*/
private
static
class
LocalValidatorFactory
{
public
Validator
run
(
ApplicationContext
applicationContext
)
{
LocalValidatorFactoryBean
validator
=
new
LocalValidatorFactoryBean
();
MessageInterpolatorFactory
interpolatorFactory
=
new
MessageInterpolatorFactory
();
validator
.
setApplicationContext
(
applicationContext
);
validator
.
setMessageInterpolator
(
interpolatorFactory
.
getObject
());
validator
.
afterPropertiesSet
();
return
validator
;
private
static
class
ValidatedLocalValidatorFactoryBean
extends
LocalValidatorFactoryBean
{
private
static
final
Log
logger
=
LogFactory
.
getLog
(
ConfigurationPropertiesBindingPostProcessor
.
class
);
ValidatedLocalValidatorFactoryBean
(
ApplicationContext
applicationContext
)
{
setApplicationContext
(
applicationContext
);
setMessageInterpolator
(
new
MessageInterpolatorFactory
().
getObject
());
afterPropertiesSet
();
}
@Override
public
boolean
supports
(
Class
<?>
type
)
{
if
(!
super
.
supports
(
type
))
{
return
false
;
}
if
(
AnnotatedElementUtils
.
isAnnotated
(
type
,
Validated
.
class
))
{
return
true
;
}
if
(
type
.
getPackage
().
getName
().
startsWith
(
"org.springframework.boot"
))
{
return
false
;
}
if
(
getConstraintsForClass
(
type
).
isBeanConstrained
())
{
logger
.
warn
(
"The @ConfigurationProperties bean "
+
type
+
" contains validation constraints but had not been annotated "
+
"with @Validated."
);
}
return
true
;
}
}
...
...
spring-boot/src/main/java/org/springframework/boot/jta/atomikos/AtomikosProperties.java
View file @
1d55f5f6
...
...
@@ -33,7 +33,7 @@ import org.springframework.boot.context.properties.ConfigurationProperties;
* @since 1.2.0
* @see #asProperties()
*/
@ConfigurationProperties
(
"spring.jta.atomikos.properties"
)
@ConfigurationProperties
(
prefix
=
"spring.jta.atomikos.properties"
)
public
class
AtomikosProperties
{
private
final
Map
<
String
,
String
>
values
=
new
TreeMap
<
String
,
String
>();
...
...
spring-boot/src/test/java/org/springframework/boot/context/properties/ConfigurationPropertiesBindingPostProcessorTests.java
View file @
1d55f5f6
...
...
@@ -46,6 +46,7 @@ import org.springframework.validation.BindException;
import
org.springframework.validation.Errors
;
import
org.springframework.validation.ValidationUtils
;
import
org.springframework.validation.Validator
;
import
org.springframework.validation.annotation.Validated
;
import
static
org
.
assertj
.
core
.
api
.
Assertions
.
assertThat
;
import
static
org
.
junit
.
Assert
.
fail
;
...
...
@@ -456,6 +457,7 @@ public class ConfigurationPropertiesBindingPostProcessorTests {
}
@ConfigurationProperties
(
prefix
=
"test"
)
@Validated
public
static
class
PropertyWithJSR303
extends
PropertyWithoutJSR303
{
@NotNull
...
...
spring-boot/src/test/java/org/springframework/boot/context/properties/EnableConfigurationPropertiesTests.java
View file @
1d55f5f6
...
...
@@ -38,6 +38,7 @@ import org.springframework.core.env.MutablePropertySources;
import
org.springframework.stereotype.Component
;
import
org.springframework.test.context.support.TestPropertySourceUtils
;
import
org.springframework.validation.BindException
;
import
org.springframework.validation.annotation.Validated
;
import
static
org
.
assertj
.
core
.
api
.
Assertions
.
assertThat
;
...
...
@@ -172,6 +173,17 @@ public class EnableConfigurationPropertiesTests {
this
.
context
.
refresh
();
}
@Test
public
void
testNoExceptionOnValidationWithoutValidated
()
{
this
.
context
.
register
(
IgnoredIfInvalidButNotValidatedTestConfiguration
.
class
);
TestPropertySourceUtils
.
addInlinedPropertiesToEnvironment
(
this
.
context
,
"name:foo"
);
this
.
context
.
refresh
();
IgnoredIfInvalidButNotValidatedTestProperties
bean
=
this
.
context
.
getBean
(
IgnoredIfInvalidButNotValidatedTestProperties
.
class
);
assertThat
(
bean
.
getDescription
()).
isNull
();
}
@Test
public
void
testNoExceptionOnValidation
()
{
this
.
context
.
register
(
NoExceptionIfInvalidTestConfiguration
.
class
);
...
...
@@ -432,6 +444,12 @@ public class EnableConfigurationPropertiesTests {
}
@Configuration
@EnableConfigurationProperties
(
IgnoredIfInvalidButNotValidatedTestProperties
.
class
)
protected
static
class
IgnoredIfInvalidButNotValidatedTestConfiguration
{
}
@Configuration
@EnableConfigurationProperties
(
NoExceptionIfInvalidTestProperties
.
class
)
protected
static
class
NoExceptionIfInvalidTestConfiguration
{
...
...
@@ -658,6 +676,7 @@ public class EnableConfigurationPropertiesTests {
}
@ConfigurationProperties
@Validated
protected
static
class
ExceptionIfInvalidTestProperties
extends
TestProperties
{
@NotNull
...
...
@@ -673,7 +692,25 @@ public class EnableConfigurationPropertiesTests {
}
@ConfigurationProperties
protected
static
class
IgnoredIfInvalidButNotValidatedTestProperties
extends
TestProperties
{
@NotNull
private
String
description
;
public
String
getDescription
()
{
return
this
.
description
;
}
public
void
setDescription
(
String
description
)
{
this
.
description
=
description
;
}
}
@ConfigurationProperties
(
exceptionIfInvalid
=
false
)
@Validated
protected
static
class
NoExceptionIfInvalidTestProperties
extends
TestProperties
{
@NotNull
...
...
spring-boot/src/test/java/org/springframework/boot/diagnostics/analyzer/BindFailureAnalyzerTests.java
View file @
1d55f5f6
...
...
@@ -32,6 +32,7 @@ import org.springframework.boot.context.properties.EnableConfigurationProperties
import
org.springframework.boot.diagnostics.FailureAnalysis
;
import
org.springframework.context.annotation.AnnotationConfigApplicationContext
;
import
org.springframework.context.i18n.LocaleContextHolder
;
import
org.springframework.validation.annotation.Validated
;
import
static
org
.
assertj
.
core
.
api
.
Assertions
.
assertThat
;
...
...
@@ -90,6 +91,7 @@ public class BindFailureAnalyzerTests {
}
@ConfigurationProperties
(
"test.foo"
)
@Validated
static
class
ValidationFailureProperties
{
@NotNull
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment