Previously, when a bean was overridden and its type changes,
BeanTypeRegistry could be left with a stale view of the bean's type.
This would lead to incorrect bean condition evaluation as conditions
would match or not match based on the bean's old type.
This commit updates the type registry to refresh its view of a bean's
type when its definition changes.
Closes gh-13588
Previously, the initialization of StandardServletEnvironment's
property sources in SpringBootServletInitializer led to debug logging
calls being made before the LoggingSystem had been initialized. As a
result, the system's default configuration was used and, in the case
of Logback at least, the debug logging was output to System.out
in a war deployment.
This commit updates SpringBootServletInitializer to delay the
initialization of StandardServletEnvironment's property sources until
after the LoggingSystem has been initialized, but still in time for
active profiles to be configured via servlet context parameters
(see gh-9972).
Closes gh-13736
During processing of a configuration class, the class's complete
hierarchy is processed and during the processing of each class its
member classes are processed. Previously, each pool-specific
inner-class of DataSourceConfiguration extended the abstract outer
class. This meant that when the import from
DataSourceAutoConfiguration.PooledDataSourceConfiguration caused the
first pool-specific inner-class to be processed,
DataSourceConfiguration would be processed as it was the inner-class's
superclass. In turn all of DataSourceConfiguration's member classes
would then be processed. This caused the first import (of
DataSourceConfiguration.Tomcat) to trigger processing of all of the
other pool-specific inner-classes in whatever order they were found
rather than them being processed in the order in which they are
imported by DataSourceAutoConfiguration.PooledDataSourceConfiguration.
Another part of the problem was that none of the pool-specific
inner-classes were conditional on a missing DataSource bean. This
meant that, when multiple pools were on the classpath, each class
after the first would override the previous class's definition of the
DataSource bean.
This commit updates each of the pool-specific inner-classes so that
they no longer extend DataSourceConfiguration. This ensures that
the inner classes are processed in the order defined in the import
on PooledDataSourceConfiguration. Each of the classes has also been
annotated with @ConditionalOnMissingBean(DataSource.class). This
prevents the DataSource bean definition from being overridden and
ensures that the order of precedence for the pool that will be used
is as defined in the import.
Closes gh-13737
Previously, if a jar that used custom compression configuration was
repackaged, a failure may occur if an entry in the repackaged jar had
a different compressed size to the entry in the source jar.
This commit updates JarWriter to clear the input entry's compressed
size (by setting it to -1) so that the repackaged entry's compressed
size does not have to match that of the input entry.
Closes gh-13720
Previously, LiquibaseEndpoint closed the JdbcConnection but did not
close the Database. When using a connection pool, this could leave the
underlying SQL Connection with its auto commit property set to false.
This commit updates LiquibaseEndpoint to close the Database. This
ensures that it resets that Connection's auto commit property to the
value that it had when the Database was configured to use the
Connection.
See gh-13559
Previously, if an HTTP request that used a templated URI was handled
by something other than Spring MVC, a potentially unbounded number of
metrics would be created. This happened because, in the absence of
Spring MVC's best matching pattern attribute, MetricsFilter would fall
back to using the request's path. If the handling route was templated,
MetricsFilter would be unaware and would record different metrics for
each different path, rather than a single metric for the matching
pattern.
This cimmit updates MetricsFilter so that it falls back to using
unmapped when Spring MVC's best matching pattern attribute is not
available. This ensures that an unbounded number of metrics will no
longer be created, at the cost of losing specific metrics for requests
that are not handled by Spring MVC and that do not use a templated
path.
Closes gh-5875
Log4J2 enables its shutdown hook by default. When the JVM is exiting,
this creates a race between logging that happens during the
application context being closed and Log4J2 being shut down such that
the logging is lost.
This commit updates SpringBootConfigurationFactory so that it
produces a custom sub-class of DefaultConfiguration that disables the
shutdown hook by default. In addition to solving the problem described
above, this also aligns the Log4J2 logging system with the
logging.register-shutdown-hook property which defaults to false.
Closes gh-11360
Previously, when a user had declared a custom MultipartResolver bean
that is a CommonsMultipartResolver, part resolution would fail. The
failure was occurring as the servlet container was consuming the parts
before CommonsMultipartResolver had a chance to read them. This was
happening because a MultipartConfigElement was being auto-configured.
This commit updates the multipart auto-configuration so that a
MultipartConfigElement is not auto-configured when there is a
CommonsMultipartResolver bean in the context.
Closes gh-7735