首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将spring.factories分离为多个文件

将spring.factories分离为多个文件
EN

Stack Overflow用户
提问于 2019-04-29 08:33:36
回答 2查看 4.7K关注 0票数 0

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

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

代码语言:javascript
运行
复制
# 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分离成多个文件?最好是把整个项目放在一个罐子里。

或者,也许还有另外一种方法来帮助组织我不知道的EnableAutoConfiguration呢?

提前感谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-04-30 02:14:15

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

注意:这个精确的解决方案假设您只在您的spring.factiores__中使用了spring.factiores,如果您在spring.factories__中使用多个配置类型,它就会崩溃。

我们可以做到:

代码语言:javascript
运行
复制
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

并将其合并成一个文件。

注意,我使用的是Maven Antrun,但我怀疑Gradle也有类似的特性。

pom.xml中添加以下内容:

代码语言:javascript
运行
复制
            <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中是正常的配置:

代码语言:javascript
运行
复制
# Auto Configure
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
org.springframework.boot.autoconfigure.admin.AConfiguration,\
org.springframework.boot.autoconfigure.admin.BConfiguration

但是在Spring-2工厂和其他地方,您可以从,\开始,而不是默认的语句:

spring-2.factories

代码语言:javascript
运行
复制
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
org.springframework.boot.autoconfigure.admin.CConfiguration

spring-3.factories

代码语言:javascript
运行
复制
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
org.springframework.boot.autoconfigure.admin.DConfiguration

在这之后,输出类目录中的结果spring.factories将是非常好的:

代码语言:javascript
运行
复制
# 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
票数 2
EN

Stack Overflow用户

发布于 2019-04-29 09:01:39

在使用spring引导时,我们使用多个“启动程序”,每个启动程序都有一个自动配置和spring.factories文件。

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

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

梯度:https://guides.gradle.org/creating-multi-project-builds/

Maven:https://www.baeldung.com/maven-multi-module

示例:

根部

  • moduleA
代码语言:javascript
运行
复制
- src/main/resources/META-INF/spring.factories

  • moduleB
代码语言:javascript
运行
复制
- src/main/resources/META-INF/spring.factories

等等..。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55899631

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档