自定义 SpringBoot Starter

news/2024/9/17 6:15:17/ 标签: spring boot, 后端, java

文章目录

    • 一、自定义 starter
      • 1.1 创建 maven 项目
      • 1.2 创建邮件配置属性类
      • 1.3 创建模拟邮件发送服务类
      • 1.4 创建自动配置类
      • 1.5 spring.factories 相关配置
      • 1.6 打包成依赖
    • 二、测试项目
      • 2.1 创建项目
      • 2.2 application.yml 配置
      • 2.3 测试应用
    • 参考资料

本文源码位于 java-demos/spring-boot-starter at main · idealzouhu/java-demos (github.com)

一、自定义 starter

1.1 创建 maven 项目

创建 maven 项目 email-spring-boot-starter, 并导入以下依赖。

java"><?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><!-- 自定义starter都应该继承自该依赖 --><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>3.3.2</version><relativePath/> <!-- lookup parent from repository --></parent><groupId>com.zouhu</groupId><artifactId>email-spring-boot-starter</artifactId><version>1.0-SNAPSHOT</version><properties><maven.compiler.source>17</maven.compiler.source><maven.compiler.target>17</maven.compiler.target><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding></properties><dependencies><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.26</version></dependency></dependencies></project>

1.2 创建邮件配置属性类

定义一个 @ConfigurationProperties 注解的类 com.zouhu.email.MailProperties ,用于绑定邮件相关的配置属性。

java">@Data
@ConfigurationProperties(prefix = "mail")  // 自动获取配置文件application.yaml中前缀为mail的配置
public class MailProperties {// 如果配置文件中配置了host属性,则该默认属性会被覆盖private String host = "xxx";private int port = 465;private String username = "xxx";private String password = "xxx";private String from = "xxx";}

事实上,我们如果将其打包成 jar 包,我们可以看到默认配置属性存放到 spring-configuration-metadata.json 文件中。

在这里插入图片描述

1.3 创建模拟邮件发送服务类

创建 com.zouhu.email.MailService, 模拟邮件发送。

java">public class MailService {private final MailProperties properties;public MailService(MailProperties properties) {this.properties = properties;}public void sendMail(String to, String subject, String text) {System.out.println("Sending email...");System.out.println("Host: " + properties.getHost());System.out.println("Port: " + properties.getPort());System.out.println("From: " + properties.getFrom());System.out.println("To: " + to);System.out.println("Subject: " + subject);System.out.println("Text: " + text);}
}

1.4 创建自动配置类

自动配置类 com.zouhu.email.MailAutoConfiguration 负责装配 MailService,并使用 MailProperties 提供的配置。

java">@AutoConfiguration
@EnableConfigurationProperties(MailProperties.class)  // 启用并注册配置绑定功能
public class MailAutoConfiguration {@Bean@ConditionalOnMissingBean   // 当容器中未存在指定类型的Bean时,才会创建当前Beanpublic MailService mailService(MailProperties properties) {return new MailService(properties);}
}

1.5 spring.factories 相关配置

src/main/resources/META-INF/spring 目录下,创建 org.springframework.boot.autoconfigure.AutoConfiguration.imports 文件。文件内容如下:

com.zouhu.email.MailAutoConfiguration

通过该文件, Spring Boot 将会自动加载我们的自动配置类。

该文件的具体功能查看 Creating Your Own Auto-configuration :: Spring Boot

1.6 打包成依赖

