Исключить @SpringBootApplication - PullRequest
0 голосов
/ 05 мая 2020

У меня в проекте 2 сети

    @SpringBootApplication
    @ComponentScan(value = com.somepackage,
            excludeFilters = {@ComponentScan.Filter(type = FilterType.ASSIGNABLE_TYPE, classes = Class2.class)})
    public Class1

и

    @SpringBootApplication
    @ComponentScan(value = com.somepackage,
            excludeFilters = {@ComponentScan.Filter(type = FilterType.ASSIGNABLE_TYPE, classes = Class1.class)})
    public Class2

Они оба находятся в одном пакете, но необходимо сканировать некоторые другие пакеты.

Когда я запускаю в своей среде IDE Class1, я не хочу, чтобы Class2 загружался, а когда я запускаю Class2, я не хочу, чтобы Class1 загружался.

Выполнение этих исключений не работает и выполняется @SpringBootApplication(exclude = Class2.class) отобразить эту ошибку: Следующие классы не могут быть исключены, потому что они не являются классами автоконфигурации

Как я могу исключить другой класс SpringBootApplication?

EDIT: мы используем 2 основных класса, потому что мы хотите иметь некоторые инструменты (небольшие скрипты) и повторно использовать какую-то часть кода. Пример: у меня есть основной класс приложения, но я хочу запустить его часть с другим основным классом, чтобы выполнить некоторую очистку, но очень редко и не хочу настраивать множество библиотек только для этого. Я знаю, что это не чисто, но я хочу быстро написать какой-нибудь main, чтобы вызывать мое приложение со всеми другими загруженными bean-компонентами, но не с первым main, потому что он запускает множество других потоков, которые мне не нужны.

Ответы [ 2 ]

1 голос
/ 05 мая 2020

Я думаю, вам нужно изменить структуру вашего приложения на минимум 3 модуля:

  1. Основной код и ресурсы (общий лог c)
  2. Код и ресурсы приложения 1 (используйте основной модуль)
  3. Код и ресурсы приложения 2 (используйте основной модуль)

Это упрощает и упрощает работу. В модулях приложения вы можете реализовать интерфейсы или расширить базовую / стандартную конфигурацию из ядра.

При таком подходе вам не нужно использовать сложные логики включения / исключения c для определенных классов c в основных классах вашего приложения.

0 голосов
/ 06 мая 2020

Вы можете работать с профилями, используя любое подходящее для вашего случая имя.

@SpringBootApplication
@Profile("!test")
public Class1 {}

@SpringBootApplication
@Profile("test")
public Class2 {}
...