排除微服务的某些组件

时间:2018-09-07 09:32:11

标签: spring-boot configuration microservices component-scan

我是一只新蜜蜂,正在使用微服务(Spring Boot,Spring Cloud),其中我试图在另一个服务中使用微服务的资源文件。为此,我需要通过ComponentScan在另一个模块中扫描该模块。

就像我有一个Admin模块,我需要在其中自动装配主模块中的Main Resource。所以我使用:

@ComponentScan(basePackages = {"com.example.admin","com.example.main"}

我在 AdminApplication 文件中使用了此文件,现在它也显示了我不需要的Admin中主要模块的控制器。我用谷歌搜索并申请:

  @ComponentScan(basePackages =
      {"com.example.admin","com.example.main"},
              excludeFilters = {@ComponentScan.Filter(type = ASSIGNABLE_TYPE,
                      value = {
                              UserController.class,
                              CustomerController.class,
                              SchoolController.class
                      })})

但是它仍然在管理模块中显示此主模块控制器。如何实际排除呢?请帮我。

2 个答案:

答案 0 :(得分:0)

我想,借助JavaConfig(@Configuration)和@Profile批注,您可以根据需要设置“输入和输出”类的微妙组合。 但是您必须在主类上禁用@ComponentScan(也许不要使用@SpringBootApplication,因为它嵌入了@ComponentScan)。

恕我直言,您应该将您的应用程序/服务模块化,将公共资源构建为单独的JAR,并将每个服务构建为独立的Maven模块

答案 1 :(得分:0)

感谢您的建议。终于我得到了答案。

Swashbuckle构建在WebApi的内置元数据层ApiExplorer的顶部。如果您使用以下属性装饰控制器或动作:

def move(self, speed=5):    # chase movement
    if self.rect.x > self.player.rect.x:    # Movement along x direction
        self.rect.x -= speed
    elif self.rect.x < self.player.rect.x:
        self.rect.x += speed
    if self.rect.y < self.player.rect.y:    # Movement along y direction
        self.rect.y += speed
    elif self.rect.y > self.player.rect.y:
        self.rect.y -= speed

这将最终导致整个控制器或单个动作从Swagger输出中省略。