【问题标题】:Exclude some components of a Microservice排除微服务的某些组件
【发布时间】:2019-02-12 15:12:38
【问题描述】:

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

就像我有一个管理模块,我需要在其中自动装配主模块中的主资源。所以我使用:

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

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

【问题讨论】:

  • 你为什么要他们被排除在外?
  • 我正在使用 swagger 进行测试。我只需要它自己的控制器来测试(管理员)并且不想在管理员路径中看到主控制器。
  • 能否也分享一下你的微服务的文件夹结构?
  • 每个微服务都有自己的 MVC。和微服务通过 Eureka 和 zuul 进行通信
  • 当我尝试在 admin 的控制器中自动连接 main 的资源类时会出现此问题。那个时候我也需要扫描主模块以获取存储库、资源和其他类。

标签: spring-boot configuration microservices component-scan


【解决方案1】:

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

恕我直言,您应该模块化您的应用程序/服务,将公共资源构建为单独的 JAR,并将每个服务构建为不同的 Maven 模块,具体取决于它

【讨论】:

    【解决方案2】:

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

    Swashbuckle 建立在 WebApi 的内置元数据层 - ApiExplorer 之上。如果您使用以下属性装饰控制器或操作:

    [ApiExplorerSettings(IgnoreApi=true)]
    public class MyController : ApiController
    

    那么这最终会导致整个控制器或单个动作从 Swagger 输出中被忽略。

    【讨论】:

      猜你喜欢
      • 2014-07-05
      • 1970-01-01
      • 1970-01-01
      • 2015-06-18
      • 2022-01-16
      • 1970-01-01
      • 1970-01-01
      • 2012-02-26
      • 2021-02-16
      相关资源
      最近更新 更多