将spring.factories分成多个文件

时间:2019-04-29 08:33:37

标签: java spring spring-boot

在Spring Boot中,您可以执行以下操作:

src/main/resources/META-INF/spring.factories

# Auto Configure
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
org.springframework.boot.autoconfigure.admin.AConfiguration,\
org.springframework.boot.autoconfigure.admin.BConfiguration,\
org.springframework.boot.autoconfigure.admin.CConfiguration,\
org.springframework.boot.autoconfigure.admin.DConfiguration,\
org.springframework.boot.autoconfigure.admin.EConfiguration,\
org.springframework.boot.autoconfigure.admin.FConfiguration,\

哪个很好。但是,经过一年的发展,自动配置列表现在已> 15行,这使其难以管理。

是否想知道是否可以将 spring.factories 分为多个文件?最好将整个项目保存在一个JAR中。

也许还有其他方法可以帮助组织我不知道的EnableAutoConfiguration

提前谢谢!

2 个答案:

答案 0 :(得分:2)

在使用spring-boot时,我们使用了多个“启动器”,每个启动器都有一个自动配置和spring.factories文件。

因此,一种方法是将您的项目拆分为模块-一种用于每种自动配置的方法,在模块中定义一个专用的spring.factories文件,然后将所有模块作为运行时依赖项导入到主应用程序模块中

您可以使用maven或gradle来管理多模块项目及其间的依赖关系:

等级:Install previous versions of R on ubuntu

行家:https://guides.gradle.org/creating-multi-project-builds/

示例:

  • moduleA

    • src / main / resources / META-INF / spring.factories
  • moduleB

    • src / main / resources / META-INF / spring.factories

以此类推...

答案 1 :(得分:0)

我已经找到了解决这个问题的方法。

注意:此确切的解决方案假设您仅在EnableAutoConfiguration中使用了 spring.factiores ,如果您在{中使用了多种类型的配置,则会崩溃{1}}。

一个人可以做:

spring.factories

并将其合并到一个文件中。

请注意,我正在使用 Maven Antrun ,但我怀疑Gradle也会具有类似的功能。

在您的src/main/resources/META-INF/spring.factories src/main/resources/META-INF/spring-2.factories src/main/resources/META-INF/spring-3.factories src/main/resources/META-INF/spring-4.factories 中,添加以下内容:

pom.xml

<plugin> <artifactId>maven-antrun-plugin</artifactId> <version>1.8</version> <executions> <execution> <id>default-ci</id> <goals> <goal>run</goal> </goals> <phase>process-resources</phase> <configuration> <target> <replace token='org.springframework.boot.autoconfigure.EnableAutoConfiguration=' value=',' dir="${project.build.directory}/classes/META-INF"> <include name="spring-*.factories"/> </replace> <concat destfile="${project.build.directory}/classes/META-INF/spring.factories" overwrite="yes" append="yes"> <fileset dir="${project.build.directory}/classes/META-INF" includes="spring-*.factories" /> </concat> </target> </configuration> </execution> </executions> </plugin> 中是常规配置:

spring.factories

但是在spring-2.factories和其他工厂中,您从# Auto Configure org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ org.springframework.boot.autoconfigure.admin.AConfiguration,\ org.springframework.boot.autoconfigure.admin.BConfiguration 开始,而不是默认语句:

,\

spring-2.factories

org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ org.springframework.boot.autoconfigure.admin.CConfiguration

spring-3.factories

所有这些之后,输出类目录中的结果org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ org.springframework.boot.autoconfigure.admin.DConfiguration 将会非常好:

spring.factories