自定义 SpringBoot Starter

news/2025/1/16 1:43:27/

文章目录

    • 一、自定义 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;提高工作效率是每一位开发者不断追求的目标。 通义…