SpringBoot不扫描命名包

时间:2018-11-20 06:51:04

标签: spring spring-boot component-scan

我基于SpringBoot构建一个演示模块,并包含服务器和客户端应用程序。 路径如下:

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

我在@Client@Server上写了两个相互冲突的自定义注释ClientApplication.javaServerApplication.java

运行客户端或服务器时,两个注释冲突。

我也要针对ServerApplication运行不带扫描软件包test.server的ClientApplication。

我尝试了一些方法但没有用(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 :(得分:2)

这看起来很奇怪,因为两个应用程序不在同一个基本程序包中。即使没有显式排除,也不应发现其他软件包中的配置类。

无论如何,如何尝试:

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

此外,您可以尝试使用@Profile批注将类分为客户端和服务器配置文件。

答案 1 :(得分:2)

对于服务器:

 @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)