【实战】SpringBoot自定义 starter及使用

文章目录

前言

各位大佬在使用springboot或者springcloud的时候都会根据需求引入各种starter,比如gateway、feign、web、test等等的插件。当然,在实际的业务场景中也会有将第三方组件整合为starter供其他项目接入。那么,我们今天就分享一波SpringBoot自定义 Starter及使用。

技术积累

SpringBoot starter简介

starter是Spring Boot中的一个非常重要的概念,Starter相当于模块,它能将模块所需的依赖整合起来并对模块内的Bean根据环境( 条件)进行自动配置。使用者只需要依赖相应功能的Starter,无需做过多的配置和依赖,Spring Boot就能自动扫描并加载相应的模块。

starter的开发步骤

新建Maven项目,在项目的POM文件中定义使用的依赖;

新建配置类,写好配置项和默认的配置值,指明配置项前缀;

新建自动装配类,使用@Configuration和@Bean来进行自动装配;

新建spring.factories文件,指定Starter的自动装配类;

实战演示

自定义一个简单的starter

本次我们就简单整合一个工具类、一个api接口demo供大家了解创建流程,对于其他的配置项或者涉及数据等等也都在这个基础的starter进行叠加而已。

1、新建Maven项目

选中两个插web和lombok,点击finish完成项目创建

2、pom中增加项目依赖不传递配置,以及配置maven打包生成可执行依赖jar

pom 复制代码
<!--项目依赖不传递
例如:project1依赖a.jar(optional=true),project2依赖project1,则project2不依赖a.jar-->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-configuration-processor</artifactId>
    <optional>true</optional>
</dependency>
pom 复制代码
<plugin>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-maven-plugin</artifactId>
    <configuration>
        <!--配置可执行jar的名称,不对原jar重命名为.original-->
        <classifier>exec</classifier>
        <excludes>
            <exclude>
                <groupId>org.projectlombok</groupId>
                <artifactId>lombok</artifactId>
            </exclude>
        </excludes>
    </configuration>
</plugin>

3、删除不必要的文件,最后剩下的项目格式为

4、启动类取消自动配置注释并清空方法

5、.新建spring.factories文件,指定starter的自动装配类

在resource下新建META-INF目录,然后新增spring.factories自动装配文件,并在文件中指定装配类

java 复制代码
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
  com.example.demostarter.DemoStarterApplication

6、新增测试接口和测试类

java 复制代码
/**
 * TestController
 * @author Administrator
 * @version 1.0
 * @date 2024/1/20 0020 15:50
 */
@RestController
public class TestController {
    
    /**
     * TestStarterApi
     * @param str
     * @author Administrator
     * @date 2024/1/20 0020 15:51 
     * @return java.lang.String
     */
    @GetMapping("/testStartApi")
    public String TestStarterApi(String str){
        return "this is a TestStarterApi data is "+str;
    }
    
}
java 复制代码
/**
 * TestStartUtils
 * @author Administrator
 * @version 1.0
 * @date 2024/1/20 0020 15:52
 */
public class TestStartUtils {
    
    /**
     * test
     * @author Administrator
     * @date 2024/1/20 0020 15:53 
     * @return void
     */
    public static void test(){
        System.err.println("this is a TestStartUtils test method");
    }
}

7、将demo-starter安装到本地仓库进行测试,当然也可以部署到远程仓库

也可以用命令: mvn install

至此,整个Starter开发完毕,已经install本地仓库,deploy远程仓库同理(mvn deploy)

自定义starter的使用

1、在需要使用starter的maven项目pom中引入demo-starter

pom 复制代码
<!--demo-starter-->
<dependency>
   <groupId>com.example</groupId>
   <artifactId>demo-starter</artifactId>
   <version>0.0.1-SNAPSHOT</version>
</dependency>

2、编写测试类,并在启动类配置扫描包位置

java 复制代码
/**
 * TestdemoApplicationTests
 * @author Administrator
 * @date 2024/1/20 0020 16:33 
 */
@SpringBootTest
class TestdemoApplicationTests {

   /**
    * contextLoads
    * @author Administrator
    * @date 2024/1/20 0020 16:33 
    * @return void
    */
   @Test
   public void contextLoads() {
      TestStartUtils.test();
   }

}
java 复制代码
@ComponentScan("com.example")
@SpringBootApplication
public class TestdemoApplication {

   public static void main(String[] args) {
      SpringApplication.run(TestdemoApplication.class, args);
   }

}

3、测试引入starter,效果展示

3.1 可以直接依赖starter中的类并可以进行调用

3.2 由于启动类配置了扫描包位置可以扫到starter的api

写在最后

SpringBoot自定义 Starter及使用还是非常简单,我们在创建的时候需要注意maven插件需要增加可执行jar配置,在resource下需要指定starter的自动装配类即可,在使用starter的项目中需要按需增加扫描包以保证框架可以获取到我们的starter文件。

相关推荐
小码哥_常16 小时前
别再被误导!try...catch性能大揭秘
后端
无巧不成书021817 小时前
30分钟入门Java:从历史到Hello World的小白指南
java·开发语言
苍何18 小时前
30分钟用 Agent 搓出一家跨境网店,疯了
后端
ssshooter18 小时前
Tauri 2 iOS 开发避坑指南:文件保存、Dialog 和 Documents 目录的那些坑
前端·后端·ios
追逐时光者18 小时前
一个基于 .NET Core + Vue3 构建的开源全栈平台 Admin 系统
后端·.net
程序员飞哥18 小时前
90后大龄程序员失业4个月终于上岸了
后端·面试·程序员
zs宝来了19 小时前
Playwright 自动发布 CSDN 的完整实践
java
彭于晏Yan20 小时前
Redisson分布式锁
spring boot·redis·分布式
吴声子夜歌20 小时前
TypeScript——基础类型(三)
java·linux·typescript
GetcharZp20 小时前
Git 命令行太痛苦?这款 75k Star 的神级工具,让你告别“合并冲突”恐惧症!
后端