Spring boot自定义starter

简介: Spring boot自定义starter

Spring boot自定义starter

1、简介

SpringBoot 最强大的功能就是把我们常用的场景抽取成了一个个starter(场景启动器),我们通过引入springboot 为我提供的这些场景启动器,再进行少量的配置就能使用相应的功能。即使是这样,springboot也不能囊括我们所有的使用场景,往往我们需要自定义starter,来简化我们对springboot的使用。

2、如何自定义starter

2.1、官方命名空间
  • 前缀:spring-boot-starter-
  • 模式:spring-boot-starter-模块名
  • 举例:spring-boot-starter-web、spring-boot-starter-jdbc
2.2、自定义命名空间
  • 后缀:-spring-boot-starter
  • 模式:模块-spring-boot-starter
  • 举例:demo-spring-boot-starter
2.3、定义starter需要的配置

根据springboot的自动配置原理,可知自定义starter需要

  • 一个xxxxAutoConfigurartion的配置模块
  • 一个xxxxProperties:封装配置文件中相关属性
  • 需要一个META-INF/spring.factories文件来描述配置文件工厂类

3、自定义starter实例

3.1、创建一个maven工程

项目名:demo-spring-boot-starter

pom文件

<?xmlversion="1.0" encoding="UTF-8"?><projectxmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.start</groupId><artifactId>demo-spring-boot-starter</artifactId><version>1.0-SNAPSHOT</version><properties><maven.compiler.source>8</maven.compiler.source><maven.compiler.target>8</maven.compiler.target></properties><dependencies><!-- 引入自动配置模块 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-autoconfigure</artifactId><version>2.0.0.RELEASE</version></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-configuration-processor</artifactId><version>2.0.0.RELEASE</version></dependency></dependencies><!-- 打包插件 --><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build></project>


3.2、创建DemoProperties属性类
importorg.springframework.boot.context.properties.ConfigurationProperties;
@ConfigurationProperties(prefix="com.start")
publicclassDemoProperties {
privateStringname="demo";
privateintage=20;
publicStringgetName() {
returnname;
    }
publicvoidsetName(Stringname) {
this.name=name;
    }
publicintgetAge() {
returnage;
    }
publicvoidsetAge(intage) {
this.age=age;
    }
}

@ConfigurationProperties配置此注解可以自动导入application.properties配置文件中的属性,前提需要指定属性前缀prefix。如果application.properties文件中未指定相应属性,便使用默认的,如上name=“demo”,age=20.

3.3、创建要注入的组件类DemoUtil
publicclassDemoUtil {
privateDemoPropertiesdemoProperties;
publicDemoPropertiesgetDemoProperties() {
returndemoProperties;
    }
publicvoidsetDemoProperties(DemoPropertiesdemoProperties) {
this.demoProperties=demoProperties;
    }
publicStringgetSomeInfo(){
returndemoProperties.getName()+":"+demoProperties.getAge();
    }
}

自定义starter的核心业务,满足业务需求的部分。

3.4、创建自动配置类
@Configuration@EnableConfigurationProperties({DemoProperties.class})
@ConditionalOnClass(DemoUtil.class)
@ConditionalOnWebApplication@ConditionalOnProperty(
prefix="com.start",
value= {"enabled"},
matchIfMissing=true)
publicclassDemoAutoConfiguration {
privatefinalDemoPropertiesdemoProperties;
publicDemoAutoConfiguration(DemoPropertiesdemoProperties) {
this.demoProperties=demoProperties;
    }
@Bean@ConditionalOnMissingBean(DemoUtil.class)
publicDemoUtildemoUtil(){
DemoUtildemoUtil=newDemoUtil();
demoUtil.setDemoProperties(demoProperties);
returndemoUtil;
    }
}


  • @Configuration:表明此类是一个配置类,将做为一个bean被spring进行管理。
  • @EnableConfigurationProperties:启用属性配置,将读取DemoProperties里面的属性。
  • @ConditionalOnClass:当类路径下面有DemoUtil此类时,自动配置。
  • @ConditionalOnProperty:判断指定的属性是否具备指定的值。
  • @ConditionalOnMissingBean:当容器中没有指定bean是,创建此bean。
  • @Bean给容器中添加一个组件
3.5、创建spring.factories文件

在resources文件夹下创建META-INF文件夹,创建spring.factories文件,在spring.factories编写DemoAutoConfiguration配置工厂类描述

org.springframework.boot.autoconfigure.EnableAutoConfiguration=\com.start.DemoAutoConfiguration
3.6、对项目进行打包

对项目进行mvn clean install操作会得到一个demo-spring-boot-starter-1.0-SNAPSHOT.jar,在其他项目可以在pom中引入

<dependency><groupId>com.start</groupId><artifactId>demo-spring-boot-starter</artifactId><version>1.0-SNAPSHOT</version></dependency>
3.7、测试

创建一个测试项目引入demo-spring-boot-starter-1.0-SNAPSHOT.jar,编写测试类

@RunWith(SpringRunner.class)
@SpringBootTestpublicclassSpringbootLearnApplicationTests {
//记录器Loggerlogger=LoggerFactory.getLogger(getClass());
@AutowiredprivateDemoUtildemoUtil;
@TestpublicvoidtestSpringStart(){
System.out.println(demoUtil.getSomeInfo());
    }
}

观察控制台打印的日志

demo:182021-09-2417:06:54.540INFO18060--- [       Thread-2] o.s.w.c.s.GenericWebApplicationContext   : Closingorg.springframework.web.context.support.GenericWebApplicationContext@1a20270e: startupdate [FriSep2417:06:52CST2021]; rootofcontexthierarchyDisconnectedfromthetargetVM, address: '127.0.0.1:51896', transport: 'socket'

