Prior to this commit, the SslServerCustomizer would use a Reactor Netty
API that lets users customize the SSL configuration, but later override
some of the choices with defaults.
This commits moves from the new deprecated Reactor Netty API and instead
uses a new variant that builds the defaults and lets developers override
them if they want to.
Fixes gh-25913
Update the `ConfigData` import support to allow individual property
sources to be imported with a higher precedence than profile specific
imports.
Prior to this commit, imported sources would always have a higher
precedence than the file that imported them, but a lower precedence
than any profile-specific variant of the same file.
For example, given an `application.properties` that imports `myconfig`,
the contributor tree would be as follows:
ROOT
+- `application.properties`
| +- myconfig
+- `application-<profile>.properties`
The precedence would be:
1) `application-<profile>.properties`
2) myconfig
3) `application.properties`
This works well for most situations, but can be confusing if import is
for a profile-specific property source. For example:
ROOT
+- `application.properties`
| +- myconfig
| +- myconfig-<profile>
+- `application-<profile>.properties`
Results in the order precedence of:
1) `application-<profile>.properties`
2) myconfig-<profile>
3) myconfig
4) `application.properties`
This means that whilst `myconfig` overrides `application.properties`,
`myconfig-profile` does not override `application-<profile>.properties`.
For this specific situation, the preferable order would be:
1) myconfig-<profile>
2) `application-<profile>.properties`
3) myconfig
4) `application.properties`
To support this alternative ordering a new `PROFILE_SPECIFIC` config
data option has been added. Additionally, options may now be specified
on a per-source basis by using the `PropertySourceOptions` interface.
Fixes gh-25766
Deprecate the `Bootstrapper` interface entirely and provide a
`BootstrapRegistryInitializer` alternative so that people can migrate.
Unfortunately our previous attempt to fix the typo in the `Bootstrapper`
interface didn't provide us a way to remove the deprecated method
without impacting users. It was also problematic for people who were
implementing `Bootstrapper` rather than using a lambda since they needed
to introduce the deprecated method.
We unfortunately can't see a way to fix the original typo without
introducing a new interface.
Fixes gh-25735
Update `TldPatterns` to align with the latest default shipped by Tomcat.
This commit also introduces a test to ensure that we will remain aligned
going forwards.
Closes gh-25764
Previously, a root URI configured via RestTemplateBuilder's rootUri
method and RootUriTemplateHandler was not taken into account when
generated the URI tag for RestTemplate request metrics.
This commit updates MetricsClientHttpRequestInterceptor to be aware
of RootUriTemplateHandler and capture the URI template once the
root URI has been applied.
Fixes gh-25744
gh-17424 updated `ValidationBindHandler` so that it would
only look at bound values when validating. This commit updates
`ValidationBindHandler` to use Spring Framework's `BeanPropertyBindingResult`.
This means that for fields that are not bound, JavaBean accessor methods can
be used to get the value to validate.
Fixes gh-25356
Update `CharSequenceToObjectConverter` so that conversion that would
apply using an `ObjectTo...` converter now favors `toString()` based
conversion.
Prior to this commit, when converting a `CharSequence` to a `Collection`
the `ObjectToCollectionConveter` would be picked instead of the
`StringToCollectionConverter`. This resulted in a `Collection`
containing a single `String` value, rather than the expected list
of values split around ",".
Fixes gh-25057
Add a new `ConfigData.Option` that allows profile properties to be
ignored. This update will allow Spring Cloud Config Server to provide
`ConfigData` that only has profile properties processed on the
server-side.
Closes gh-24890
Update `LoggingSystemProperties` so that system environment properties
are also applied to the `LoggerContext`. This is required when multiple
applications are deployed to the same Servlet container. In such setups
there's only a single JVM and the System Environment can be changed
when multiple applications start at the same time.
Fixes gh-24835
This commit updates DataSourceUnwrapper to take a separate interface
type argument if the target datasource has to be unwrapped, given that
the target type is usually not an interface.
Closes gh-24697
Throw an `InvalidConfigDataPropertyException` if bad properties are
detected in profile specific files. The following properties will now
trigger an exception if used in a profile specific file:
`spring.profiles.include`
`spring.profiles.active`
`spring.profiles.default`
`spring.config.activate.on-profile`
`spring.profiles`
Prior to this commit, profile based properties in a profile specific
file would be silently ignored, making them hard to find.
Fixes gh-24733
Update `FailureAnalyzers` to log errors at `trace` rather than `debug`.
This should reduce noise when an analyzer unexpectedly fails and the
user is running with `--debug`.
Fixes gh-24630
Update `ConfigDataEnvironment` so that the bootstrap `Binder` is
replaced as contributors are processed. The final `Binder` is now
also added without the `FAIL_ON_BIND_TO_INACTIVE_SOURCE` option so
that properties can be bound at the last stage even if values exist
in an inactive profile-specific document.
Closes gh-24669
Update `WebServer` implementations to return -1 from `getPort()` if
the server isn't listening on a port. This aligns the implementations
with the interface Javadoc.
See gh-24606
Prior to this commit, the configtree property source would not traverse
into a sub-directory in a property path if the sub-directory was a
symbolic link. This commit allows symlinked sub-directories to be
traversed like any other sub-directory in the property path.
Fixes gh-24530
Update `ConfigDataEnvironment` so that the `Binder` is registered as
a prototype bootstrap instance. This allows it to be accessed early
but still replaced when a more complete version is available.
Fixes gh-24559
Update `BootstrapRegistry` so that it can be used to register instances
in either a `singleton` or `prototype` scope. The prototype scope has
been added so that instances can be registered and replaced later
if needed.
See gh-24559
Refine the `PortInUseException` logic in `NettyWebServer` to only throw
an exception if the port is set. The prevents a misleading exception
from being thrown when a domain socket is being used.
Closes gh-24529
Update `NettyWebServer` to deal with any `UnsupportedOperationException`
thrown from `DisposableServer`. Specifically, this commit allows the
`NettyWebServer` to work with domain socket backed servers which cannot
provide a port.
Fixes gh-24529
Add an overloaded `ConfigDataEnvironmentPostProcessor.applyTo` method
that accepts a listener that can used to track the updates that were
applied to the `Environment`.
The listener can be used to track the which `ConfigDataLocation` and
the `ConfigDataResource` were used to add a `PropertySource`. The lister
can also be used to tell which profiles were applied.
This enhancement is being added in a patch release because it's will
be useful for Spring Cloud 2020.0.0.
Closes gh-24504
Allow directory locations that exist but do not contribute properties
to be specified without an `optional:` prefix. This commit fixes logic
introduced in commit 3dc03ac275 which didn't account for the fact that
a directory might contain only profile specific property files and that
profiles might not always be active.
Closes gh-24499
Update `StandardConfigDataLoader` to use unique names for property
sources imported from a wildcard location.
Prior to this commit, all the property sources created from the same
wildcard location would have the same name. Each time a property source
that is equal to an existing property source is added, it replaces the
existing property source. Property source equality is name-based so this
resulted in the last property sources from the wildcard location
winning.
This commit updates `StandardConfigDataLoader` to use the resolved
Resource rather than the wildcard location in which it was discovered
in the name of the property source that it creates, ensuring that each
is property source from a wildcard location is uniquely named.
Fixes gh-24428