当前位置: 首页 > news >正文

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

文章目录

    • 前言
    • 技术积累
      • SpringBoot starter简介
      • starter的开发步骤
    • 实战演示
    • 自定义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

<!--项目依赖不传递
例如: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>
<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自动装配文件,并在文件中指定装配类
在这里插入图片描述

org.springframework.boot.autoconfigure.EnableAutoConfiguration=\com.example.demostarter.DemoStarterApplication

6、新增测试接口和测试类
在这里插入图片描述

/*** 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;}}
/*** 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

<!--demo-starter-->
<dependency><groupId>com.example</groupId><artifactId>demo-starter</artifactId><version>0.0.1-SNAPSHOT</version>
</dependency>

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

/*** 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*/@Testpublic void contextLoads() {TestStartUtils.test();}}
@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文件。

相关文章:

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

文章目录 前言技术积累SpringBoot starter简介starter的开发步骤 实战演示自定义starter的使用写在最后 前言 各位大佬在使用springboot或者springcloud的时候都会根据需求引入各种starter&#xff0c;比如gateway、feign、web、test等等的插件。当然&#xff0c;在实际的业务…...

网络爬虫采集工具

在当今数字化的时代&#xff0c;获取海量数据对于企业、学术界和个人都至关重要。网络爬虫成为一种强大的工具&#xff0c;能够从互联网上抓取并提取所需的信息。本文将专心分享关于网络爬虫采集数据的全面指南&#xff0c;深入探讨其原理、应用场景以及使用过程中可能遇到的挑…...

【协议】XMLHttpRequest的梳理和总结

1. 前言 本篇梳理和总结一下XMLHttpRequest。 2. XMLHttpRequest原型对象的属性和方法 属性和方法说明示例new XMLHttpRequest() 功能&#xff1a;创建XHR对象 输入&#xff1a; 输出&#xff1a;XHR实例化对象 <略> XMLHttpRequest.prototype .open(method, url, asyn…...

AI教我学编程之C#类的基本概念(1)

前言 在AI教我学编程之C#类型 中&#xff0c;我们学习了C#类型的的基础知识&#xff0c;而类正是类型的一种. 目录 区分类和类型 什么是类&#xff1f; 对话AI 追问 实操 追踪属性的使用 AI登场 逐步推进 提出疑问 药不能停 终于实现 探索事件的使用 异步/交互操作 耗时操…...

前端js 数据结构:对象 object、数组Array 、Map 的创建、增删改 / 遍历数据

目录 前端js 数据结构&#xff1a;对象、数组、Map 的使用1 对象&#xff08;object&#xff09;1.1 创建对象1.1.1 对象字面量(最常用): {}1.1.2 使用 new 关键字和对象构造函数1.1.3 Object.create() 1.2 修改对象1.2.1 直接赋值&#xff1a;对象的属性名直接赋值1.2.2 点号/…...

ARM_Linux的NFS网络文件系统的搭建

介绍&#xff1a; NFS是network filesystem的简称&#xff0c;可以不同的主机通过网络访问远端的NFS服务器共享出来的文件&#xff0c;这样主机通过网络访问NFS服务器&#xff0c;我们就可以在开发板上通过网络访问主机的文件。 为什么要使用NFS网络文件呐&#xff1f; 1、传…...

vscode配置web开发环境(WampServer)

这里直接去下载了集成的服务器组件wampserver&#xff0c;集成了php&#xff0c;MySQL&#xff0c;Apache 可能会出现安装问题&#xff0c;这里说只有图上这些VC包都安装了才能继续安装&#xff0c;进入报错里提供的链接 在页面内搜索相关信息 github上不去可以去镜像站 下载…...

00-Rust前言

问&#xff1a;为什么要近期想学习Rust? 答&#xff1a; Rust出来也是有一段时间了&#xff0c;从Microsoft吵着要重构他们的C"祖传代码"开始&#xff0c;Rust就披着“高效&#xff0c;安全”的头衔。而自己决定要学习Rust&#xff0c;是因为近期发现&#xff1a;涉…...

3.conda的使用

anaconda安装 ubuntu 安装conda 系统架构 uname -m打开终端&#xff0c;不启动base conda config --set auto_activate_base falseconda命令使用 1.查看conda版本 conda --version2.查看conda配置环境 conda config --show3.设置镜像 #设置清华镜像 conda config --add…...

