家用宽带怎样做网站服务器,北京 设计网站,wordpress边栏添加标签云,做办公用品的招聘网站为什么要开发专用的Spring Boot Starter
Spring在通常使用时#xff0c;一般是通过pom.xml文件中引入相关的jar包#xff0c;然后再通过application.yml文件配置初始化bean的配置#xff0c;但随着项目越来越复杂或是项目组中的应用数量越来越多#xff0c;可能会带来几个…为什么要开发专用的Spring Boot Starter
Spring在通常使用时一般是通过pom.xml文件中引入相关的jar包然后再通过application.yml文件配置初始化bean的配置但随着项目越来越复杂或是项目组中的应用数量越来越多可能会带来几个问题
jar包依赖越来越多同一jar包的版本在不同的应用中可能不一样甚至会发生冲突依赖自定义的配置没有相应的文档辅助导致很多配置无从查找进而可能会出现应用中重复开发最终导致项目组中技术基线不统一而且在很长一段时间内很难统一 上述问题的解决方案有两种一是定义一个通用的pom.xml但公用的pom.xml也存在维护等问题另一个问题是基础的pom.xml只是一个maven依赖配置无法携带公用的java代码。
所以最好的解决文案就是采用自定义的starter。
开发步骤
1. 新建Maven项目在项目的POM文件中定义使用的依赖
2. 新建配置类写好配置项和默认的配置值指明配置项前缀
4. 新建自动装配类使用Configuration和Bean来进行自动装配
5. 新建spring.factories文件指定Starter的自动装配类自定义的 Spring Boot Starter实现
自定义的Spring Boot Starter就是一个普通的spring项目下面就一步步来实现。
创建工程
创建一个springboot类型的模块。如下图所示一路默认即可
pom.xml依赖
这里的pom.xml依赖没有太严格的要求就是按需引入比如你在自定义的starter中实现了一些功能比如jdbc操作mysql功能那么是肯定要引入mysql-driver.jar驱动包的因为这样才能做到版本统一管理
但统一建议添加optionaltrue/optional不传递。这样防止多层依赖时冲突的发生。如下
Starter 命名规则即artifactId命名规则Spring 官方定义的 Starter 通常命名遵循的格式为 spring-boot-starter-{name}例如 spring-boot-starter-data-mongodb。Spring 官方建议非官方 Starter 命名应遵循 {name}-spring-boot-starter 的格式例如myjson-spring-boot-starter。
?xml version1.0 encodingUTF-8?
project xmlnshttp://maven.apache.org/POM/4.0.0xmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexsi:schemaLocationhttp://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsdmodelVersion4.0.0/modelVersion!-- starter坐标 --groupIdcom.korgs/groupIdartifactIdkorgs-framework-spring-boot-starter/artifactIdnameframework-springboot-starter/nameversion1.0-SNAPSHOT/versionpackagingjar/packaging!--编译版本这个一定要指定 --propertiesmaven.compiler.source17/maven.compiler.sourcemaven.compiler.target17/maven.compiler.targetproject.build.sourceEncodingUTF-8/project.build.sourceEncoding/properties!-- 功能依赖scope按需添加但注意添加optionaltrue不强制但建议 --dependenciesdependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter/artifactIdversion3.2.4/versionscopecompile/scopeoptionaltrue/optional/dependencydependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-configuration-processor/artifactIdversion3.2.4/versionscopeannotationProcessor/scopeoptionaltrue/optional/dependencydependencygroupIdorg.projectlombok/groupIdartifactIdlombok/artifactIdversion1.18.30/versionscopeannotationProcessor/scopeoptionaltrue/optional/dependency/dependencies/projectAppConfig自定义配置类实现
这个示例中只是为了演示如何在application.yml文件中添加自定义的配置因为自定义的starter除了做maven管理外另一个主要目的就是实现一些基础的功能可配置。
package com.korgs.framework.starter;import lombok.Data;
import lombok.extern.slf4j.Slf4j;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Configuration;Slf4j
Configuration
Data
ConfigurationProperties(prefix framework.config)
public class AppConfig {String appRegisterName;/*可以通过这种方式实现一次功能上的扩展总之是和正常的项目开发没太大区别*//*Beanpublic AppServer appServer(){return new AppServer(appRegisterName);}*/
}spring.factories配置
在src/resources/META-INF/目录下新建一个名为spring.factories的文件META-INF这个目录需要手动创建一下添加以下内容
org.springframework.boot.autoconfigure.EnableAutoConfigurationcom.korgs.framework.starter.AppConfigspring.factories文件的作用是springboot启动时会扫描jar下的spring.factories文件如果发现了就根据配置内容执行相应的初始化工作。 工程打包
最后运行 mvn -clear install安装在本地maven缓存中测试好了之后可以发布到公司的maven私服上面。
测试自定义的 Spring Boot Starter
再新建一个springboot工程然后引入上面的自定义starter包。比如 dependencygroupIdcom.korgs/groupIdartifactIdkorgs-framework-spring-boot-starter/artifactIdversion1.0-SNAPSHOT/version/dependencyapplication.properties配置
这时在application.properties中配置时如果是idea就会有提示功能但这并不是最重要的
AppConfig配置类测试
其实上面自定义的starter就是一个普通的配置类和本模块中代码实现一样比如