yevtsy
yevtsy

Reputation: 574

Is it possible to exclude nested configuration from autoconfiguration in Spring Boot application?

Suppose we have a Spring Boot application and autoconfiguration with several configurations defined inside it

@Configuration
@AutoConfigureBefore(MainAutoConfiguration.class)
public class TestAutoConfiguration {

    ....

    @Configuration
    public static class FirstNestedConfiguration {
        ...
    }

    @Configuration
    public static class SecondNestedConfiguration {
        ...
    }
}

this class is providing via external library dependency and all conditions are satisfied, so all beans in these configurations are loading.

Nevertheless, I need to exclude beans provided in FirstNestedConfiguration Is it possible to do it?

UPD: as it's simple Spring Boot application, it runs as

@SpringCloudApplication
public class DemoApplication {
    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
    }
}

without any explicit @ComponentScan configuration

Upvotes: 2

Views: 1490

Answers (2)

Ihar Sadounikau
Ihar Sadounikau

Reputation: 751

Does the profile approach works for you? Look for With the @Profile annotation section

 @Profile("ConfigOne")
 @Configuration

Configuration spring documentation

Upvotes: 0

Oleksii Zghurskyi
Oleksii Zghurskyi

Reputation: 4365

You might use excludeFilters in @ComponentScan like this:

@ComponentScan(value = {'your.package'},
    excludeFilters = @Filter(TestAutoConfiguration.class))

Also, if you want to exclude specific autoconfiguration globally, use properties:

spring:
  autoconfigure.exclude: your.package.TestAutoConfiguration 

However, please, note that this way you exclude outer configuration. According to this issue it's not possible to exclude inner configuration.

Upvotes: 0

Related Questions