Previously, if a prototype DataSource bean was defined, Actuator's
metrics and health would try to access an instance of it. At best
this was wasteful as the new instance would only be used for metrics
and health and would not be indicative of the app's DataSource usage.
At worst, it could cause a failure in the unusual case of the
prototype bean definition requiring arguments to be supplied using
ObjectProvider.getObject(Object...) or the like.
This commit address the problem by ignoring prototype DataSource
for metrics and health.
Other types of beans for which Actuator provides metrics and health
are similarly affected. They have not be fixed here as the situation
is so unusual. Should another problem arise in the future, it can be
addressed at that time when there's a clear need.
Closes gh-44706
META-INF/spring.factories and META-INF/spring/aot.factories in the
main source set are now checked. The checks verify that:
- Each class listed in the values exists in the source set's output
- The classes are listed alphabetically
- Nested classes are identified using their binary name
Closes gh-44676
This commit allows EntityManagerFactoryBuilder to provide the JPA
properties to use according to the DataSource used to build the
EntityManagerFactory. Previously the JPA properties were computed only
once based on the primary data source, which was a problem since its
default DDL setting may be different.
EntityManagerFactoryBuilder takes a function that provides the JPA
properties based on a data source, rather than the properties
themselves. Constructors with the previous variant have been deprecated
as a result.
Closes gh-44516
Previously, when Actuator expected to find multiple beans of the same
type, it used Map<String, Type> to inject them. Unfortunately, this
does not include beans that are not default candidates and there's
no way to request that autowiring includes such beans with Map-based
injection.
This commit switches from Map-based injection to querying the bean
factory for the desired beans. This is done using
SimpleAutowireCandidateResolver's new helper method,
resolveAutowireCandidates, that returns a Map<String, Type> of
beans including those that are not default candidates but excluding
those that are not autowire candidates.
Closes gh-43481
Previously, when health probes were enabled, the post-processor of
AutoConfiguredHealthEndpointGroups resulted in the bean no longer
implementing AdditionalPathMapper. This then caused a
ClassCastException when working with AdditionalPathMapper beans
in EndpointRequest's additional path mapping support.
This commit updates the type returned by the post-processor to
implement both HealthEndpointGroups and AdditionalPathMapper, as
AutoConfiguredHealthEndpointGroups does. Its implementation of
getAdditionalPaths produces a result that combines both the
additional paths of the original HealthEndpointGroups bean and its
own additional paths for the probes.
Fixes gh-44052
This commit updates the assertion of a test that relies on
https://self-signed.badssl.com to only fail if a SSLException is thrown.
This is a temporary measure until we run the test against a local
instance we control.
See gh-43708
The lowercase form of the endpoint ID needs to be used so that
relaxed matching of properties, as provided by
ConfigurationPropertySources, works as intended. Without this
change the id of the endpoint in a property had to be an exact
match of the endpoint's ID.
Closes gh-43302