可以看到打印信息ok

在配置文件中添加自定义配置

com.start.name=tom
com.start.age=20

再次启动测试类,观察打印日志

tom:202021-09-2417:08:11.707INFO22704--- [       Thread-2] o.s.w.c.s.GenericWebApplicationContext   : Closingorg.springframework.web.context.support.GenericWebApplicationContext@1a20270e: startupdate [FriSep2417:08:10CST2021]; rootofcontexthierarchyDisconnectedfromthetargetVM, address: '127.0.0.1:51941', transport: 'socket'

可以看到配置生效了

相关文章
|
16天前
|
Java Maven 开发者
编写SpringBoot的自定义starter包
通过本文的介绍,我们详细讲解了如何创建一个Spring Boot自定义Starter包,包括自动配置类、配置属性类、`spring.factories`文件的创建和配置。通过自定义Starter,可以有效地复用公共配置和组件,提高开发效率。希望本文能帮助您更好地理解和应用Spring Boot自定义Starter,在实际项目中灵活使用这一强大的功能。
42 17
|
1月前
|
XML Java 应用服务中间件
Spring Boot 两种部署到服务器的方式
本文介绍了Spring Boot项目的两种部署方式:jar包和war包。Jar包方式使用内置Tomcat,只需配置JDK 1.8及以上环境,通过`nohup java -jar`命令后台运行,并开放服务器端口即可访问。War包则需将项目打包后放入外部Tomcat的webapps目录,修改启动类继承`SpringBootServletInitializer`并调整pom.xml中的打包类型为war,最后启动Tomcat访问应用。两者各有优劣,jar包更简单便捷,而war包适合传统部署场景。需要注意的是,war包部署时,内置Tomcat的端口配置不会生效。
293 17
Spring Boot 两种部署到服务器的方式
|
1月前
|
JavaScript Java 程序员
SpringBoot自动配置及自定义Starter
Java程序员依赖Spring框架简化开发,但复杂的配置文件增加了负担。SpringBoot以“约定大于配置”理念简化了这一过程,通过引入各种Starter并加载默认配置,几乎做到开箱即用。
127 10
SpringBoot自动配置及自定义Starter
|
2月前
|
XML Java 数据格式
使用idea中的Live Templates自定义自动生成Spring所需的XML配置文件格式
本文介绍了在使用Spring框架时,如何通过创建`applicationContext.xml`配置文件来管理对象。首先,在resources目录下新建XML配置文件,并通过IDEA自动生成部分配置。为完善配置,特别是添加AOP支持,可以通过IDEA的Live Templates功能自定义XML模板。具体步骤包括:连续按两次Shift搜索Live Templates,配置模板内容,输入特定前缀(如spring)并按Tab键即可快速生成完整的Spring配置文件。这样可以大大提高开发效率,减少重复工作。
使用idea中的Live Templates自定义自动生成Spring所需的XML配置文件格式
|
2月前
|
Java 数据库连接 Maven
最新版 | SpringBoot3如何自定义starter(面试常考)
在Spring Boot中,starter是一种特殊的依赖,帮助开发人员快速引入和配置特定功能模块。自定义starter可以封装一组特定功能的依赖和配置,简化项目中的功能引入。其主要优点包括模块化、简化配置、提高代码复用性和实现特定功能。常见的应用场景有短信发送模块、AOP日志切面、分布式ID生成等。通过创建autoconfigure和starter两个Maven工程,并编写自动配置类及必要的配置文件,可以实现一个自定义starter。最后在测试项目中验证其有效性。这种方式使开发者能够更便捷地管理和维护代码,提升开发效率。
最新版 | SpringBoot3如何自定义starter(面试常考)
|
2月前
|
设计模式 XML Java
【23种设计模式·全精解析 | 自定义Spring框架篇】Spring核心源码分析+自定义Spring的IOC功能,依赖注入功能
本文详细介绍了Spring框架的核心功能,并通过手写自定义Spring框架的方式,深入理解了Spring的IOC(控制反转)和DI(依赖注入)功能,并且学会实际运用设计模式到真实开发中。
【23种设计模式·全精解析 | 自定义Spring框架篇】Spring核心源码分析+自定义Spring的IOC功能,依赖注入功能
|
2月前
|
NoSQL Java Redis
Spring Boot 自动配置机制:从原理到自定义
Spring Boot 的自动配置机制通过 `spring.factories` 文件和 `@EnableAutoConfiguration` 注解,根据类路径中的依赖和条件注解自动配置所需的 Bean,大大简化了开发过程。本文深入探讨了自动配置的原理、条件化配置、自定义自动配置以及实际应用案例,帮助开发者更好地理解和利用这一强大特性。
188 14
|
3月前
|
存储 运维 安全
Spring运维之boot项目多环境(yaml 多文件 proerties)及分组管理与开发控制
通过以上措施,可以保证Spring Boot项目的配置管理在专业水准上,并且易于维护和管理,符合搜索引擎收录标准。
89 2
|
4月前
|
SQL JSON Java
mybatis使用三:springboot整合mybatis,使用PageHelper 进行分页操作,并整合swagger2。使用正规的开发模式:定义统一的数据返回格式和请求模块
这篇文章介绍了如何在Spring Boot项目中整合MyBatis和PageHelper进行分页操作,并且集成Swagger2来生成API文档,同时定义了统一的数据返回格式和请求模块。
146 1
mybatis使用三:springboot整合mybatis,使用PageHelper 进行分页操作,并整合swagger2。使用正规的开发模式:定义统一的数据返回格式和请求模块
|
3月前
|
安全 Java 应用服务中间件
如何将Spring Boot应用程序运行到自定义端口
如何将Spring Boot应用程序运行到自定义端口
122 0