diff --git a/.gitignore b/.gitignore
index 667aaef..18e9f3c 100644
--- a/.gitignore
+++ b/.gitignore
@@ -31,3 +31,4 @@ build/
### VS Code ###
.vscode/
+test/
diff --git a/logs/application-test.log b/logs/application-test.log
index e7be2e5..f433501 100644
--- a/logs/application-test.log
+++ b/logs/application-test.log
@@ -4727,3 +4727,2409 @@ Caused by: org.springframework.boot.autoconfigure.jdbc.DataSourceProperties$Data
at org.springframework.beans.factory.support.SimpleInstantiationStrategy.lambda$instantiate$0(SimpleInstantiationStrategy.java:172)
... 121 common frames omitted
2025-10-10 13:35:36.803 [main] DEBUG o.s.t.c.s.DirtiesContextTestExecutionListener - After test class: class [DeepchartApplicationTests], class annotated with @DirtiesContext [false] with mode [null]
+2025-10-10 15:03:31.977 [background-preinit] DEBUG org.jboss.logging - Logging Provider: org.jboss.logging.Slf4jLoggerProvider found via system property
+2025-10-10 15:03:31.983 [background-preinit] DEBUG o.h.v.i.x.config.ValidationXmlParser - Trying to load META-INF/validation.xml for XML based Validator configuration.
+2025-10-10 15:03:31.984 [background-preinit] DEBUG o.h.v.i.x.c.ResourceLoaderHelper - Trying to load META-INF/validation.xml via TCCL
+2025-10-10 15:03:31.984 [background-preinit] DEBUG o.h.v.i.x.c.ResourceLoaderHelper - Trying to load META-INF/validation.xml via Hibernate Validator's class loader
+2025-10-10 15:03:31.984 [background-preinit] DEBUG o.h.v.i.x.config.ValidationXmlParser - No META-INF/validation.xml found. Using annotation based configuration only.
+2025-10-10 15:03:31.989 [background-preinit] DEBUG o.h.v.i.e.r.TraversableResolvers - Found jakarta.persistence.Persistence on classpath containing 'getPersistenceUtil'. Assuming JPA 2 environment. Trying to instantiate JPA aware TraversableResolver
+2025-10-10 15:03:31.989 [background-preinit] DEBUG o.h.v.i.e.r.TraversableResolvers - Instantiated JPA aware TraversableResolver of type org.hibernate.validator.internal.engine.resolver.JPATraversableResolver.
+2025-10-10 15:03:32.007 [background-preinit] DEBUG o.h.v.m.ResourceBundleMessageInterpolator - Loaded expression factory via original TCCL
+2025-10-10 15:03:32.014 [main] INFO c.d.i.ApiSignIntegrationTest - Starting ApiSignIntegrationTest using Java 17.0.16 with PID 54216 (started by homil in D:\project\www\deepchart)
+2025-10-10 15:03:32.014 [main] DEBUG c.d.i.ApiSignIntegrationTest - Running with Spring Boot v3.5.6, Spring v6.2.11
+2025-10-10 15:03:32.014 [main] INFO c.d.i.ApiSignIntegrationTest - The following 1 profile is active: "test"
+2025-10-10 15:03:32.015 [main] DEBUG o.s.boot.SpringApplication - Loading source class com.deepchart.DeepchartApplication
+2025-10-10 15:03:32.025 [main] DEBUG o.s.w.c.s.GenericWebApplicationContext - Refreshing org.springframework.web.context.support.GenericWebApplicationContext@9d200de
+2025-10-10 15:03:32.038 [main] DEBUG o.s.b.f.s.DefaultListableBeanFactory - Creating shared instance of singleton bean 'org.springframework.context.annotation.internalConfigurationAnnotationProcessor'
+2025-10-10 15:03:32.048 [main] DEBUG o.s.b.f.s.DefaultListableBeanFactory - Creating shared instance of singleton bean 'org.springframework.boot.autoconfigure.internalCachingMetadataReaderFactory'
+2025-10-10 15:03:32.081 [background-preinit] DEBUG o.h.v.i.e.ValidatorFactoryConfigurationHelper - HV000252: Using org.hibernate.validator.internal.engine.DefaultPropertyNodeNameProvider as property node name provider.
+2025-10-10 15:03:32.086 [background-preinit] DEBUG o.h.v.i.e.ValidatorFactoryConfigurationHelper - HV000234: Using org.hibernate.validator.messageinterpolation.ResourceBundleMessageInterpolator as ValidatorFactory-scoped message interpolator.
+2025-10-10 15:03:32.086 [background-preinit] DEBUG o.h.v.i.e.ValidatorFactoryConfigurationHelper - HV000234: Using org.hibernate.validator.internal.engine.resolver.JPATraversableResolver as ValidatorFactory-scoped traversable resolver.
+2025-10-10 15:03:32.086 [background-preinit] DEBUG o.h.v.i.e.ValidatorFactoryConfigurationHelper - HV000234: Using org.hibernate.validator.internal.util.ExecutableParameterNameProvider as ValidatorFactory-scoped parameter name provider.
+2025-10-10 15:03:32.087 [background-preinit] DEBUG o.h.v.i.e.ValidatorFactoryConfigurationHelper - HV000234: Using org.hibernate.validator.internal.engine.DefaultClockProvider as ValidatorFactory-scoped clock provider.
+2025-10-10 15:03:32.087 [background-preinit] DEBUG o.h.v.i.e.ValidatorFactoryConfigurationHelper - HV000234: Using org.hibernate.validator.internal.engine.scripting.DefaultScriptEvaluatorFactory as ValidatorFactory-scoped script evaluator factory.
+2025-10-10 15:03:32.108 [main] DEBUG o.s.c.a.ClassPathBeanDefinitionScanner - Identified candidate component class: file [D:\project\www\deepchart\target\classes\com\deepchart\common\exception\GlobalExceptionHandler.class]
+2025-10-10 15:03:32.109 [main] DEBUG o.s.c.a.ClassPathBeanDefinitionScanner - Identified candidate component class: file [D:\project\www\deepchart\target\classes\com\deepchart\common\sign\ApiSignProperties.class]
+2025-10-10 15:03:32.110 [main] DEBUG o.s.c.a.ClassPathBeanDefinitionScanner - Identified candidate component class: file [D:\project\www\deepchart\target\classes\com\deepchart\common\sign\SignInterceptor.class]
+2025-10-10 15:03:32.115 [main] DEBUG o.s.c.a.ClassPathBeanDefinitionScanner - Identified candidate component class: file [D:\project\www\deepchart\target\classes\com\deepchart\config\JpaConfig.class]
+2025-10-10 15:03:32.116 [main] DEBUG o.s.c.a.ClassPathBeanDefinitionScanner - Identified candidate component class: file [D:\project\www\deepchart\target\classes\com\deepchart\config\WebConfig.class]
+2025-10-10 15:03:32.122 [main] DEBUG o.s.c.a.ClassPathBeanDefinitionScanner - Identified candidate component class: file [D:\project\www\deepchart\target\classes\com\deepchart\controller\UserController.class]
+2025-10-10 15:03:32.130 [main] DEBUG o.s.c.a.ClassPathBeanDefinitionScanner - Ignored because not a concrete top-level class: file [D:\project\www\deepchart\target\classes\com\deepchart\repository\UserRepository.class]
+2025-10-10 15:03:32.131 [main] DEBUG o.s.c.a.ClassPathBeanDefinitionScanner - Identified candidate component class: file [D:\project\www\deepchart\target\classes\com\deepchart\service\impl\UserServiceImpl.class]
+2025-10-10 15:03:32.544 [main] INFO o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data JPA repositories in DEFAULT mode.
+2025-10-10 15:03:32.553 [main] DEBUG o.s.d.r.c.RepositoryConfigurationDelegate - Scanning for JPA repositories in packages com.deepchart.repository.
+2025-10-10 15:03:32.556 [main] DEBUG o.s.c.i.s.PathMatchingResourcePatternResolver - Skipping search for files matching pattern [**/*.class]: directory [D:\project\www\deepchart\target\test-classes\com\deepchart\repository] does not exist
+2025-10-10 15:03:32.558 [main] DEBUG o.s.d.r.c.RepositoryComponentProvider - Identified candidate component class: file [D:\project\www\deepchart\target\classes\com\deepchart\repository\UserRepository.class]
+2025-10-10 15:03:32.572 [main] DEBUG o.s.c.i.s.PathMatchingResourcePatternResolver - Skipping search for files matching pattern [**/*Impl.class]: directory [D:\project\www\deepchart\target\test-classes\com\deepchart\repository] does not exist
+2025-10-10 15:03:32.579 [main] INFO o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 25 ms. Found 1 JPA repository interface.
+2025-10-10 15:03:32.920 [main] DEBUG o.s.b.f.s.DefaultListableBeanFactory - Creating shared instance of singleton bean 'org.springframework.boot.test.context.ImportsContextCustomizer$ImportsCleanupPostProcessor'
+2025-10-10 15:03:32.981 [main] DEBUG o.s.b.f.s.DefaultListableBeanFactory - Creating shared instance of singleton bean 'propertySourcesPlaceholderConfigurer'
+2025-10-10 15:03:32.988 [main] DEBUG o.s.b.f.s.DefaultListableBeanFactory - Creating shared instance of singleton bean 'org.springframework.boot.test.mock.mockito.MockitoPostProcessor'
+2025-10-10 15:03:32.989 [main] DEBUG o.s.b.f.s.DefaultListableBeanFactory - Creating shared instance of singleton bean 'emBeanDefinitionRegistrarPostProcessor'
+2025-10-10 15:03:32.989 [main] DEBUG o.s.b.f.s.DefaultListableBeanFactory - Creating shared instance of singleton bean 'org.springframework.boot.sql.init.dependency.DatabaseInitializationDependencyConfigurer$DependsOnDatabaseInitializationPostProcessor'
+2025-10-10 15:03:33.032 [main] DEBUG o.s.b.f.s.DefaultListableBeanFactory - Creating shared instance of singleton bean 'org.springframework.context.event.internalEventListenerProcessor'
+2025-10-10 15:03:33.033 [main] DEBUG o.s.b.f.s.DefaultListableBeanFactory - Creating shared instance of singleton bean 'org.springframework.data.jpa.domain.support.AuditingBeanFactoryPostProcessor'
+2025-10-10 15:03:33.034 [main] DEBUG o.s.b.f.s.DefaultListableBeanFactory - Creating shared instance of singleton bean 'bootstrapExecutorAliasPostProcessor'
+2025-10-10 15:03:33.036 [main] DEBUG o.s.b.f.s.DefaultListableBeanFactory - Creating shared instance of singleton bean 'preserveErrorControllerTargetClassPostProcessor'
+2025-10-10 15:03:33.037 [main] DEBUG o.s.b.f.s.DefaultListableBeanFactory - Creating shared instance of singleton bean 'org.springframework.context.event.internalEventListenerFactory'
+2025-10-10 15:03:33.037 [main] DEBUG o.s.b.f.s.DefaultListableBeanFactory - Creating shared instance of singleton bean 'org.springframework.transaction.config.internalTransactionalEventListenerFactory'
+2025-10-10 15:03:33.043 [main] DEBUG o.s.b.f.s.DefaultListableBeanFactory - Creating shared instance of singleton bean 'org.springframework.context.annotation.internalAutowiredAnnotationProcessor'
+2025-10-10 15:03:33.045 [main] DEBUG o.s.b.f.s.DefaultListableBeanFactory - Creating shared instance of singleton bean 'org.springframework.context.annotation.internalCommonAnnotationProcessor'
+2025-10-10 15:03:33.050 [main] DEBUG o.s.b.f.s.DefaultListableBeanFactory - Creating shared instance of singleton bean 'org.springframework.context.annotation.internalPersistenceAnnotationProcessor'
+2025-10-10 15:03:33.051 [main] DEBUG o.s.b.f.s.DefaultListableBeanFactory - Creating shared instance of singleton bean 'org.springframework.boot.test.mock.mockito.MockitoPostProcessor$SpyPostProcessor'
+2025-10-10 15:03:33.052 [main] DEBUG o.s.b.f.s.DefaultListableBeanFactory - Creating shared instance of singleton bean 'org.springframework.boot.context.properties.ConfigurationPropertiesBindingPostProcessor'
+2025-10-10 15:03:33.053 [main] DEBUG o.s.b.f.s.DefaultListableBeanFactory - Creating shared instance of singleton bean 'org.springframework.boot.context.internalConfigurationPropertiesBinder'
+2025-10-10 15:03:33.057 [main] DEBUG o.s.b.f.s.DefaultListableBeanFactory - Creating shared instance of singleton bean 'jdbcConnectionDetailsHikariBeanPostProcessor'
+2025-10-10 15:03:33.060 [main] DEBUG o.s.b.f.s.DefaultListableBeanFactory - Creating shared instance of singleton bean 'org.springframework.aop.config.internalAutoProxyCreator'
+2025-10-10 15:03:33.084 [main] DEBUG o.s.b.f.s.DefaultListableBeanFactory - Creating shared instance of singleton bean 'methodValidationPostProcessor'
+2025-10-10 15:03:33.086 [main] DEBUG o.s.b.f.s.DefaultListableBeanFactory - Autowiring by type from bean name 'methodValidationPostProcessor' via factory method to bean named 'environment'
+2025-10-10 15:03:33.101 [main] DEBUG o.s.b.f.s.DefaultListableBeanFactory - Creating shared instance of singleton bean 'org.springframework.boot.context.properties.EnableConfigurationPropertiesRegistrar.methodValidationExcludeFilter'
+2025-10-10 15:03:33.121 [main] DEBUG o.s.b.f.s.DefaultListableBeanFactory - Creating shared instance of singleton bean 'persistenceExceptionTranslationPostProcessor'
+2025-10-10 15:03:33.122 [main] DEBUG o.s.b.f.s.DefaultListableBeanFactory - Autowiring by type from bean name 'persistenceExceptionTranslationPostProcessor' via factory method to bean named 'environment'
+2025-10-10 15:03:33.126 [main] DEBUG o.s.b.f.s.DefaultListableBeanFactory - Creating shared instance of singleton bean 'webServerFactoryCustomizerBeanPostProcessor'
+2025-10-10 15:03:33.129 [main] DEBUG o.s.b.f.s.DefaultListableBeanFactory - Creating shared instance of singleton bean 'errorPageRegistrarBeanPostProcessor'
+2025-10-10 15:03:33.130 [main] DEBUG o.s.b.f.s.DefaultListableBeanFactory - Creating shared instance of singleton bean 'healthEndpointGroupsBeanPostProcessor'
+2025-10-10 15:03:33.131 [main] DEBUG o.s.b.f.s.DefaultListableBeanFactory - Creating shared instance of singleton bean 'org.springframework.transaction.config.internalTransactionAdvisor'
+2025-10-10 15:03:33.131 [main] DEBUG o.s.b.f.s.DefaultListableBeanFactory - Creating shared instance of singleton bean 'org.springframework.transaction.annotation.ProxyTransactionManagementConfiguration'
+2025-10-10 15:03:33.154 [main] DEBUG o.s.a.a.a.ReflectiveAspectJAdvisorFactory - Found AspectJ method: public void org.springframework.beans.factory.aspectj.AbstractDependencyInjectionAspect.ajc$before$org_springframework_beans_factory_aspectj_AbstractDependencyInjectionAspect$1$e854fa65(java.lang.Object)
+2025-10-10 15:03:33.157 [main] DEBUG o.s.a.a.a.ReflectiveAspectJAdvisorFactory - Found AspectJ method: public void org.springframework.beans.factory.aspectj.AbstractDependencyInjectionAspect.ajc$afterReturning$org_springframework_beans_factory_aspectj_AbstractDependencyInjectionAspect$2$1ea6722c(java.lang.Object)
+2025-10-10 15:03:33.159 [main] DEBUG o.s.a.a.a.ReflectiveAspectJAdvisorFactory - Found AspectJ method: public void org.springframework.beans.factory.aspectj.AbstractDependencyInjectionAspect.ajc$afterReturning$org_springframework_beans_factory_aspectj_AbstractDependencyInjectionAspect$3$6aa27052(java.lang.Object)
+2025-10-10 15:03:33.261 [main] DEBUG o.s.a.a.AspectJExpressionPointcut - Pointcut parser rejected expression [(beanConstruction(bean) && (preConstructionCondition() && inConfigurableBean()))]: java.lang.IllegalArgumentException: error Type referred to is not an annotation type: Configurable
+2025-10-10 15:03:33.262 [main] DEBUG o.s.a.a.AspectJExpressionPointcut - Pointcut parser rejected expression [(beanConstruction(bean) && (postConstructionCondition() && inConfigurableBean()))]: java.lang.IllegalArgumentException: error Type referred to is not an annotation type: Configurable
+2025-10-10 15:03:33.263 [main] DEBUG o.s.a.a.AspectJExpressionPointcut - Pointcut parser rejected expression [(beanDeserialization(bean) && inConfigurableBean())]: java.lang.IllegalArgumentException: error Type referred to is not an annotation type: Configurable
+2025-10-10 15:03:33.263 [main] DEBUG o.s.b.f.s.DefaultListableBeanFactory - Creating shared instance of singleton bean 'transactionAttributeSource'
+2025-10-10 15:03:33.265 [main] DEBUG o.s.b.f.s.DefaultListableBeanFactory - Creating shared instance of singleton bean 'transactionInterceptor'
+2025-10-10 15:03:33.265 [main] DEBUG o.s.b.f.s.DefaultListableBeanFactory - Autowiring by type from bean name 'transactionInterceptor' via factory method to bean named 'transactionAttributeSource'
+2025-10-10 15:03:33.269 [main] DEBUG o.s.b.f.s.DefaultListableBeanFactory - Autowiring by type from bean name 'org.springframework.transaction.config.internalTransactionAdvisor' via factory method to bean named 'transactionAttributeSource'
+2025-10-10 15:03:33.269 [main] DEBUG o.s.b.f.s.DefaultListableBeanFactory - Autowiring by type from bean name 'org.springframework.transaction.config.internalTransactionAdvisor' via factory method to bean named 'transactionInterceptor'
+2025-10-10 15:03:33.272 [main] DEBUG o.s.b.f.s.DefaultListableBeanFactory - Creating shared instance of singleton bean 'meterRegistryPostProcessor'
+2025-10-10 15:03:33.273 [main] DEBUG o.s.b.f.s.DefaultListableBeanFactory - Autowiring by type from bean name 'meterRegistryPostProcessor' via factory method to bean named 'org.springframework.web.context.support.GenericWebApplicationContext@9d200de'
+2025-10-10 15:03:33.276 [main] DEBUG o.s.b.f.s.DefaultListableBeanFactory - Creating shared instance of singleton bean 'metricsRepositoryMethodInvocationListenerBeanPostProcessor'
+2025-10-10 15:03:33.277 [main] DEBUG o.s.b.f.s.DefaultListableBeanFactory - Creating shared instance of singleton bean 'observationRegistryPostProcessor'
+2025-10-10 15:03:33.278 [main] DEBUG o.s.b.f.s.DefaultListableBeanFactory - Creating shared instance of singleton bean 'projectingArgumentResolverBeanPostProcessor'
+2025-10-10 15:03:33.295 [main] DEBUG o.s.u.c.s.UiApplicationContextUtils - Unable to locate ThemeSource with name 'themeSource': using default [org.springframework.ui.context.support.ResourceBundleThemeSource@f18b738]
+2025-10-10 15:03:33.296 [main] DEBUG o.s.b.f.s.DefaultListableBeanFactory - Creating shared instance of singleton bean 'applicationTaskExecutor'
+2025-10-10 15:03:33.297 [main] DEBUG o.s.b.f.s.DefaultListableBeanFactory - Creating shared instance of singleton bean 'org.springframework.boot.autoconfigure.task.TaskExecutorConfigurations$TaskExecutorConfiguration'
+2025-10-10 15:03:33.298 [main] DEBUG o.s.b.f.s.DefaultListableBeanFactory - Creating shared instance of singleton bean 'threadPoolTaskExecutorBuilder'
+2025-10-10 15:03:33.298 [main] DEBUG o.s.b.f.s.DefaultListableBeanFactory - Creating shared instance of singleton bean 'org.springframework.boot.autoconfigure.task.TaskExecutorConfigurations$ThreadPoolTaskExecutorBuilderConfiguration'
+2025-10-10 15:03:33.305 [main] DEBUG o.s.b.f.s.DefaultListableBeanFactory - Creating shared instance of singleton bean 'spring.task.execution-org.springframework.boot.autoconfigure.task.TaskExecutionProperties'
+2025-10-10 15:03:33.306 [main] DEBUG o.s.b.f.s.DefaultListableBeanFactory - Creating shared instance of singleton bean 'org.springframework.boot.context.properties.BoundConfigurationProperties'
+2025-10-10 15:03:33.314 [main] DEBUG o.s.b.f.s.DefaultListableBeanFactory - Autowiring by type from bean name 'threadPoolTaskExecutorBuilder' via factory method to bean named 'spring.task.execution-org.springframework.boot.autoconfigure.task.TaskExecutionProperties'
+2025-10-10 15:03:33.318 [main] DEBUG o.s.b.f.s.DefaultListableBeanFactory - Autowiring by type from bean name 'applicationTaskExecutor' via factory method to bean named 'threadPoolTaskExecutorBuilder'
+2025-10-10 15:03:33.335 [main] DEBUG o.s.s.c.ThreadPoolTaskExecutor - Initializing ExecutorService 'applicationTaskExecutor'
+2025-10-10 15:03:33.341 [main] DEBUG o.s.b.f.s.DefaultListableBeanFactory - Creating shared instance of singleton bean 'org.springframework.test.context.support.internalDynamicPropertyRegistrarBeanInitializer'
+2025-10-10 15:03:33.343 [main] DEBUG o.s.b.f.s.DefaultListableBeanFactory - Creating shared instance of singleton bean 'dataSourceScriptDatabaseInitializer'
+2025-10-10 15:03:33.343 [main] DEBUG o.s.b.f.s.DefaultListableBeanFactory - Creating shared instance of singleton bean 'org.springframework.boot.autoconfigure.sql.init.DataSourceInitializationConfiguration'
+2025-10-10 15:03:33.344 [main] DEBUG o.s.b.f.s.DefaultListableBeanFactory - Creating shared instance of singleton bean 'dataSource'
+2025-10-10 15:03:33.345 [main] DEBUG o.s.b.f.s.DefaultListableBeanFactory - Creating shared instance of singleton bean 'org.springframework.boot.autoconfigure.jdbc.DataSourceConfiguration$Hikari'
+2025-10-10 15:03:33.346 [main] DEBUG o.s.b.f.s.DefaultListableBeanFactory - Creating shared instance of singleton bean 'spring.datasource-org.springframework.boot.autoconfigure.jdbc.DataSourceProperties'
+2025-10-10 15:03:33.356 [main] DEBUG o.s.b.f.s.DefaultListableBeanFactory - Creating shared instance of singleton bean 'jdbcConnectionDetails'
+2025-10-10 15:03:33.356 [main] DEBUG o.s.b.f.s.DefaultListableBeanFactory - Creating shared instance of singleton bean 'org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration$PooledDataSourceConfiguration'
+2025-10-10 15:03:33.357 [main] DEBUG o.s.b.f.s.DefaultListableBeanFactory - Autowiring by type from bean name 'jdbcConnectionDetails' via factory method to bean named 'spring.datasource-org.springframework.boot.autoconfigure.jdbc.DataSourceProperties'
+2025-10-10 15:03:33.361 [main] DEBUG o.s.b.f.s.DefaultListableBeanFactory - Autowiring by type from bean name 'dataSource' via factory method to bean named 'spring.datasource-org.springframework.boot.autoconfigure.jdbc.DataSourceProperties'
+2025-10-10 15:03:33.361 [main] DEBUG o.s.b.f.s.DefaultListableBeanFactory - Autowiring by type from bean name 'dataSource' via factory method to bean named 'jdbcConnectionDetails'
+2025-10-10 15:03:33.361 [main] DEBUG o.s.b.f.s.DefaultListableBeanFactory - Autowiring by type from bean name 'dataSource' via factory method to bean named 'environment'
+2025-10-10 15:03:33.370 [main] WARN o.s.w.c.s.GenericWebApplicationContext - Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Failed to initialize dependency 'dataSourceScriptDatabaseInitializer' of LoadTimeWeaverAware bean 'entityManagerFactory': Error creating bean with name 'dataSourceScriptDatabaseInitializer' defined in class path resource [org/springframework/boot/autoconfigure/sql/init/DataSourceInitializationConfiguration.class]: Unsatisfied dependency expressed through method 'dataSourceScriptDatabaseInitializer' parameter 0: Error creating bean with name 'dataSource' defined in class path resource [org/springframework/boot/autoconfigure/jdbc/DataSourceConfiguration$Hikari.class]: Failed to instantiate [com.zaxxer.hikari.HikariDataSource]: Factory method 'dataSource' threw exception with message: Failed to determine a suitable driver class
+2025-10-10 15:03:33.371 [main] DEBUG o.s.s.c.ThreadPoolTaskExecutor - Shutting down ExecutorService 'applicationTaskExecutor'
+2025-10-10 15:03:33.403 [main] DEBUG o.s.b.a.l.ConditionEvaluationReportLogger -
+
+
+============================
+CONDITIONS EVALUATION REPORT
+============================
+
+
+Positive matches:
+-----------------
+
+ AopAutoConfiguration matched:
+ - @ConditionalOnBooleanProperty (spring.aop.auto=true) matched (OnPropertyCondition)
+
+ AopAutoConfiguration.AspectJAutoProxyingConfiguration matched:
+ - @ConditionalOnClass found required class 'org.aspectj.weaver.Advice' (OnClassCondition)
+
+ AopAutoConfiguration.AspectJAutoProxyingConfiguration.CglibAutoProxyConfiguration matched:
+ - @ConditionalOnBooleanProperty (spring.aop.proxy-target-class=true) matched (OnPropertyCondition)
+
+ ApplicationAvailabilityAutoConfiguration#applicationAvailability matched:
+ - @ConditionalOnMissingBean (types: org.springframework.boot.availability.ApplicationAvailability; SearchStrategy: all) did not find any beans (OnBeanCondition)
+
+ CacheMeterBinderProvidersConfiguration matched:
+ - @ConditionalOnClass found required class 'io.micrometer.core.instrument.binder.MeterBinder' (OnClassCondition)
+
+ CompositeMeterRegistryAutoConfiguration matched:
+ - @ConditionalOnClass found required class 'io.micrometer.core.instrument.composite.CompositeMeterRegistry' (OnClassCondition)
+
+ DataSourceAutoConfiguration matched:
+ - @ConditionalOnClass found required classes 'javax.sql.DataSource', 'org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseType' (OnClassCondition)
+ - @ConditionalOnMissingBean (types: ?; SearchStrategy: all) did not find any beans (OnBeanCondition)
+
+ DataSourceAutoConfiguration.PooledDataSourceConfiguration matched:
+ - AnyNestedCondition 1 matched 1 did not; NestedCondition on DataSourceAutoConfiguration.PooledDataSourceCondition.PooledDataSourceAvailable PooledDataSource found supported DataSource; NestedCondition on DataSourceAutoConfiguration.PooledDataSourceCondition.ExplicitType @ConditionalOnProperty (spring.datasource.type) did not find property 'spring.datasource.type' (DataSourceAutoConfiguration.PooledDataSourceCondition)
+ - @ConditionalOnMissingBean (types: javax.sql.DataSource,javax.sql.XADataSource; SearchStrategy: all) did not find any beans (OnBeanCondition)
+
+ DataSourceAutoConfiguration.PooledDataSourceConfiguration#jdbcConnectionDetails matched:
+ - @ConditionalOnMissingBean (types: org.springframework.boot.autoconfigure.jdbc.JdbcConnectionDetails; SearchStrategy: all) did not find any beans (OnBeanCondition)
+
+ DataSourceConfiguration.Hikari matched:
+ - @ConditionalOnClass found required class 'com.zaxxer.hikari.HikariDataSource' (OnClassCondition)
+ - @ConditionalOnProperty (spring.datasource.type=com.zaxxer.hikari.HikariDataSource) matched (OnPropertyCondition)
+ - @ConditionalOnMissingBean (types: javax.sql.DataSource; SearchStrategy: all) did not find any beans (OnBeanCondition)
+
+ DataSourceHealthContributorAutoConfiguration matched:
+ - @ConditionalOnClass found required classes 'org.springframework.jdbc.core.JdbcTemplate', 'org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource' (OnClassCondition)
+ - @ConditionalOnEnabledHealthIndicator management.health.defaults.enabled is considered true (OnEnabledHealthIndicatorCondition)
+ - @ConditionalOnBean (types: javax.sql.DataSource; SearchStrategy: all) found bean 'dataSource' (OnBeanCondition)
+
+ DataSourceHealthContributorAutoConfiguration#dbHealthContributor matched:
+ - @ConditionalOnMissingBean (names: dbHealthIndicator,dbHealthContributor; SearchStrategy: all) did not find any beans (OnBeanCondition)
+
+ DataSourceInitializationConfiguration matched:
+ - @ConditionalOnClass found required class 'org.springframework.jdbc.datasource.init.DatabasePopulator' (OnClassCondition)
+ - @ConditionalOnSingleCandidate (types: javax.sql.DataSource; SearchStrategy: all) found a single bean 'dataSource'; @ConditionalOnMissingBean (types: org.springframework.boot.autoconfigure.sql.init.SqlDataSourceScriptDatabaseInitializer,org.springframework.boot.autoconfigure.sql.init.SqlR2dbcScriptDatabaseInitializer; SearchStrategy: all) did not find any beans (OnBeanCondition)
+
+ DataSourcePoolMetadataProvidersConfiguration.HikariPoolDataSourceMetadataProviderConfiguration matched:
+ - @ConditionalOnClass found required class 'com.zaxxer.hikari.HikariDataSource' (OnClassCondition)
+
+ DataSourcePoolMetricsAutoConfiguration matched:
+ - @ConditionalOnClass found required classes 'javax.sql.DataSource', 'io.micrometer.core.instrument.MeterRegistry' (OnClassCondition)
+ - @ConditionalOnBean (types: javax.sql.DataSource,io.micrometer.core.instrument.MeterRegistry; SearchStrategy: all) found beans 'simpleMeterRegistry', 'dataSource' (OnBeanCondition)
+
+ DataSourcePoolMetricsAutoConfiguration.DataSourcePoolMetadataMetricsConfiguration matched:
+ - @ConditionalOnBean (types: org.springframework.boot.jdbc.metadata.DataSourcePoolMetadataProvider; SearchStrategy: all) found bean 'hikariPoolDataSourceMetadataProvider' (OnBeanCondition)
+
+ DataSourcePoolMetricsAutoConfiguration.HikariDataSourceMetricsConfiguration matched:
+ - @ConditionalOnClass found required class 'com.zaxxer.hikari.HikariDataSource' (OnClassCondition)
+
+ DataSourceTransactionManagerAutoConfiguration matched:
+ - @ConditionalOnClass found required classes 'javax.sql.DataSource', 'org.springframework.jdbc.core.JdbcTemplate', 'org.springframework.transaction.TransactionManager' (OnClassCondition)
+
+ DataSourceTransactionManagerAutoConfiguration.JdbcTransactionManagerConfiguration matched:
+ - @ConditionalOnSingleCandidate (types: javax.sql.DataSource; SearchStrategy: all) found a single bean 'dataSource' (OnBeanCondition)
+
+ DiskSpaceHealthContributorAutoConfiguration matched:
+ - @ConditionalOnEnabledHealthIndicator management.health.defaults.enabled is considered true (OnEnabledHealthIndicatorCondition)
+
+ DiskSpaceHealthContributorAutoConfiguration#diskSpaceHealthIndicator matched:
+ - @ConditionalOnMissingBean (names: diskSpaceHealthIndicator; SearchStrategy: all) did not find any beans (OnBeanCondition)
+
+ DispatcherServletAutoConfiguration matched:
+ - @ConditionalOnClass found required class 'org.springframework.web.servlet.DispatcherServlet' (OnClassCondition)
+ - found 'session' scope (OnWebApplicationCondition)
+
+ DispatcherServletAutoConfiguration.DispatcherServletConfiguration matched:
+ - @ConditionalOnClass found required class 'jakarta.servlet.ServletRegistration' (OnClassCondition)
+ - Default DispatcherServlet did not find dispatcher servlet beans (DispatcherServletAutoConfiguration.DefaultDispatcherServletCondition)
+
+ DispatcherServletAutoConfiguration.DispatcherServletRegistrationConfiguration matched:
+ - @ConditionalOnClass found required class 'jakarta.servlet.ServletRegistration' (OnClassCondition)
+ - DispatcherServlet Registration did not find servlet registration bean (DispatcherServletAutoConfiguration.DispatcherServletRegistrationCondition)
+
+ DispatcherServletAutoConfiguration.DispatcherServletRegistrationConfiguration#dispatcherServletRegistration matched:
+ - @ConditionalOnBean (names: dispatcherServlet types: org.springframework.web.servlet.DispatcherServlet; SearchStrategy: all) found bean 'dispatcherServlet' (OnBeanCondition)
+
+ EndpointAutoConfiguration#endpointCachingOperationInvokerAdvisor matched:
+ - @ConditionalOnMissingBean (types: org.springframework.boot.actuate.endpoint.invoker.cache.CachingOperationInvokerAdvisor; SearchStrategy: all) did not find any beans (OnBeanCondition)
+
+ EndpointAutoConfiguration#endpointOperationParameterMapper matched:
+ - @ConditionalOnMissingBean (types: org.springframework.boot.actuate.endpoint.invoke.ParameterValueMapper; SearchStrategy: all) did not find any beans (OnBeanCondition)
+
+ EndpointAutoConfiguration#propertiesEndpointAccessResolver matched:
+ - @ConditionalOnMissingBean (types: org.springframework.boot.actuate.endpoint.EndpointAccessResolver; SearchStrategy: all) did not find any beans (OnBeanCondition)
+
+ ErrorMvcAutoConfiguration matched:
+ - @ConditionalOnClass found required classes 'jakarta.servlet.Servlet', 'org.springframework.web.servlet.DispatcherServlet' (OnClassCondition)
+ - found 'session' scope (OnWebApplicationCondition)
+
+ ErrorMvcAutoConfiguration#basicErrorController matched:
+ - @ConditionalOnMissingBean (types: org.springframework.boot.web.servlet.error.ErrorController; SearchStrategy: current) did not find any beans (OnBeanCondition)
+
+ ErrorMvcAutoConfiguration#errorAttributes matched:
+ - @ConditionalOnMissingBean (types: org.springframework.boot.web.servlet.error.ErrorAttributes; SearchStrategy: current) did not find any beans (OnBeanCondition)
+
+ ErrorMvcAutoConfiguration.DefaultErrorViewResolverConfiguration#conventionErrorViewResolver matched:
+ - @ConditionalOnBean (types: org.springframework.web.servlet.DispatcherServlet; SearchStrategy: all) found bean 'dispatcherServlet'; @ConditionalOnMissingBean (types: org.springframework.boot.autoconfigure.web.servlet.error.ErrorViewResolver; SearchStrategy: all) did not find any beans (OnBeanCondition)
+
+ ErrorMvcAutoConfiguration.WhitelabelErrorViewConfiguration matched:
+ - @ConditionalOnBooleanProperty (server.error.whitelabel.enabled=true) matched (OnPropertyCondition)
+ - ErrorTemplate Missing did not find error template view (ErrorMvcAutoConfiguration.ErrorTemplateMissingCondition)
+
+ ErrorMvcAutoConfiguration.WhitelabelErrorViewConfiguration#beanNameViewResolver matched:
+ - @ConditionalOnMissingBean (types: org.springframework.web.servlet.view.BeanNameViewResolver; SearchStrategy: all) did not find any beans (OnBeanCondition)
+
+ ErrorMvcAutoConfiguration.WhitelabelErrorViewConfiguration#defaultErrorView matched:
+ - @ConditionalOnMissingBean (names: error; SearchStrategy: all) did not find any beans (OnBeanCondition)
+
+ GenericCacheConfiguration matched:
+ - Cache org.springframework.boot.autoconfigure.cache.GenericCacheConfiguration automatic cache type (CacheCondition)
+
+ HealthContributorAutoConfiguration#pingHealthContributor matched:
+ - @ConditionalOnEnabledHealthIndicator management.health.defaults.enabled is considered true (OnEnabledHealthIndicatorCondition)
+
+ HealthEndpointAutoConfiguration matched:
+ - @ConditionalOnAvailableEndpoint marked as exposed by a 'management.endpoints.web.exposure' property (OnAvailableEndpointCondition)
+
+ HealthEndpointConfiguration#healthContributorRegistry matched:
+ - @ConditionalOnMissingBean (types: org.springframework.boot.actuate.health.HealthContributorRegistry; SearchStrategy: all) did not find any beans (OnBeanCondition)
+
+ HealthEndpointConfiguration#healthEndpoint matched:
+ - @ConditionalOnMissingBean (types: org.springframework.boot.actuate.health.HealthEndpoint; SearchStrategy: all) did not find any beans (OnBeanCondition)
+
+ HealthEndpointConfiguration#healthEndpointGroupMembershipValidator matched:
+ - @ConditionalOnBooleanProperty (management.endpoint.health.validate-group-membership=true) matched (OnPropertyCondition)
+
+ HealthEndpointConfiguration#healthEndpointGroups matched:
+ - @ConditionalOnMissingBean (types: org.springframework.boot.actuate.health.HealthEndpointGroups; SearchStrategy: all) did not find any beans (OnBeanCondition)
+
+ HealthEndpointConfiguration#healthHttpCodeStatusMapper matched:
+ - @ConditionalOnMissingBean (types: org.springframework.boot.actuate.health.HttpCodeStatusMapper; SearchStrategy: all) did not find any beans (OnBeanCondition)
+
+ HealthEndpointConfiguration#healthStatusAggregator matched:
+ - @ConditionalOnMissingBean (types: org.springframework.boot.actuate.health.StatusAggregator; SearchStrategy: all) did not find any beans (OnBeanCondition)
+
+ HealthEndpointWebExtensionConfiguration matched:
+ - found 'session' scope (OnWebApplicationCondition)
+ - @ConditionalOnAvailableEndpoint marked as exposed by a 'management.endpoints.web.exposure' property (OnAvailableEndpointCondition)
+ - @ConditionalOnBean (types: org.springframework.boot.actuate.health.HealthEndpoint; SearchStrategy: all) found bean 'healthEndpoint' (OnBeanCondition)
+
+ HealthEndpointWebExtensionConfiguration#healthEndpointWebExtension matched:
+ - @ConditionalOnMissingBean (types: org.springframework.boot.actuate.health.HealthEndpointWebExtension; SearchStrategy: all) did not find any beans (OnBeanCondition)
+
+ HealthEndpointWebExtensionConfiguration.MvcAdditionalHealthEndpointPathsConfiguration matched:
+ - @ConditionalOnBean (types: org.springframework.web.servlet.DispatcherServlet; SearchStrategy: all) found bean 'dispatcherServlet' (OnBeanCondition)
+
+ HibernateJpaAutoConfiguration matched:
+ - @ConditionalOnClass found required classes 'org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean', 'jakarta.persistence.EntityManager', 'org.hibernate.engine.spi.SessionImplementor' (OnClassCondition)
+
+ HibernateJpaConfiguration matched:
+ - @ConditionalOnSingleCandidate (types: javax.sql.DataSource; SearchStrategy: all) found a single bean 'dataSource' (OnBeanCondition)
+
+ HttpClientAutoConfiguration matched:
+ - @ConditionalOnClass found required class 'org.springframework.http.client.ClientHttpRequestFactory' (OnClassCondition)
+ - NoneNestedConditions 0 matched 1 did not; NestedCondition on NotReactiveWebApplicationCondition.ReactiveWebApplication did not find reactive web application classes (NotReactiveWebApplicationCondition)
+
+ HttpClientAutoConfiguration#clientHttpRequestFactoryBuilder matched:
+ - @ConditionalOnMissingBean (types: org.springframework.boot.http.client.ClientHttpRequestFactoryBuilder>; SearchStrategy: all) did not find any beans (OnBeanCondition)
+
+ HttpClientAutoConfiguration#clientHttpRequestFactorySettings matched:
+ - @ConditionalOnMissingBean (types: org.springframework.boot.http.client.ClientHttpRequestFactorySettings; SearchStrategy: all) did not find any beans (OnBeanCondition)
+
+ HttpClientObservationsAutoConfiguration matched:
+ - @ConditionalOnClass found required class 'io.micrometer.observation.Observation' (OnClassCondition)
+ - @ConditionalOnBean (types: io.micrometer.observation.ObservationRegistry; SearchStrategy: all) found bean 'observationRegistry' (OnBeanCondition)
+
+ HttpClientObservationsAutoConfiguration.MeterFilterConfiguration matched:
+ - @ConditionalOnClass found required class 'io.micrometer.core.instrument.MeterRegistry' (OnClassCondition)
+ - @ConditionalOnBean (types: io.micrometer.core.instrument.MeterRegistry; SearchStrategy: all) found bean 'simpleMeterRegistry' (OnBeanCondition)
+
+ HttpEncodingAutoConfiguration matched:
+ - @ConditionalOnClass found required class 'org.springframework.web.filter.CharacterEncodingFilter' (OnClassCondition)
+ - found 'session' scope (OnWebApplicationCondition)
+ - @ConditionalOnBooleanProperty (server.servlet.encoding.enabled=true) matched (OnPropertyCondition)
+
+ HttpEncodingAutoConfiguration#characterEncodingFilter matched:
+ - @ConditionalOnMissingBean (types: org.springframework.web.filter.CharacterEncodingFilter; SearchStrategy: all) did not find any beans (OnBeanCondition)
+
+ HttpMessageConvertersAutoConfiguration matched:
+ - @ConditionalOnClass found required class 'org.springframework.http.converter.HttpMessageConverter' (OnClassCondition)
+ - NoneNestedConditions 0 matched 1 did not; NestedCondition on HttpMessageConvertersAutoConfiguration.NotReactiveWebApplicationCondition.ReactiveWebApplication did not find reactive web application classes (HttpMessageConvertersAutoConfiguration.NotReactiveWebApplicationCondition)
+
+ HttpMessageConvertersAutoConfiguration#messageConverters matched:
+ - @ConditionalOnMissingBean (types: org.springframework.boot.autoconfigure.http.HttpMessageConverters; SearchStrategy: all) did not find any beans (OnBeanCondition)
+
+ HttpMessageConvertersAutoConfiguration.StringHttpMessageConverterConfiguration matched:
+ - @ConditionalOnClass found required class 'org.springframework.http.converter.StringHttpMessageConverter' (OnClassCondition)
+
+ HttpMessageConvertersAutoConfiguration.StringHttpMessageConverterConfiguration#stringHttpMessageConverter matched:
+ - @ConditionalOnMissingBean (types: org.springframework.http.converter.StringHttpMessageConverter; SearchStrategy: all) did not find any beans (OnBeanCondition)
+
+ InfoEndpointAutoConfiguration matched:
+ - @ConditionalOnAvailableEndpoint marked as exposed by a 'management.endpoints.web.exposure' property (OnAvailableEndpointCondition)
+
+ InfoEndpointAutoConfiguration#infoEndpoint matched:
+ - @ConditionalOnMissingBean (types: org.springframework.boot.actuate.info.InfoEndpoint; SearchStrategy: all) did not find any beans (OnBeanCondition)
+
+ JacksonAutoConfiguration matched:
+ - @ConditionalOnClass found required class 'com.fasterxml.jackson.databind.ObjectMapper' (OnClassCondition)
+
+ JacksonAutoConfiguration.Jackson2ObjectMapperBuilderCustomizerConfiguration matched:
+ - @ConditionalOnClass found required class 'org.springframework.http.converter.json.Jackson2ObjectMapperBuilder' (OnClassCondition)
+
+ JacksonAutoConfiguration.JacksonObjectMapperBuilderConfiguration matched:
+ - @ConditionalOnClass found required class 'org.springframework.http.converter.json.Jackson2ObjectMapperBuilder' (OnClassCondition)
+
+ JacksonAutoConfiguration.JacksonObjectMapperBuilderConfiguration#jacksonObjectMapperBuilder matched:
+ - @ConditionalOnMissingBean (types: org.springframework.http.converter.json.Jackson2ObjectMapperBuilder; SearchStrategy: all) did not find any beans (OnBeanCondition)
+
+ JacksonAutoConfiguration.JacksonObjectMapperConfiguration matched:
+ - @ConditionalOnClass found required class 'org.springframework.http.converter.json.Jackson2ObjectMapperBuilder' (OnClassCondition)
+
+ JacksonAutoConfiguration.JacksonObjectMapperConfiguration#jacksonObjectMapper matched:
+ - @ConditionalOnMissingBean (types: com.fasterxml.jackson.databind.ObjectMapper; SearchStrategy: all) did not find any beans (OnBeanCondition)
+
+ JacksonAutoConfiguration.ParameterNamesModuleConfiguration matched:
+ - @ConditionalOnClass found required class 'com.fasterxml.jackson.module.paramnames.ParameterNamesModule' (OnClassCondition)
+
+ JacksonAutoConfiguration.ParameterNamesModuleConfiguration#parameterNamesModule matched:
+ - @ConditionalOnMissingBean (types: com.fasterxml.jackson.module.paramnames.ParameterNamesModule; SearchStrategy: all) did not find any beans (OnBeanCondition)
+
+ JacksonEndpointAutoConfiguration#endpointObjectMapper matched:
+ - @ConditionalOnClass found required classes 'com.fasterxml.jackson.databind.ObjectMapper', 'org.springframework.http.converter.json.Jackson2ObjectMapperBuilder' (OnClassCondition)
+ - @ConditionalOnBooleanProperty (management.endpoints.jackson.isolated-object-mapper=true) matched (OnPropertyCondition)
+
+ JacksonHttpMessageConvertersConfiguration.MappingJackson2HttpMessageConverterConfiguration matched:
+ - @ConditionalOnClass found required class 'com.fasterxml.jackson.databind.ObjectMapper' (OnClassCondition)
+ - @ConditionalOnPreferredJsonMapper JACKSON no property was configured and Jackson is the default (OnPreferredJsonMapperCondition)
+ - @ConditionalOnBean (types: com.fasterxml.jackson.databind.ObjectMapper; SearchStrategy: all) found bean 'jacksonObjectMapper' (OnBeanCondition)
+
+ JacksonHttpMessageConvertersConfiguration.MappingJackson2HttpMessageConverterConfiguration#mappingJackson2HttpMessageConverter matched:
+ - @ConditionalOnMissingBean (types: org.springframework.http.converter.json.MappingJackson2HttpMessageConverter ignored: ?; SearchStrategy: all) did not find any beans (OnBeanCondition)
+
+ JdbcClientAutoConfiguration matched:
+ - @ConditionalOnSingleCandidate (types: org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate; SearchStrategy: all) found a single bean 'namedParameterJdbcTemplate'; @ConditionalOnMissingBean (types: org.springframework.jdbc.core.simple.JdbcClient; SearchStrategy: all) did not find any beans (OnBeanCondition)
+
+ JdbcTemplateAutoConfiguration matched:
+ - @ConditionalOnClass found required classes 'javax.sql.DataSource', 'org.springframework.jdbc.core.JdbcTemplate' (OnClassCondition)
+ - @ConditionalOnSingleCandidate (types: javax.sql.DataSource; SearchStrategy: all) found a single bean 'dataSource' (OnBeanCondition)
+
+ JdbcTemplateConfiguration matched:
+ - @ConditionalOnMissingBean (types: org.springframework.jdbc.core.JdbcOperations; SearchStrategy: all) did not find any beans (OnBeanCondition)
+
+ JpaBaseConfiguration#entityManagerFactory matched:
+ - @ConditionalOnMissingBean (types: org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean,jakarta.persistence.EntityManagerFactory; SearchStrategy: all) did not find any beans (OnBeanCondition)
+
+ JpaBaseConfiguration#entityManagerFactoryBuilder matched:
+ - @ConditionalOnMissingBean (types: org.springframework.boot.orm.jpa.EntityManagerFactoryBuilder; SearchStrategy: all) did not find any beans (OnBeanCondition)
+
+ JpaBaseConfiguration#jpaVendorAdapter matched:
+ - @ConditionalOnMissingBean (types: org.springframework.orm.jpa.JpaVendorAdapter; SearchStrategy: all) did not find any beans (OnBeanCondition)
+
+ JpaBaseConfiguration#transactionManager matched:
+ - @ConditionalOnMissingBean (types: org.springframework.transaction.TransactionManager; SearchStrategy: all) did not find any beans (OnBeanCondition)
+
+ JpaBaseConfiguration.JpaWebConfiguration matched:
+ - @ConditionalOnClass found required class 'org.springframework.web.servlet.config.annotation.WebMvcConfigurer' (OnClassCondition)
+ - found 'session' scope (OnWebApplicationCondition)
+ - @ConditionalOnBooleanProperty (spring.jpa.open-in-view=true) matched (OnPropertyCondition)
+ - @ConditionalOnMissingBean (types: org.springframework.orm.jpa.support.OpenEntityManagerInViewInterceptor,org.springframework.orm.jpa.support.OpenEntityManagerInViewFilter; SearchStrategy: all) did not find any beans (OnBeanCondition)
+
+ JpaBaseConfiguration.PersistenceManagedTypesConfiguration matched:
+ - @ConditionalOnMissingBean (types: org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean,jakarta.persistence.EntityManagerFactory; SearchStrategy: all) did not find any beans (OnBeanCondition)
+
+ JpaBaseConfiguration.PersistenceManagedTypesConfiguration#persistenceManagedTypes matched:
+ - @ConditionalOnMissingBean (types: org.springframework.orm.jpa.persistenceunit.PersistenceManagedTypes; SearchStrategy: all) did not find any beans (OnBeanCondition)
+
+ JtaAutoConfiguration matched:
+ - @ConditionalOnClass found required class 'jakarta.transaction.Transaction' (OnClassCondition)
+ - @ConditionalOnBooleanProperty (spring.jta.enabled=true) matched (OnPropertyCondition)
+
+ JvmMetricsAutoConfiguration matched:
+ - @ConditionalOnClass found required class 'io.micrometer.core.instrument.MeterRegistry' (OnClassCondition)
+ - @ConditionalOnBean (types: io.micrometer.core.instrument.MeterRegistry; SearchStrategy: all) found bean 'simpleMeterRegistry' (OnBeanCondition)
+
+ JvmMetricsAutoConfiguration#classLoaderMetrics matched:
+ - @ConditionalOnMissingBean (types: io.micrometer.core.instrument.binder.jvm.ClassLoaderMetrics; SearchStrategy: all) did not find any beans (OnBeanCondition)
+
+ JvmMetricsAutoConfiguration#jvmCompilationMetrics matched:
+ - @ConditionalOnMissingBean (types: io.micrometer.core.instrument.binder.jvm.JvmCompilationMetrics; SearchStrategy: all) did not find any beans (OnBeanCondition)
+
+ JvmMetricsAutoConfiguration#jvmGcMetrics matched:
+ - @ConditionalOnMissingBean (types: io.micrometer.core.instrument.binder.jvm.JvmGcMetrics; SearchStrategy: all) did not find any beans (OnBeanCondition)
+
+ JvmMetricsAutoConfiguration#jvmHeapPressureMetrics matched:
+ - @ConditionalOnMissingBean (types: io.micrometer.core.instrument.binder.jvm.JvmHeapPressureMetrics; SearchStrategy: all) did not find any beans (OnBeanCondition)
+
+ JvmMetricsAutoConfiguration#jvmInfoMetrics matched:
+ - @ConditionalOnMissingBean (types: io.micrometer.core.instrument.binder.jvm.JvmInfoMetrics; SearchStrategy: all) did not find any beans (OnBeanCondition)
+
+ JvmMetricsAutoConfiguration#jvmMemoryMetrics matched:
+ - @ConditionalOnMissingBean (types: io.micrometer.core.instrument.binder.jvm.JvmMemoryMetrics; SearchStrategy: all) did not find any beans (OnBeanCondition)
+
+ JvmMetricsAutoConfiguration#jvmThreadMetrics matched:
+ - @ConditionalOnMissingBean (types: io.micrometer.core.instrument.binder.jvm.JvmThreadMetrics; SearchStrategy: all) did not find any beans (OnBeanCondition)
+
+ LifecycleAutoConfiguration#defaultLifecycleProcessor matched:
+ - @ConditionalOnMissingBean (names: lifecycleProcessor; SearchStrategy: current) did not find any beans (OnBeanCondition)
+
+ LogbackMetricsAutoConfiguration matched:
+ - @ConditionalOnClass found required classes 'io.micrometer.core.instrument.MeterRegistry', 'ch.qos.logback.classic.LoggerContext', 'org.slf4j.LoggerFactory' (OnClassCondition)
+ - LogbackLoggingCondition ILoggerFactory is a Logback LoggerContext (LogbackMetricsAutoConfiguration.LogbackLoggingCondition)
+ - @ConditionalOnBean (types: io.micrometer.core.instrument.MeterRegistry; SearchStrategy: all) found bean 'simpleMeterRegistry' (OnBeanCondition)
+
+ LogbackMetricsAutoConfiguration#logbackMetrics matched:
+ - @ConditionalOnMissingBean (types: io.micrometer.core.instrument.binder.logging.LogbackMetrics; SearchStrategy: all) did not find any beans (OnBeanCondition)
+
+ ManagementContextAutoConfiguration.SameManagementContextConfiguration matched:
+ - Management Port actual port type (SAME) matched required type (OnManagementPortCondition)
+
+ MetricsAutoConfiguration matched:
+ - @ConditionalOnClass found required class 'io.micrometer.core.annotation.Timed' (OnClassCondition)
+
+ MetricsAutoConfiguration#micrometerClock matched:
+ - @ConditionalOnMissingBean (types: io.micrometer.core.instrument.Clock; SearchStrategy: all) did not find any beans (OnBeanCondition)
+
+ MetricsEndpointAutoConfiguration matched:
+ - @ConditionalOnClass found required class 'io.micrometer.core.annotation.Timed' (OnClassCondition)
+ - @ConditionalOnAvailableEndpoint marked as exposed by a 'management.endpoints.web.exposure' property (OnAvailableEndpointCondition)
+
+ MetricsEndpointAutoConfiguration#metricsEndpoint matched:
+ - @ConditionalOnBean (types: io.micrometer.core.instrument.MeterRegistry; SearchStrategy: all) found bean 'simpleMeterRegistry'; @ConditionalOnMissingBean (types: org.springframework.boot.actuate.metrics.MetricsEndpoint; SearchStrategy: all) did not find any beans (OnBeanCondition)
+
+ MockMvcAutoConfiguration matched:
+ - found 'session' scope (OnWebApplicationCondition)
+
+ MockMvcConfiguration#mockMvc matched:
+ - @ConditionalOnMissingBean (types: org.springframework.test.web.servlet.MockMvc; SearchStrategy: all) did not find any beans (OnBeanCondition)
+
+ MockMvcConfiguration#mockMvcBuilder matched:
+ - @ConditionalOnMissingBean (types: org.springframework.test.web.servlet.MockMvcBuilder; SearchStrategy: all) did not find any beans (OnBeanCondition)
+
+ MockMvcTesterConfiguration matched:
+ - @ConditionalOnClass found required class 'org.assertj.core.api.Assert' (OnClassCondition)
+
+ MockMvcTesterConfiguration#mockMvcTester matched:
+ - @ConditionalOnMissingBean (types: org.springframework.test.web.servlet.assertj.MockMvcTester; SearchStrategy: all) did not find any beans (OnBeanCondition)
+
+ MultipartAutoConfiguration matched:
+ - @ConditionalOnClass found required classes 'jakarta.servlet.Servlet', 'org.springframework.web.multipart.support.StandardServletMultipartResolver', 'jakarta.servlet.MultipartConfigElement' (OnClassCondition)
+ - found 'session' scope (OnWebApplicationCondition)
+ - @ConditionalOnBooleanProperty (spring.servlet.multipart.enabled=true) matched (OnPropertyCondition)
+
+ MultipartAutoConfiguration#multipartConfigElement matched:
+ - @ConditionalOnMissingBean (types: jakarta.servlet.MultipartConfigElement; SearchStrategy: all) did not find any beans (OnBeanCondition)
+
+ MultipartAutoConfiguration#multipartResolver matched:
+ - @ConditionalOnMissingBean (types: org.springframework.web.multipart.MultipartResolver; SearchStrategy: all) did not find any beans (OnBeanCondition)
+
+ NamedParameterJdbcTemplateConfiguration matched:
+ - @ConditionalOnSingleCandidate (types: org.springframework.jdbc.core.JdbcTemplate; SearchStrategy: all) found a single bean 'jdbcTemplate'; @ConditionalOnMissingBean (types: org.springframework.jdbc.core.namedparam.NamedParameterJdbcOperations; SearchStrategy: all) did not find any beans (OnBeanCondition)
+
+ NoOpCacheConfiguration matched:
+ - Cache org.springframework.boot.autoconfigure.cache.NoOpCacheConfiguration automatic cache type (CacheCondition)
+
+ ObservationAutoConfiguration matched:
+ - @ConditionalOnClass found required class 'io.micrometer.observation.ObservationRegistry' (OnClassCondition)
+
+ ObservationAutoConfiguration#observationRegistry matched:
+ - @ConditionalOnMissingBean (types: io.micrometer.observation.ObservationRegistry; SearchStrategy: all) did not find any beans (OnBeanCondition)
+
+ ObservationAutoConfiguration.MeterObservationHandlerConfiguration matched:
+ - @ConditionalOnBean (types: io.micrometer.core.instrument.MeterRegistry; SearchStrategy: all) found bean 'simpleMeterRegistry'; @ConditionalOnMissingBean (types: io.micrometer.core.instrument.observation.MeterObservationHandler; SearchStrategy: all) did not find any beans (OnBeanCondition)
+
+ ObservationAutoConfiguration.MeterObservationHandlerConfiguration.OnlyMetricsMeterObservationHandlerConfiguration matched:
+ - @ConditionalOnMissingBean (types: ?; SearchStrategy: all) did not find any beans (OnBeanCondition)
+
+ ObservationAutoConfiguration.OnlyMetricsConfiguration matched:
+ - @ConditionalOnClass found required class 'io.micrometer.core.instrument.MeterRegistry'; @ConditionalOnMissingClass did not find unwanted class 'io.micrometer.tracing.Tracer' (OnClassCondition)
+
+ PersistenceExceptionTranslationAutoConfiguration matched:
+ - @ConditionalOnClass found required class 'org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor' (OnClassCondition)
+
+ PersistenceExceptionTranslationAutoConfiguration#persistenceExceptionTranslationPostProcessor matched:
+ - @ConditionalOnBooleanProperty (spring.dao.exceptiontranslation.enabled=true) matched (OnPropertyCondition)
+ - @ConditionalOnMissingBean (types: org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor; SearchStrategy: all) did not find any beans (OnBeanCondition)
+
+ PropertyPlaceholderAutoConfiguration#propertySourcesPlaceholderConfigurer matched:
+ - @ConditionalOnMissingBean (types: org.springframework.context.support.PropertySourcesPlaceholderConfigurer; SearchStrategy: current) did not find any beans (OnBeanCondition)
+
+ RepositoryMetricsAutoConfiguration matched:
+ - @ConditionalOnClass found required class 'org.springframework.data.repository.Repository' (OnClassCondition)
+ - @ConditionalOnBean (types: io.micrometer.core.instrument.MeterRegistry; SearchStrategy: all) found bean 'simpleMeterRegistry' (OnBeanCondition)
+
+ RepositoryMetricsAutoConfiguration#metricsRepositoryMethodInvocationListener matched:
+ - @ConditionalOnMissingBean (types: org.springframework.boot.actuate.metrics.data.MetricsRepositoryMethodInvocationListener; SearchStrategy: all) did not find any beans (OnBeanCondition)
+
+ RepositoryMetricsAutoConfiguration#repositoryTagsProvider matched:
+ - @ConditionalOnMissingBean (types: org.springframework.boot.actuate.metrics.data.RepositoryTagsProvider; SearchStrategy: all) did not find any beans (OnBeanCondition)
+
+ RestClientAutoConfiguration matched:
+ - @ConditionalOnClass found required class 'org.springframework.web.client.RestClient' (OnClassCondition)
+ - AnyNestedCondition 1 matched 1 did not; NestedCondition on NotReactiveWebApplicationOrVirtualThreadsExecutorEnabledCondition.VirtualThreadsExecutorEnabled found non-matching nested conditions @ConditionalOnThreading did not find VIRTUAL; NestedCondition on NotReactiveWebApplicationOrVirtualThreadsExecutorEnabledCondition.NotReactiveWebApplication NoneNestedConditions 0 matched 1 did not; NestedCondition on NotReactiveWebApplicationCondition.ReactiveWebApplication did not find reactive web application classes (NotReactiveWebApplicationOrVirtualThreadsExecutorEnabledCondition)
+
+ RestClientAutoConfiguration#httpMessageConvertersRestClientCustomizer matched:
+ - @ConditionalOnMissingBean (types: org.springframework.boot.autoconfigure.web.client.HttpMessageConvertersRestClientCustomizer; SearchStrategy: all) did not find any beans (OnBeanCondition)
+
+ RestClientAutoConfiguration#restClientBuilder matched:
+ - @ConditionalOnMissingBean (types: org.springframework.web.client.RestClient$Builder; SearchStrategy: all) did not find any beans (OnBeanCondition)
+
+ RestClientAutoConfiguration#restClientBuilderConfigurer matched:
+ - @ConditionalOnMissingBean (types: org.springframework.boot.autoconfigure.web.client.RestClientBuilderConfigurer; SearchStrategy: all) did not find any beans (OnBeanCondition)
+
+ RestClientAutoConfiguration#restClientSsl matched:
+ - @ConditionalOnBean (types: org.springframework.boot.ssl.SslBundles; SearchStrategy: all) found bean 'sslBundleRegistry'; @ConditionalOnMissingBean (types: org.springframework.boot.autoconfigure.web.client.RestClientSsl; SearchStrategy: all) did not find any beans (OnBeanCondition)
+
+ RestClientObservationConfiguration matched:
+ - @ConditionalOnClass found required class 'org.springframework.web.client.RestClient' (OnClassCondition)
+ - @ConditionalOnBean (types: org.springframework.web.client.RestClient$Builder; SearchStrategy: all) found bean 'restClientBuilder' (OnBeanCondition)
+
+ RestTemplateAutoConfiguration matched:
+ - @ConditionalOnClass found required class 'org.springframework.web.client.RestTemplate' (OnClassCondition)
+ - NoneNestedConditions 0 matched 1 did not; NestedCondition on NotReactiveWebApplicationCondition.ReactiveWebApplication did not find reactive web application classes (NotReactiveWebApplicationCondition)
+
+ RestTemplateAutoConfiguration#restTemplateBuilder matched:
+ - @ConditionalOnMissingBean (types: org.springframework.boot.web.client.RestTemplateBuilder; SearchStrategy: all) did not find any beans (OnBeanCondition)
+
+ RestTemplateObservationConfiguration matched:
+ - @ConditionalOnClass found required class 'org.springframework.web.client.RestTemplate' (OnClassCondition)
+ - @ConditionalOnBean (types: org.springframework.boot.web.client.RestTemplateBuilder; SearchStrategy: all) found bean 'restTemplateBuilder' (OnBeanCondition)
+
+ ScheduledTasksObservabilityAutoConfiguration matched:
+ - @ConditionalOnClass found required class 'org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler' (OnClassCondition)
+ - @ConditionalOnBean (types: io.micrometer.observation.ObservationRegistry; SearchStrategy: all) found bean 'observationRegistry' (OnBeanCondition)
+
+ ServletEndpointManagementContextConfiguration matched:
+ - found 'session' scope (OnWebApplicationCondition)
+
+ ServletEndpointManagementContextConfiguration.WebMvcServletEndpointManagementContextConfiguration matched:
+ - @ConditionalOnClass found required class 'org.springframework.web.servlet.DispatcherServlet' (OnClassCondition)
+
+ ServletManagementContextAutoConfiguration matched:
+ - @ConditionalOnClass found required class 'jakarta.servlet.Servlet' (OnClassCondition)
+ - found 'session' scope (OnWebApplicationCondition)
+
+ ServletWebServerFactoryAutoConfiguration matched:
+ - @ConditionalOnClass found required class 'jakarta.servlet.ServletRequest' (OnClassCondition)
+ - found 'session' scope (OnWebApplicationCondition)
+
+ ServletWebServerFactoryAutoConfiguration#tomcatServletWebServerFactoryCustomizer matched:
+ - @ConditionalOnClass found required class 'org.apache.catalina.startup.Tomcat' (OnClassCondition)
+
+ ServletWebServerFactoryConfiguration.EmbeddedTomcat matched:
+ - @ConditionalOnClass found required classes 'jakarta.servlet.Servlet', 'org.apache.catalina.startup.Tomcat', 'org.apache.coyote.UpgradeProtocol' (OnClassCondition)
+ - @ConditionalOnMissingBean (types: org.springframework.boot.web.servlet.server.ServletWebServerFactory; SearchStrategy: current) did not find any beans (OnBeanCondition)
+
+ SimpleCacheConfiguration matched:
+ - Cache org.springframework.boot.autoconfigure.cache.SimpleCacheConfiguration automatic cache type (CacheCondition)
+
+ SimpleMetricsExportAutoConfiguration matched:
+ - @ConditionalOnEnabledMetricsExport management.simple.metrics.export.enabled is true (OnMetricsExportEnabledCondition)
+ - @ConditionalOnBean (types: io.micrometer.core.instrument.Clock; SearchStrategy: all) found bean 'micrometerClock'; @ConditionalOnMissingBean (types: io.micrometer.core.instrument.MeterRegistry; SearchStrategy: all) did not find any beans (OnBeanCondition)
+
+ SimpleMetricsExportAutoConfiguration#simpleConfig matched:
+ - @ConditionalOnMissingBean (types: io.micrometer.core.instrument.simple.SimpleConfig; SearchStrategy: all) did not find any beans (OnBeanCondition)
+
+ SpringDataWebAutoConfiguration matched:
+ - @ConditionalOnClass found required classes 'org.springframework.data.web.PageableHandlerMethodArgumentResolver', 'org.springframework.web.servlet.config.annotation.WebMvcConfigurer' (OnClassCondition)
+ - found 'session' scope (OnWebApplicationCondition)
+ - @ConditionalOnMissingBean (types: org.springframework.data.web.PageableHandlerMethodArgumentResolver; SearchStrategy: all) did not find any beans (OnBeanCondition)
+
+ SpringDataWebAutoConfiguration#pageableCustomizer matched:
+ - @ConditionalOnMissingBean (types: org.springframework.data.web.config.PageableHandlerMethodArgumentResolverCustomizer; SearchStrategy: all) did not find any beans (OnBeanCondition)
+
+ SpringDataWebAutoConfiguration#sortCustomizer matched:
+ - @ConditionalOnMissingBean (types: org.springframework.data.web.config.SortHandlerMethodArgumentResolverCustomizer; SearchStrategy: all) did not find any beans (OnBeanCondition)
+
+ SpringDataWebAutoConfiguration#springDataWebSettings matched:
+ - @ConditionalOnMissingBean (types: org.springframework.data.web.config.SpringDataWebSettings; SearchStrategy: all) did not find any beans (OnBeanCondition)
+
+ SqlInitializationAutoConfiguration matched:
+ - @ConditionalOnBooleanProperty (spring.sql.init.enabled=true) matched (OnPropertyCondition)
+ - NoneNestedConditions 0 matched 1 did not; NestedCondition on SqlInitializationAutoConfiguration.SqlInitializationModeCondition.ModeIsNever @ConditionalOnProperty (spring.sql.init.mode=never) did not find property 'spring.sql.init.mode' (SqlInitializationAutoConfiguration.SqlInitializationModeCondition)
+
+ SslAutoConfiguration#sslBundleRegistry matched:
+ - @ConditionalOnMissingBean (types: org.springframework.boot.ssl.SslBundleRegistry,org.springframework.boot.ssl.SslBundles; SearchStrategy: all) did not find any beans (OnBeanCondition)
+
+ SslHealthContributorAutoConfiguration matched:
+ - @ConditionalOnEnabledHealthIndicator management.health.defaults.enabled is considered true (OnEnabledHealthIndicatorCondition)
+
+ SslHealthContributorAutoConfiguration#sslHealthIndicator matched:
+ - @ConditionalOnMissingBean (names: sslHealthIndicator; SearchStrategy: all) did not find any beans (OnBeanCondition)
+
+ SslHealthContributorAutoConfiguration#sslInfo matched:
+ - @ConditionalOnMissingBean (types: org.springframework.boot.info.SslInfo; SearchStrategy: all) did not find any beans (OnBeanCondition)
+
+ SslObservabilityAutoConfiguration matched:
+ - @ConditionalOnClass found required class 'io.micrometer.core.instrument.MeterRegistry' (OnClassCondition)
+ - @ConditionalOnBean (types: io.micrometer.core.instrument.MeterRegistry,org.springframework.boot.ssl.SslBundles; SearchStrategy: all) found beans 'sslBundleRegistry', 'simpleMeterRegistry' (OnBeanCondition)
+
+ StartupTimeMetricsListenerAutoConfiguration matched:
+ - @ConditionalOnClass found required class 'io.micrometer.core.instrument.MeterRegistry' (OnClassCondition)
+ - @ConditionalOnBean (types: io.micrometer.core.instrument.MeterRegistry; SearchStrategy: all) found bean 'simpleMeterRegistry' (OnBeanCondition)
+
+ StartupTimeMetricsListenerAutoConfiguration#startupTimeMetrics matched:
+ - @ConditionalOnMissingBean (types: org.springframework.boot.actuate.metrics.startup.StartupTimeMetricsListener; SearchStrategy: all) did not find any beans (OnBeanCondition)
+
+ SystemMetricsAutoConfiguration matched:
+ - @ConditionalOnClass found required class 'io.micrometer.core.instrument.MeterRegistry' (OnClassCondition)
+ - @ConditionalOnBean (types: io.micrometer.core.instrument.MeterRegistry; SearchStrategy: all) found bean 'simpleMeterRegistry' (OnBeanCondition)
+
+ SystemMetricsAutoConfiguration#diskSpaceMetrics matched:
+ - @ConditionalOnMissingBean (types: org.springframework.boot.actuate.metrics.system.DiskSpaceMetricsBinder; SearchStrategy: all) did not find any beans (OnBeanCondition)
+
+ SystemMetricsAutoConfiguration#fileDescriptorMetrics matched:
+ - @ConditionalOnMissingBean (types: io.micrometer.core.instrument.binder.system.FileDescriptorMetrics; SearchStrategy: all) did not find any beans (OnBeanCondition)
+
+ SystemMetricsAutoConfiguration#processorMetrics matched:
+ - @ConditionalOnMissingBean (types: io.micrometer.core.instrument.binder.system.ProcessorMetrics; SearchStrategy: all) did not find any beans (OnBeanCondition)
+
+ SystemMetricsAutoConfiguration#uptimeMetrics matched:
+ - @ConditionalOnMissingBean (types: io.micrometer.core.instrument.binder.system.UptimeMetrics; SearchStrategy: all) did not find any beans (OnBeanCondition)
+
+ TaskExecutionAutoConfiguration matched:
+ - @ConditionalOnClass found required class 'org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor' (OnClassCondition)
+
+ TaskExecutorConfigurations.AsyncConfigurerConfiguration matched:
+ - @ConditionalOnMissingBean (types: org.springframework.scheduling.annotation.AsyncConfigurer; SearchStrategy: all) did not find any beans (OnBeanCondition)
+
+ TaskExecutorConfigurations.AsyncConfigurerConfiguration#applicationTaskExecutorAsyncConfigurer matched:
+ - @ConditionalOnMissingBean (types: org.springframework.scheduling.annotation.AsyncConfigurer; SearchStrategy: all) did not find any beans (OnBeanCondition)
+
+ TaskExecutorConfigurations.SimpleAsyncTaskExecutorBuilderConfiguration#simpleAsyncTaskExecutorBuilder matched:
+ - @ConditionalOnMissingBean (types: org.springframework.boot.task.SimpleAsyncTaskExecutorBuilder; SearchStrategy: all) did not find any beans (OnBeanCondition)
+ - @ConditionalOnThreading found PLATFORM (OnThreadingCondition)
+
+ TaskExecutorConfigurations.TaskExecutorConfiguration matched:
+ - AnyNestedCondition 1 matched 1 did not; NestedCondition on TaskExecutorConfigurations.OnExecutorCondition.ModelCondition @ConditionalOnProperty (spring.task.execution.mode=force) did not find property 'spring.task.execution.mode'; NestedCondition on TaskExecutorConfigurations.OnExecutorCondition.ExecutorBeanCondition @ConditionalOnMissingBean (types: java.util.concurrent.Executor; SearchStrategy: all) did not find any beans (TaskExecutorConfigurations.OnExecutorCondition)
+
+ TaskExecutorConfigurations.TaskExecutorConfiguration#applicationTaskExecutor matched:
+ - @ConditionalOnThreading found PLATFORM (OnThreadingCondition)
+
+ TaskExecutorConfigurations.ThreadPoolTaskExecutorBuilderConfiguration#threadPoolTaskExecutorBuilder matched:
+ - @ConditionalOnMissingBean (types: org.springframework.boot.task.ThreadPoolTaskExecutorBuilder; SearchStrategy: all) did not find any beans (OnBeanCondition)
+
+ TaskExecutorMetricsAutoConfiguration matched:
+ - @ConditionalOnClass found required class 'io.micrometer.core.instrument.binder.jvm.ExecutorServiceMetrics' (OnClassCondition)
+ - @ConditionalOnBean (types: java.util.concurrent.Executor,io.micrometer.core.instrument.MeterRegistry; SearchStrategy: all) found beans 'applicationTaskExecutor', 'simpleMeterRegistry' (OnBeanCondition)
+
+ TaskSchedulingAutoConfiguration matched:
+ - @ConditionalOnClass found required class 'org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler' (OnClassCondition)
+
+ TaskSchedulingConfigurations.SimpleAsyncTaskSchedulerBuilderConfiguration#simpleAsyncTaskSchedulerBuilder matched:
+ - @ConditionalOnMissingBean (types: org.springframework.boot.task.SimpleAsyncTaskSchedulerBuilder; SearchStrategy: all) did not find any beans (OnBeanCondition)
+ - @ConditionalOnThreading found PLATFORM (OnThreadingCondition)
+
+ TaskSchedulingConfigurations.ThreadPoolTaskSchedulerBuilderConfiguration#threadPoolTaskSchedulerBuilder matched:
+ - @ConditionalOnMissingBean (types: org.springframework.boot.task.ThreadPoolTaskSchedulerBuilder; SearchStrategy: all) did not find any beans (OnBeanCondition)
+
+ TomcatMetricsAutoConfiguration matched:
+ - @ConditionalOnClass found required classes 'io.micrometer.core.instrument.binder.tomcat.TomcatMetrics', 'org.apache.catalina.Manager' (OnClassCondition)
+ - @ConditionalOnWebApplication (required) found 'session' scope (OnWebApplicationCondition)
+
+ TomcatMetricsAutoConfiguration#tomcatMetricsBinder matched:
+ - @ConditionalOnBean (types: io.micrometer.core.instrument.MeterRegistry; SearchStrategy: all) found bean 'simpleMeterRegistry'; @ConditionalOnMissingBean (types: io.micrometer.core.instrument.binder.tomcat.TomcatMetrics,org.springframework.boot.actuate.metrics.web.tomcat.TomcatMetricsBinder; SearchStrategy: all) did not find any beans (OnBeanCondition)
+
+ TransactionAutoConfiguration matched:
+ - @ConditionalOnClass found required class 'org.springframework.transaction.PlatformTransactionManager' (OnClassCondition)
+
+ TransactionAutoConfiguration.TransactionTemplateConfiguration matched:
+ - @ConditionalOnSingleCandidate (types: org.springframework.transaction.PlatformTransactionManager; SearchStrategy: all) found a single bean 'transactionManager' (OnBeanCondition)
+
+ TransactionAutoConfiguration.TransactionTemplateConfiguration#transactionTemplate matched:
+ - @ConditionalOnMissingBean (types: org.springframework.transaction.support.TransactionOperations; SearchStrategy: all) did not find any beans (OnBeanCondition)
+
+ TransactionManagerCustomizationAutoConfiguration matched:
+ - @ConditionalOnClass found required class 'org.springframework.transaction.PlatformTransactionManager' (OnClassCondition)
+
+ TransactionManagerCustomizationAutoConfiguration#platformTransactionManagerCustomizers matched:
+ - @ConditionalOnMissingBean (types: org.springframework.boot.autoconfigure.transaction.TransactionManagerCustomizers; SearchStrategy: all) did not find any beans (OnBeanCondition)
+
+ ValidationAutoConfiguration matched:
+ - @ConditionalOnClass found required class 'jakarta.validation.executable.ExecutableValidator' (OnClassCondition)
+ - @ConditionalOnResource found location classpath:META-INF/services/jakarta.validation.spi.ValidationProvider (OnResourceCondition)
+
+ ValidationAutoConfiguration#defaultValidator matched:
+ - @ConditionalOnMissingBean (types: jakarta.validation.Validator; SearchStrategy: all) did not find any beans (OnBeanCondition)
+
+ ValidationAutoConfiguration#methodValidationPostProcessor matched:
+ - @ConditionalOnMissingBean (types: org.springframework.validation.beanvalidation.MethodValidationPostProcessor; SearchStrategy: current) did not find any beans (OnBeanCondition)
+
+ WebEndpointAutoConfiguration matched:
+ - @ConditionalOnWebApplication (required) found 'session' scope (OnWebApplicationCondition)
+
+ WebEndpointAutoConfiguration#controllerEndpointDiscoverer matched:
+ - @ConditionalOnMissingBean (types: org.springframework.boot.actuate.endpoint.web.annotation.ControllerEndpointsSupplier; SearchStrategy: all) did not find any beans (OnBeanCondition)
+
+ WebEndpointAutoConfiguration#endpointMediaTypes matched:
+ - @ConditionalOnMissingBean (types: org.springframework.boot.actuate.endpoint.web.EndpointMediaTypes; SearchStrategy: all) did not find any beans (OnBeanCondition)
+
+ WebEndpointAutoConfiguration#pathMappedEndpoints matched:
+ - @ConditionalOnMissingBean (types: org.springframework.boot.actuate.endpoint.web.PathMappedEndpoints; SearchStrategy: all) did not find any beans (OnBeanCondition)
+
+ WebEndpointAutoConfiguration#webEndpointDiscoverer matched:
+ - @ConditionalOnMissingBean (types: org.springframework.boot.actuate.endpoint.web.WebEndpointsSupplier; SearchStrategy: all) did not find any beans (OnBeanCondition)
+
+ WebEndpointAutoConfiguration.WebEndpointServletConfiguration matched:
+ - found 'session' scope (OnWebApplicationCondition)
+
+ WebEndpointAutoConfiguration.WebEndpointServletConfiguration#servletEndpointDiscoverer matched:
+ - @ConditionalOnMissingBean (types: org.springframework.boot.actuate.endpoint.web.annotation.ServletEndpointsSupplier; SearchStrategy: all) did not find any beans (OnBeanCondition)
+
+ WebMvcAutoConfiguration matched:
+ - @ConditionalOnClass found required classes 'jakarta.servlet.Servlet', 'org.springframework.web.servlet.DispatcherServlet', 'org.springframework.web.servlet.config.annotation.WebMvcConfigurer' (OnClassCondition)
+ - found 'session' scope (OnWebApplicationCondition)
+ - @ConditionalOnMissingBean (types: org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport; SearchStrategy: all) did not find any beans (OnBeanCondition)
+
+ WebMvcAutoConfiguration#formContentFilter matched:
+ - @ConditionalOnBooleanProperty (spring.mvc.formcontent.filter.enabled=true) matched (OnPropertyCondition)
+ - @ConditionalOnMissingBean (types: org.springframework.web.filter.FormContentFilter; SearchStrategy: all) did not find any beans (OnBeanCondition)
+
+ WebMvcAutoConfiguration.EnableWebMvcConfiguration#flashMapManager matched:
+ - @ConditionalOnMissingBean (names: flashMapManager; SearchStrategy: all) did not find any beans (OnBeanCondition)
+
+ WebMvcAutoConfiguration.EnableWebMvcConfiguration#localeResolver matched:
+ - @ConditionalOnMissingBean (names: localeResolver; SearchStrategy: all) did not find any beans (OnBeanCondition)
+
+ WebMvcAutoConfiguration.EnableWebMvcConfiguration#themeResolver matched:
+ - @ConditionalOnMissingBean (names: themeResolver; SearchStrategy: all) did not find any beans (OnBeanCondition)
+
+ WebMvcAutoConfiguration.EnableWebMvcConfiguration#viewNameTranslator matched:
+ - @ConditionalOnMissingBean (names: viewNameTranslator; SearchStrategy: all) did not find any beans (OnBeanCondition)
+
+ WebMvcAutoConfiguration.WebMvcAutoConfigurationAdapter#defaultViewResolver matched:
+ - @ConditionalOnMissingBean (types: org.springframework.web.servlet.view.InternalResourceViewResolver; SearchStrategy: all) did not find any beans (OnBeanCondition)
+
+ WebMvcAutoConfiguration.WebMvcAutoConfigurationAdapter#requestContextFilter matched:
+ - @ConditionalOnMissingBean (types: org.springframework.web.context.request.RequestContextListener,org.springframework.web.filter.RequestContextFilter; SearchStrategy: all) did not find any beans (OnBeanCondition)
+
+ WebMvcAutoConfiguration.WebMvcAutoConfigurationAdapter#viewResolver matched:
+ - @ConditionalOnBean (types: org.springframework.web.servlet.ViewResolver; SearchStrategy: all) found beans 'defaultViewResolver', 'beanNameViewResolver', 'mvcViewResolver'; @ConditionalOnMissingBean (names: viewResolver types: org.springframework.web.servlet.view.ContentNegotiatingViewResolver; SearchStrategy: all) did not find any beans (OnBeanCondition)
+
+ WebMvcEndpointManagementContextConfiguration matched:
+ - @ConditionalOnClass found required class 'org.springframework.web.servlet.DispatcherServlet' (OnClassCondition)
+ - found 'session' scope (OnWebApplicationCondition)
+ - @ConditionalOnBean (types: org.springframework.web.servlet.DispatcherServlet,org.springframework.boot.actuate.endpoint.web.WebEndpointsSupplier; SearchStrategy: all) found beans 'webEndpointDiscoverer', 'dispatcherServlet' (OnBeanCondition)
+
+ WebMvcEndpointManagementContextConfiguration#controllerEndpointHandlerMapping matched:
+ - @ConditionalOnMissingBean (types: org.springframework.boot.actuate.endpoint.web.servlet.ControllerEndpointHandlerMapping; SearchStrategy: all) did not find any beans (OnBeanCondition)
+
+ WebMvcEndpointManagementContextConfiguration#endpointObjectMapperWebMvcConfigurer matched:
+ - @ConditionalOnBean (types: org.springframework.boot.actuate.endpoint.jackson.EndpointObjectMapper; SearchStrategy: all) found bean 'endpointObjectMapper' (OnBeanCondition)
+
+ WebMvcEndpointManagementContextConfiguration#webEndpointServletHandlerMapping matched:
+ - @ConditionalOnMissingBean (types: org.springframework.boot.actuate.endpoint.web.servlet.WebMvcEndpointHandlerMapping; SearchStrategy: all) did not find any beans (OnBeanCondition)
+
+ WebMvcObservationAutoConfiguration matched:
+ - @ConditionalOnClass found required classes 'org.springframework.web.servlet.DispatcherServlet', 'io.micrometer.observation.Observation' (OnClassCondition)
+ - found 'session' scope (OnWebApplicationCondition)
+ - @ConditionalOnBean (types: io.micrometer.observation.ObservationRegistry; SearchStrategy: all) found bean 'observationRegistry' (OnBeanCondition)
+
+ WebMvcObservationAutoConfiguration#webMvcObservationFilter matched:
+ - @ConditionalOnMissingBean (types: org.springframework.web.filter.ServerHttpObservationFilter; SearchStrategy: all) did not find any beans (OnBeanCondition)
+
+ WebMvcObservationAutoConfiguration.MeterFilterConfiguration matched:
+ - @ConditionalOnClass found required class 'io.micrometer.core.instrument.MeterRegistry' (OnClassCondition)
+ - @ConditionalOnBean (types: io.micrometer.core.instrument.MeterRegistry; SearchStrategy: all) found bean 'simpleMeterRegistry' (OnBeanCondition)
+
+ WebSocketServletAutoConfiguration matched:
+ - @ConditionalOnClass found required classes 'jakarta.servlet.Servlet', 'jakarta.websocket.server.ServerContainer' (OnClassCondition)
+ - found 'session' scope (OnWebApplicationCondition)
+
+ WebSocketServletAutoConfiguration.TomcatWebSocketConfiguration matched:
+ - @ConditionalOnClass found required classes 'org.apache.catalina.startup.Tomcat', 'org.apache.tomcat.websocket.server.WsSci' (OnClassCondition)
+
+ WebSocketServletAutoConfiguration.TomcatWebSocketConfiguration#websocketServletWebServerCustomizer matched:
+ - @ConditionalOnMissingBean (names: websocketServletWebServerCustomizer; SearchStrategy: all) did not find any beans (OnBeanCondition)
+
+
+Negative matches:
+-----------------
+
+ ActiveMQAutoConfiguration:
+ Did not match:
+ - @ConditionalOnClass did not find required class 'jakarta.jms.ConnectionFactory' (OnClassCondition)
+
+ AopAutoConfiguration.AspectJAutoProxyingConfiguration.JdkDynamicAutoProxyConfiguration:
+ Did not match:
+ - @ConditionalOnBooleanProperty (spring.aop.proxy-target-class=false) did not find property 'spring.aop.proxy-target-class' (OnPropertyCondition)
+
+ AopAutoConfiguration.ClassProxyingConfiguration:
+ Did not match:
+ - @ConditionalOnMissingClass found unwanted class 'org.aspectj.weaver.Advice' (OnClassCondition)
+
+ AppOpticsMetricsExportAutoConfiguration:
+ Did not match:
+ - @ConditionalOnClass did not find required class 'io.micrometer.appoptics.AppOpticsMeterRegistry' (OnClassCondition)
+
+ ArtemisAutoConfiguration:
+ Did not match:
+ - @ConditionalOnClass did not find required class 'jakarta.jms.ConnectionFactory' (OnClassCondition)
+
+ AtlasMetricsExportAutoConfiguration:
+ Did not match:
+ - @ConditionalOnClass did not find required class 'io.micrometer.atlas.AtlasMeterRegistry' (OnClassCondition)
+
+ AuditAutoConfiguration:
+ Did not match:
+ - @ConditionalOnBean (types: org.springframework.boot.actuate.audit.AuditEventRepository; SearchStrategy: all) did not find any beans of type org.springframework.boot.actuate.audit.AuditEventRepository (OnBeanCondition)
+ Matched:
+ - @ConditionalOnBooleanProperty (management.auditevents.enabled=true) matched (OnPropertyCondition)
+
+ AuditEventsEndpointAutoConfiguration:
+ Did not match:
+ - @ConditionalOnAvailableEndpoint not exposed (OnAvailableEndpointCondition)
+
+ AvailabilityHealthContributorAutoConfiguration#livenessStateHealthIndicator:
+ Did not match:
+ - @ConditionalOnBooleanProperty (management.health.livenessstate.enabled=true) did not find property 'management.health.livenessstate.enabled' (OnPropertyCondition)
+
+ AvailabilityHealthContributorAutoConfiguration#readinessStateHealthIndicator:
+ Did not match:
+ - @ConditionalOnBooleanProperty (management.health.readinessstate.enabled=true) did not find property 'management.health.readinessstate.enabled' (OnPropertyCondition)
+
+ AvailabilityProbesAutoConfiguration:
+ Did not match:
+ - Probes availability not running on a supported cloud platform (AvailabilityProbesAutoConfiguration.ProbesCondition)
+
+ BatchAutoConfiguration:
+ Did not match:
+ - @ConditionalOnClass did not find required class 'org.springframework.batch.core.launch.JobLauncher' (OnClassCondition)
+
+ BatchObservationAutoConfiguration:
+ Did not match:
+ - @ConditionalOnClass did not find required class 'org.springframework.batch.core.configuration.annotation.BatchObservabilityBeanPostProcessor' (OnClassCondition)
+
+ BeansEndpointAutoConfiguration:
+ Did not match:
+ - @ConditionalOnAvailableEndpoint not exposed (OnAvailableEndpointCondition)
+
+ BraveAutoConfiguration:
+ Did not match:
+ - @ConditionalOnClass did not find required class 'brave.Tracer' (OnClassCondition)
+
+ Cache2kCacheConfiguration:
+ Did not match:
+ - @ConditionalOnClass did not find required class 'org.cache2k.Cache2kBuilder' (OnClassCondition)
+
+ CacheAutoConfiguration:
+ Did not match:
+ - @ConditionalOnBean (types: org.springframework.cache.interceptor.CacheAspectSupport; SearchStrategy: all) did not find any beans of type org.springframework.cache.interceptor.CacheAspectSupport (OnBeanCondition)
+ Matched:
+ - @ConditionalOnClass found required class 'org.springframework.cache.CacheManager' (OnClassCondition)
+
+ CacheAutoConfiguration.CacheManagerEntityManagerFactoryDependsOnPostProcessor:
+ Did not match:
+ - Ancestor org.springframework.boot.autoconfigure.cache.CacheAutoConfiguration did not match (ConditionEvaluationReport.AncestorsMatchedCondition)
+ Matched:
+ - @ConditionalOnClass found required class 'org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean' (OnClassCondition)
+
+ CacheMeterBinderProvidersConfiguration.Cache2kCacheMeterBinderProviderConfiguration:
+ Did not match:
+ - @ConditionalOnClass did not find required classes 'org.cache2k.Cache2kBuilder', 'org.cache2k.extra.spring.SpringCache2kCache', 'org.cache2k.extra.micrometer.Cache2kCacheMetrics' (OnClassCondition)
+
+ CacheMeterBinderProvidersConfiguration.CaffeineCacheMeterBinderProviderConfiguration:
+ Did not match:
+ - @ConditionalOnClass did not find required classes 'org.springframework.cache.caffeine.CaffeineCache', 'com.github.benmanes.caffeine.cache.Cache' (OnClassCondition)
+
+ CacheMeterBinderProvidersConfiguration.HazelcastCacheMeterBinderProviderConfiguration:
+ Did not match:
+ - @ConditionalOnClass did not find required classes 'com.hazelcast.spring.cache.HazelcastCache', 'com.hazelcast.core.Hazelcast' (OnClassCondition)
+
+ CacheMeterBinderProvidersConfiguration.JCacheCacheMeterBinderProviderConfiguration:
+ Did not match:
+ - @ConditionalOnClass did not find required classes 'org.springframework.cache.jcache.JCacheCache', 'javax.cache.CacheManager' (OnClassCondition)
+
+ CacheMeterBinderProvidersConfiguration.RedisCacheMeterBinderProviderConfiguration:
+ Did not match:
+ - @ConditionalOnClass did not find required class 'org.springframework.data.redis.cache.RedisCache' (OnClassCondition)
+
+ CacheMetricsAutoConfiguration:
+ Did not match:
+ - @ConditionalOnBean (types: org.springframework.cache.CacheManager; SearchStrategy: all) did not find any beans of type org.springframework.cache.CacheManager (OnBeanCondition)
+
+ CachesEndpointAutoConfiguration:
+ Did not match:
+ - @ConditionalOnAvailableEndpoint not exposed (OnAvailableEndpointCondition)
+ Matched:
+ - @ConditionalOnClass found required class 'org.springframework.cache.CacheManager' (OnClassCondition)
+
+ CaffeineCacheConfiguration:
+ Did not match:
+ - @ConditionalOnClass did not find required class 'com.github.benmanes.caffeine.cache.Caffeine' (OnClassCondition)
+
+ CassandraAutoConfiguration:
+ Did not match:
+ - @ConditionalOnClass did not find required class 'com.datastax.oss.driver.api.core.CqlSession' (OnClassCondition)
+
+ CassandraDataAutoConfiguration:
+ Did not match:
+ - @ConditionalOnClass did not find required class 'com.datastax.oss.driver.api.core.CqlSession' (OnClassCondition)
+
+ CassandraHealthContributorAutoConfiguration:
+ Did not match:
+ - @ConditionalOnClass did not find required class 'com.datastax.oss.driver.api.core.CqlSession' (OnClassCondition)
+
+ CassandraReactiveDataAutoConfiguration:
+ Did not match:
+ - @ConditionalOnClass did not find required class 'com.datastax.oss.driver.api.core.CqlSession' (OnClassCondition)
+
+ CassandraReactiveHealthContributorAutoConfiguration:
+ Did not match:
+ - @ConditionalOnClass did not find required class 'com.datastax.oss.driver.api.core.CqlSession' (OnClassCondition)
+
+ CassandraReactiveRepositoriesAutoConfiguration:
+ Did not match:
+ - @ConditionalOnClass did not find required class 'org.springframework.data.cassandra.ReactiveSession' (OnClassCondition)
+
+ CassandraRepositoriesAutoConfiguration:
+ Did not match:
+ - @ConditionalOnClass did not find required class 'com.datastax.oss.driver.api.core.CqlSession' (OnClassCondition)
+
+ org.springframework.boot.autoconfigure.http.client.reactive.ClientHttpConnectorAutoConfiguration:
+ Did not match:
+ - @ConditionalOnClass did not find required class 'reactor.core.publisher.Mono' (OnClassCondition)
+
+ org.springframework.boot.autoconfigure.web.reactive.function.client.ClientHttpConnectorAutoConfiguration:
+ Did not match:
+ - @ConditionalOnClass did not find required class 'org.springframework.web.reactive.function.client.WebClient' (OnClassCondition)
+
+ CloudFoundryActuatorAutoConfiguration:
+ Did not match:
+ - @ConditionalOnCloudPlatform did not find CLOUD_FOUNDRY (OnCloudPlatformCondition)
+ Matched:
+ - @ConditionalOnClass found required class 'org.springframework.web.servlet.DispatcherServlet' (OnClassCondition)
+ - found 'session' scope (OnWebApplicationCondition)
+ - @ConditionalOnBooleanProperty (management.cloudfoundry.enabled=true) matched (OnPropertyCondition)
+
+ CodecsAutoConfiguration:
+ Did not match:
+ - @ConditionalOnClass did not find required class 'org.springframework.web.reactive.function.client.WebClient' (OnClassCondition)
+
+ CompositeMeterRegistryConfiguration:
+ Did not match:
+ - NoneNestedConditions 1 matched 1 did not; NestedCondition on CompositeMeterRegistryConfiguration.MultipleNonPrimaryMeterRegistriesCondition.SingleInjectableMeterRegistry @ConditionalOnSingleCandidate (types: io.micrometer.core.instrument.MeterRegistry; SearchStrategy: all) found a single bean 'simpleMeterRegistry'; NestedCondition on CompositeMeterRegistryConfiguration.MultipleNonPrimaryMeterRegistriesCondition.NoMeterRegistryCondition @ConditionalOnMissingBean (types: io.micrometer.core.instrument.MeterRegistry; SearchStrategy: all) found beans of type 'io.micrometer.core.instrument.MeterRegistry' simpleMeterRegistry (CompositeMeterRegistryConfiguration.MultipleNonPrimaryMeterRegistriesCondition)
+
+ ConditionsReportEndpointAutoConfiguration:
+ Did not match:
+ - @ConditionalOnAvailableEndpoint not exposed (OnAvailableEndpointCondition)
+
+ ConfigurationPropertiesReportEndpointAutoConfiguration:
+ Did not match:
+ - @ConditionalOnAvailableEndpoint not exposed (OnAvailableEndpointCondition)
+
+ ConnectionFactoryHealthContributorAutoConfiguration:
+ Did not match:
+ - @ConditionalOnClass did not find required class 'io.r2dbc.spi.ConnectionFactory' (OnClassCondition)
+
+ ConnectionPoolMetricsAutoConfiguration:
+ Did not match:
+ - @ConditionalOnClass did not find required class 'io.r2dbc.pool.ConnectionPool' (OnClassCondition)
+
+ CouchbaseAutoConfiguration:
+ Did not match:
+ - @ConditionalOnClass did not find required class 'com.couchbase.client.java.Cluster' (OnClassCondition)
+
+ CouchbaseCacheConfiguration:
+ Did not match:
+ - @ConditionalOnClass did not find required class 'com.couchbase.client.java.Cluster' (OnClassCondition)
+
+ CouchbaseDataAutoConfiguration:
+ Did not match:
+ - @ConditionalOnClass did not find required class 'com.couchbase.client.java.Bucket' (OnClassCondition)
+
+ CouchbaseHealthContributorAutoConfiguration:
+ Did not match:
+ - @ConditionalOnClass did not find required class 'com.couchbase.client.java.Cluster' (OnClassCondition)
+
+ CouchbaseReactiveDataAutoConfiguration:
+ Did not match:
+ - @ConditionalOnClass did not find required class 'com.couchbase.client.java.Cluster' (OnClassCondition)
+
+ CouchbaseReactiveHealthContributorAutoConfiguration:
+ Did not match:
+ - @ConditionalOnClass did not find required class 'com.couchbase.client.java.Cluster' (OnClassCondition)
+
+ CouchbaseReactiveRepositoriesAutoConfiguration:
+ Did not match:
+ - @ConditionalOnClass did not find required class 'com.couchbase.client.java.Cluster' (OnClassCondition)
+
+ CouchbaseRepositoriesAutoConfiguration:
+ Did not match:
+ - @ConditionalOnClass did not find required class 'com.couchbase.client.java.Bucket' (OnClassCondition)
+
+ DataSourceAutoConfiguration.EmbeddedDatabaseConfiguration:
+ Did not match:
+ - EmbeddedDataSource found supported pooled data source (DataSourceAutoConfiguration.EmbeddedDatabaseCondition)
+
+ DataSourceCheckpointRestoreConfiguration:
+ Did not match:
+ - @ConditionalOnClass did not find required class 'org.crac.Resource' (OnClassCondition)
+
+ DataSourceConfiguration.Dbcp2:
+ Did not match:
+ - @ConditionalOnClass did not find required class 'org.apache.commons.dbcp2.BasicDataSource' (OnClassCondition)
+
+ DataSourceConfiguration.Generic:
+ Did not match:
+ - @ConditionalOnProperty (spring.datasource.type) did not find property 'spring.datasource.type' (OnPropertyCondition)
+
+ DataSourceConfiguration.OracleUcp:
+ Did not match:
+ - @ConditionalOnClass did not find required classes 'oracle.ucp.jdbc.PoolDataSourceImpl', 'oracle.jdbc.OracleConnection' (OnClassCondition)
+
+ DataSourceConfiguration.Tomcat:
+ Did not match:
+ - @ConditionalOnClass did not find required class 'org.apache.tomcat.jdbc.pool.DataSource' (OnClassCondition)
+
+ DataSourceJmxConfiguration:
+ Did not match:
+ - @ConditionalOnBooleanProperty (spring.jmx.enabled=true) found different value in property 'spring.jmx.enabled' (OnPropertyCondition)
+
+ DataSourcePoolMetadataProvidersConfiguration.CommonsDbcp2PoolDataSourceMetadataProviderConfiguration:
+ Did not match:
+ - @ConditionalOnClass did not find required class 'org.apache.commons.dbcp2.BasicDataSource' (OnClassCondition)
+
+ DataSourcePoolMetadataProvidersConfiguration.OracleUcpPoolDataSourceMetadataProviderConfiguration:
+ Did not match:
+ - @ConditionalOnClass did not find required classes 'oracle.ucp.jdbc.PoolDataSource', 'oracle.jdbc.OracleConnection' (OnClassCondition)
+
+ DataSourcePoolMetadataProvidersConfiguration.TomcatDataSourcePoolMetadataProviderConfiguration:
+ Did not match:
+ - @ConditionalOnClass did not find required class 'org.apache.tomcat.jdbc.pool.DataSource' (OnClassCondition)
+
+ DataSourceTransactionManagerAutoConfiguration.JdbcTransactionManagerConfiguration#transactionManager:
+ Did not match:
+ - @ConditionalOnMissingBean (types: org.springframework.transaction.TransactionManager; SearchStrategy: all) found beans of type 'org.springframework.transaction.TransactionManager' transactionManager (OnBeanCondition)
+
+ DatadogMetricsExportAutoConfiguration:
+ Did not match:
+ - @ConditionalOnClass did not find required class 'io.micrometer.datadog.DatadogMeterRegistry' (OnClassCondition)
+
+ DispatcherServletAutoConfiguration.DispatcherServletConfiguration#multipartResolver:
+ Did not match:
+ - @ConditionalOnBean (types: org.springframework.web.multipart.MultipartResolver; SearchStrategy: all) did not find any beans of type org.springframework.web.multipart.MultipartResolver (OnBeanCondition)
+
+ DynatraceMetricsExportAutoConfiguration:
+ Did not match:
+ - @ConditionalOnClass did not find required class 'io.micrometer.dynatrace.DynatraceMeterRegistry' (OnClassCondition)
+
+ ElasticMetricsExportAutoConfiguration:
+ Did not match:
+ - @ConditionalOnClass did not find required class 'io.micrometer.elastic.ElasticMeterRegistry' (OnClassCondition)
+
+ ElasticsearchClientAutoConfiguration:
+ Did not match:
+ - @ConditionalOnClass did not find required class 'co.elastic.clients.elasticsearch.ElasticsearchClient' (OnClassCondition)
+
+ ElasticsearchDataAutoConfiguration:
+ Did not match:
+ - @ConditionalOnClass did not find required class 'org.springframework.data.elasticsearch.client.elc.ElasticsearchTemplate' (OnClassCondition)
+
+ ElasticsearchReactiveHealthContributorAutoConfiguration:
+ Did not match:
+ - @ConditionalOnClass did not find required class 'reactor.core.publisher.Flux' (OnClassCondition)
+
+ ElasticsearchRepositoriesAutoConfiguration:
+ Did not match:
+ - @ConditionalOnClass did not find required class 'org.springframework.data.elasticsearch.repository.ElasticsearchRepository' (OnClassCondition)
+
+ ElasticsearchRestClientAutoConfiguration:
+ Did not match:
+ - @ConditionalOnClass did not find required class 'org.elasticsearch.client.RestClientBuilder' (OnClassCondition)
+
+ ElasticsearchRestHealthContributorAutoConfiguration:
+ Did not match:
+ - @ConditionalOnClass did not find required class 'org.elasticsearch.client.RestClient' (OnClassCondition)
+
+ EmbeddedLdapAutoConfiguration:
+ Did not match:
+ - @ConditionalOnClass did not find required class 'com.unboundid.ldap.listener.InMemoryDirectoryServer' (OnClassCondition)
+
+ EmbeddedWebServerFactoryCustomizerAutoConfiguration:
+ Did not match:
+ - Application is deployed as a WAR file. (OnWarDeploymentCondition)
+ Matched:
+ - @ConditionalOnWebApplication (required) found 'session' scope (OnWebApplicationCondition)
+
+ EnvironmentEndpointAutoConfiguration:
+ Did not match:
+ - @ConditionalOnAvailableEndpoint not exposed (OnAvailableEndpointCondition)
+
+ ErrorWebFluxAutoConfiguration:
+ Did not match:
+ - @ConditionalOnClass did not find required class 'org.springframework.web.reactive.config.WebFluxConfigurer' (OnClassCondition)
+
+ FlywayAutoConfiguration:
+ Did not match:
+ - @ConditionalOnClass did not find required class 'org.flywaydb.core.Flyway' (OnClassCondition)
+
+ FlywayEndpointAutoConfiguration:
+ Did not match:
+ - @ConditionalOnClass did not find required class 'org.flywaydb.core.Flyway' (OnClassCondition)
+
+ FreeMarkerAutoConfiguration:
+ Did not match:
+ - @ConditionalOnClass did not find required class 'freemarker.template.Configuration' (OnClassCondition)
+
+ GangliaMetricsExportAutoConfiguration:
+ Did not match:
+ - @ConditionalOnClass did not find required class 'io.micrometer.ganglia.GangliaMeterRegistry' (OnClassCondition)
+
+ GraphQlAutoConfiguration:
+ Did not match:
+ - @ConditionalOnClass did not find required class 'graphql.GraphQL' (OnClassCondition)
+
+ GraphQlObservationAutoConfiguration:
+ Did not match:
+ - @ConditionalOnClass did not find required class 'graphql.GraphQL' (OnClassCondition)
+
+ GraphQlQueryByExampleAutoConfiguration:
+ Did not match:
+ - @ConditionalOnClass did not find required class 'graphql.GraphQL' (OnClassCondition)
+
+ GraphQlQuerydslAutoConfiguration:
+ Did not match:
+ - @ConditionalOnClass did not find required class 'com.querydsl.core.Query' (OnClassCondition)
+
+ GraphQlRSocketAutoConfiguration:
+ Did not match:
+ - @ConditionalOnClass did not find required class 'graphql.GraphQL' (OnClassCondition)
+
+ GraphQlReactiveQueryByExampleAutoConfiguration:
+ Did not match:
+ - @ConditionalOnClass did not find required class 'graphql.GraphQL' (OnClassCondition)
+
+ GraphQlReactiveQuerydslAutoConfiguration:
+ Did not match:
+ - @ConditionalOnClass did not find required class 'com.querydsl.core.Query' (OnClassCondition)
+
+ GraphQlWebFluxAutoConfiguration:
+ Did not match:
+ - @ConditionalOnClass did not find required class 'graphql.GraphQL' (OnClassCondition)
+
+ GraphQlWebFluxSecurityAutoConfiguration:
+ Did not match:
+ - @ConditionalOnClass did not find required class 'graphql.GraphQL' (OnClassCondition)
+
+ GraphQlWebMvcAutoConfiguration:
+ Did not match:
+ - @ConditionalOnClass did not find required class 'graphql.GraphQL' (OnClassCondition)
+
+ GraphQlWebMvcSecurityAutoConfiguration:
+ Did not match:
+ - @ConditionalOnClass did not find required class 'graphql.GraphQL' (OnClassCondition)
+
+ GraphiteMetricsExportAutoConfiguration:
+ Did not match:
+ - @ConditionalOnClass did not find required class 'io.micrometer.graphite.GraphiteMeterRegistry' (OnClassCondition)
+
+ GroovyTemplateAutoConfiguration:
+ Did not match:
+ - @ConditionalOnClass did not find required class 'groovy.text.markup.MarkupTemplateEngine' (OnClassCondition)
+
+ GsonAutoConfiguration:
+ Did not match:
+ - @ConditionalOnClass did not find required class 'com.google.gson.Gson' (OnClassCondition)
+
+ GsonHttpMessageConvertersConfiguration:
+ Did not match:
+ - @ConditionalOnClass did not find required class 'com.google.gson.Gson' (OnClassCondition)
+
+ H2ConsoleAutoConfiguration:
+ Did not match:
+ - @ConditionalOnClass did not find required class 'org.h2.server.web.JakartaWebServlet' (OnClassCondition)
+
+ HazelcastAutoConfiguration:
+ Did not match:
+ - @ConditionalOnClass did not find required class 'com.hazelcast.core.HazelcastInstance' (OnClassCondition)
+
+ HazelcastCacheConfiguration:
+ Did not match:
+ - @ConditionalOnClass did not find required class 'com.hazelcast.core.HazelcastInstance' (OnClassCondition)
+
+ HazelcastHealthContributorAutoConfiguration:
+ Did not match:
+ - @ConditionalOnClass did not find required class 'com.hazelcast.core.HazelcastInstance' (OnClassCondition)
+
+ HazelcastJpaDependencyAutoConfiguration:
+ Did not match:
+ - @ConditionalOnClass did not find required class 'com.hazelcast.core.HazelcastInstance' (OnClassCondition)
+
+ HealthEndpointReactiveWebExtensionConfiguration:
+ Did not match:
+ - did not find reactive web application classes (OnWebApplicationCondition)
+
+ HealthEndpointWebExtensionConfiguration.JerseyAdditionalHealthEndpointPathsConfiguration:
+ Did not match:
+ - @ConditionalOnClass did not find required class 'org.glassfish.jersey.server.ResourceConfig' (OnClassCondition)
+
+ HeapDumpWebEndpointAutoConfiguration:
+ Did not match:
+ - @ConditionalOnAvailableEndpoint the configured access for endpoint 'heapdump' is NONE (OnAvailableEndpointCondition)
+
+ HibernateMetricsAutoConfiguration:
+ Did not match:
+ - @ConditionalOnClass did not find required class 'org.hibernate.stat.HibernateMetrics' (OnClassCondition)
+
+ HttpExchangesAutoConfiguration:
+ Did not match:
+ - @ConditionalOnBean (types: org.springframework.boot.actuate.web.exchanges.HttpExchangeRepository; SearchStrategy: all) did not find any beans of type org.springframework.boot.actuate.web.exchanges.HttpExchangeRepository (OnBeanCondition)
+ Matched:
+ - @ConditionalOnWebApplication (required) found 'session' scope (OnWebApplicationCondition)
+ - @ConditionalOnBooleanProperty (management.httpexchanges.recording.enabled=true) matched (OnPropertyCondition)
+
+ HttpExchangesAutoConfiguration.ReactiveHttpExchangesConfiguration:
+ Did not match:
+ - did not find reactive web application classes (OnWebApplicationCondition)
+ - Ancestor org.springframework.boot.actuate.autoconfigure.web.exchanges.HttpExchangesAutoConfiguration did not match (ConditionEvaluationReport.AncestorsMatchedCondition)
+
+ HttpExchangesAutoConfiguration.ServletHttpExchangesConfiguration:
+ Did not match:
+ - Ancestor org.springframework.boot.actuate.autoconfigure.web.exchanges.HttpExchangesAutoConfiguration did not match (ConditionEvaluationReport.AncestorsMatchedCondition)
+ Matched:
+ - found 'session' scope (OnWebApplicationCondition)
+
+ HttpExchangesEndpointAutoConfiguration:
+ Did not match:
+ - @ConditionalOnAvailableEndpoint not exposed (OnAvailableEndpointCondition)
+
+ HttpHandlerAutoConfiguration:
+ Did not match:
+ - @ConditionalOnClass did not find required class 'org.springframework.web.reactive.DispatcherHandler' (OnClassCondition)
+
+ HumioMetricsExportAutoConfiguration:
+ Did not match:
+ - @ConditionalOnClass did not find required class 'io.micrometer.humio.HumioMeterRegistry' (OnClassCondition)
+
+ HypermediaAutoConfiguration:
+ Did not match:
+ - @ConditionalOnClass did not find required class 'org.springframework.hateoas.EntityModel' (OnClassCondition)
+
+ InfinispanCacheConfiguration:
+ Did not match:
+ - @ConditionalOnClass did not find required class 'org.infinispan.spring.embedded.provider.SpringEmbeddedCacheManager' (OnClassCondition)
+
+ InfluxMetricsExportAutoConfiguration:
+ Did not match:
+ - @ConditionalOnClass did not find required class 'io.micrometer.influx.InfluxMeterRegistry' (OnClassCondition)
+
+ InfoContributorAutoConfiguration#buildInfoContributor:
+ Did not match:
+ - @ConditionalOnSingleCandidate (types: org.springframework.boot.info.BuildProperties; SearchStrategy: all) did not find any beans (OnBeanCondition)
+ Matched:
+ - @ConditionalOnEnabledInfoContributor management.info.defaults.enabled is considered true (OnEnabledInfoContributorCondition)
+
+ InfoContributorAutoConfiguration#envInfoContributor:
+ Did not match:
+ - @ConditionalOnEnabledInfoContributor management.info.env.enabled is not true (OnEnabledInfoContributorCondition)
+
+ InfoContributorAutoConfiguration#gitInfoContributor:
+ Did not match:
+ - @ConditionalOnSingleCandidate (types: org.springframework.boot.info.GitProperties; SearchStrategy: all) did not find any beans (OnBeanCondition)
+ Matched:
+ - @ConditionalOnEnabledInfoContributor management.info.defaults.enabled is considered true (OnEnabledInfoContributorCondition)
+
+ InfoContributorAutoConfiguration#javaInfoContributor:
+ Did not match:
+ - @ConditionalOnEnabledInfoContributor management.info.java.enabled is not true (OnEnabledInfoContributorCondition)
+
+ InfoContributorAutoConfiguration#osInfoContributor:
+ Did not match:
+ - @ConditionalOnEnabledInfoContributor management.info.os.enabled is not true (OnEnabledInfoContributorCondition)
+
+ InfoContributorAutoConfiguration#processInfoContributor:
+ Did not match:
+ - @ConditionalOnEnabledInfoContributor management.info.process.enabled is not true (OnEnabledInfoContributorCondition)
+
+ InfoContributorAutoConfiguration#sslInfo:
+ Did not match:
+ - @ConditionalOnEnabledInfoContributor management.info.ssl.enabled is not true (OnEnabledInfoContributorCondition)
+ Matched:
+ - @ConditionalOnMissingBean (types: org.springframework.boot.info.SslInfo; SearchStrategy: all) did not find any beans (OnBeanCondition)
+
+ InfoContributorAutoConfiguration#sslInfoContributor:
+ Did not match:
+ - @ConditionalOnEnabledInfoContributor management.info.ssl.enabled is not true (OnEnabledInfoContributorCondition)
+
+ IntegrationAutoConfiguration:
+ Did not match:
+ - @ConditionalOnClass did not find required class 'org.springframework.integration.config.EnableIntegration' (OnClassCondition)
+
+ IntegrationGraphEndpointAutoConfiguration:
+ Did not match:
+ - @ConditionalOnClass did not find required class 'org.springframework.integration.graph.IntegrationGraphServer' (OnClassCondition)
+
+ JCacheCacheConfiguration:
+ Did not match:
+ - @ConditionalOnClass did not find required class 'javax.cache.Caching' (OnClassCondition)
+
+ JacksonHttpMessageConvertersConfiguration.MappingJackson2XmlHttpMessageConverterConfiguration:
+ Did not match:
+ - @ConditionalOnClass did not find required class 'com.fasterxml.jackson.dataformat.xml.XmlMapper' (OnClassCondition)
+
+ JdbcRepositoriesAutoConfiguration:
+ Did not match:
+ - @ConditionalOnClass did not find required class 'org.springframework.data.jdbc.repository.config.AbstractJdbcConfiguration' (OnClassCondition)
+
+ JerseyAutoConfiguration:
+ Did not match:
+ - @ConditionalOnClass did not find required class 'org.glassfish.jersey.server.spring.SpringComponentProvider' (OnClassCondition)
+
+ JerseySameManagementContextConfiguration:
+ Did not match:
+ - @ConditionalOnClass did not find required class 'org.glassfish.jersey.server.ResourceConfig' (OnClassCondition)
+
+ JerseyServerMetricsAutoConfiguration:
+ Did not match:
+ - @ConditionalOnClass did not find required class 'org.glassfish.jersey.micrometer.server.ObservationApplicationEventListener' (OnClassCondition)
+
+ JerseyWebEndpointManagementContextConfiguration:
+ Did not match:
+ - @ConditionalOnClass did not find required class 'org.glassfish.jersey.server.ResourceConfig' (OnClassCondition)
+
+ JettyMetricsAutoConfiguration:
+ Did not match:
+ - @ConditionalOnClass did not find required class 'org.eclipse.jetty.server.Server' (OnClassCondition)
+
+ JmsAutoConfiguration:
+ Did not match:
+ - @ConditionalOnClass did not find required class 'jakarta.jms.Message' (OnClassCondition)
+
+ JmsHealthContributorAutoConfiguration:
+ Did not match:
+ - @ConditionalOnClass did not find required class 'jakarta.jms.ConnectionFactory' (OnClassCondition)
+
+ JmxAutoConfiguration:
+ Did not match:
+ - @ConditionalOnBooleanProperty (spring.jmx.enabled=true) found different value in property 'spring.jmx.enabled' (OnPropertyCondition)
+ Matched:
+ - @ConditionalOnClass found required class 'org.springframework.jmx.export.MBeanExporter' (OnClassCondition)
+
+ JmxEndpointAutoConfiguration:
+ Did not match:
+ - @ConditionalOnBooleanProperty (spring.jmx.enabled=true) found different value in property 'spring.jmx.enabled' (OnPropertyCondition)
+
+ JmxMetricsExportAutoConfiguration:
+ Did not match:
+ - @ConditionalOnClass did not find required class 'io.micrometer.jmx.JmxMeterRegistry' (OnClassCondition)
+
+ JndiConnectionFactoryAutoConfiguration:
+ Did not match:
+ - @ConditionalOnClass did not find required class 'org.springframework.jms.core.JmsTemplate' (OnClassCondition)
+
+ JndiDataSourceAutoConfiguration:
+ Did not match:
+ - @ConditionalOnProperty (spring.datasource.jndi-name) did not find property 'spring.datasource.jndi-name' (OnPropertyCondition)
+ Matched:
+ - @ConditionalOnClass found required classes 'javax.sql.DataSource', 'org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseType' (OnClassCondition)
+
+ JndiJtaConfiguration:
+ Did not match:
+ - @ConditionalOnJndi JNDI environment is not available (OnJndiCondition)
+ Matched:
+ - @ConditionalOnClass found required class 'org.springframework.transaction.jta.JtaTransactionManager' (OnClassCondition)
+
+ JooqAutoConfiguration:
+ Did not match:
+ - @ConditionalOnClass did not find required class 'org.jooq.DSLContext' (OnClassCondition)
+
+ JpaRepositoriesAutoConfiguration:
+ Did not match:
+ - @ConditionalOnMissingBean (types: org.springframework.data.jpa.repository.support.JpaRepositoryFactoryBean,org.springframework.data.jpa.repository.config.JpaRepositoryConfigExtension; SearchStrategy: all) found beans of type 'org.springframework.data.jpa.repository.support.JpaRepositoryFactoryBean' &userRepository and found beans of type 'org.springframework.data.jpa.repository.config.JpaRepositoryConfigExtension' org.springframework.data.jpa.repository.config.JpaRepositoryConfigExtension#0 (OnBeanCondition)
+ Matched:
+ - @ConditionalOnClass found required class 'org.springframework.data.jpa.repository.JpaRepository' (OnClassCondition)
+ - @ConditionalOnBooleanProperty (spring.data.jpa.repositories.enabled=true) matched (OnPropertyCondition)
+
+ JsonbAutoConfiguration:
+ Did not match:
+ - @ConditionalOnClass did not find required class 'jakarta.json.bind.Jsonb' (OnClassCondition)
+
+ JsonbHttpMessageConvertersConfiguration:
+ Did not match:
+ - @ConditionalOnClass did not find required class 'jakarta.json.bind.Jsonb' (OnClassCondition)
+
+ JvmMetricsAutoConfiguration#virtualThreadMetrics:
+ Did not match:
+ - @ConditionalOnClass did not find required class 'io.micrometer.java21.instrument.binder.jdk.VirtualThreadMetrics' (OnClassCondition)
+
+ KafkaAutoConfiguration:
+ Did not match:
+ - @ConditionalOnClass did not find required class 'org.springframework.kafka.core.KafkaTemplate' (OnClassCondition)
+
+ KafkaMetricsAutoConfiguration:
+ Did not match:
+ - @ConditionalOnClass did not find required class 'org.springframework.kafka.core.ProducerFactory' (OnClassCondition)
+
+ KairosMetricsExportAutoConfiguration:
+ Did not match:
+ - @ConditionalOnClass did not find required class 'io.micrometer.kairos.KairosMeterRegistry' (OnClassCondition)
+
+ LdapAutoConfiguration:
+ Did not match:
+ - @ConditionalOnClass did not find required class 'org.springframework.ldap.core.ContextSource' (OnClassCondition)
+
+ LdapHealthContributorAutoConfiguration:
+ Did not match:
+ - @ConditionalOnClass did not find required class 'org.springframework.ldap.core.LdapOperations' (OnClassCondition)
+
+ LdapRepositoriesAutoConfiguration:
+ Did not match:
+ - @ConditionalOnClass did not find required class 'org.springframework.data.ldap.repository.LdapRepository' (OnClassCondition)
+
+ LettuceMetricsAutoConfiguration:
+ Did not match:
+ - @ConditionalOnClass did not find required class 'io.lettuce.core.metrics.MicrometerCommandLatencyRecorder' (OnClassCondition)
+
+ LiquibaseAutoConfiguration:
+ Did not match:
+ - @ConditionalOnClass did not find required class 'liquibase.change.DatabaseChange' (OnClassCondition)
+
+ LiquibaseEndpointAutoConfiguration:
+ Did not match:
+ - @ConditionalOnClass did not find required class 'liquibase.integration.spring.SpringLiquibase' (OnClassCondition)
+
+ Log4J2MetricsAutoConfiguration:
+ Did not match:
+ - @ConditionalOnClass did not find required class 'org.apache.logging.log4j.core.LoggerContext' (OnClassCondition)
+
+ LogFileWebEndpointAutoConfiguration:
+ Did not match:
+ - @ConditionalOnAvailableEndpoint not exposed (OnAvailableEndpointCondition)
+
+ LoggersEndpointAutoConfiguration:
+ Did not match:
+ - @ConditionalOnAvailableEndpoint not exposed (OnAvailableEndpointCondition)
+
+ MailHealthContributorAutoConfiguration:
+ Did not match:
+ - @ConditionalOnClass did not find required class 'org.springframework.mail.javamail.JavaMailSenderImpl' (OnClassCondition)
+
+ MailSenderAutoConfiguration:
+ Did not match:
+ - @ConditionalOnClass did not find required class 'jakarta.mail.internet.MimeMessage' (OnClassCondition)
+
+ MailSenderValidatorAutoConfiguration:
+ Did not match:
+ - @ConditionalOnSingleCandidate did not find required type 'org.springframework.mail.javamail.JavaMailSenderImpl' (OnBeanCondition)
+
+ ManagementContextAutoConfiguration.DifferentManagementContextConfiguration:
+ Did not match:
+ - Management Port actual port type (SAME) did not match required type (DIFFERENT) (OnManagementPortCondition)
+
+ ManagementWebSecurityAutoConfiguration:
+ Did not match:
+ - AllNestedConditions 1 matched 1 did not; NestedCondition on DefaultWebSecurityCondition.Beans @ConditionalOnMissingBean (types: ?; SearchStrategy: all) did not find any beans; NestedCondition on DefaultWebSecurityCondition.Classes @ConditionalOnClass did not find required classes 'org.springframework.security.web.SecurityFilterChain', 'org.springframework.security.config.annotation.web.builders.HttpSecurity' (DefaultWebSecurityCondition)
+ Matched:
+ - found 'session' scope (OnWebApplicationCondition)
+
+ MappingsEndpointAutoConfiguration:
+ Did not match:
+ - @ConditionalOnAvailableEndpoint not exposed (OnAvailableEndpointCondition)
+
+ MessageSourceAutoConfiguration:
+ Did not match:
+ - ResourceBundle did not find bundle with basename messages (MessageSourceAutoConfiguration.ResourceBundleCondition)
+
+ MetricsAspectsAutoConfiguration:
+ Did not match:
+ - @ConditionalOnBooleanProperty (management.observations.annotations.enabled=true) did not find property 'management.observations.annotations.enabled' (OnPropertyCondition)
+ Matched:
+ - @ConditionalOnClass found required classes 'io.micrometer.core.instrument.MeterRegistry', 'org.aspectj.weaver.Advice' (OnClassCondition)
+
+ MicrometerTracingAutoConfiguration:
+ Did not match:
+ - @ConditionalOnClass did not find required class 'io.micrometer.tracing.Tracer' (OnClassCondition)
+
+ MockMvcAutoConfiguration#dispatcherServlet:
+ Did not match:
+ - @ConditionalOnMissingBean (types: org.springframework.web.servlet.DispatcherServlet; SearchStrategy: all) found beans of type 'org.springframework.web.servlet.DispatcherServlet' dispatcherServlet (OnBeanCondition)
+
+ MockMvcAutoConfiguration#dispatcherServletPath:
+ Did not match:
+ - @ConditionalOnMissingBean (types: org.springframework.boot.autoconfigure.web.servlet.DispatcherServletPath; SearchStrategy: all) found beans of type 'org.springframework.boot.autoconfigure.web.servlet.DispatcherServletPath' dispatcherServletRegistration (OnBeanCondition)
+
+ MockMvcAutoConfiguration.WebTestClientMockMvcConfiguration:
+ Did not match:
+ - @ConditionalOnClass did not find required class 'org.springframework.web.reactive.function.client.WebClient' (OnClassCondition)
+
+ MockMvcSecurityConfiguration:
+ Did not match:
+ - @ConditionalOnClass did not find required class 'org.springframework.security.test.web.servlet.request.SecurityMockMvcRequestPostProcessors' (OnClassCondition)
+
+ MockMvcWebClientAutoConfiguration:
+ Did not match:
+ - @ConditionalOnClass did not find required class 'org.htmlunit.WebClient' (OnClassCondition)
+
+ MockMvcWebDriverAutoConfiguration:
+ Did not match:
+ - @ConditionalOnClass did not find required class 'org.openqa.selenium.htmlunit.HtmlUnitDriver' (OnClassCondition)
+
+ MongoAutoConfiguration:
+ Did not match:
+ - @ConditionalOnClass did not find required class 'com.mongodb.client.MongoClient' (OnClassCondition)
+
+ MongoDataAutoConfiguration:
+ Did not match:
+ - @ConditionalOnClass did not find required class 'com.mongodb.client.MongoClient' (OnClassCondition)
+
+ MongoHealthContributorAutoConfiguration:
+ Did not match:
+ - @ConditionalOnClass did not find required class 'org.springframework.data.mongodb.core.MongoTemplate' (OnClassCondition)
+
+ MongoMetricsAutoConfiguration:
+ Did not match:
+ - @ConditionalOnClass did not find required class 'com.mongodb.MongoClientSettings' (OnClassCondition)
+
+ MongoReactiveAutoConfiguration:
+ Did not match:
+ - @ConditionalOnClass did not find required class 'com.mongodb.reactivestreams.client.MongoClient' (OnClassCondition)
+
+ MongoReactiveDataAutoConfiguration:
+ Did not match:
+ - @ConditionalOnClass did not find required class 'com.mongodb.reactivestreams.client.MongoClient' (OnClassCondition)
+
+ MongoReactiveHealthContributorAutoConfiguration:
+ Did not match:
+ - @ConditionalOnClass did not find required class 'reactor.core.publisher.Flux' (OnClassCondition)
+
+ MongoReactiveRepositoriesAutoConfiguration:
+ Did not match:
+ - @ConditionalOnClass did not find required class 'com.mongodb.reactivestreams.client.MongoClient' (OnClassCondition)
+
+ MongoRepositoriesAutoConfiguration:
+ Did not match:
+ - @ConditionalOnClass did not find required class 'com.mongodb.client.MongoClient' (OnClassCondition)
+
+ MustacheAutoConfiguration:
+ Did not match:
+ - @ConditionalOnClass did not find required class 'com.samskivert.mustache.Mustache' (OnClassCondition)
+
+ Neo4jAutoConfiguration:
+ Did not match:
+ - @ConditionalOnClass did not find required class 'org.neo4j.driver.Driver' (OnClassCondition)
+
+ Neo4jDataAutoConfiguration:
+ Did not match:
+ - @ConditionalOnClass did not find required class 'org.neo4j.driver.Driver' (OnClassCondition)
+
+ Neo4jHealthContributorAutoConfiguration:
+ Did not match:
+ - @ConditionalOnClass did not find required class 'org.neo4j.driver.Driver' (OnClassCondition)
+
+ Neo4jReactiveDataAutoConfiguration:
+ Did not match:
+ - @ConditionalOnClass did not find required class 'org.neo4j.driver.Driver' (OnClassCondition)
+
+ Neo4jReactiveRepositoriesAutoConfiguration:
+ Did not match:
+ - @ConditionalOnClass did not find required class 'org.neo4j.driver.Driver' (OnClassCondition)
+
+ Neo4jRepositoriesAutoConfiguration:
+ Did not match:
+ - @ConditionalOnClass did not find required class 'org.neo4j.driver.Driver' (OnClassCondition)
+
+ NettyAutoConfiguration:
+ Did not match:
+ - @ConditionalOnClass did not find required class 'io.netty.util.NettyRuntime' (OnClassCondition)
+
+ NewRelicMetricsExportAutoConfiguration:
+ Did not match:
+ - @ConditionalOnClass did not find required class 'io.micrometer.newrelic.NewRelicMeterRegistry' (OnClassCondition)
+
+ NoOpMeterRegistryConfiguration:
+ Did not match:
+ - @ConditionalOnMissingBean (types: io.micrometer.core.instrument.MeterRegistry; SearchStrategy: all) found beans of type 'io.micrometer.core.instrument.MeterRegistry' simpleMeterRegistry (OnBeanCondition)
+
+ NoopTracerAutoConfiguration:
+ Did not match:
+ - @ConditionalOnClass did not find required class 'io.micrometer.tracing.Tracer' (OnClassCondition)
+
+ OAuth2AuthorizationServerAutoConfiguration:
+ Did not match:
+ - @ConditionalOnClass did not find required class 'org.springframework.security.oauth2.server.authorization.OAuth2Authorization' (OnClassCondition)
+
+ OAuth2AuthorizationServerJwtAutoConfiguration:
+ Did not match:
+ - @ConditionalOnClass did not find required class 'com.nimbusds.jose.jwk.source.JWKSource' (OnClassCondition)
+
+ OAuth2ClientAutoConfiguration:
+ Did not match:
+ - @ConditionalOnClass did not find required class 'org.springframework.security.oauth2.client.registration.ClientRegistration' (OnClassCondition)
+
+ OAuth2ClientWebSecurityAutoConfiguration:
+ Did not match:
+ - @ConditionalOnClass did not find required class 'org.springframework.security.config.annotation.web.configuration.EnableWebSecurity' (OnClassCondition)
+
+ OAuth2ResourceServerAutoConfiguration:
+ Did not match:
+ - @ConditionalOnClass did not find required class 'org.springframework.security.oauth2.server.resource.authentication.BearerTokenAuthenticationToken' (OnClassCondition)
+
+ ObservationAutoConfiguration.MeterObservationHandlerConfiguration.TracingAndMetricsObservationHandlerConfiguration:
+ Did not match:
+ - @ConditionalOnBean did not find required type 'io.micrometer.tracing.Tracer' (OnBeanCondition)
+ - @ConditionalOnBean (types: ?; SearchStrategy: all) did not find any beans of type ? (OnBeanCondition)
+
+ ObservationAutoConfiguration.MetricsWithTracingConfiguration:
+ Did not match:
+ - @ConditionalOnClass did not find required class 'io.micrometer.tracing.Tracer' (OnClassCondition)
+
+ ObservationAutoConfiguration.ObservedAspectConfiguration:
+ Did not match:
+ - @ConditionalOnBooleanProperty (management.observations.annotations.enabled=true) did not find property 'management.observations.annotations.enabled' (OnPropertyCondition)
+ Matched:
+ - @ConditionalOnClass found required class 'org.aspectj.weaver.Advice' (OnClassCondition)
+
+ ObservationAutoConfiguration.OnlyTracingConfiguration:
+ Did not match:
+ - @ConditionalOnClass did not find required class 'io.micrometer.tracing.Tracer' (OnClassCondition)
+
+ OpenTelemetryAutoConfiguration:
+ Did not match:
+ - @ConditionalOnClass did not find required class 'io.opentelemetry.sdk.OpenTelemetrySdk' (OnClassCondition)
+
+ OpenTelemetryLoggingAutoConfiguration:
+ Did not match:
+ - @ConditionalOnClass did not find required class 'io.opentelemetry.api.OpenTelemetry' (OnClassCondition)
+
+ OpenTelemetryTracingAutoConfiguration:
+ Did not match:
+ - @ConditionalOnClass did not find required class 'io.micrometer.tracing.otel.bridge.OtelTracer' (OnClassCondition)
+
+ OtlpLoggingAutoConfiguration:
+ Did not match:
+ - @ConditionalOnClass did not find required class 'io.opentelemetry.api.OpenTelemetry' (OnClassCondition)
+
+ OtlpMetricsExportAutoConfiguration:
+ Did not match:
+ - @ConditionalOnClass did not find required class 'io.micrometer.registry.otlp.OtlpMeterRegistry' (OnClassCondition)
+
+ OtlpTracingAutoConfiguration:
+ Did not match:
+ - @ConditionalOnClass did not find required class 'io.micrometer.tracing.otel.bridge.OtelTracer' (OnClassCondition)
+
+ ProjectInfoAutoConfiguration#buildProperties:
+ Did not match:
+ - @ConditionalOnResource did not find resource '${spring.info.build.location:classpath:META-INF/build-info.properties}' (OnResourceCondition)
+
+ ProjectInfoAutoConfiguration#gitProperties:
+ Did not match:
+ - GitResource did not find git info at classpath:git.properties (ProjectInfoAutoConfiguration.GitResourceAvailableCondition)
+
+ PrometheusExemplarsAutoConfiguration:
+ Did not match:
+ - @ConditionalOnClass did not find required class 'io.micrometer.tracing.Tracer' (OnClassCondition)
+
+ PrometheusMetricsExportAutoConfiguration:
+ Did not match:
+ - @ConditionalOnClass did not find required class 'io.micrometer.prometheusmetrics.PrometheusMeterRegistry' (OnClassCondition)
+
+ PulsarAutoConfiguration:
+ Did not match:
+ - @ConditionalOnClass did not find required class 'org.apache.pulsar.client.api.PulsarClient' (OnClassCondition)
+
+ PulsarReactiveAutoConfiguration:
+ Did not match:
+ - @ConditionalOnClass did not find required class 'org.apache.pulsar.client.api.PulsarClient' (OnClassCondition)
+
+ QuartzAutoConfiguration:
+ Did not match:
+ - @ConditionalOnClass did not find required class 'org.quartz.Scheduler' (OnClassCondition)
+
+ QuartzEndpointAutoConfiguration:
+ Did not match:
+ - @ConditionalOnClass did not find required class 'org.quartz.Scheduler' (OnClassCondition)
+
+ R2dbcAutoConfiguration:
+ Did not match:
+ - @ConditionalOnClass did not find required class 'io.r2dbc.spi.ConnectionFactory' (OnClassCondition)
+
+ R2dbcDataAutoConfiguration:
+ Did not match:
+ - @ConditionalOnClass did not find required class 'org.springframework.data.r2dbc.core.R2dbcEntityTemplate' (OnClassCondition)
+
+ R2dbcInitializationConfiguration:
+ Did not match:
+ - @ConditionalOnClass did not find required classes 'io.r2dbc.spi.ConnectionFactory', 'org.springframework.r2dbc.connection.init.DatabasePopulator' (OnClassCondition)
+
+ R2dbcObservationAutoConfiguration:
+ Did not match:
+ - @ConditionalOnClass did not find required class 'io.r2dbc.proxy.ProxyConnectionFactory' (OnClassCondition)
+
+ R2dbcProxyAutoConfiguration:
+ Did not match:
+ - @ConditionalOnClass did not find required class 'io.r2dbc.proxy.ProxyConnectionFactory' (OnClassCondition)
+
+ R2dbcRepositoriesAutoConfiguration:
+ Did not match:
+ - @ConditionalOnClass did not find required class 'io.r2dbc.spi.ConnectionFactory' (OnClassCondition)
+
+ R2dbcTransactionManagerAutoConfiguration:
+ Did not match:
+ - @ConditionalOnClass did not find required class 'org.springframework.r2dbc.connection.R2dbcTransactionManager' (OnClassCondition)
+
+ RSocketGraphQlClientAutoConfiguration:
+ Did not match:
+ - @ConditionalOnClass did not find required class 'graphql.GraphQL' (OnClassCondition)
+
+ RSocketMessagingAutoConfiguration:
+ Did not match:
+ - @ConditionalOnClass did not find required class 'io.rsocket.RSocket' (OnClassCondition)
+
+ RSocketRequesterAutoConfiguration:
+ Did not match:
+ - @ConditionalOnClass did not find required class 'io.rsocket.RSocket' (OnClassCondition)
+
+ RSocketSecurityAutoConfiguration:
+ Did not match:
+ - @ConditionalOnClass did not find required class 'org.springframework.security.rsocket.core.SecuritySocketAcceptorInterceptor' (OnClassCondition)
+
+ RSocketServerAutoConfiguration:
+ Did not match:
+ - @ConditionalOnClass did not find required class 'io.rsocket.core.RSocketServer' (OnClassCondition)
+
+ RSocketStrategiesAutoConfiguration:
+ Did not match:
+ - @ConditionalOnClass did not find required class 'io.netty.buffer.PooledByteBufAllocator' (OnClassCondition)
+
+ RabbitAutoConfiguration:
+ Did not match:
+ - @ConditionalOnClass did not find required class 'com.rabbitmq.client.Channel' (OnClassCondition)
+
+ RabbitHealthContributorAutoConfiguration:
+ Did not match:
+ - @ConditionalOnClass did not find required class 'org.springframework.amqp.rabbit.core.RabbitTemplate' (OnClassCondition)
+
+ RabbitMetricsAutoConfiguration:
+ Did not match:
+ - @ConditionalOnClass did not find required class 'com.rabbitmq.client.ConnectionFactory' (OnClassCondition)
+
+ ReactiveCloudFoundryActuatorAutoConfiguration:
+ Did not match:
+ - @ConditionalOnWebApplication did not find reactive web application classes (OnWebApplicationCondition)
+
+ ReactiveElasticsearchClientAutoConfiguration:
+ Did not match:
+ - @ConditionalOnClass did not find required class 'co.elastic.clients.transport.ElasticsearchTransport' (OnClassCondition)
+
+ ReactiveElasticsearchRepositoriesAutoConfiguration:
+ Did not match:
+ - @ConditionalOnClass did not find required class 'reactor.core.publisher.Mono' (OnClassCondition)
+
+ ReactiveHealthEndpointConfiguration:
+ Did not match:
+ - @ConditionalOnClass did not find required class 'reactor.core.publisher.Flux' (OnClassCondition)
+
+ ReactiveManagementContextAutoConfiguration:
+ Did not match:
+ - @ConditionalOnClass did not find required class 'reactor.core.publisher.Flux' (OnClassCondition)
+
+ ReactiveManagementWebSecurityAutoConfiguration:
+ Did not match:
+ - @ConditionalOnClass did not find required class 'org.springframework.security.config.annotation.web.reactive.EnableWebFluxSecurity' (OnClassCondition)
+
+ ReactiveMultipartAutoConfiguration:
+ Did not match:
+ - @ConditionalOnClass did not find required class 'org.springframework.web.reactive.config.WebFluxConfigurer' (OnClassCondition)
+
+ ReactiveOAuth2ClientAutoConfiguration:
+ Did not match:
+ - @ConditionalOnClass did not find required class 'reactor.core.publisher.Flux' (OnClassCondition)
+
+ ReactiveOAuth2ClientWebSecurityAutoConfiguration:
+ Did not match:
+ - @ConditionalOnClass did not find required class 'reactor.core.publisher.Flux' (OnClassCondition)
+
+ ReactiveOAuth2ResourceServerAutoConfiguration:
+ Did not match:
+ - @ConditionalOnClass did not find required class 'org.springframework.security.config.annotation.web.reactive.EnableWebFluxSecurity' (OnClassCondition)
+
+ ReactiveSecurityAutoConfiguration:
+ Did not match:
+ - @ConditionalOnClass did not find required class 'reactor.core.publisher.Flux' (OnClassCondition)
+
+ ReactiveUserDetailsServiceAutoConfiguration:
+ Did not match:
+ - @ConditionalOnClass did not find required class 'org.springframework.security.authentication.ReactiveAuthenticationManager' (OnClassCondition)
+
+ ReactiveWebServerFactoryAutoConfiguration:
+ Did not match:
+ - @ConditionalOnWebApplication did not find reactive web application classes (OnWebApplicationCondition)
+
+ ReactorAutoConfiguration:
+ Did not match:
+ - @ConditionalOnClass did not find required class 'reactor.core.publisher.Hooks' (OnClassCondition)
+
+ RedisAutoConfiguration:
+ Did not match:
+ - @ConditionalOnClass did not find required class 'org.springframework.data.redis.core.RedisOperations' (OnClassCondition)
+
+ RedisCacheConfiguration:
+ Did not match:
+ - @ConditionalOnClass did not find required class 'org.springframework.data.redis.connection.RedisConnectionFactory' (OnClassCondition)
+
+ RedisHealthContributorAutoConfiguration:
+ Did not match:
+ - @ConditionalOnClass did not find required class 'org.springframework.data.redis.connection.RedisConnectionFactory' (OnClassCondition)
+
+ RedisReactiveAutoConfiguration:
+ Did not match:
+ - @ConditionalOnClass did not find required class 'reactor.core.publisher.Flux' (OnClassCondition)
+
+ RedisReactiveHealthContributorAutoConfiguration:
+ Did not match:
+ - @ConditionalOnClass did not find required class 'reactor.core.publisher.Flux' (OnClassCondition)
+
+ RedisRepositoriesAutoConfiguration:
+ Did not match:
+ - @ConditionalOnClass did not find required class 'org.springframework.data.redis.repository.configuration.EnableRedisRepositories' (OnClassCondition)
+
+ RepositoryRestMvcAutoConfiguration:
+ Did not match:
+ - @ConditionalOnClass did not find required class 'org.springframework.data.rest.webmvc.config.RepositoryRestMvcConfiguration' (OnClassCondition)
+
+ Saml2RelyingPartyAutoConfiguration:
+ Did not match:
+ - @ConditionalOnClass did not find required class 'org.springframework.security.saml2.provider.service.registration.RelyingPartyRegistrationRepository' (OnClassCondition)
+
+ SbomEndpointAutoConfiguration:
+ Did not match:
+ - @ConditionalOnAvailableEndpoint not exposed (OnAvailableEndpointCondition)
+
+ ScheduledTasksEndpointAutoConfiguration:
+ Did not match:
+ - @ConditionalOnAvailableEndpoint not exposed (OnAvailableEndpointCondition)
+
+ SecurityAutoConfiguration:
+ Did not match:
+ - @ConditionalOnClass did not find required class 'org.springframework.security.authentication.DefaultAuthenticationEventPublisher' (OnClassCondition)
+
+ SecurityFilterAutoConfiguration:
+ Did not match:
+ - @ConditionalOnClass did not find required class 'org.springframework.security.config.http.SessionCreationPolicy' (OnClassCondition)
+
+ SecurityRequestMatchersManagementContextConfiguration:
+ Did not match:
+ - @ConditionalOnClass did not find required class 'org.springframework.security.web.util.matcher.RequestMatcher' (OnClassCondition)
+
+ SendGridAutoConfiguration:
+ Did not match:
+ - @ConditionalOnClass did not find required class 'com.sendgrid.SendGrid' (OnClassCondition)
+
+ ServletEndpointManagementContextConfiguration.JerseyServletEndpointManagementContextConfiguration:
+ Did not match:
+ - @ConditionalOnClass did not find required class 'org.glassfish.jersey.server.ResourceConfig' (OnClassCondition)
+
+ ServletManagementContextAutoConfiguration.ApplicationContextFilterConfiguration:
+ Did not match:
+ - @ConditionalOnBooleanProperty (management.server.add-application-context-header=true) did not find property 'management.server.add-application-context-header' (OnPropertyCondition)
+
+ ServletWebServerFactoryAutoConfiguration.ForwardedHeaderFilterConfiguration:
+ Did not match:
+ - @ConditionalOnProperty (server.forward-headers-strategy=framework) did not find property 'server.forward-headers-strategy' (OnPropertyCondition)
+
+ ServletWebServerFactoryConfiguration.EmbeddedJetty:
+ Did not match:
+ - @ConditionalOnClass did not find required classes 'org.eclipse.jetty.server.Server', 'org.eclipse.jetty.util.Loader', 'org.eclipse.jetty.ee10.webapp.WebAppContext' (OnClassCondition)
+
+ ServletWebServerFactoryConfiguration.EmbeddedUndertow:
+ Did not match:
+ - @ConditionalOnClass did not find required classes 'io.undertow.Undertow', 'org.xnio.SslClientAuthMode' (OnClassCondition)
+
+ SessionAutoConfiguration:
+ Did not match:
+ - @ConditionalOnClass did not find required class 'org.springframework.session.Session' (OnClassCondition)
+
+ SessionsEndpointAutoConfiguration:
+ Did not match:
+ - @ConditionalOnClass did not find required class 'org.springframework.session.Session' (OnClassCondition)
+
+ ShutdownEndpointAutoConfiguration:
+ Did not match:
+ - @ConditionalOnAvailableEndpoint the configured access for endpoint 'shutdown' is NONE (OnAvailableEndpointCondition)
+
+ SignalFxMetricsExportAutoConfiguration:
+ Did not match:
+ - @ConditionalOnClass did not find required class 'io.micrometer.signalfx.SignalFxMeterRegistry' (OnClassCondition)
+
+ SpringApplicationAdminJmxAutoConfiguration:
+ Did not match:
+ - @ConditionalOnBooleanProperty (spring.application.admin.enabled=true) did not find property 'spring.application.admin.enabled' (OnPropertyCondition)
+
+ SslObservabilityAutoConfiguration#sslInfoProvider:
+ Did not match:
+ - @ConditionalOnMissingBean (types: org.springframework.boot.info.SslInfo; SearchStrategy: all) found beans of type 'org.springframework.boot.info.SslInfo' sslInfo (OnBeanCondition)
+
+ StackdriverMetricsExportAutoConfiguration:
+ Did not match:
+ - @ConditionalOnClass did not find required class 'io.micrometer.stackdriver.StackdriverMeterRegistry' (OnClassCondition)
+
+ StartupEndpointAutoConfiguration:
+ Did not match:
+ - ApplicationStartup configured applicationStartup is of type class org.springframework.core.metrics.DefaultApplicationStartup, expected BufferingApplicationStartup. (StartupEndpointAutoConfiguration.ApplicationStartupCondition)
+
+ StatsdMetricsExportAutoConfiguration:
+ Did not match:
+ - @ConditionalOnClass did not find required class 'io.micrometer.statsd.StatsdMeterRegistry' (OnClassCondition)
+
+ TaskExecutorConfigurations.SimpleAsyncTaskExecutorBuilderConfiguration#simpleAsyncTaskExecutorBuilderVirtualThreads:
+ Did not match:
+ - @ConditionalOnMissingBean (types: org.springframework.boot.task.SimpleAsyncTaskExecutorBuilder; SearchStrategy: all) found beans of type 'org.springframework.boot.task.SimpleAsyncTaskExecutorBuilder' simpleAsyncTaskExecutorBuilder (OnBeanCondition)
+
+ TaskExecutorConfigurations.TaskExecutorConfiguration#applicationTaskExecutorVirtualThreads:
+ Did not match:
+ - @ConditionalOnThreading did not find VIRTUAL (OnThreadingCondition)
+
+ TaskSchedulingAutoConfiguration#scheduledBeanLazyInitializationExcludeFilter:
+ Did not match:
+ - @ConditionalOnBean (names: org.springframework.context.annotation.internalScheduledAnnotationProcessor; SearchStrategy: all) did not find any beans named org.springframework.context.annotation.internalScheduledAnnotationProcessor (OnBeanCondition)
+
+ TaskSchedulingConfigurations.SimpleAsyncTaskSchedulerBuilderConfiguration#simpleAsyncTaskSchedulerBuilderVirtualThreads:
+ Did not match:
+ - @ConditionalOnMissingBean (types: org.springframework.boot.task.SimpleAsyncTaskSchedulerBuilder; SearchStrategy: all) found beans of type 'org.springframework.boot.task.SimpleAsyncTaskSchedulerBuilder' simpleAsyncTaskSchedulerBuilder (OnBeanCondition)
+
+ TaskSchedulingConfigurations.TaskSchedulerConfiguration:
+ Did not match:
+ - @ConditionalOnBean (names: org.springframework.context.annotation.internalScheduledAnnotationProcessor; SearchStrategy: all) did not find any beans named org.springframework.context.annotation.internalScheduledAnnotationProcessor (OnBeanCondition)
+
+ ThreadDumpEndpointAutoConfiguration:
+ Did not match:
+ - @ConditionalOnAvailableEndpoint not exposed (OnAvailableEndpointCondition)
+
+ ThymeleafAutoConfiguration:
+ Did not match:
+ - @ConditionalOnClass did not find required class 'org.thymeleaf.spring6.SpringTemplateEngine' (OnClassCondition)
+
+ TransactionAutoConfiguration#transactionalOperator:
+ Did not match:
+ - @ConditionalOnSingleCandidate (types: org.springframework.transaction.ReactiveTransactionManager; SearchStrategy: all) did not find any beans (OnBeanCondition)
+
+ TransactionAutoConfiguration.AspectJTransactionManagementConfiguration:
+ Did not match:
+ - @ConditionalOnBean (types: org.springframework.transaction.aspectj.AbstractTransactionAspect; SearchStrategy: all) did not find any beans of type org.springframework.transaction.aspectj.AbstractTransactionAspect (OnBeanCondition)
+
+ TransactionAutoConfiguration.EnableTransactionManagementConfiguration:
+ Did not match:
+ - @ConditionalOnMissingBean (types: org.springframework.transaction.annotation.AbstractTransactionManagementConfiguration; SearchStrategy: all) found beans of type 'org.springframework.transaction.annotation.AbstractTransactionManagementConfiguration' org.springframework.transaction.annotation.ProxyTransactionManagementConfiguration (OnBeanCondition)
+
+ TransactionAutoConfiguration.EnableTransactionManagementConfiguration.CglibAutoProxyConfiguration:
+ Did not match:
+ - Ancestor org.springframework.boot.autoconfigure.transaction.TransactionAutoConfiguration$EnableTransactionManagementConfiguration did not match (ConditionEvaluationReport.AncestorsMatchedCondition)
+ Matched:
+ - @ConditionalOnBooleanProperty (spring.aop.proxy-target-class=true) matched (OnPropertyCondition)
+
+ TransactionAutoConfiguration.EnableTransactionManagementConfiguration.JdkDynamicAutoProxyConfiguration:
+ Did not match:
+ - @ConditionalOnBooleanProperty (spring.aop.proxy-target-class=false) did not find property 'spring.aop.proxy-target-class' (OnPropertyCondition)
+ - Ancestor org.springframework.boot.autoconfigure.transaction.TransactionAutoConfiguration$EnableTransactionManagementConfiguration did not match (ConditionEvaluationReport.AncestorsMatchedCondition)
+
+ UserDetailsServiceAutoConfiguration:
+ Did not match:
+ - @ConditionalOnClass did not find required class 'org.springframework.security.authentication.AuthenticationManager' (OnClassCondition)
+
+ WavefrontAutoConfiguration:
+ Did not match:
+ - @ConditionalOnClass did not find required class 'com.wavefront.sdk.common.application.ApplicationTags' (OnClassCondition)
+
+ WavefrontMetricsExportAutoConfiguration:
+ Did not match:
+ - @ConditionalOnClass did not find required class 'com.wavefront.sdk.common.WavefrontSender' (OnClassCondition)
+
+ WavefrontTracingAutoConfiguration:
+ Did not match:
+ - @ConditionalOnClass did not find required class 'com.wavefront.sdk.common.WavefrontSender' (OnClassCondition)
+
+ WebClientAutoConfiguration:
+ Did not match:
+ - @ConditionalOnClass did not find required class 'org.springframework.web.reactive.function.client.WebClient' (OnClassCondition)
+
+ WebClientObservationConfiguration:
+ Did not match:
+ - @ConditionalOnClass did not find required class 'org.springframework.web.reactive.function.client.WebClient' (OnClassCondition)
+
+ WebFluxAutoConfiguration:
+ Did not match:
+ - @ConditionalOnClass did not find required class 'org.springframework.web.reactive.config.WebFluxConfigurer' (OnClassCondition)
+
+ WebFluxEndpointManagementContextConfiguration:
+ Did not match:
+ - @ConditionalOnClass did not find required class 'org.springframework.web.reactive.DispatcherHandler' (OnClassCondition)
+
+ WebFluxObservationAutoConfiguration:
+ Did not match:
+ - @ConditionalOnWebApplication did not find reactive web application classes (OnWebApplicationCondition)
+
+ WebMvcAutoConfiguration#hiddenHttpMethodFilter:
+ Did not match:
+ - @ConditionalOnBooleanProperty (spring.mvc.hiddenmethod.filter.enabled=true) did not find property 'spring.mvc.hiddenmethod.filter.enabled' (OnPropertyCondition)
+
+ WebMvcAutoConfiguration.ProblemDetailsErrorHandlingConfiguration:
+ Did not match:
+ - @ConditionalOnBooleanProperty (spring.mvc.problemdetails.enabled=true) did not find property 'spring.mvc.problemdetails.enabled' (OnPropertyCondition)
+
+ WebMvcAutoConfiguration.ResourceChainCustomizerConfiguration:
+ Did not match:
+ - @ConditionalOnEnabledResourceChain did not find class org.webjars.WebJarVersionLocator (OnEnabledResourceChainCondition)
+
+ WebMvcAutoConfiguration.WebMvcAutoConfigurationAdapter#beanNameViewResolver:
+ Did not match:
+ - @ConditionalOnMissingBean (types: org.springframework.web.servlet.view.BeanNameViewResolver; SearchStrategy: all) found beans of type 'org.springframework.web.servlet.view.BeanNameViewResolver' beanNameViewResolver (OnBeanCondition)
+
+ WebMvcEndpointManagementContextConfiguration#managementHealthEndpointWebMvcHandlerMapping:
+ Did not match:
+ - Management Port actual port type (SAME) did not match required type (DIFFERENT) (OnManagementPortCondition)
+
+ WebServiceTemplateAutoConfiguration:
+ Did not match:
+ - @ConditionalOnClass did not find required class 'org.springframework.oxm.Marshaller' (OnClassCondition)
+
+ WebServicesAutoConfiguration:
+ Did not match:
+ - @ConditionalOnClass did not find required class 'org.springframework.ws.transport.http.MessageDispatcherServlet' (OnClassCondition)
+
+ WebSessionIdResolverAutoConfiguration:
+ Did not match:
+ - @ConditionalOnClass did not find required class 'reactor.core.publisher.Mono' (OnClassCondition)
+
+ WebSocketMessagingAutoConfiguration:
+ Did not match:
+ - @ConditionalOnClass did not find required class 'org.springframework.web.socket.config.annotation.WebSocketMessageBrokerConfigurer' (OnClassCondition)
+
+ WebSocketReactiveAutoConfiguration:
+ Did not match:
+ - @ConditionalOnWebApplication did not find reactive web application classes (OnWebApplicationCondition)
+
+ WebSocketServletAutoConfiguration.JettyWebSocketConfiguration:
+ Did not match:
+ - @ConditionalOnClass did not find required class 'org.eclipse.jetty.ee10.websocket.jakarta.server.config.JakartaWebSocketServletContainerInitializer' (OnClassCondition)
+
+ WebSocketServletAutoConfiguration.UndertowWebSocketConfiguration:
+ Did not match:
+ - @ConditionalOnClass did not find required class 'io.undertow.websockets.jsr.Bootstrap' (OnClassCondition)
+
+ WebTestClientAutoConfiguration:
+ Did not match:
+ - @ConditionalOnClass did not find required class 'org.springframework.web.reactive.function.client.WebClient' (OnClassCondition)
+
+ XADataSourceAutoConfiguration:
+ Did not match:
+ - @ConditionalOnBean (types: org.springframework.boot.jdbc.XADataSourceWrapper; SearchStrategy: all) did not find any beans of type org.springframework.boot.jdbc.XADataSourceWrapper (OnBeanCondition)
+ Matched:
+ - @ConditionalOnClass found required classes 'javax.sql.DataSource', 'jakarta.transaction.TransactionManager', 'org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseType' (OnClassCondition)
+
+ ZipkinAutoConfiguration:
+ Did not match:
+ - @ConditionalOnClass did not find required class 'zipkin2.reporter.Encoding' (OnClassCondition)
+
+
+Exclusions:
+-----------
+
+ None
+
+
+Unconditional classes:
+----------------------
+
+ org.springframework.boot.autoconfigure.context.ConfigurationPropertiesAutoConfiguration
+
+ org.springframework.boot.actuate.autoconfigure.availability.AvailabilityHealthContributorAutoConfiguration
+
+ org.springframework.boot.autoconfigure.ssl.SslAutoConfiguration
+
+ org.springframework.boot.actuate.autoconfigure.info.InfoContributorAutoConfiguration
+
+ org.springframework.boot.autoconfigure.context.PropertyPlaceholderAutoConfiguration
+
+ org.springframework.boot.autoconfigure.context.LifecycleAutoConfiguration
+
+ org.springframework.boot.actuate.autoconfigure.metrics.integration.IntegrationMetricsAutoConfiguration
+
+ org.springframework.boot.actuate.autoconfigure.endpoint.EndpointAutoConfiguration
+
+ org.springframework.boot.actuate.autoconfigure.web.server.ManagementContextAutoConfiguration
+
+ org.springframework.boot.actuate.autoconfigure.health.HealthContributorAutoConfiguration
+
+ org.springframework.boot.actuate.autoconfigure.endpoint.jackson.JacksonEndpointAutoConfiguration
+
+ org.springframework.boot.autoconfigure.availability.ApplicationAvailabilityAutoConfiguration
+
+ org.springframework.boot.autoconfigure.info.ProjectInfoAutoConfiguration
+
+
+
+2025-10-10 15:03:33.437 [main] DEBUG o.s.b.d.LoggingFailureAnalysisReporter - Application failed to start due to an exception
+org.springframework.boot.autoconfigure.jdbc.DataSourceProperties$DataSourceBeanCreationException: Failed to determine a suitable driver class
+ at org.springframework.boot.autoconfigure.jdbc.DataSourceProperties.determineDriverClassName(DataSourceProperties.java:176)
+ at org.springframework.boot.autoconfigure.jdbc.PropertiesJdbcConnectionDetails.getDriverClassName(PropertiesJdbcConnectionDetails.java:49)
+ at org.springframework.boot.autoconfigure.jdbc.DataSourceConfiguration.createDataSource(DataSourceConfiguration.java:62)
+ at org.springframework.boot.autoconfigure.jdbc.DataSourceConfiguration$Hikari.dataSource(DataSourceConfiguration.java:127)
+ at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
+ at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
+ at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
+ at java.base/java.lang.reflect.Method.invoke(Method.java:569)
+ at org.springframework.beans.factory.support.SimpleInstantiationStrategy.lambda$instantiate$0(SimpleInstantiationStrategy.java:172)
+ at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiateWithFactoryMethod(SimpleInstantiationStrategy.java:89)
+ at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:169)
+ at org.springframework.beans.factory.support.ConstructorResolver.instantiate(ConstructorResolver.java:653)
+ at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:645)
+ at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1375)
+ at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1205)
+ at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:569)
+ at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:529)
+ at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:339)
+ at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:373)
+ at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:337)
+ at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:202)
+ at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1698)
+ at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1643)
+ at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:913)
+ at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:791)
+ at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:546)
+ at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1375)
+ at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1205)
+ at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:569)
+ at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:529)
+ at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:339)
+ at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:373)
+ at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:337)
+ at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:202)
+ at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:315)
+ at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:207)
+ at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:970)
+ at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:627)
+ at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:752)
+ at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:439)
+ at org.springframework.boot.SpringApplication.run(SpringApplication.java:318)
+ at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:144)
+ at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:58)
+ at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:46)
+ at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1461)
+ at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:563)
+ at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:144)
+ at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:110)
+ at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:225)
+ at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:152)
+ at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:130)
+ at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:200)
+ at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:139)
+ at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:260)
+ at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:159)
+ at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:383)
+ at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:388)
+ at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:382)
+ at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183)
+ at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197)
+ at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179)
+ at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197)
+ at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625)
+ at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509)
+ at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499)
+ at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150)
+ at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173)
+ at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
+ at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596)
+ at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:382)
+ at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:293)
+ at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
+ at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:292)
+ at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:281)
+ at java.base/java.util.Optional.orElseGet(Optional.java:364)
+ at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:280)
+ at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:27)
+ at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:112)
+ at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
+ at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:111)
+ at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:69)
+ at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:128)
+ at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
+ at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:128)
+ at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95)
+ at java.base/java.util.ArrayList.forEach(ArrayList.java:1511)
+ at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41)
+ at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:160)
+ at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
+ at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:146)
+ at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137)
+ at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:144)
+ at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
+ at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:143)
+ at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:100)
+ at java.base/java.util.ArrayList.forEach(ArrayList.java:1511)
+ at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41)
+ at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:160)
+ at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
+ at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:146)
+ at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137)
+ at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:144)
+ at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
+ at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:143)
+ at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:100)
+ at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35)
+ at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57)
+ at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54)
+ at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:201)
+ at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:170)
+ at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:94)
+ at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:59)
+ at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:142)
+ at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:58)
+ at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:103)
+ at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:85)
+ at org.junit.platform.launcher.core.DelegatingLauncher.execute(DelegatingLauncher.java:47)
+ at org.junit.platform.launcher.core.InterceptingLauncher.lambda$execute$1(InterceptingLauncher.java:39)
+ at org.junit.platform.launcher.core.ClasspathAlignmentCheckingLauncherInterceptor.intercept(ClasspathAlignmentCheckingLauncherInterceptor.java:25)
+ at org.junit.platform.launcher.core.InterceptingLauncher.execute(InterceptingLauncher.java:38)
+ at org.junit.platform.launcher.core.DelegatingLauncher.execute(DelegatingLauncher.java:47)
+ at org.junit.platform.launcher.core.SessionPerRequestLauncher.execute(SessionPerRequestLauncher.java:63)
+ at com.intellij.junit5.JUnit5IdeaTestRunner.startRunnerWithArgs(JUnit5IdeaTestRunner.java:57)
+ at com.intellij.rt.junit.IdeaTestRunner$Repeater$1.execute(IdeaTestRunner.java:38)
+ at com.intellij.rt.execution.junit.TestsRepeater.repeat(TestsRepeater.java:11)
+ at com.intellij.rt.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:35)
+ at com.intellij.rt.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:231)
+ at com.intellij.rt.junit.JUnitStarter.main(JUnitStarter.java:55)
+2025-10-10 15:03:33.440 [main] ERROR o.s.b.d.LoggingFailureAnalysisReporter -
+
+***************************
+APPLICATION FAILED TO START
+***************************
+
+Description:
+
+Failed to configure a DataSource: 'url' attribute is not specified and no embedded datasource could be configured.
+
+Reason: Failed to determine a suitable driver class
+
+
+Action:
+
+Consider the following:
+ If you want an embedded database (H2, HSQL or Derby), please put it on the classpath.
+ If you have database settings to be loaded from a particular profile you may need to activate it (the profiles test are currently active).
+
+2025-10-10 15:03:33.445 [main] DEBUG o.springframework.test.context.cache - Spring test ApplicationContext cache statistics: [DefaultContextCache@5e37fb82 size = 0, maxSize = 32, parentContextCount = 0, hitCount = 0, missCount = 1, failureCount = 1]
+2025-10-10 15:03:33.445 [main] WARN o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [com.deepchart.integration.ApiSignIntegrationTest@59ec7020]
+java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@426710f0 testClass = com.deepchart.integration.ApiSignIntegrationTest, locations = [], classes = [com.deepchart.DeepchartApplication], contextInitializerClasses = [], activeProfiles = ["test"], propertySourceDescriptors = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [[ImportsContextCustomizer@5c5a91b4 key = [org.springframework.boot.autoconfigure.security.oauth2.client.servlet.OAuth2ClientWebSecurityAutoConfiguration, org.springframework.boot.autoconfigure.security.saml2.Saml2RelyingPartyAutoConfiguration, org.springframework.boot.test.autoconfigure.web.servlet.MockMvcSecurityConfiguration, org.springframework.boot.test.autoconfigure.web.servlet.MockMvcWebClientAutoConfiguration, org.springframework.boot.test.autoconfigure.web.reactive.WebTestClientAutoConfiguration, org.springframework.boot.test.autoconfigure.web.servlet.MockMvcWebDriverAutoConfiguration, org.springframework.boot.test.autoconfigure.web.servlet.MockMvcAutoConfiguration, org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration, org.springframework.boot.autoconfigure.security.servlet.SecurityFilterAutoConfiguration, org.springframework.boot.autoconfigure.security.servlet.UserDetailsServiceAutoConfiguration, org.springframework.boot.autoconfigure.security.oauth2.resource.servlet.OAuth2ResourceServerAutoConfiguration, org.springframework.boot.autoconfigure.security.oauth2.client.OAuth2ClientAutoConfiguration]], org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@57db2b13, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@71687585, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@0, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@12591ac8, org.springframework.boot.test.web.reactor.netty.DisableReactorResourceFactoryGlobalResourcesContextCustomizerFactory$DisableReactorResourceFactoryGlobalResourcesContextCustomizerCustomizer@49c90a9c, org.springframework.boot.test.autoconfigure.OnFailureConditionReportContextCustomizerFactory$OnFailureConditionReportContextCustomizer@6e2aa843, org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@1f, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@4b3fa0b3, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizer@10289886, org.springframework.test.context.support.DynamicPropertiesContextCustomizer@0, org.springframework.boot.test.context.SpringBootTestAnnotation@6c00a450], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null]
+ at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:180)
+ at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:130)
+ at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:200)
+ at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:139)
+ at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:260)
+ at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:159)
+ at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:383)
+ at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:388)
+ at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:382)
+ at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183)
+ at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197)
+ at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179)
+ at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197)
+ at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625)
+ at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509)
+ at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499)
+ at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150)
+ at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173)
+ at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
+ at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596)
+ at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:382)
+ at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:293)
+ at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
+ at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:292)
+ at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:281)
+ at java.base/java.util.Optional.orElseGet(Optional.java:364)
+ at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:280)
+ at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:27)
+ at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:112)
+ at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
+ at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:111)
+ at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:69)
+ at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:128)
+ at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
+ at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:128)
+ at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95)
+ at java.base/java.util.ArrayList.forEach(ArrayList.java:1511)
+ at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41)
+ at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:160)
+ at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
+ at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:146)
+ at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137)
+ at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:144)
+ at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
+ at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:143)
+ at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:100)
+ at java.base/java.util.ArrayList.forEach(ArrayList.java:1511)
+ at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41)
+ at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:160)
+ at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
+ at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:146)
+ at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137)
+ at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:144)
+ at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
+ at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:143)
+ at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:100)
+ at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35)
+ at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57)
+ at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54)
+ at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:201)
+ at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:170)
+ at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:94)
+ at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:59)
+ at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:142)
+ at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:58)
+ at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:103)
+ at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:85)
+ at org.junit.platform.launcher.core.DelegatingLauncher.execute(DelegatingLauncher.java:47)
+ at org.junit.platform.launcher.core.InterceptingLauncher.lambda$execute$1(InterceptingLauncher.java:39)
+ at org.junit.platform.launcher.core.ClasspathAlignmentCheckingLauncherInterceptor.intercept(ClasspathAlignmentCheckingLauncherInterceptor.java:25)
+ at org.junit.platform.launcher.core.InterceptingLauncher.execute(InterceptingLauncher.java:38)
+ at org.junit.platform.launcher.core.DelegatingLauncher.execute(DelegatingLauncher.java:47)
+ at org.junit.platform.launcher.core.SessionPerRequestLauncher.execute(SessionPerRequestLauncher.java:63)
+ at com.intellij.junit5.JUnit5IdeaTestRunner.startRunnerWithArgs(JUnit5IdeaTestRunner.java:57)
+ at com.intellij.rt.junit.IdeaTestRunner$Repeater$1.execute(IdeaTestRunner.java:38)
+ at com.intellij.rt.execution.junit.TestsRepeater.repeat(TestsRepeater.java:11)
+ at com.intellij.rt.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:35)
+ at com.intellij.rt.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:231)
+ at com.intellij.rt.junit.JUnitStarter.main(JUnitStarter.java:55)
+Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Failed to initialize dependency 'dataSourceScriptDatabaseInitializer' of LoadTimeWeaverAware bean 'entityManagerFactory': Error creating bean with name 'dataSourceScriptDatabaseInitializer' defined in class path resource [org/springframework/boot/autoconfigure/sql/init/DataSourceInitializationConfiguration.class]: Unsatisfied dependency expressed through method 'dataSourceScriptDatabaseInitializer' parameter 0: Error creating bean with name 'dataSource' defined in class path resource [org/springframework/boot/autoconfigure/jdbc/DataSourceConfiguration$Hikari.class]: Failed to instantiate [com.zaxxer.hikari.HikariDataSource]: Factory method 'dataSource' threw exception with message: Failed to determine a suitable driver class
+ at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:328)
+ at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:207)
+ at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:970)
+ at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:627)
+ at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:752)
+ at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:439)
+ at org.springframework.boot.SpringApplication.run(SpringApplication.java:318)
+ at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:144)
+ at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:58)
+ at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:46)
+ at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1461)
+ at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:563)
+ at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:144)
+ at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:110)
+ at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:225)
+ at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:152)
+ ... 78 common frames omitted
+Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'dataSourceScriptDatabaseInitializer' defined in class path resource [org/springframework/boot/autoconfigure/sql/init/DataSourceInitializationConfiguration.class]: Unsatisfied dependency expressed through method 'dataSourceScriptDatabaseInitializer' parameter 0: Error creating bean with name 'dataSource' defined in class path resource [org/springframework/boot/autoconfigure/jdbc/DataSourceConfiguration$Hikari.class]: Failed to instantiate [com.zaxxer.hikari.HikariDataSource]: Factory method 'dataSource' threw exception with message: Failed to determine a suitable driver class
+ at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:804)
+ at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:546)
+ at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1375)
+ at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1205)
+ at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:569)
+ at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:529)
+ at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:339)
+ at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:373)
+ at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:337)
+ at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:202)
+ at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:315)
+ ... 93 common frames omitted
+Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'dataSource' defined in class path resource [org/springframework/boot/autoconfigure/jdbc/DataSourceConfiguration$Hikari.class]: Failed to instantiate [com.zaxxer.hikari.HikariDataSource]: Factory method 'dataSource' threw exception with message: Failed to determine a suitable driver class
+ at org.springframework.beans.factory.support.ConstructorResolver.instantiate(ConstructorResolver.java:657)
+ at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:645)
+ at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1375)
+ at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1205)
+ at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:569)
+ at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:529)
+ at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:339)
+ at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:373)
+ at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:337)
+ at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:202)
+ at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1698)
+ at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1643)
+ at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:913)
+ at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:791)
+ ... 103 common frames omitted
+Caused by: org.springframework.beans.BeanInstantiationException: Failed to instantiate [com.zaxxer.hikari.HikariDataSource]: Factory method 'dataSource' threw exception with message: Failed to determine a suitable driver class
+ at org.springframework.beans.factory.support.SimpleInstantiationStrategy.lambda$instantiate$0(SimpleInstantiationStrategy.java:200)
+ at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiateWithFactoryMethod(SimpleInstantiationStrategy.java:89)
+ at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:169)
+ at org.springframework.beans.factory.support.ConstructorResolver.instantiate(ConstructorResolver.java:653)
+ ... 116 common frames omitted
+Caused by: org.springframework.boot.autoconfigure.jdbc.DataSourceProperties$DataSourceBeanCreationException: Failed to determine a suitable driver class
+ at org.springframework.boot.autoconfigure.jdbc.DataSourceProperties.determineDriverClassName(DataSourceProperties.java:176)
+ at org.springframework.boot.autoconfigure.jdbc.PropertiesJdbcConnectionDetails.getDriverClassName(PropertiesJdbcConnectionDetails.java:49)
+ at org.springframework.boot.autoconfigure.jdbc.DataSourceConfiguration.createDataSource(DataSourceConfiguration.java:62)
+ at org.springframework.boot.autoconfigure.jdbc.DataSourceConfiguration$Hikari.dataSource(DataSourceConfiguration.java:127)
+ at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
+ at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
+ at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
+ at java.base/java.lang.reflect.Method.invoke(Method.java:569)
+ at org.springframework.beans.factory.support.SimpleInstantiationStrategy.lambda$instantiate$0(SimpleInstantiationStrategy.java:172)
+ ... 119 common frames omitted
+2025-10-10 15:03:33.477 [main] DEBUG o.s.t.c.s.DirtiesContextTestExecutionListener - After test class: class [ApiSignIntegrationTest], class annotated with @DirtiesContext [false] with mode [null]
diff --git a/pom.xml b/pom.xml
index 389c67b..30248ab 100644
--- a/pom.xml
+++ b/pom.xml
@@ -71,6 +71,12 @@
spring-boot-starter-test
test
+
+ org.testng
+ testng
+ RELEASE
+ compile
+
diff --git a/src/test/java/com/deepchart/common/sign/ApiSignPropertiesTest.java b/src/test/java/com/deepchart/common/sign/ApiSignPropertiesTest.java
new file mode 100644
index 0000000..b89701d
--- /dev/null
+++ b/src/test/java/com/deepchart/common/sign/ApiSignPropertiesTest.java
@@ -0,0 +1,110 @@
+package com.deepchart.common.sign;
+
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.DisplayName;
+import org.junit.jupiter.api.Test;
+import org.springframework.boot.test.context.SpringBootTest;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import static org.junit.jupiter.api.Assertions.*;
+
+@SpringBootTest
+@DisplayName("API签名配置测试")
+class ApiSignPropertiesTest {
+
+ private ApiSignProperties apiSignProperties;
+
+ @BeforeEach
+ void setUp() {
+ apiSignProperties = new ApiSignProperties();
+
+ Map appSecrets = new HashMap<>();
+ appSecrets.put("web-app", "web_secret_123");
+ appSecrets.put("mobile-app", "mobile_secret_456");
+ appSecrets.put("third-party", "third_party_secret_789");
+
+ apiSignProperties.setAppSecrets(appSecrets);
+ apiSignProperties.setEnabled(true);
+ apiSignProperties.setExpireTime(300000L);
+ apiSignProperties.setIncludePatterns(new String[]{"/api/**"});
+ apiSignProperties.setExcludePatterns(new String[]{"/api/public/**"});
+ }
+
+ @Test
+ @DisplayName("获取应用密钥 - 存在")
+ void testGetAppSecret_Exists() {
+ // 执行
+ String secret = apiSignProperties.getAppSecret("web-app");
+
+ // 验证
+ assertEquals("web_secret_123", secret);
+ }
+
+ @Test
+ @DisplayName("获取应用密钥 - 不存在")
+ void testGetAppSecret_NotExists() {
+ // 执行
+ String secret = apiSignProperties.getAppSecret("non-existent-app");
+
+ // 验证
+ assertNull(secret);
+ }
+
+ @Test
+ @DisplayName("检查应用ID - 存在")
+ void testContainsAppId_Exists() {
+ // 执行 & 验证
+ assertTrue(apiSignProperties.containsAppId("web-app"));
+ assertTrue(apiSignProperties.containsAppId("mobile-app"));
+ assertTrue(apiSignProperties.containsAppId("third-party"));
+ }
+
+ @Test
+ @DisplayName("检查应用ID - 不存在")
+ void testContainsAppId_NotExists() {
+ // 执行 & 验证
+ assertFalse(apiSignProperties.containsAppId("non-existent-app"));
+ assertFalse(apiSignProperties.containsAppId(""));
+ assertFalse(apiSignProperties.containsAppId(null));
+ }
+
+ @Test
+ @DisplayName("默认值测试")
+ void testDefaultValues() {
+ // 准备
+ ApiSignProperties defaultProperties = new ApiSignProperties();
+
+ // 验证
+ assertTrue(defaultProperties.isEnabled());
+ assertEquals(300000L, defaultProperties.getExpireTime());
+ assertNotNull(defaultProperties.getAppSecrets());
+ assertNotNull(defaultProperties.getIncludePatterns());
+ assertNotNull(defaultProperties.getExcludePatterns());
+ }
+
+ @Test
+ @DisplayName("Setter/Getter测试")
+ void testSettersAndGetters() {
+ // 准备
+ ApiSignProperties properties = new ApiSignProperties();
+
+ // 执行
+ properties.setEnabled(false);
+ properties.setExpireTime(600000L);
+ properties.setIncludePatterns(new String[]{"/secure/**"});
+ properties.setExcludePatterns(new String[]{"/secure/public/**"});
+
+ Map secrets = new HashMap<>();
+ secrets.put("test-app", "test_secret");
+ properties.setAppSecrets(secrets);
+
+ // 验证
+ assertFalse(properties.isEnabled());
+ assertEquals(600000L, properties.getExpireTime());
+ assertArrayEquals(new String[]{"/secure/**"}, properties.getIncludePatterns());
+ assertArrayEquals(new String[]{"/secure/public/**"}, properties.getExcludePatterns());
+ assertEquals("test_secret", properties.getAppSecret("test-app"));
+ }
+}
\ No newline at end of file
diff --git a/src/test/java/com/deepchart/common/sign/SignInterceptorTest.java b/src/test/java/com/deepchart/common/sign/SignInterceptorTest.java
new file mode 100644
index 0000000..a9a15f8
--- /dev/null
+++ b/src/test/java/com/deepchart/common/sign/SignInterceptorTest.java
@@ -0,0 +1,266 @@
+package com.deepchart.common.sign;
+
+import com.deepchart.common.exception.SignatureException;
+import jakarta.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpServletResponse;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.DisplayName;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.ExtendWith;
+import org.mockito.Mock;
+import org.mockito.junit.jupiter.MockitoExtension;
+import org.springframework.util.AntPathMatcher;
+
+import java.util.Enumeration;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Vector;
+
+import static org.junit.jupiter.api.Assertions.*;
+import static org.mockito.ArgumentMatchers.anyString;
+import static org.mockito.Mockito.*;
+
+@ExtendWith(MockitoExtension.class)
+@DisplayName("签名拦截器测试")
+class SignInterceptorTest {
+
+ @Mock
+ private HttpServletRequest request;
+
+ @Mock
+ private HttpServletResponse response;
+
+ @Mock
+ private Object handler;
+
+ private ApiSignProperties apiSignProperties;
+ private SignInterceptor signInterceptor;
+
+ @BeforeEach
+ void setUp() {
+ apiSignProperties = new ApiSignProperties();
+ apiSignProperties.setEnabled(true);
+
+ Map appSecrets = new HashMap<>();
+ appSecrets.put("web-app", "web_app_secret_2024");
+ appSecrets.put("mobile-app", "mobile_app_secret_2024");
+ apiSignProperties.setAppSecrets(appSecrets);
+
+ apiSignProperties.setIncludePatterns(new String[]{"/api/**"});
+ apiSignProperties.setExcludePatterns(new String[]{"/api/actuator/**", "/api/public/**"});
+
+ signInterceptor = new SignInterceptor(apiSignProperties);
+ }
+
+ @Test
+ @DisplayName("拦截器 - 签名验证通过")
+ void testPreHandle_Success() throws Exception {
+ // 准备
+ when(request.getRequestURI()).thenReturn("/api/users");
+ setupValidSignatureHeaders();
+
+ // 执行
+ boolean result = signInterceptor.preHandle(request, response, handler);
+
+ // 验证
+ assertTrue(result, "签名验证通过应返回true");
+ }
+
+ @Test
+ @DisplayName("拦截器 - 签名验证失败")
+ void testPreHandle_SignatureFailed() {
+ // 准备
+ when(request.getRequestURI()).thenReturn("/api/users");
+ setupInvalidSignatureHeaders();
+
+ // 执行 & 验证
+ SignatureException exception = assertThrows(SignatureException.class,
+ () -> signInterceptor.preHandle(request, response, handler));
+
+ assertEquals("签名验证失败", exception.getMessage());
+ }
+
+ @Test
+ @DisplayName("拦截器 - 无效appId")
+ void testPreHandle_InvalidAppId() {
+ // 准备
+ when(request.getRequestURI()).thenReturn("/api/users");
+ setupHeadersWithInvalidAppId();
+
+ // 执行 & 验证
+ SignatureException exception = assertThrows(SignatureException.class,
+ () -> signInterceptor.preHandle(request, response, handler));
+
+ assertEquals("应用ID无效", exception.getMessage());
+ }
+
+ @Test
+ @DisplayName("拦截器 - 缺少必要参数")
+ void testPreHandle_MissingRequiredParams() {
+ // 准备
+ when(request.getRequestURI()).thenReturn("/api/users");
+ setupHeadersWithMissingParams();
+
+ // 执行 & 验证
+ SignatureException exception = assertThrows(SignatureException.class,
+ () -> signInterceptor.preHandle(request, response, handler));
+
+ assertEquals("签名参数缺失", exception.getMessage());
+ }
+
+ @Test
+ @DisplayName("拦截器 - 排除路径不验证")
+ void testPreHandle_ExcludedPath() throws Exception {
+ // 准备
+ when(request.getRequestURI()).thenReturn("/api/actuator/health");
+
+ // 执行
+ boolean result = signInterceptor.preHandle(request, response, handler);
+
+ // 验证
+ assertTrue(result, "排除路径应直接通过");
+ verify(request, never()).getHeader(anyString());
+ }
+
+ @Test
+ @DisplayName("拦截器 - 非包含路径不验证")
+ void testPreHandle_NotIncludedPath() throws Exception {
+ // 准备
+ when(request.getRequestURI()).thenReturn("/other/path");
+
+ // 执行
+ boolean result = signInterceptor.preHandle(request, response, handler);
+
+ // 验证
+ assertTrue(result, "非包含路径应直接通过");
+ verify(request, never()).getHeader(anyString());
+ }
+
+ @Test
+ @DisplayName("拦截器 - 签名验证禁用")
+ void testPreHandle_SignDisabled() throws Exception {
+ // 准备
+ apiSignProperties.setEnabled(false);
+ when(request.getRequestURI()).thenReturn("/api/users");
+
+ // 执行
+ boolean result = signInterceptor.preHandle(request, response, handler);
+
+ // 验证
+ assertTrue(result, "签名验证禁用时应直接通过");
+ verify(request, never()).getHeader(anyString());
+ }
+
+ @Test
+ @DisplayName("提取签名参数 - 从Header")
+ void testExtractSignParams_FromHeaders() {
+ // 准备
+ setupValidSignatureHeaders();
+
+ // 执行 - 通过反射调用私有方法
+ Map params = extractSignParams();
+
+ // 验证
+ assertNotNull(params);
+ assertEquals("web-app", params.get("appid"));
+ assertEquals("1640995200000", params.get("timestamp"));
+ assertEquals("abc123def456", params.get("nonce"));
+ assertEquals("valid_signature", params.get("sign"));
+ }
+
+ @Test
+ @DisplayName("提取签名参数 - 从URL参数")
+ void testExtractSignParams_FromParameters() {
+ // 准备
+ when(request.getRequestURI()).thenReturn("/api/users");
+
+ // 设置URL参数
+ when(request.getParameter("appId")).thenReturn("web-app");
+ when(request.getParameter("timestamp")).thenReturn("1640995200000");
+ when(request.getParameter("nonce")).thenReturn("abc123def456");
+ when(request.getParameter("sign")).thenReturn("valid_signature");
+
+ // 执行 - 通过反射调用私有方法
+ Map params = extractSignParams();
+
+ // 验证
+ assertNotNull(params);
+ assertEquals("web-app", params.get("appid"));
+ assertEquals("1640995200000", params.get("timestamp"));
+ assertEquals("abc123def456", params.get("nonce"));
+ assertEquals("valid_signature", params.get("sign"));
+ }
+
+ // 辅助方法:设置有效的签名Header
+ private void setupValidSignatureHeaders() {
+ Map headers = new HashMap<>();
+ headers.put("X-API-APPID", "web-app");
+ headers.put("X-API-TIMESTAMP", "1640995200000");
+ headers.put("X-API-NONCE", "abc123def456");
+ headers.put("X-API-SIGN", "valid_signature");
+
+ setupHeaders(headers);
+
+ // 设置签名验证通过
+ Map signParams = new HashMap<>();
+ signParams.put("appid", "web-app");
+ signParams.put("timestamp", "1640995200000");
+ signParams.put("nonce", "abc123def456");
+ signParams.put("sign", "valid_signature");
+
+ // 这里需要模拟SignUtil.verifySign返回true
+ // 实际项目中可以使用PowerMock或重构代码使其可测试
+ }
+
+ // 辅助方法:设置无效的签名Header
+ private void setupInvalidSignatureHeaders() {
+ Map headers = new HashMap<>();
+ headers.put("X-API-APPID", "web-app");
+ headers.put("X-API-TIMESTAMP", "1640995200000");
+ headers.put("X-API-NONCE", "abc123def456");
+ headers.put("X-API-SIGN", "invalid_signature");
+
+ setupHeaders(headers);
+ }
+
+ // 辅助方法:设置无效的appId
+ private void setupHeadersWithInvalidAppId() {
+ Map headers = new HashMap<>();
+ headers.put("X-API-APPID", "invalid-app");
+ headers.put("X-API-TIMESTAMP", "1640995200000");
+ headers.put("X-API-NONCE", "abc123def456");
+ headers.put("X-API-SIGN", "some_signature");
+
+ setupHeaders(headers);
+ }
+
+ // 辅助方法:设置缺少参数的Header
+ private void setupHeadersWithMissingParams() {
+ Map headers = new HashMap<>();
+ headers.put("X-API-APPID", "web-app");
+ // 缺少timestamp、nonce、sign
+
+ setupHeaders(headers);
+ }
+
+ // 辅助方法:设置Header
+ private void setupHeaders(Map headers) {
+ Vector headerNames = new Vector<>(headers.keySet());
+ when(request.getHeaderNames()).thenReturn(headerNames.elements());
+
+ for (Map.Entry entry : headers.entrySet()) {
+ when(request.getHeader(entry.getKey())).thenReturn(entry.getValue());
+ }
+ }
+
+ // 辅助方法:通过反射调用私有方法extractSignParams
+ private Map extractSignParams() {
+ try {
+ var method = SignInterceptor.class.getDeclaredMethod("extractSignParams", HttpServletRequest.class);
+ method.setAccessible(true);
+ return (Map) method.invoke(signInterceptor, request);
+ } catch (Exception e) {
+ throw new RuntimeException("反射调用失败", e);
+ }
+ }
+}
diff --git a/src/test/java/com/deepchart/common/sign/SignUtilTest.java b/src/test/java/com/deepchart/common/sign/SignUtilTest.java
new file mode 100644
index 0000000..bdbd5fd
--- /dev/null
+++ b/src/test/java/com/deepchart/common/sign/SignUtilTest.java
@@ -0,0 +1,260 @@
+package com.deepchart.common.sign;
+
+import com.deepchart.common.util.SignUtil;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.DisplayName;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.NullAndEmptySource;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import static org.junit.jupiter.api.Assertions.*;
+
+@DisplayName("签名工具测试")
+class SignUtilTest {
+
+ private static final String APP_SECRET = "test_secret_2024";
+ private Map testParams;
+
+ @BeforeEach
+ void setUp() {
+ testParams = new HashMap<>();
+ testParams.put("appId", "test-app");
+ testParams.put("timestamp", String.valueOf(System.currentTimeMillis()));
+ testParams.put("nonce", "abc123def456");
+ testParams.put("username", "testuser");
+ testParams.put("email", "test@example.com");
+ }
+
+ @Test
+ @DisplayName("生成签名 - 正常情况")
+ void testGenerateSign_NormalCase() {
+ // 执行
+ String sign = SignUtil.generateSign(testParams, APP_SECRET);
+
+ // 验证
+ assertNotNull(sign, "签名不应为null");
+ assertEquals(32, sign.length(), "MD5签名长度应为32");
+ assertTrue(sign.matches("^[a-f0-9]{32}$"), "签名应为32位十六进制字符串");
+ }
+
+ @Test
+ @DisplayName("生成签名 - 参数排序")
+ void testGenerateSign_ParameterOrder() {
+ // 准备不同顺序的参数
+ Map params1 = new HashMap<>();
+ params1.put("z", "value1");
+ params1.put("a", "value2");
+ params1.put("m", "value3");
+
+ Map params2 = new HashMap<>();
+ params2.put("a", "value2");
+ params2.put("m", "value3");
+ params2.put("z", "value1");
+
+ // 执行
+ String sign1 = SignUtil.generateSign(params1, APP_SECRET);
+ String sign2 = SignUtil.generateSign(params2, APP_SECRET);
+
+ // 验证
+ assertEquals(sign1, sign2, "不同参数顺序应生成相同签名");
+ System.out.println("sign1: " + sign1);
+ System.out.println("sign2: " + sign2);
+ }
+
+ @Test
+ @DisplayName("验证签名 - 正确签名")
+ void testVerifySign_CorrectSign() {
+ // 准备
+ String sign = SignUtil.generateSign(testParams, APP_SECRET);
+ testParams.put("sign", sign);
+
+ // 执行
+ boolean isValid = SignUtil.verifySign(testParams, APP_SECRET, sign);
+
+ // 验证
+ assertTrue(isValid, "正确签名应验证通过");
+ }
+
+ @Test
+ @DisplayName("验证签名 - 错误签名")
+ void testVerifySign_WrongSign() {
+ // 准备
+ String correctSign = SignUtil.generateSign(testParams, APP_SECRET);
+ String wrongSign = "wrong_signature_1234567890";
+
+ // 执行
+ boolean isValid = SignUtil.verifySign(testParams, APP_SECRET, wrongSign);
+
+ // 验证
+ assertFalse(isValid, "错误签名应验证失败");
+ }
+
+ @Test
+ @DisplayName("验证签名 - 过期时间戳")
+ void testVerifySign_ExpiredTimestamp() {
+ // 准备过期时间戳(超过5分钟)
+ long expiredTimestamp = System.currentTimeMillis() - 6 * 60 * 1000;
+ testParams.put("timestamp", String.valueOf(expiredTimestamp));
+
+ String sign = SignUtil.generateSign(testParams, APP_SECRET);
+ testParams.put("sign", sign);
+
+ // 执行
+ boolean isValid = SignUtil.verifySign(testParams, APP_SECRET, sign);
+
+ // 验证
+ assertFalse(isValid, "过期时间戳应验证失败");
+ }
+
+ @Test
+ @DisplayName("验证签名 - 未来时间戳")
+ void testVerifySign_FutureTimestamp() {
+ // 准备未来时间戳(超过5分钟)
+ long futureTimestamp = System.currentTimeMillis() + 6 * 60 * 1000;
+ testParams.put("timestamp", String.valueOf(futureTimestamp));
+
+ String sign = SignUtil.generateSign(testParams, APP_SECRET);
+ testParams.put("sign", sign);
+
+ // 执行
+ boolean isValid = SignUtil.verifySign(testParams, APP_SECRET, sign);
+
+ // 验证
+ assertFalse(isValid, "未来时间戳应验证失败");
+ }
+
+ @Test
+ @DisplayName("验证签名 - 无效时间戳格式")
+ void testVerifySign_InvalidTimestampFormat() {
+ // 准备无效时间戳
+ testParams.put("timestamp", "invalid_timestamp");
+
+ String sign = SignUtil.generateSign(testParams, APP_SECRET);
+ testParams.put("sign", sign);
+
+ // 执行
+ boolean isValid = SignUtil.verifySign(testParams, APP_SECRET, sign);
+
+ // 验证
+ assertFalse(isValid, "无效时间戳格式应验证失败");
+ }
+
+ @Test
+ @DisplayName("验证签名 - 缺少时间戳")
+ void testVerifySign_MissingTimestamp() {
+ // 准备缺少时间戳的参数
+ testParams.remove("timestamp");
+
+ String sign = SignUtil.generateSign(testParams, APP_SECRET);
+ testParams.put("sign", sign);
+
+ // 执行
+ boolean isValid = SignUtil.verifySign(testParams, APP_SECRET, sign);
+
+ // 验证
+ assertFalse(isValid, "缺少时间戳应验证失败");
+ }
+
+ @Test
+ @DisplayName("验证签名 - 无效nonce")
+ void testVerifySign_InvalidNonce() {
+ // 准备无效nonce
+ testParams.put("nonce", "short"); // 太短的nonce
+
+ String sign = SignUtil.generateSign(testParams, APP_SECRET);
+ testParams.put("sign", sign);
+
+ // 执行
+ boolean isValid = SignUtil.verifySign(testParams, APP_SECRET, sign);
+
+ // 验证
+ assertFalse(isValid, "无效nonce应验证失败");
+ }
+
+ @ParameterizedTest
+ @NullAndEmptySource
+ @DisplayName("验证签名 - 空或null参数值")
+ void testVerifySign_NullOrEmptyParams(String value) {
+ // 准备空或null参数
+ testParams.put("nonce", value);
+
+ String sign = SignUtil.generateSign(testParams, APP_SECRET);
+ testParams.put("sign", sign);
+
+ // 执行
+ boolean isValid = SignUtil.verifySign(testParams, APP_SECRET, sign);
+
+ // 验证
+ assertFalse(isValid, "空或null参数应验证失败");
+ }
+
+ @Test
+ @DisplayName("生成随机字符串")
+ void testGenerateNonce() {
+ // 执行
+ String nonce1 = SignUtil.generateNonce();
+ String nonce2 = SignUtil.generateNonce();
+
+ // 验证
+ assertNotNull(nonce1, "nonce不应为null");
+ assertNotNull(nonce2, "nonce不应为null");
+ assertEquals(16, nonce1.length(), "nonce长度应为16");
+ assertEquals(16, nonce2.length(), "nonce长度应为16");
+ assertNotEquals(nonce1, nonce2, "两次生成的nonce应不同");
+ assertTrue(nonce1.matches("^[a-f0-9]{16}$"), "nonce应为16位十六进制字符串");
+ System.out.println(nonce1);
+ System.out.println(nonce2);
+ }
+
+ @Test
+ @DisplayName("获取当前时间戳")
+ void testGetCurrentTimestamp() {
+ // 执行
+ String timestamp = SignUtil.getCurrentTimestamp();
+ long currentTime = System.currentTimeMillis();
+
+ // 验证
+ assertNotNull(timestamp, "时间戳不应为null");
+ long parsedTimestamp = Long.parseLong(timestamp);
+ assertTrue(Math.abs(currentTime - parsedTimestamp) < 1000,
+ "生成的时间戳应与当前时间相近");
+ System.out.println(timestamp);
+ }
+
+ @Test
+ @DisplayName("生成签名 - 空参数")
+ void testGenerateSign_EmptyParams() {
+ // 准备空参数
+ Map emptyParams = new HashMap<>();
+ emptyParams.put("appId", "test-app");
+ emptyParams.put("timestamp", String.valueOf(System.currentTimeMillis()));
+ emptyParams.put("nonce", "abc123def456");
+
+ // 执行
+ String sign = SignUtil.generateSign(emptyParams, APP_SECRET);
+
+ // 验证
+ assertNotNull(sign, "空参数也应生成签名");
+ assertEquals(32, sign.length(), "签名长度应为32");
+ System.out.println("签名: "+ sign);
+ }
+
+ @Test
+ @DisplayName("生成签名 - 特殊字符参数")
+ void testGenerateSign_SpecialCharacters() {
+ // 准备包含特殊字符的参数
+ testParams.put("special", "!@#$%^&*()_+-=[]{}|;:,.<>?");
+ testParams.put("unicode", "中文测试");
+ testParams.put("space", "value with spaces");
+
+ // 执行
+ String sign = SignUtil.generateSign(testParams, APP_SECRET);
+
+ // 验证
+ assertNotNull(sign, "特殊字符参数应生成签名");
+ assertEquals(32, sign.length(), "签名长度应为32");
+ }
+}
diff --git a/src/test/java/com/deepchart/controller/PublicControllerTest.java b/src/test/java/com/deepchart/controller/PublicControllerTest.java
new file mode 100644
index 0000000..5d876dc
--- /dev/null
+++ b/src/test/java/com/deepchart/controller/PublicControllerTest.java
@@ -0,0 +1,52 @@
+package com.deepchart.controller;
+
+import org.junit.jupiter.api.DisplayName;
+import org.junit.jupiter.api.Test;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest;
+import org.springframework.test.web.servlet.MockMvc;
+
+import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
+import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*;
+
+@WebMvcTest(PublicController.class)
+@DisplayName("公开接口控制器测试")
+class PublicControllerTest {
+
+ @Autowired
+ private MockMvc mockMvc;
+
+ @Test
+ @DisplayName("获取服务器时间 - 无需签名")
+ void testGetServerTimestamp_NoSignatureRequired() throws Exception {
+ // 执行 & 验证 - 不需要签名Header
+ mockMvc.perform(get("/api/public/timestamp"))
+ .andExpect(status().isOk())
+ .andExpect(jsonPath("$.code").value(200))
+ .andExpect(jsonPath("$.data.timestamp").exists())
+ .andExpect(jsonPath("$.data.timezone").value("Asia/Shanghai"));
+ }
+
+ @Test
+ @DisplayName("健康检查 - 无需签名")
+ void testHealth_NoSignatureRequired() throws Exception {
+ // 执行 & 验证 - 不需要签名Header
+ mockMvc.perform(get("/api/public/health"))
+ .andExpect(status().isOk())
+ .andExpect(jsonPath("$.code").value(200))
+ .andExpect(jsonPath("$.data").value("Service is healthy"));
+ }
+
+ @Test
+ @DisplayName("公开接口 - 即使提供签名也不验证")
+ void testPublicEndpoint_WithSignature() throws Exception {
+ // 执行 & 验证 - 即使提供签名Header,公开接口也不验证
+ mockMvc.perform(get("/api/public/timestamp")
+ .header("X-API-APPID", "web-app")
+ .header("X-API-TIMESTAMP", "1640995200000")
+ .header("X-API-NONCE", "abc123def456")
+ .header("X-API-SIGN", "any_signature"))
+ .andExpect(status().isOk())
+ .andExpect(jsonPath("$.code").value(200));
+ }
+}
\ No newline at end of file
diff --git a/src/test/java/com/deepchart/controller/UserControllerTest.java b/src/test/java/com/deepchart/controller/UserControllerTest.java
new file mode 100644
index 0000000..6f9ae44
--- /dev/null
+++ b/src/test/java/com/deepchart/controller/UserControllerTest.java
@@ -0,0 +1,203 @@
+package com.deepchart.controller;
+
+
+import com.deepchart.common.util.SignUtil;
+import com.deepchart.entity.User;
+import com.deepchart.service.UserService;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.DisplayName;
+import org.junit.jupiter.api.Test;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest;
+import org.springframework.boot.test.mock.mockito.MockBean;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.PageImpl;
+import org.springframework.data.domain.PageRequest;
+import org.springframework.http.MediaType;
+import org.springframework.test.web.servlet.MockMvc;
+
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Map;
+
+import static org.mockito.ArgumentMatchers.*;
+import static org.mockito.Mockito.when;
+import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*;
+import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*;
+
+@WebMvcTest(UserController.class)
+@DisplayName("用户控制器测试")
+class UserControllerTest {
+
+ @Autowired
+ private MockMvc mockMvc;
+
+ @Autowired
+ private ObjectMapper objectMapper;
+
+ @MockBean
+ private UserService userService;
+
+ private static final String APP_ID = "web-app";
+ private static final String APP_SECRET = "web_app_secret_2024";
+ private Map signParams;
+
+ @BeforeEach
+ void setUp() {
+ signParams = new HashMap<>();
+ signParams.put("appId", APP_ID);
+ signParams.put("timestamp", String.valueOf(System.currentTimeMillis()));
+ signParams.put("nonce", SignUtil.generateNonce());
+ }
+
+ @Test
+ @DisplayName("创建用户 - 成功")
+ void testCreateUser_Success() throws Exception {
+ // 准备
+ User user = createTestUser();
+ User savedUser = createTestUser();
+ savedUser.setId(1L);
+
+ when(userService.createUser(any(User.class))).thenReturn(savedUser);
+
+ // 生成签名
+ String sign = generateSign();
+
+ // 执行 & 验证
+ mockMvc.perform(post("/api/users")
+ .header("X-API-APPID", APP_ID)
+ .header("X-API-TIMESTAMP", signParams.get("timestamp"))
+ .header("X-API-NONCE", signParams.get("nonce"))
+ .header("X-API-SIGN", sign)
+ .contentType(MediaType.APPLICATION_JSON)
+ .content(objectMapper.writeValueAsString(user)))
+ .andExpect(status().isOk())
+ .andExpect(jsonPath("$.code").value(200))
+ .andExpect(jsonPath("$.message").value("用户创建成功"))
+ .andExpect(jsonPath("$.data.id").value(1));
+ }
+
+ @Test
+ @DisplayName("创建用户 - 签名验证失败")
+ void testCreateUser_SignatureFailed() throws Exception {
+ // 准备
+ User user = createTestUser();
+
+ // 执行 & 验证 - 使用错误的签名
+ mockMvc.perform(post("/api/users")
+ .header("X-API-APPID", APP_ID)
+ .header("X-API-TIMESTAMP", signParams.get("timestamp"))
+ .header("X-API-NONCE", signParams.get("nonce"))
+ .header("X-API-SIGN", "wrong_signature")
+ .contentType(MediaType.APPLICATION_JSON)
+ .content(objectMapper.writeValueAsString(user)))
+ .andExpect(status().isOk()) // 注意:我们的异常处理返回200状态,但code是401
+ .andExpect(jsonPath("$.code").value(1003)) // SIGNATURE_ERROR
+ .andExpect(jsonPath("$.message").value("签名验证失败"));
+ }
+
+ @Test
+ @DisplayName("创建用户 - 缺少签名参数")
+ void testCreateUser_MissingSignatureParams() throws Exception {
+ // 准备
+ User user = createTestUser();
+
+ // 执行 & 验证 - 不提供签名Header
+ mockMvc.perform(post("/api/users")
+ .contentType(MediaType.APPLICATION_JSON)
+ .content(objectMapper.writeValueAsString(user)))
+ .andExpect(status().isOk())
+ .andExpect(jsonPath("$.code").value(1003)) // SIGNATURE_ERROR
+ .andExpect(jsonPath("$.message").value("签名参数缺失"));
+ }
+
+ @Test
+ @DisplayName("获取用户列表 - 成功")
+ void testListUsers_Success() throws Exception {
+ // 准备
+ Page userPage = new PageImpl<>(Collections.singletonList(createTestUser()));
+ when(userService.listUsers(any(PageRequest.class))).thenReturn(userPage);
+
+ // 生成签名
+ String sign = generateSign();
+
+ // 执行 & 验证
+ mockMvc.perform(get("/api/users")
+ .header("X-API-APPID", APP_ID)
+ .header("X-API-TIMESTAMP", signParams.get("timestamp"))
+ .header("X-API-NONCE", signParams.get("nonce"))
+ .header("X-API-SIGN", sign)
+ .param("page", "0")
+ .param("size", "10"))
+ .andExpect(status().isOk())
+ .andExpect(jsonPath("$.code").value(200))
+ .andExpect(jsonPath("$.data.content").isArray());
+ }
+
+ @Test
+ @DisplayName("获取用户详情 - 成功")
+ void testGetUserById_Success() throws Exception {
+ // 准备
+ User user = createTestUser();
+ user.setId(1L);
+ when(userService.getUserById(1L)).thenReturn(user);
+
+ // 生成签名
+ String sign = generateSign();
+
+ // 执行 & 验证
+ mockMvc.perform(get("/api/users/1")
+ .header("X-API-APPID", APP_ID)
+ .header("X-API-TIMESTAMP", signParams.get("timestamp"))
+ .header("X-API-NONCE", signParams.get("nonce"))
+ .header("X-API-SIGN", sign))
+ .andExpect(status().isOk())
+ .andExpect(jsonPath("$.code").value(200))
+ .andExpect(jsonPath("$.data.id").value(1));
+ }
+
+ @Test
+ @DisplayName("用户登录 - 成功")
+ void testLogin_Success() throws Exception {
+ // 准备
+ User user = createTestUser();
+ user.setId(1L);
+ when(userService.login("testuser", "password123")).thenReturn(user);
+
+ // 生成签名 - 包含登录参数
+ Map loginParams = new HashMap<>(signParams);
+ loginParams.put("username", "testuser");
+ loginParams.put("password", "password123");
+ String sign = SignUtil.generateSign(loginParams, APP_SECRET);
+
+ // 执行 & 验证
+ mockMvc.perform(post("/api/users/login")
+ .header("X-API-APPID", APP_ID)
+ .header("X-API-TIMESTAMP", signParams.get("timestamp"))
+ .header("X-API-NONCE", signParams.get("nonce"))
+ .header("X-API-SIGN", sign)
+ .param("username", "testuser")
+ .param("password", "password123"))
+ .andExpect(status().isOk())
+ .andExpect(jsonPath("$.code").value(200))
+ .andExpect(jsonPath("$.message").value("登录成功"))
+ .andExpect(jsonPath("$.data.id").value(1));
+ }
+
+ // 辅助方法:创建测试用户
+ private User createTestUser() {
+ User user = new User();
+ user.setUsername("testuser");
+ user.setPassword("password123");
+ user.setEmail("test@example.com");
+ user.setNickname("Test User");
+ user.setPhone("13800138000");
+ return user;
+ }
+
+ // 辅助方法:生成签名
+ private String generateSign() {
+ return SignUtil.generateSign(signParams, APP_SECRET);
+ }
+}
diff --git a/src/test/java/com/deepchart/integration/ApiSignIntegrationTest.java b/src/test/java/com/deepchart/integration/ApiSignIntegrationTest.java
new file mode 100644
index 0000000..669d378
--- /dev/null
+++ b/src/test/java/com/deepchart/integration/ApiSignIntegrationTest.java
@@ -0,0 +1,222 @@
+package com.deepchart.integration;
+
+import com.deepchart.common.util.SignUtil;
+import com.deepchart.entity.User;
+import com.deepchart.repository.UserRepository;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.DisplayName;
+import org.junit.jupiter.api.Test;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.http.MediaType;
+import org.springframework.test.context.ActiveProfiles;
+import org.springframework.test.web.servlet.MockMvc;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*;
+import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*;
+
+@SpringBootTest
+@AutoConfigureMockMvc
+@ActiveProfiles("test")
+@Transactional
+@DisplayName("API签名集成测试")
+class ApiSignIntegrationTest {
+
+ @Autowired
+ private MockMvc mockMvc;
+
+ @Autowired
+ private ObjectMapper objectMapper;
+
+ @Autowired
+ private UserRepository userRepository;
+
+ private static final String APP_ID = "web-app";
+ private static final String APP_SECRET = "web_app_secret_2024";
+ private Map signParams;
+
+ @BeforeEach
+ void setUp() {
+ signParams = new HashMap<>();
+ signParams.put("appId", APP_ID);
+ signParams.put("timestamp", String.valueOf(System.currentTimeMillis()));
+ signParams.put("nonce", SignUtil.generateNonce());
+ }
+
+ @Test
+ @DisplayName("完整流程 - 创建用户并查询")
+ void testCompleteFlow_CreateAndGetUser() throws Exception {
+ // 准备用户数据
+ User user = new User();
+ user.setUsername("integration_test_user");
+ user.setPassword("password123");
+ user.setEmail("integration@test.com");
+ user.setNickname("Integration Test User");
+
+ // 生成创建用户的签名
+ String createSign = generateSign();
+
+ // 1. 创建用户
+ String responseJson = mockMvc.perform(post("/api/users")
+ .header("X-API-APPID", APP_ID)
+ .header("X-API-TIMESTAMP", signParams.get("timestamp"))
+ .header("X-API-NONCE", signParams.get("nonce"))
+ .header("X-API-SIGN", createSign)
+ .contentType(MediaType.APPLICATION_JSON)
+ .content(objectMapper.writeValueAsString(user)))
+ .andExpect(status().isOk())
+ .andExpect(jsonPath("$.code").value(200))
+ .andExpect(jsonPath("$.data.id").exists())
+ .andReturn().getResponse().getContentAsString();
+
+ // 提取用户ID
+ var response = objectMapper.readTree(responseJson);
+ Long userId = response.path("data").path("id").asLong();
+
+ // 更新签名参数用于查询
+ signParams.put("timestamp", String.valueOf(System.currentTimeMillis()));
+ signParams.put("nonce", SignUtil.generateNonce());
+ String getSign = generateSign();
+
+ // 2. 查询用户
+ mockMvc.perform(get("/api/users/{id}", userId)
+ .header("X-API-APPID", APP_ID)
+ .header("X-API-TIMESTAMP", signParams.get("timestamp"))
+ .header("X-API-NONCE", signParams.get("nonce"))
+ .header("X-API-SIGN", getSign))
+ .andExpect(status().isOk())
+ .andExpect(jsonPath("$.code").value(200))
+ .andExpect(jsonPath("$.data.id").value(userId))
+ .andExpect(jsonPath("$.data.username").value("integration_test_user"));
+ }
+
+ @Test
+ @DisplayName("重放攻击防护 - 相同的nonce不能重复使用")
+ void testReplayAttackProtection() throws Exception {
+ // 准备
+ User user = new User();
+ user.setUsername("replay_test_user");
+ user.setPassword("password123");
+ user.setEmail("replay@test.com");
+
+ // 第一次请求 - 应该成功
+ String firstSign = generateSign();
+
+ mockMvc.perform(post("/api/users")
+ .header("X-API-APPID", APP_ID)
+ .header("X-API-TIMESTAMP", signParams.get("timestamp"))
+ .header("X-API-NONCE", signParams.get("nonce"))
+ .header("X-API-SIGN", firstSign)
+ .contentType(MediaType.APPLICATION_JSON)
+ .content(objectMapper.writeValueAsString(user)))
+ .andExpect(status().isOk())
+ .andExpect(jsonPath("$.code").value(200));
+
+ // 第二次使用相同的nonce - 应该失败(时间戳可能过期或nonce重复)
+ // 注意:实际的重放攻击防护需要在服务端缓存已使用的nonce
+ // 这里主要测试时间戳过期的情况
+
+ // 使用过期的时间戳
+ long expiredTimestamp = System.currentTimeMillis() - 6 * 60 * 1000;
+ signParams.put("timestamp", String.valueOf(expiredTimestamp));
+ String expiredSign = generateSign();
+
+ mockMvc.perform(post("/api/users")
+ .header("X-API-APPID", APP_ID)
+ .header("X-API-TIMESTAMP", signParams.get("timestamp"))
+ .header("X-API-NONCE", signParams.get("nonce"))
+ .header("X-API-SIGN", expiredSign)
+ .contentType(MediaType.APPLICATION_JSON)
+ .content(objectMapper.writeValueAsString(user)))
+ .andExpect(status().isOk())
+ .andExpect(jsonPath("$.code").value(1003)); // 签名验证失败
+ }
+
+ @Test
+ @DisplayName("时间戳验证 - 过期时间戳被拒绝")
+ void testTimestampValidation_ExpiredTimestamp() throws Exception {
+ // 准备过期时间戳
+ long expiredTimestamp = System.currentTimeMillis() - 6 * 60 * 1000;
+ signParams.put("timestamp", String.valueOf(expiredTimestamp));
+
+ String expiredSign = generateSign();
+
+ User user = new User();
+ user.setUsername("expired_timestamp_user");
+ user.setPassword("password123");
+
+ // 执行 & 验证
+ mockMvc.perform(post("/api/users")
+ .header("X-API-APPID", APP_ID)
+ .header("X-API-TIMESTAMP", signParams.get("timestamp"))
+ .header("X-API-NONCE", signParams.get("nonce"))
+ .header("X-API-SIGN", expiredSign)
+ .contentType(MediaType.APPLICATION_JSON)
+ .content(objectMapper.writeValueAsString(user)))
+ .andExpect(status().isOk())
+ .andExpect(jsonPath("$.code").value(1003)) // SIGNATURE_ERROR
+ .andExpect(jsonPath("$.message").value("签名验证失败"));
+ }
+
+ @Test
+ @DisplayName("不同应用ID - 使用不同的密钥")
+ void testDifferentAppIds_DifferentSecrets() throws Exception {
+ // 测试使用不同的appId和对应的密钥
+
+ // 使用mobile-app
+ Map mobileParams = new HashMap<>();
+ mobileParams.put("appId", "mobile-app");
+ mobileParams.put("timestamp", String.valueOf(System.currentTimeMillis()));
+ mobileParams.put("nonce", SignUtil.generateNonce());
+
+ String mobileSign = SignUtil.generateSign(mobileParams, "mobile_app_secret_2024");
+
+ User user = new User();
+ user.setUsername("mobile_test_user");
+ user.setPassword("password123");
+
+ mockMvc.perform(post("/api/users")
+ .header("X-API-APPID", "mobile-app")
+ .header("X-API-TIMESTAMP", mobileParams.get("timestamp"))
+ .header("X-API-NONCE", mobileParams.get("nonce"))
+ .header("X-API-SIGN", mobileSign)
+ .contentType(MediaType.APPLICATION_JSON)
+ .content(objectMapper.writeValueAsString(user)))
+ .andExpect(status().isOk())
+ .andExpect(jsonPath("$.code").value(200));
+ }
+
+ @Test
+ @DisplayName("参数篡改检测 - 修改参数导致签名不匹配")
+ void testParameterTamperingDetection() throws Exception {
+ // 准备正确的签名
+ String correctSign = generateSign();
+
+ User user = new User();
+ user.setUsername("tamper_test_user");
+ user.setPassword("password123");
+
+ // 尝试篡改参数 - 使用错误的appId但正确的签名
+ mockMvc.perform(post("/api/users")
+ .header("X-API-APPID", "wrong-app") // 篡改的appId
+ .header("X-API-TIMESTAMP", signParams.get("timestamp"))
+ .header("X-API-NONCE", signParams.get("nonce"))
+ .header("X-API-SIGN", correctSign) // 使用原始签名
+ .contentType(MediaType.APPLICATION_JSON)
+ .content(objectMapper.writeValueAsString(user)))
+ .andExpect(status().isOk())
+ .andExpect(jsonPath("$.code").value(1003)) // 签名验证失败
+ .andExpect(jsonPath("$.message").value("签名验证失败"));
+ }
+
+ // 辅助方法:生成签名
+ private String generateSign() {
+ return SignUtil.generateSign(signParams, APP_SECRET);
+ }
+}
\ No newline at end of file