@ConditionalOnProperty: это влияет только на аннотацию, указанную ниже? - PullRequest
0 голосов
/ 17 ноября 2018

Предположим, что у нас есть следующий код кода:

@SpringBootApplication
@ConditionalOnProperty(value = "scheduling.enable")
@EnableScheduling
@EnableCaching
public class AcmeServiceApplication {

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

Позволяет ли аннотация @ConditionalOnProperty включать / отключать только @EnableScheduling или она также влияет на @EnableCaching?

Не нашел ответа в документации.

Ответы [ 2 ]

0 голосов
/ 17 ноября 2018

@ConditionalOnProperty на @SpringBootApplication не имеет смысла и не будет обрабатываться. Независимо от наличия scheduling.enable свойства * будут применяться @EnableScheduling и @EnableCaching.

Как объяснил Энди Уилкинсон, @ConditionalOnProperty является целью для @Configuration и @Bean целей. @SpringBootApplication это нечто совсем другое.

0 голосов
/ 17 ноября 2018

Когда условие, такое как @ConditionalOnProperty, используется в классе, оно определяет, обрабатывается ли весь класс или нет. Когда он используется в методе @Bean, он определяет, будет ли обрабатываться отдельный метод.

В случае вашего конкретного примера, если условие соответствует, будет обработано AcmeServiceApplication, и, следовательно, будут включены как запланированное, так и кэширование, и @SpringBootApplication вступит в силу, включив автоматическую настройку и сканирование компонентов. Если условие не соответствует, AcmeServiceApplication не будет обработано, и поэтому ни планирование, ни кэширование не будут включены, а @SpringBootApplication не будет иметь никакого эффекта.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...