IPv6自动隧道---6to4中继

6to4中继 普通IPv6网络需要与6to4网络通过IPv4网络互通,这可以通过6to4中继路由器方式实现。所谓6to4中继,就是通过6to4隧道转发的IPv6报文的目的地址不是6to4地址,但转发的下一跳是6to4地址,该下一跳为路由器我们称之为6to4中继。隧道的IPv4目的地址依然从下一跳的6to4地…...

低代码开发:解锁数字化转型新维度

在信息化浪潮中&#xff0c;企业正面临着前所未有的挑战与机遇。一方面&#xff0c;市场环境瞬息万变&#xff0c;业务需求迭代频繁&#xff0c;对快速应用开发提出了更高要求&#xff1b;另一方面&#xff0c;传统软件开发模式受限于高成本、长周期等瓶颈&#xff0c;难以满足…...

写一个定时备份数据库的脚本,且只保留最近3天

下面是一个备份数据库并只保留最近3天备份的脚本示例&#xff0c;该脚本使用Python编写&#xff1a; import os import datetime import shutil # 更多源码前往获取&#xff1a;www.qqmu.com # 数据库备份目录 backup_dir "/path/to/backupdir"# 数据库名称 databa…...

java常见面试题:请详细解释如何在Java EE应用中添加EJB

在Java EE应用中添加EJB&#xff08;Enterprise JavaBeans&#xff09;涉及几个关键步骤。下面是一个详细的解释&#xff1a; 创建EJB项目&#xff1a; 首先&#xff0c;你需要创建一个Java EE项目。这通常通过IDE&#xff08;如Eclipse、IntelliJ IDEA等&#xff09;完成&…...

视频监控需求记录

记录一下最近要做的需求&#xff0c;我个人任务还是稍微比较复杂的 需求&#xff1a;需要实现一个视频实时监控、视频回放、视频设备管理&#xff0c;以上都是与组织架构有关 大概的界面长这个样子 听着需求好像很简单&#xff0c;但是~我们需要在一个界面上显示两个厂商的视…...

Self-RAG:通过自我反思学习检索、生成和批判

论文地址&#xff1a;https://arxiv.org/abs/2310.11511 项目主页&#xff1a;https://selfrag.github.io/ Self-RAG学习检索、生成和批评&#xff0c;以提高 LM 的输出质量和真实性&#xff0c;在六项任务上优于 ChatGPT 和检索增强的 LLama2 Chat。 问题&#xff1a;万能L…...

C++基于多态的职工管理系统(附代码下载)

&#x1f308;个人主页&#xff1a;godspeed_lucip &#x1f525; 系列专栏&#xff1a;C从基础到进阶 本文配套markdown文件、配套完整程序&#xff08;vs项目&#xff0c;可直接运行&#xff09;网盘链接请翻阅至文章最底部获取。 职工管理系统&#x1f30f;1、管理系统需求…...

Java安全 CC链1分析

Java安全之CC链1分析 什么是CC链环境搭建jdk下载idea配置创建项目 前置知识Transformer接口ConstantTransformer类invokerTransformer类ChainedTransformer类 构造CC链1CC链1核心demo1demo1分析 寻找如何触发CC链1核心TransformedMap类AbstractInputCheckedMapDecorator类readO…...

Miracast手机高清投屏到电视(免费)

版权声明 本文原创作者&#xff1a;谷哥的小弟作者博客地址&#xff1a;http://blog.csdn.net/lfdfhl Miracast概述 Miracast是一种无线显示标准&#xff0c;它允许支持Miracast的设备之间通过Wi-Fi直接共享音频和视频内容&#xff0c;实现屏幕镜像或扩展显示。这意味着你可以…...

【elementUI】el-select相关问题

官方使用DEMO <template><el-select v-model"value" placeholder"请选择"><el-optionv-for"item in options":key"item.value":label"item.label":value"item.value"></el-option></…...

【蓝桥杯日记】复盘第一篇——顺序结构

&#x1f680;前言 本期是一篇关于顺序结构的题目的复盘,通过复盘基础知识&#xff0c;进而把基础知识学习牢固&#xff01;通过例题而进行复习基础知识。 &#x1f6a9;目录 前言 1.字符三角形 分析&#xff1a; 知识点&#xff1a; 代码如下 2. 字母转换 题目分析: 知…...

