-
Couldn't load subscription status.
- Fork 41.6k
Description
This is related to the issues #6222 and #12148
It affects Spring Boot version 2.2.x
The behavior of configuration and value binding is still not completly consistent. The use of a custom Converter registered as bean or inside a conversionService bean only works in the following cases:
- The configuration value will be bound to a configuration bean annotated with
@ConfigurationProperties - The configuration value will be injected to bean via
@Valueannotation if the bean is created after complete refresh of theApplicationContext.
It does not work, if the configuration value if injected into a bean with @Value if the bean is created during "refresh phase" of the ApplicationContext. This applies for example to all beans created during the initialization of the Tomcat server in a ServletWebServerApplicationContext
I provided a test project which contains multiple test cases showcasing the inconsistent behavior:
Test scenario 1: HealthIndicator bean created during refresh with configuration object => SUCCESS
Test scenario 2: HealthIndicator bean created during refresh with constructor injection via @Value => FAIL
Test scenario 3: @Service bean created after refresh with constructor injection via @Value => SUCCESS
Please also note that the failure of scenario 2 can only be detected in an integration test if a "real" webEnvironment, e.g. RANDOM_PORT, is used. In a mocked web environment, i.e. without actually starting a Tomcat, the problem will not occur.