我正在使用spring-boot(v2.1.6.RELEASE)作为启动项目创建一个库,该库将方便地用作基础扩展jar,负责基于客户端项目属性文件配置和启动某些组件。
我面临的问题是,如果客户端项目的SpringBoot Application类包含与库相同的包路径,则所有内容都将像魅力一样工作!但是当客户端项目包含不同的程序包路径并包含ComponentScan时,它将无法从库中加载或启动组件。
有人遇到过这个问题吗?如何使客户端应用程序自动配置库jar中的某些组件?
注意:我从这里关注库创建示例:https://www.baeldung.com/spring-boot-custom-starter
答案 0 :(得分:0)
在这里有很多事情可能出错,而没有看到实际代码的相关部分很难说出具体的东西。在我脑海中,有几点需要考虑的问题有望导致解决方案:
由于我们在应用程序中使用了启动程序(有时人们在那里的Spring应用程序中使用显式组件扫描),并且这显然可行,因此问题可能出在启动程序模块本身上。不要以为单独使用组件扫描会阻止启动程序的加载;)
确保启动器是a:常规库且未打包为Spring Boot应用程序(请注意您不使用Spring Boot插件),并且pom.xml或您使用的任何文件中都包含<packaging>jar</packaging>
构建。
确保您拥有:src/main/resources/META-INF/spring.factories
文件
(区分大小写和所有内容)
确保此spring.factories
文件确实包含有关您的配置的有效引用(以@Configuration注释的Java类)。如果在同一软件包中使用组件扫描,即使没有spring工厂,它也将找到并加载此配置,在这种情况下,它只是另一部分代码,被打包为单独的jar。因此,这对我来说尤其“可疑”。
请确保@Configuration没有@Conditional
-可能不符合此条件,并且配置没有开始。出于调试目的,您甚至应该删除这些@Conditional
批注,以确保启动配置。您还可以在@Configuration
类中提供一些日志记录,例如:“加载我的超酷库”。