Skip to content

TrackedConditionEvaluator skips loading bean definitions for configuration classes that should not be skipped [SPR-17153] #21690

@spring-projects-issues

Description

@spring-projects-issues

Anastasiia Smirnova opened SPR-17153 and commented

I've found this issue while using Spring boot and files a ticket to Spring Boot:

spring-projects/spring-boot#14018

Currently we are facing a complex issue with autoconfigurations that are marked with @EnableScheduling. I have created sample project that reproduces an issue.

It consists of 4 modules:

  • library-0 module
    This module defines Library0AutoConfiguration that has @EnableScheduling and @AutoConfigureBefore(name = "org.library1.Library1AutoConfiguration"). It will not start because of unsatisfied @ConditionalOnBean (bean is not present in context).
  • library-1 module
    This module defines Library1AutoConfiguration that has @AutoConfigureBefore(name = "org.library2.Library2AutoConfiguration").
  • library-2 module
    This module defines Library2AutoConfiguration that has @EnableScheduling and @Conditional on bean of type Library1.class.
  • service module
    This module imports: library-0, library-1 and library-2 and enables autoconfiguration.
    There is test ServiceConfigurationTest that can be run to reproduce an issue:

 

@SpringBootTest(
        webEnvironment = SpringBootTest.WebEnvironment.NONE,
        classes = ServiceConfiguration.class
)
@RunWith(SpringRunner.class)
public class ServiceConfigurationTest {    @Autowired
    Library1 library1;
    @Autowired
    Library2 library2;    @Test
    public void beans_should_be_present() throws Exception {
        assertNotNull(library1);
        assertNotNull(library2);
    }
}

Actual result: both Library1AutoConfiguration and Library2AutoConfiguration should start, because they do not have dependency on Library0AutoConfiguration, but instead Library2AutoConfiguration will not start and test will fail.Removing @EnableScheduling from Library0AutoConfiguration fixes an issue.

We have found that TrackedConditionEvaluator.shouldSkip for org.springframework.scheduling.annotation.SchedulingConfiguration skips loading bean definitions for Library2AutoConfiguration.

 

Spring Boot version 1.5.13

Spring 4.3.17

 

 


Issue Links:

Metadata

Metadata

Assignees

No one assigned

    Labels

    in: coreIssues in core modules (aop, beans, core, context, expression)status: declinedA suggestion or change that we don't feel we should currently apply

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions