我基于SpringBoot构建一个演示模块,并包含服务器和客户端应用程序。 路径如下:
├── test
│ ├── client
│ │ ├── DemoController.java
│ │ └── ClientApplication.java
│ ├── server
│ │ └── ServerApplication.java
我在@Client
和@Server
上写了两个相互冲突的自定义注释ClientApplication.java
和ServerApplication.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();
答案 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)