# Overloading a @Bean method across mutually-exclusive @Profile beans: rejected at startup First draft of the two TaskExecutor beans in BatchConfig used the same method name, `partitionTaskExecutor`, distinguished only by @Profile("!reject") / @Profile("reject"). Spring Framework 7's @Configuration.enforceUniqueMethods (on by default) does not know the two profiles are mutually exclusive at class-parsing time -- it only sees one method name declared twice -- and refuses to start: $ java -jar target/spring-batch-partitioning-1.0.0.jar --partition.shards-dir=./data/shards-small ... 2026-09-14T09:06:49.013Z WARN 2629 --- [ main] ConfigServletWebServerApplicationContext : Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.parsing.BeanDefinitionParsingException: Configuration problem: @Configuration class 'BatchConfig' contains overloaded @Bean methods with name 'partitionTaskExecutor'. Use unique method names for separate bean definitions (with individual conditions etc) or switch '@Configuration.enforceUniqueMethods' to 'false'. Offending resource: class path resource [com/ankurm/batchpartition/config/BatchConfig.class] org.springframework.beans.factory.parsing.BeanDefinitionParsingException: Configuration problem: @Configuration class 'BatchConfig' contains overloaded @Bean methods with name 'partitionTaskExecutor'. Use unique method names for separate bean definitions (with individual conditions etc) or switch '@Configuration.enforceUniqueMethods' to 'false'. at org.springframework.beans.factory.parsing.FailFastProblemReporter.error(FailFastProblemReporter.java:71) ~[spring-beans-7.0.9.jar!/:7.0.9] at org.springframework.context.annotation.ConfigurationClass.validate(ConfigurationClass.java:265) ~[spring-context-7.0.9.jar!/:7.0.9] at org.springframework.context.annotation.ConfigurationClassParser.validate(ConfigurationClassParser.java:230) ~[spring-context-7.0.9.jar!/:7.0.9] The message is accurate and the fix it suggests (unique method names) is the right one -- this module's fixed version names the two beans partitionTaskExecutor() and partitionTaskExecutorRejecting(int). The point worth recording: this is NOT a Spring Batch 6 change, it is a Spring Framework 7 @Configuration default that bites a pattern (profile-gated @Bean overloads) that plenty of Spring Batch 5.x tutorials use freely.