如何自制一个Spring Boot Starter并推送到远端公服

在现代Java开发中,Spring Boot无疑是一个强大且便捷的框架,它通过提供大量的Starter来简化依赖管理和项目配置。有时,我们可能需要为特定功能或团队定制Starter。本文将指导你如何创建自己的Spring Boot Starter并将其推送到远程公共服务器上,以便于团队成员或其他开发者使用。


新建项目

本文准备封装一个简单的 MD5摘要工具的 Starter,命名为 md5test-spring-boot-starter,其本质就是一个 Maven项目,只不过我们需要完善pom文件的相关依赖:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="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.yu</groupId><artifactId>md5Cipher-spring-boot-starter</artifactId><version>1.3.1</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></dependency></dependencies><dependencyManagement><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-dependencies</artifactId><version>2.6.13</version><type>pom</type><scope>import</scope></dependency></dependencies></dependencyManagement></project>

编写业务逻辑

首先提供一个 MD5Util工具类,负责实际的 MD5加密:

package com.yu.utils;import java.security.MessageDigest;public class MD5Util {public static String getMD5(String source) {return getMD5(source.getBytes());}public static String getMD5(byte[] source) {String s = null;char hexDigits[] = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'};try {MessageDigest md = MessageDigest.getInstance("MD5");byte[] tmp;synchronized (MD5Util.class) {md.update(source);tmp = md.digest();}char str[] = new char[16 * 2];int k = 0;for (int i = 0; i < 16; i++) {byte byte0 = tmp[i];str[k++] = hexDigits[byte0 >>> 4 & 0xf];str[k++] = hexDigits[byte0 & 0xf];}s = new String(str);} catch (Exception e) {e.printStackTrace();}return s;}
}

再来提供一个 MD5Service类 进行一次封装

public class MD5Service {public String getMD5(String input) {return MD5Util.getMD5(input.getBytes());}
}

编写自动装配类

这一步十分重要,也是编写 Spring Boot Starter最重要的一步:

@Configuration
public class MD5AutoConfiguration {@Beanpublic MD5Service md5Service() {return new MD5Service();}}

当然此处可以说是最简自动装配类了,该部分其实还包含各种丰富的可控注解,可以 参考 Spring Boot官方文档!

编写 spring.factories

我们还需要在 resources/META-INF/ 下创建一个名为 spring.factories的文件,然后置入以下内容:

org.springframework.boot.autoconfigure.EnableAutoConfiguration=\com.yu.config.MD5AutoConfiguration

推送到远端仓库

很多公司都搭有私有的 Maven仓库,但个人实验可以借助于 JitPack这个 “远端公服”来为我们托管自制的 Spring Boot Starter。

我们将编写好的 Spring Boot Starter代码置于 Github公有仓库上,然后通过 JitPack来拉取我们的代码并打包生成Jar包即可。

使用 Spring Boot Starter

新建一个测试工程来测试一下我们编写的 md5-cipher-spring-boot-starter。工程创建完毕后,在 pom.xml中加入如下两个元素:

  • 添加 JitPack repository
<repositories><repository><id>jitpack.io</id><url>https://jitpack.io</url></repository>
</repositories>
  • 添加 md5-cipher-spring-boot-starter依赖:
<dependency><groupId>com.github.lnoom</groupId><artifactId>md5-cipher-spring-boot-starter</artifactId><version>d315929d19</version>
</dependency>

再编写一个测试 Controller来测一下MD5摘要算法的功能:

application.yml

md5:password: zhangyu
@RestController
public class TestController {@Autowiredprivate MD5Service md5Service;@Value("${md5.password}")private String password;@GetMapping("/test")public ResponseEntity<String> getMD5() {String result = "MD5加密结果为:" + md5Service.getMD5(password);return ResponseEntity.ok(result);}
}

调用 /test接口后的加密结果为:

MD5加密结果为:AE61268246C931C4160F1DBD539CC073

(jitpack.io) 引入不生效问题

在当前项目的maven对应的 setting.xml 中,修改一下镜像的配置,即:

原本是

<mirrorOf>*</mirrorOf>

改为:

<mirrorOf>*,!jitpack.io</mirrorOf>

创建并分享一个Spring Boot Starter不仅可以提高开发效率,还能促进团队间的协作和技术共享。通过遵循上述步骤,你可以快速地制作并部署自定义的Starter,让其他开发者也能轻松集成和使用你的代码。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/858173.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Pwn刷题记录(不停更新)

1、CTFshow-pwn04&#xff08;基础canary&#xff09; ​ 好久没碰过pwn了&#xff0c;今天临时做一道吧&#xff0c;毕竟刚联合了WSL和VSCode&#xff0c;想着试着做一道题看看&#xff0c;结果随手一点&#xff0c;就是一个很少接触的&#xff0c;拿来刷刷&#xff1a; ​ …

ClosedXML

一、类库介绍 ClosedXML是一个用于读取、操作和写入Excel 2007 (.xlsx, .xlsm)文件的.NET第三方库。它基于OpenXML&#xff0c;但与OpenXML相比&#xff0c;ClosedXML具有更高的性能和更易于使用的API接口。 ClosedXML支持XML文档的解析和生成&#xff0c;可以处理复杂的XML结…

STL迭代器的应用

STL迭代器的应用 迭代器的定义方法&#xff1a; 类型作用定义方式正向迭代器正序遍历STL容器容器类名::iterator 迭代器名常量正向迭代器以只读方式正序遍历STL容器容器类名::const_iterator 迭代器名反向迭代器逆序遍历STL容器容器类名::reverse_iterator 迭代器名常量反向迭…

使用Spring Boot构建全栈应用程序:从理论到实践

文章目录 引言第一章 项目初始化1.1 使用Spring Initializr生成项目1.2 创建基本项目结构 第二章 后端服务开发2.1 定义实体类2.2 创建Repository接口2.3 实现Service类2.4 创建Controller类 第三章 前端集成3.1 使用Thymeleaf模板引擎3.2 创建前端控制器 第四章 安全配置4.1 S…

如何解决vue中的路由守卫失效问题

引言 1. 路由守卫简介 路由守卫是前端开发中一个至关重要的概念&#xff0c;特别是在使用单页应用&#xff08;SPA&#xff09;框架如React、Vue或Angular时。它们充当了SPA中的“门卫”&#xff0c;控制着用户对不同页面的访问权限。路由守卫的核心功能是确保用户在访问特定…

迅狐多商户直播商城系统源码:电商领域的创新融合

随着直播技术的兴起和电子商务的蓬勃发展&#xff0c;迅狐多商户直播商城系统源码应运而生&#xff0c;为商家和消费者提供了一个全新的互动购物平台。 多商户直播商城系统源码概述 迅狐多商户直播商城系统源码是一个高度集成的解决方案&#xff0c;它结合了直播的即时性和电…

C语言的数据结构:树与二叉树(树篇)

前言 之前所学到的数据结构都是线性结构特征&#xff0c;所谓线性就是在结构上&#xff0c;将节点连接起来时&#xff0c;像一条线一样。如链表则是上一个节点包含下一个节点地址的指针&#xff0c;这样依次下去。而串、队列、栈则实现方式都依赖于链表或顺序表而实现&#xf…

报错:mAP数据为0%+无法读取output里的图片红色警告

debug检查&#xff1a;发现创建的output和input的路径不在同一级 操作1&#xff1a;修改output创建路径为绝对路径后&#xff0c;output和input文件成功在同一级&#xff0c;但问题仍存在 debug检测&#xff1a;识别的类别和保存的类别不同&#xff0c;没有保存数据 操作2&…

文件夹或文件已在另一程序中打开,找句柄发现是explorer.exe如何解决

1.找到句柄&#xff1a;ctrl alt del打开任务资源管理器 2.注意是选择CPU -> 关联的句柄&#xff0c;而不是概述 如果发现只有explorer.exe&#xff0c;那肯定是不对的&#xff0c;我们先shfit一个一个删除&#xff0c;发现哪个删不掉&#xff0c;再在这里找句柄&#xff0c…

用AI打败AI,利用ai指令对头条文章进行查重测试,结果出乎意料

前言&#xff1a;现在的ai真的太火爆了&#xff0c;让人不得不感叹ai的神奇之处&#xff0c;让我们一起来探讨下ai的强大之处吧&#xff01;本文仅限学习研究。 背景&#xff1a;最近看到很多人用ai写文章&#xff0c;然后被头条判定为疑似ai生成&#xff0c;所以想研究学习下…

NodeJs 使用中间件实现日志生成功能

写在前面 今天我们实现一个记录 nodejs 服务请求日志的功能&#xff0c;大概的功能包括请求拦截&#xff0c;将请求的信息作为日志文件的内容写入到 txt 文件中&#xff0c;然后输出到指定的日志到当天日期目录中&#xff0c;从而实现后续查找用户请求信息的功能&#xff0c;下…

【深度学习实战(40)】可变形卷积

一、可变形卷积&#xff08;DCN/DConv&#xff09; (a)是普通的卷积操作 (b)、©、(d)是可变形卷积&#xff08;deformable convolution&#xff0c;即DConv&#xff09; 可变形卷积实际是指标准卷积操作中采样位置增加了一个偏移量offset&#xff0c;这样卷积核就能在训…

npm 安装踩坑

1 网络正常&#xff0c;但是以前的老项目安装依赖一直卡住无法安装&#xff1f;哪怕切换成淘宝镜像 解决办法&#xff1a;切换成yarn (1) npm i yarn -g(2) yarn init(3) yarn install在安装的过程中发现&#xff1a; [2/4] Fetching packages... error marked11.1.0:…

企业供应链数字化转型如何做?让企业盈利能力增强再飞一会

引言&#xff1a;企业供应链数字化转型是外部环境变化、内部需求驱动、数字化转型的必要性和技术进步的推动共同作用的结果。供应链数字化转型可以通过数据整合、自动化、协同工作等方式提高供应链的效率和降低成本&#xff0c;例如&#xff0c;使用数字化技术可以实现快速采购…

Studying-代码随想录训练营day14| 226.翻转二叉树、101.对称二叉树、104.二叉树的最大深度、111.二叉树的最小深度

第十四天&#xff0c;(ง •_•)ง&#x1f4aa;&#x1f4aa;&#xff0c;编程语言&#xff1a;C 目录 226.翻转二叉树 101.对称二叉树 100.相同的树 572.另一个树的子树 104.二叉树的最大深度 559.n叉树的最大深度 111.二叉树的最小深度 总结 226.翻转二叉树 文档讲…

【八】【QT开发应用】QTcreate项目打包成.exe文件或.apk文件,EnigmaVirtualBox软件下载,虚拟网站代打开QT应用

EnigmaVirtualBox下载 Enigma Virtual Box QTcreate项目打包成.exe可执行文件 找到自己写好的项目的.exe文件 将这个文件复制到一个新的文件夹里面 在这个新的文件夹里面打开cmd,这样可以使得cmd直接进入到该文件夹 打包.exe命令行 输入下面的命令行 windeployqt game…

一款基于WordPress开发的高颜值的自适应主题Puock

主题特性 支持白天与暗黑模式 全局无刷新加载 支持博客与CMS布局 内置WP优化策略 一键全站变灰 网页压缩成一行 后台防恶意登录 内置出色的SEO功能 评论Ajax加载 文章点赞、打赏 支持Twemoji集成 支持QQ登录 丰富的广告位 丰富的小工具 自动百度链接提交 众多页面模板 支持评论…

bazel :Output Directory Layout

Output Directory Layout This page covers requirements and layout for output directories. Requirements for an output directory layout: Doesn’t collide if multiple users are building on the same box.如果多个用户在同一个盒子上建造则不会发生冲突。 Support…

如何开发一个项目脚手架cli

目录 背景正文unbuildpromptsprogresskolorist 设置打包命令npm execnpxnpm init/ npm create/ npm innit 使用最后 背景 随着团队项目类型越来越多&#xff0c;方便后续快速去开发项目&#xff0c;会出现各种类型的项目模版项目。 这样开发只需要通过脚手架选择自己需要的项目…

示例:推荐一个自定义的Ribbon皮肤

一、目的&#xff1a;WPF自带的Ribbon控件功能很强大&#xff0c;但使用过程中感觉显示的样式不是很好&#xff0c;或者不适合自己的项目&#xff0c;下面介绍一个基于自带Ribbon控件样式的修改&#xff0c;主要修改了些高度&#xff0c;间距&#xff0c;背景色&#xff0c;前景…