打开 idea 右侧 maven, 依次点击生命周期中的 package 和 install 。其中,

  • package 命令: 将项目打包为一个可分发的格式(通常是 JAR 或 WAR 文件)
  • install 命令: 执行所有 package 所做的事情,并且还会将生成的 JAR/WAR 文件安装到本地 Maven 仓库中(通常位于 ~/.m2/repository

在这里插入图片描述

打开本地的 maven 仓库,我们可以找到对应的 jar 包 C:\Users\zouhu\.m2\repository\com\zouhu\email-spring-boot-starter\1.0-SNAPSHOT

在这里插入图片描述

二、测试项目

2.1 创建项目

创建 Spring Boot 项目 spring-boot-test, 导入以下依赖

<!-- 自定义的依赖 -->
<dependency><groupId>com.zouhu</groupId><artifactId>email-spring-boot-starter</artifactId><version>1.0-SNAPSHOT</version>
</dependency>

2.2 application.yml 配置

application.yml 中, 配置邮件服务的详细信息。这些配置信息将会覆盖 email-spring-boot-starter 中的默认配置信息。

# 覆盖依赖 email-spring-boot-starter 中的配置信息
mail:host: smtp.example.comport: 587username: user@example.compassword: passwordfrom: no-reply@example.com

2.3 测试应用

创建测试应用,具体内容如下:

java">import com.zouhu.email.MailService;
import jakarta.annotation.PostConstruct;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplication
public class SpringBootTestApplication {@Autowiredprivate MailService mailService;public static void main(String[] args) {SpringApplication.run(SpringBootTestApplication.class, args);}@PostConstruct	// 表明该方法需要在完成字段的注入后由容器自动调用public void sendTestMail() {mailService.sendMail("to@example.com", "Test Subject", "This is a test email.");}
}

运行结果为:

Sending email...
Host: smtp.example.com
Port: 587
From: no-reply@example.com
To: to@example.com
Subject: Test Subject
Text: This is a test email.

参考资料

Creating Your Own Auto-configuration :: Spring Boot

自定义SpringBoot的starter,以及如何导入jar包_spring boot starter是怎么导入包的-CSDN博客


http://www.ppmy.cn/news/1521328.html

相关文章

[OpenCV] 数字图像处理 C++ 学习——10基本阈值处理 附完整代码

文章目录 前言1.基本阈值处理类型(1)阈值二值化(binary)(2)阈值反二值化(binary_inv)(3)截断(truncate)(4)阈值取零(threshold to zero)(5)阈值反取零&#xff08;threshold to zero inverted&#xff09;(6)THRESH_MASK(7)THRESH_OTSU(8)THRESH_TRIANGLE 2.代码实现(1)图像读取…

OpenHarmony轻松玩转GIF数据渲染

OpenAtom OpenHarmony&#xff08;以下简称“OpenHarmony”&#xff09;提供了Image组件支持GIF动图的播放&#xff0c;但是缺乏扩展能力&#xff0c;不支持播放控制等。今天介绍一款三方库——ohos-gif-drawable三方组件&#xff0c;带大家一起玩转GIF的数据渲染&#xff0c;搞…

cad打印pdf很模糊怎么调清晰?2024教你快速进行文件格式转换方法合集

cad打印pdf很模糊怎么调清晰&#xff1f;2024教你快速进行文件格式转换方法合集 在使用CAD打印PDF时&#xff0c;输出的PDF文件如果模糊&#xff0c;通常是因为打印设置或者导出参数不正确。以下是五款软件和工具&#xff0c;能够帮助你调整CAD打印时的输出设置&#xff0c;从…

Qt 应用程序主界面

主要窗口类的概述 这些类提供了典型现代主应用程序窗口所需的一切&#xff0c;如主窗口本身、菜单和工具栏、状态栏等。 QAction 可以插入小部件的抽象用户界面操作 QActionGroup 将动作组合在一起 QDockWidget 小部件&#xff0c;可以停靠在QMainWindow中&#xff0c;也可以作…

黑马程序员Python数据挖掘|1Jupyter Notebook的使用

一 Jupyter Notebook介绍 二 为什么用Jupyter Notebook 1.在画图方面的优势 用 Jupyter Notebook &#xff1a; 方便进行数据的展示。 用 pycharm : 画完图后没有继续执行读取数据的代码&#xff0c;阻塞了。 把图片关掉才会继续执行代码。 2.在pycharm里如果读取很大的数据&…

优化器与现有网络模型的修改

一、优化器 optimizer optim.SGD(model.parameters(), lr0.01&#xff08;学习速率&#xff09;, momentum0.9) optimizer optim.Adam([var1, var2], lr0.0001) 一般&#xff0c;学习率的设置&#xff0c;先从大的设置&#xff0c;逐渐变小。 神经网络可以参见上篇文章&am…

oceanbase OBCE 第四章实验 事务与远程执行

实验环境&#xff1a;企业版V3 1-1-1 前期准备&#xff1a; 新建一个 oracle 租户 1C2GB 新建资源规格&#xff1a; create resource unit u1_ora max_cpu1,min_cpu1,max_memory2G,min_memory2G,max_iops128,max_disk_size10G,max_session_num100; 新建资源池&#xff1a; c…

【AI】 代码界的超级加速器!阿里云通义灵码让你工作效率飙升,编程就像开了挂一样!

文章目录 一、正文&#xff1a;二、核心场景代码智能生成研发智能问答 三、功能介绍行间代码生成研发智能问答编码问题解决企业级管理 结语相关链接&#xff1a; 一、正文&#xff1a; 在当今快节奏的软件开发领域&#xff0c;提高工作效率是每一位开发者不断追求的目标。 通义…

Vue:F11全屏模式状态监听,识别

本文将介绍如何在vue中实现按F11键后全屏模式的监听。 来回切换F11之后,控制台打印结果如下图所示, <script lang="ts" setup>import {ref, onMounted, onBeforeUnmount } from vue;

2024国赛数学建模ABC题思路模型

完整的思路模型请查看文末名片 完整的思路模型请查看文末名片 完整的思路模型请查看文末名片

sql-libs第三关详细解答

首先看看and 12会不会正常显示 结果正常显示&#xff0c;说明存在引号闭合 加了一个引号&#xff0c;发现报错信息中还存在括号&#xff0c;说明sql语句中有括号&#xff0c;那我们还要闭合括号 现在就好了&#xff0c;and 11正常&#xff0c;and 12不正常&#xff0c;那就开始…

AI科学家:自动化科研的未来之路

随着人工智能&#xff08;AI&#xff09;技术的不断进步&#xff0c;AI已经在众多领域中展现了强大的潜力&#xff0c;尤其是在科研方面的应用正在引起广泛关注。最近&#xff0c;Sakana AI与牛津大学和不列颠哥伦比亚大学联合推出了一款被称为“AI科学家”的自动化科研工具&am…

一文搞懂大数据流式计算引擎Flink【万字详解,史上最全】

往期推荐 一文入门大数据准流式计算引擎Spark【万字详解&#xff0c;全网最新】-CSDN博客 浅谈维度建模、数据分析模型&#xff0c;何为数据仓库&#xff0c;与数据库的区别_统一数仓 数据库用户名-CSDN博客数仓架构&#xff1a;离线数仓、实时数仓Lambda和Kappa、湖仓一体数据…

数据库水平分表方案

数据库分表有很多策略&#xff0c;如下&#xff1a; 数据库分表是处理大型数据库中数据量过大的一种常见策略&#xff0c;它可以提高查询性能、减少锁竞争、降低维护成本等。以下是一些常见的数据库分表方案&#xff1a; 1. **垂直分表&#xff08;Vertical Partitioning&…

2024年6月第2套英语四级真题PDF

2024年6月第2套英语四级真题PDF

使用matlab的热门问题

MATLAB广泛应用于科学计算、数据分析、信号处理、图像处理、机器学习等多个领域&#xff0c;因此热门问题也涵盖了这些方面。以下是一些可能被认为当前最热门的MATLAB问题&#xff1a; 深度学习与神经网络&#xff1a; 如何使用MATLAB的深度学习工具箱&#xff08;Deep Learni…

【SQL】统一字符格式

目录 语法 需求 示例 分析 代码 语法 substring(column_name, start, length)用于从一个字符串中提取子字符串 column_name&#xff08;或任何字符串表达式&#xff09;&#xff1a;这是要从中提取子字符串的列名或字符串表达式。start&#xff1a;这是子字符串开始的位置…

2024年高教杯国赛(C题)数学建模竞赛解题思路|完整代码论文集合

我是Tina表姐&#xff0c;毕业于中国人民大学&#xff0c;对数学建模的热爱让我在这一领域深耕多年。我的建模思路已经帮助了百余位学习者和参赛者在数学建模的道路上取得了显著的进步和成就。现在&#xff0c;我将这份宝贵的经验和知识凝练成一份全面的解题思路与代码论文集合…

vue 踩坑记录

本地开发没有cookie 解决方案 设置代理&#xff0c;并把changeOrigin设为true proxy的changeOrigin如果设置为false&#xff1a;请求头中host仍然是浏览器发送过来的host&#xff1b; 如果设置成true&#xff1a;发送请求头中host会设置成target。 允许axios请求携带cookie等凭…

如何在Mac电脑上本地部署Stable Diffusion:详细教程(webUI)

Stable Diffusion是一款强大的AI生成图像模型&#xff0c;它可以基于文本描述生成高质量的图像。对于想要在本地运行此模型的用户来说&#xff0c;使用Mac电脑部署Stable Diffusion是一个非常吸引人的选择&#xff0c;特别是对于M1或M2芯片的用户。本文将详细介绍如何在Mac上本…