Why do we see the Spring
Beans related to Inbuilt and Custom validators initialized ONLY during the first request. Can this behavior be changed to initialize as part of the application startup in Spring Boot v3.3.2
?
[2m2024-08-20T21:44:57.194+04:00[[TRACE[[7332[[2m---[[2m[web-webflux-trace] [nio-8080-exec-1][[2m[66c4d6192e5a47bbf7d8544f82d25b53-f7d8544f82d25b53] [0;39m[36mo.s.b.f.s.DefaultListableBeanFactory [[2m:[Creating instance of bean 'org.hibernate.validator.internal.constraintvalidators.bv.NotBlankValidator'
[2m2024-08-20T21:44:57.194+04:00[[TRACE[[7332[[2m---[[2m[web-webflux-trace] [nio-8080-exec-1][[2m[66c4d6192e5a47bbf7d8544f82d25b53-f7d8544f82d25b53] [0;39m[36mo.s.b.f.s.DefaultListableBeanFactory [[2m:[Finished creating instance of bean 'org.hibernate.validator.internal.constraintvalidators.bv.NotBlankValidator'
[2m2024-08-20T21:44:57.194+04:00[[TRACE[[7332[[2m---[[2m[web-webflux-trace] [nio-8080-exec-1][[2m[66c4d6192e5a47bbf7d8544f82d25b53-f7d8544f82d25b53] [0;39m[36mo.s.b.f.s.DefaultListableBeanFactory [[2m:[Creating instance of bean 'org.hibernate.validator.internal.constraintvalidators.bv.PatternValidator'
[2m2024-08-20T21:44:57.194+04:00[[TRACE[[7332[[2m---[[2m[web-webflux-trace] [nio-8080-exec-1][[2m[66c4d6192e5a47bbf7d8544f82d25b53-f7d8544f82d25b53] [0;39m[36mo.s.b.f.s.DefaultListableBeanFactory [[2m:[Finished creating instance of bean 'org.hibernate.validator.internal.constraintvalidators.bv.PatternValidator'
Have you tried creating a custom validator bean using SpringValidatorAdapter
? I tested this in one of my apps. Without the custom validator bean, I did see the Hibernate validator bean initialization logs on the first request. Didn't see those logs when I defined a custom validator bean.
Bean definition:
import io.github.devatherock.emailsender.model.EmailSendRequest;
import jakarta.validation.Validation;
import jakarta.validation.Validator;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.validation.beanvalidation.SpringValidatorAdapter;
@Configuration
public class EmailSenderAppConfig {
@Bean
public SpringValidatorAdapter validator() {
Validator validator = Validation.buildDefaultValidatorFactory().getValidator();
validator.getConstraintsForClass(EmailSendRequest.class);
return new SpringValidatorAdapter(validator);
}
}
First request logs without custom validator bean:
2024-10-27 16:12:39,149 [http-nio-8080-exec-2] DEBUG o.s.w.f.CommonsRequestLoggingFilter - Before request [POST /email/v1]
2024-10-27 16:12:39,180 [http-nio-8080-exec-2] TRACE o.s.b.f.s.DefaultListableBeanFactory - Returning cached instance of singleton bean 'emailController'
2024-10-27 16:12:39,403 [http-nio-8080-exec-2] TRACE o.s.b.f.s.DefaultListableBeanFactory - Creating instance of bean 'org.hibernate.validator.internal.constraintvalidators.bv.AssertTrueValidator'
2024-10-27 16:12:39,404 [http-nio-8080-exec-2] TRACE o.s.b.f.s.DefaultListableBeanFactory - Finished creating instance of bean 'org.hibernate.validator.internal.constraintvalidators.bv.AssertTrueValidator'
2024-10-27 16:12:39,410 [http-nio-8080-exec-2] TRACE o.s.b.f.s.DefaultListableBeanFactory - Creating instance of bean 'org.hibernate.validator.internal.constraintvalidators.bv.NotBlankValidator'
2024-10-27 16:12:39,410 [http-nio-8080-exec-2] TRACE o.s.b.f.s.DefaultListableBeanFactory - Finished creating instance of bean 'org.hibernate.validator.internal.constraintvalidators.bv.NotBlankValidator'
2024-10-27 16:12:39,411 [http-nio-8080-exec-2] TRACE o.s.b.f.s.DefaultListableBeanFactory - Creating instance of bean 'org.hibernate.validator.internal.constraintvalidators.bv.EmailValidator'
2024-10-27 16:12:39,414 [http-nio-8080-exec-2] TRACE o.s.b.f.s.DefaultListableBeanFactory - Finished creating instance of bean 'org.hibernate.validator.internal.constraintvalidators.bv.EmailValidator'
2024-10-27 16:12:39,655 [Aspirin-DeliveryManager-18] INFO Aspirin - DeliveryManager started.
2024-10-27 16:12:39,746 [http-nio-8080-exec-2] TRACE o.s.b.f.s.DefaultListableBeanFactory - Returning cached instance of singleton bean 'startupTimeMetrics'
2024-10-27 16:12:39,747 [http-nio-8080-exec-2] DEBUG o.s.w.f.CommonsRequestLoggingFilter - After request [POST /email/v1]
First request logs with custom validator bean:
2024-10-27 16:29:46,429 [http-nio-8080-exec-2] DEBUG o.s.w.f.CommonsRequestLoggingFilter - Before request [POST /email/v1]
2024-10-27 16:29:46,455 [http-nio-8080-exec-2] TRACE o.s.b.f.s.DefaultListableBeanFactory - Returning cached instance of singleton bean 'emailController'
2024-10-27 16:29:46,910 [Aspirin-DeliveryManager-18] INFO Aspirin - DeliveryManager started.
2024-10-27 16:29:46,975 [http-nio-8080-exec-2] TRACE o.s.b.f.s.DefaultListableBeanFactory - Returning cached instance of singleton bean 'startupTimeMetrics'
2024-10-27 16:29:46,975 [http-nio-8080-exec-2] DEBUG o.s.w.f.CommonsRequestLoggingFilter - After request [POST /email/v1]