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

如何自制一个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,让其他开发者也能轻松集成和使用你的代码。

相关文章:

  • 【ARMv8/ARMv9 硬件加速系列 2.2 -- ARM NEON 的加减乘除(左移右移)运算】
  • 新手教学系列——“笑看”单元测试(pytest)
  • 【人工智能】—XGBoost算法在构建互联网防火墙异常行为识别模型应用案例
  • AcWing 1801:蹄子剪刀布 ← 模拟题
  • 「51媒体」活动会议,展览展会,直播曝光的一种方法
  • Eclipse 工作空间:深入解析与高效使用
  • rk3568 Android 11在系统怎样执行命令获取SN号
  • C语言入门系列:特殊的main函数和exit函数
  • pandas plot函数:数据可视化的快捷通道
  • 【java】写一个发送邮箱的样例
  • 点击旋转箭头样式
  • Java宝藏实验资源库(2)字节流
  • ios CCLanguage.m
  • VMware ESXi 8.0U2c macOS Unlocker OEM BIOS Huawei (华为) FusionServer 定制版
  • 3D开发工具HOOPS为BIM应用提供支持:复杂大模型实现Web端轻量化!
  • JS中 map, filter, some, every, forEach, for in, for of 用法总结
  • HTTP 简介
  • JavaScript 是如何工作的:WebRTC 和对等网络的机制!
  • leetcode388. Longest Absolute File Path
  • sublime配置文件
  • Terraform入门 - 1. 安装Terraform
  • Theano - 导数
  • vue 配置sass、scss全局变量
  • 关于Java中分层中遇到的一些问题
  • 基于 Babel 的 npm 包最小化设置
  • 前端技术周刊 2019-02-11 Serverless
  • 前端路由实现-history
  • 深度解析利用ES6进行Promise封装总结
  • 数组大概知多少
  • 听说你叫Java(二)–Servlet请求
  • 微信开源mars源码分析1—上层samples分析
  • 一些css基础学习笔记
  • 应用生命周期终极 DevOps 工具包
  • 再次简单明了总结flex布局,一看就懂...
  • 函数计算新功能-----支持C#函数
  • 容器镜像
  • ​3ds Max插件CG MAGIC图形板块为您提升线条效率!
  • ​七周四次课(5月9日)iptables filter表案例、iptables nat表应用
  • $.type 怎么精确判断对象类型的 --(源码学习2)
  • (HAL库版)freeRTOS移植STMF103
  • (ibm)Java 语言的 XPath API
  • (java版)排序算法----【冒泡,选择,插入,希尔,快速排序,归并排序,基数排序】超详细~~
  • (二)linux使用docker容器运行mysql
  • (二十三)Flask之高频面试点
  • (六) ES6 新特性 —— 迭代器(iterator)
  • (转)用.Net的File控件上传文件的解决方案
  • *上位机的定义
  • ./configure、make、make install 命令
  • .FileZilla的使用和主动模式被动模式介绍
  • .NET Standard、.NET Framework 、.NET Core三者的关系与区别?
  • .net 前台table如何加一列下拉框_如何用Word编辑参考文献
  • .net 微服务 服务保护 自动重试 Polly
  • .Net(C#)常用转换byte转uint32、byte转float等
  • .Net程序猿乐Android发展---(10)框架布局FrameLayout
  • .net项目IIS、VS 附加进程调试