Both `EnumFeature` and `JsonNodeFeature` implement `DataTypeFeature`
which was recently added in Spring Framework. This commits introduces
support to allow the configuration via properties.
See spring-projects/spring-framework#31380
See gh-37885
Prior to this commit, the GraphQL WebSocket HandlerMapping bean would be
ordered at position "2", before the RouterFunction variant defined by
Spring Framework at position "3".
Since then, the Spring Framework team changed the default order value
for this one at "-1", see spring-projects/spring-framework#30278.
This prevents the WebSocket upgrade, as the request is handled by the
RouterFunction instead of the WebSocket handler.
This commit updates the handlermapping order and introduces a test to
prevent issues in the future.
Fixes gh-37892
Prior to this commit, `spring.jms.listener.session.acknowledge-mode`
and `spring.jms.template.session.acknowledge-mode` accepted only a
predefined set of values representing standard JMS acknowledge modes.
This commit adds support for also using arbitrary integer values to
these configuration properties, which allows vendor-specific JMS
acknowledge modes to be configured.
See gh-37576
Update `JdbcClientAutoConfigurationTests` to use a type safe query
since Spring Framework now returns `Object` types when no type is
specified (see Spring Framework issue 31403).
See gh-37710
When the filter is exposed as a bean (directly or through a
registration bean), it's picked up by the auto-configuration of
MockMvc. This causes a problem as MockMvc does not call init on a
filter before it's used and WebSocketUpgradeFilter fails with a
NullPointerException if its doFilter method is called when its init
method has not been called.
This commit reworks the WebSocket auto-configuration to use a
ServletContextInitalizer to register WebSocketUpgradeFilter rather
than a FilterRegistrationBean. This ensure that the filter is still
registered at the required position in the chain (last filter before
the servlet) while also preventing it from being registered with the
auto-configured MockMvc in tests.
Closes gh-37660
This commit correct a mistake where AuthenticationManager was used
instead of ReactiveAuthenticationManager. It also expands the
conditions so that WebFlux security will be enabled when the user
has defined their own SecurityWebFilterChain. In such a situation
no other security-related beans may be needed to use WebFlux
security as things may have been configured directly using the DSL.
Closes gh-37504
This commit introduces `spring.jms.listener.session-transacted` property
in order to enable explicit configuration of `sessionTransacted` on the
`DefaultMessageListenerContainer`.
Prior to this commit, `sessionTransacted` would be configured implicitly
based on presence of `JtaTransactionManager`.
See gh-37473
Previously auto-configuration of a user details service (imperative
or reactive) would only back off on the presence of certain beans.
This led to situations where the im-memory service was
auto-configured and the default password was logged even though
another authentication mechanism was in use.
This commit updates the auto-configuration so that it backs off
when depending on Spring Security's OAuth2 Client and OAuth2
Resource Server modules. In the imperative case it will also back
off when depending on the SAML 2 provider.
Closes gh-35338
If there's no authentication manager bean or no bean from which
one can be created, Spring Security's reactive support may fail to
bootstrap due to a null authentication manager.
This commit causes the auto-configuration that enables WebFlux
security to back off in the absence of an AuthenticationManager bean
and a ReactiveUserDetailsService (from which Spring Security can
create an AuthenticationManager) bean. Other reactive security
auto-configuration that can configure things such that WebFlux security
can be bootstrapped without an AuthenticationManager has been updated
to enable WebFlux security rather than relying on another
auto-configuration class to do so.
Fixes gh-37504
Update JMS listener concurrency configuration to set the same minimum
and maximum number of consumers when users specify only the minimum
using `spring.jms.listener.concurrency` property.
Prior to this commit, when using `spring.jms.listener.concurrency` to
set the minimum number of consumers without also specifying
`spring.jms.listener.max-concurrency` would result in effective
concurrency where the actual minimum number of consumers is always 1,
while the maximum number of consumers is the value of
`spring.jms.listener.concurrency`.
See gh-37180
This commit renames `spring.jms.listener.concurrency` property to
`spring.jms.listener.min-concurrency` in order to better align it with
`spring.jms.listener.max-concurrency`.
See gh-37451
This commit adapts to API changes in Spring Framework, see
spring-projects/spring-framework#31117
Previously, the "autowired" executable to use for a bean was always
resolved, even if a custom code fragment didn't really need it. This
is key for binding of immutable configuration properties as we use an
instance supplier for it.
This changes means that the workaround added in maintenance releases
can be removed.
See gh-37337
This commit fixes build issues, as the recent changes surfaced an
existing problem: QueryDsl auto-configurations were not guarded by
classpath conditions for QueryDsl Core.
See gh-34974
This commit adds a new `spring.graphql.schema.inspection.enabled`
property, which is `true` by default.
This property enables the logging at the INFO level of the GraphQL
Schema inspection report.
During startup, Spring for GraphQL will inspect the schema and report
fields and registrations that are unmapped in the application.
Closes gh-36252
This auto-configures a new SimpleAsyncTaskSchedulerBuilder bean in the
context. This bean is configured to use virtual threads, if enabled.
SimpleAsyncTaskSchedulerCustomizers can be used to customize the built
SimpleAsyncTaskScheduler.
If virtual threads are enabled, the application task scheduler is
configured to be a SimpleAsyncTaskScheduler.
Adds a new configuration property spring.task.scheduling.simple
.concurrency-limit
Closes gh-36609
Previously, if spring-jms is not available and a non-pool connection
factory is requested (the default), no `CachingConnectionFactory` is
created. This commit makes sure to separate the two conditions, so
that a connection factory can be obtained even if spring-jms is not
on the classpath.
See gh-36767
This only registers the default locations, not the one users can provide
via 'spring.messages.basename'.
This is similar to the approach taken for schema.sql and data.sql
in class SqlInitializationScriptsRuntimeHints.
See gh-36682
- Replace synchronized with Lock when guarding long-running operations
- Remove unnecessary synchronization in FileSystemWatcher
- Replace HashMap with ConcurrentHashMap in Restarter
- Remove unnecessary locking on AtomicBoolean in
SpringApplicationBuilder
- Remove unnecessary locking in SimpleFormatter
Closes gh-36670
Neo4j Java driver introduced support for an `AuthTokenManager` that can
be used to define expiring tokens for authentication with a database.
This commit adds an `ObjectProvider<AuthTokenManager> authTokenManagers`
parameter to the corresponding auto configuration class. If the provider
resolves to a unique object, that `AuthTokenManager` will have precedence
over any static token.
See gh-36650
Add `@Order(0)` to the WebMVC and Webflux
`ProblemDetailsExceptionHandler` beans. This makes it easier to create
custom `@ControllerAdvice` beans that must be ordered before or after
the `ProblemDetailsExceptionHandler`.
See gh-36288