SpringBoot не сканирует именованные пакеты - PullRequest
0 голосов
/ 20 ноября 2018

Я строю демонстрационный модуль на основе SpringBoot и включаю серверное и клиентское приложение.Путь как:

├── test
│   ├── client
│   │   ├── DemoController.java
│   │   └── ClientApplication.java
│   ├── server
│   │   └── ServerApplication.java

Я написал две конфликтующие пользовательские аннотации @Client и @Server, представленные на ClientApplication.java и ServerApplication.java.

Когда я запускаю клиент или сервер,две аннотации противоречат друг другу.

Я хочу запустить ClientApplication без пакета сканирования test.server, также для ServerApplication.

Я пробовал что-то, но не работает (springBootVersion = '1.5.11.RELEASE'):

@Client
@SpringBootApplication
@ComponentScan(basePackages = "test.client", excludeFilters = {
        @ComponentScan.Filter(type = FilterType.REGEX, pattern = "test\\.server\\.*"),
        @ComponentScan.Filter(type = FilterType.ASSIGNABLE_TYPE, pattern = ServerApplication.class)
})
public class ClientApplication {
    public static void main(String[] args) {
        SpringApplication.run(ServerApplication.class, args).stop();
    }
}

Я написал неверный код в ClientApplication.main:

SpringApplication.run(***ServerApplication***.class, args).stop();

Ответы [ 2 ]

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

Для сервера:

 @ComponentScan(basePackages = "test.server", excludeFilters = {
    @Filter(type = FilterType.REGEX, pattern = "test.client.*")})

Для клиента:

 @ComponentScan(basePackages = "test.client", excludeFilters = {
    @Filter(type = FilterType.REGEX, pattern = "test.server.*")})

Или исключить класс, используя специальный фильтр:

 @Filter(type = FilterType.ASSIGNABLE_TYPE, classes = ServerApplication.class)
0 голосов
/ 20 ноября 2018

Это выглядит довольно странно, так как два приложения не находятся в одном базовом пакете.Класс конфигурации из другого пакета не должен был быть обнаружен даже без явного исключения.

В любом случае, как насчет этого:

@ComponentScan(basePackages = "test.client", 
  excludeFilters = @Filter(type=FilterType.REGEX, pattern="test\\.server\\.*")) 

Более того, вы можете попробовать использовать аннотацию @Profile для разделения классов на:клиентские и серверные профили.

...