Skip to content

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

Closed as not planned
@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

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions