Previously, MetricsFilter would treat async requests the same as
sync requests and would record their response status as soon as the
request had been processed by the filter chain. This would result in a
200 response being recorded and the actual response status produced by
the async processing being ignored. Furthermore, the time that was
recorded for the request would not include the time take for any async processing.
This commit updates MetricsFilter to check whether or not an async
request has been started before it records the metrics for the request.
In the event of an async request having been started no metrics are
recorded. Instead, the StopWatch is stored in a request attribute that
is then retrieved during the filtering of the request’s async
dispatch(es). Once the async processing has completed (isAsyncStarted()
returns false), the StopWatch is stopped, removed from the request’s
attributes and the metrics for the request are recorded.
Closes gh-4098
Update all TemplateAvailabilityProvider implementations to use the
relaxed property binder. Also fix FreeMarkerTemplateAvailabilityProvider
to use `template-loader-path` rather than `path`.
Fixes gh-4085
Previously `spring.velocity.charset` only controlled the output encoding
with the templates being loaded with the default encoding. We now
consistently set the same value for both the input and output encodings.
It is still possible to override it to a different value using
`spring.velocity.properties.input.encoding`
Closes gh-3994
Update RelaxedDataBinder so that both `.` and `_` are considered in
getPropertyValuesForNamePrefix(...).
With Spring Boot 1.2.5 binding environment variables of the form
`FOO_BAR_BAZ` to `@ConfigurationProperties(prefix="foo-bar")` objects
worked thanks to a happy accident. When `PropertySourcesPropertyValues`
processed a non enumerable `PropertySource` it called the resolver
with a property name `FOO_BAR.BAZ`. A `SystemEnvironmentPropertySource`
will replace `.` with `_` and hence find a value.
Commit 1abd0879 updated non enumerable processing such that the resolver
was never called.
Replicating the problem is quite involved as you need to ensure that you
have both a SystemEnvironmentPropertySource and a non-enumerable
property source (e.g. RandomPropertySource). A test has been added to
PropertiesConfigurationFactoryTests which passes on 1.2.5, fails on
1.2.6 and passes again following this commit.
Fixes gh-4045
Update ErrorPageFilter to only handle errors when `response.sendError`
has been called. This should allow custom @ExceptionHandlers to
completely handle errors and return custom status codes without
triggering the "Cannot forward to error page" log message.
The Javadoc for sendError states:
"The server defaults to creating the response to look like an
HTML-formatted server error page containing the specified message"
Where as setStatus states
"This method is used to set the return status code when there is
no error "
Fixes gh-2745
Update PropertySourcesPropertyValues so that collection values are only
added from a single PropertySource. Prior to this commit, given the
following:
PropertySource-A
list[0]=x
PropertySource-B
list[0]=y
list[1]=z
PropertySourcesPropertyValues would take `x` from A and `z` from B,
resulting in a binding of `[x,z]`. The updated code now returns the
more logical `[x]`.
Fixes gh-2611
Update HibernateJpaAutoConfiguration to catch LinkageError rather than
NoClassDefFoundError. Required due to the fact that JBoss EAP 6 wraps
NoClassDefFoundErrors.
Fixes gh-3605
Update Eclipse cleanup actions to only format changed lines. This will
hopefully help to prevent so many false diffs caused by differences
between Eclipse Luna and Eclipse Mars.
Refine commit 8a96481 to set the web environment to false if spring web
is not available in the classpath. Thanks to @mjustin for spotting that
mistake.
Closes gh-3856
Previously, deployment tests were storing the container archives in the
default location (that is `/tmp`) for a total weight of 160MB. In case
the temp directory is cleaned on CI, these have to be downloaded again.
We're now configuring cargo to store these archives in the home directory
instead. This should improve the speed and the stability of the
deployment tests
Closes gh-3861
SpringApplication wrongly expects spring-web to be on the classpath to
figure out whether or not the web environment should be enabled for a
custom context class.
We now properly guard this check so that the web environment is not
enabled (read: not checked) if `spring-web` is not available.
Closes gh-3856
The DataSource health indicator uses `JdbcTemplate` behind the scenes
but nothing was checking that it is actually available.
`DataSourcesHealthIndicatorConfiguration` is now disabled if
`spring-jdbc` is not on the classpath.
Fixes gh-3765
The annotation processor detects `@ConfigurationProperties` bean or
method definition and merges manual meta-data. The former step will fail
with a NPE if the annotation is not present on the classpath. This could
happen if the annotation processor is added to a module that is not
actually using Spring Boot.
We now have a defensive check that skips that steps but still attempts to
merge manual meta-data if present.
Closes gh-3720