AtCoder 第409​场初级竞赛 A~E题解

A Conflict 【题目链接】 原题链接&#xff1a;A - Conflict 【考点】 枚举 【题目大意】 找到是否有两人都想要的物品。 【解析】 遍历两端字符串&#xff0c;只有在同时为 o 时输出 Yes 并结束程序&#xff0c;否则输出 No。 【难度】 GESP三级 【代码参考】 #i…...

UE5 学习系列(三)创建和移动物体

这篇博客是该系列的第三篇&#xff0c;是在之前两篇博客的基础上展开&#xff0c;主要介绍如何在操作界面中创建和拖动物体&#xff0c;这篇博客跟随的视频链接如下&#xff1a; B 站视频&#xff1a;s03-创建和移动物体 如果你不打算开之前的博客并且对UE5 比较熟的话按照以…...

蓝牙 BLE 扫描面试题大全(2):进阶面试题与实战演练

前文覆盖了 BLE 扫描的基础概念与经典问题蓝牙 BLE 扫描面试题大全(1)&#xff1a;从基础到实战的深度解析-CSDN博客&#xff0c;但实际面试中&#xff0c;企业更关注候选人对复杂场景的应对能力&#xff08;如多设备并发扫描、低功耗与高发现率的平衡&#xff09;和前沿技术的…...

linux arm系统烧录

1、打开瑞芯微程序 2、按住linux arm 的 recover按键 插入电源 3、当瑞芯微检测到有设备 4、松开recover按键 5、选择升级固件 6、点击固件选择本地刷机的linux arm 镜像 7、点击升级 &#xff08;忘了有没有这步了 估计有&#xff09; 刷机程序 和 镜像 就不提供了。要刷的时…...

HTML前端开发:JavaScript 常用事件详解

作为前端开发的核心&#xff0c;JavaScript 事件是用户与网页交互的基础。以下是常见事件的详细说明和用法示例&#xff1a; 1. onclick - 点击事件 当元素被单击时触发&#xff08;左键点击&#xff09; button.onclick function() {alert("按钮被点击了&#xff01;&…...

Android 之 kotlin 语言学习笔记三(Kotlin-Java 互操作)

参考官方文档&#xff1a;https://developer.android.google.cn/kotlin/interop?hlzh-cn 一、Java&#xff08;供 Kotlin 使用&#xff09; 1、不得使用硬关键字 不要使用 Kotlin 的任何硬关键字作为方法的名称 或字段。允许使用 Kotlin 的软关键字、修饰符关键字和特殊标识…...

Springboot社区养老保险系统小程序

一、前言 随着我国经济迅速发展&#xff0c;人们对手机的需求越来越大&#xff0c;各种手机软件也都在被广泛应用&#xff0c;但是对于手机进行数据信息管理&#xff0c;对于手机的各种软件也是备受用户的喜爱&#xff0c;社区养老保险系统小程序被用户普遍使用&#xff0c;为方…...

rnn判断string中第一次出现a的下标

# coding:utf8 import torch import torch.nn as nn import numpy as np import random import json""" 基于pytorch的网络编写 实现一个RNN网络完成多分类任务 判断字符 a 第一次出现在字符串中的位置 """class TorchModel(nn.Module):def __in…...

WebRTC从入门到实践 - 零基础教程

WebRTC从入门到实践 - 零基础教程 目录 WebRTC简介 基础概念 工作原理 开发环境搭建 基础实践 三个实战案例 常见问题解答 1. WebRTC简介 1.1 什么是WebRTC&#xff1f; WebRTC&#xff08;Web Real-Time Communication&#xff09;是一个支持网页浏览器进行实时语音…...

华为OD最新机试真题-数组组成的最小数字-OD统一考试(B卷)

题目描述 给定一个整型数组,请从该数组中选择3个元素 组成最小数字并输出 (如果数组长度小于3,则选择数组中所有元素来组成最小数字)。 输入描述 行用半角逗号分割的字符串记录的整型数组,0<数组长度<= 100,0<整数的取值范围<= 10000。 输出描述 由3个元素组成…...