Update `OriginTrackedPropertiesLoader` to correctly deal with property
values that happen to contain comment characters.
Prior this this commit, values of the following form would not be
parsed correctly:
foo=bar!
bar=spam
Closes gh-8647
Restructure `org.springframework.boot.autoconfigure.web` to better align
with the new package structure in `spring-boot`.
Auto-configuration is now split into client, servlet and reactive
sub-packages. In addition a new `http` package now handles common
HTTP concerns.
Fixes gh-8616
Unify common for from the abstract `ServletWebServerFactory` and
`ReactiveWebServerFactory` classes. Common code is now located in
`AbstractConfigurableWebServerFactory`.
Fixes gh-8631
Create a new `SpringBootExceptionReporter` interface so that a direct
link between `SpringApplication` and `FailureAnalyzers` is no longer
needed.
This prevents package tangle warnings and allows for cleaner separation
of concerns.
Fixes gh-8612
Separate logging ApplicationListeners classes to a different package
so that the root `logging` package is no longer aware of `context`
concerns.
Fixes gh-8611
Rework `org.springframework.boot.context.embedded` to relocate classes
to `org.springframework.boot.web`. Packages are now organized around
the following areas:
Packages for shared concerns, for example the `WebServer` interface
to start/stop a server and the common configuration elements:
- org.springframework.boot.web.context
- org.springframework.boot.web.server
Servlet specific packages:
- org.springframework.boot.web.servlet.server
- org.springframework.boot.web.servlet.context
- org.springframework.boot.web.servlet.filter
Reactive specific packages:
- org.springframework.boot.web.reactive.context
- org.springframework.boot.web.reactive.server
Embedded server implementations (both reactive and servlet):
- org.springframework.boot.web.embedded
In addition:
- Rename `EmbeddedServletContainerFactory` to `ServletWebServerFactory`
to align with the `ReactiveWebServerFactory`.
- Rename `EmbeddedWebApplicationContext` to
`ServletWebServerApplicationContext` and
- Rename `EmbeddedReactiveWebApplicationContext` to
`ReactiveWebServerApplicationContext`.
- Add checkstyle rules to restrict imports.
- Fixup all affected code to use the correct imports and local names.
Fixes gh-8532
The changes made for gh-8299 attempted to make static resource
handling consistent across Jetty, Tomcat, and Undertow. They did so
for application's launched using JarLauncher or WarLauncher but did
not consider application's launched in an IDE or using spring-boot:run
in Maven or bootRun in Gradle.
Running in an IDE or via Maven or Gradle introduces two new
resource locations:
- Jars on the classpath with file protocol URLs (they are always
jar protocol URLs when using either launcher)
- Directories on the classpath from a project that is depended upon
and contains resources in META-INF/resources
This commit updates the factories for all three containers to handle
these new resources locations. The integration tests have also been
updated.
Update the YAML parser so that origin information can be tracked.
Line and column numbers are now available for each loaded property
value.
Fixes gh-8142
Use a custom parser to load `.properties` files so that origin
information can be tracked. Line and column numbers are now available
for each loaded property value.
Fixes gh-8517
Add `OriginTrackedMapPropertySource` that can be used for any `Map`
backed `PropertySource` that is also aware property origins. Rather than
directly storing the value in the `Map`, an `OriginTrackedValue` can
be used.
See gh-8142
See gh-8517
Add `OriginCapablePropertySource` interface and supporting classes so
that `PropertySource` implementations can reveal the source of any
given property.
The `TextResourcePropertyOrigin` can be used for sources that load
values from a text `Resource` and can track line/column numbers.
See gh-8517
See gh-8142
This commit reinstates dependency management for
hibernate-entitymanager as, while empty, it remains part of Hibernate
5.2.x and people may still have a dependency upon it.
It also reinstates the configuration of skipping the jar during TLD
scanning so that any application that does depend on
hibernate-entitymanager doesn't scan it for TLDs.
See gh-8433
This commit flags the `BeanPostProcessor` registered by the reactive
embedded support as `synthetic` so that it doesn't trigger an early
initialization of other components.
See gh-8467
This commit flags the two `BeanPostProcessors` registered by the
embedded support as `synthetic` so that they don't trigger an early
initialization of other components.
Closes gh-8467
Previously, the configuration class that produces the ErrorPageFilter
bean was an inner class of SpringBootServletInitializer. As a result,
whenever SpringBootServletInitializer was subclasses, the
ErrorPageFilter would be used. This adversely affected applications
running as an executable war file and those deployed to a container
with error page filter registration disabled.
This commit makes ErrorPageFilterConfiguration a top-level class so
that it is no longer always found via SpringBootServletInitializer.
The test that verifies that error page filter registration can be
disabled has been updated to more accurately simulate the behaviour
when an application is deployed as a war to a standalone container.
A test that mimics the behaviour of an application run as an
executable war has also been added.
Closes gh-8477
Update counter logic to prevent negative values. Since the stop method
can now be called more than once, it was possible for the counter to
move into negative values.
See gh-8227
Update `EmbeddedServletContainer` implementations to ensure that stop
can be called even if start has not. This allows servers that are
partially started during `initialize()` to still be shut down.
This commit fixes a regression caused by commit 0af53b361f.
See gh-8036
Fixes gh-8224
Closes gh-8227
Previously, there were a number of inconsistencies in the embedded
containers' handling of static resources. The Servlet spec requires
that static resources can be served from the META-INF/resources/
directory of jars nested inside a war in WEB-INF/lib/. The intention
was also to extend this to cover jar packaging when jars are nested in
BOOT-INF/lib/. This worked when using Tomcat as long as Jasper was on
the classpath. If you didn't have Jasper on the classpath or you
were using Jetty or Undertow it did not work.
This commit updates the configuration of embedded Jetty, Tomcat, and
Undertow so that all three containers handle static resources in the
same way, serving them from jars in WEB-INF/lib/ or /BOOT-INF/lib/.
Numerous intergration tests have been added to verify the behaviour,
including tests for Tomcat 8.0 and 7.0 which is supported in addition
to the default 8.5.x. Note that static resource handling only works
with Jetty 9.3.x and 9.2 and earlier does not support nested jars (
see https://github.com/eclipse/jetty.project/issues/518 for details).
Closes gh-8299
This commit add mock support for WebFlux with an infrastructure similar
to what `WebMvcTest` provides. `@WebFluxTest` can be used to test
controllers with a narrowed classpath that is relevant to WebFlux. Also,
`@SpringBootTest` now starts WebFlux in "mock" mode by default and
`@AutoConfigureWebTestClient` can be used to inject a `WebTestClient`
connected to the `ApplicationContext`.
To make that happen, a `ReactiveWebApplicationContext` interface has been
introduced to mirror what `WebApplicationContext` currently does. Things
are still a bit volatile at this point and that infra may move to Spring
Framework at some point.
Closes gh-8401