自定义 SpringBoot Starter

文章目录

    • 一、自定义 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, 并导入以下依赖。

<?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 ,用于绑定邮件相关的配置属性。

@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, 模拟邮件发送。

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 提供的配置。

@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 测试应用

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

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.mzph.cn/web/52103.shtml

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

相关文章

Restful风格接口开发

一、项目搭建 安装nestjs脚手架 // 安装nestjs脚手架 npm i nestjs/cli// 新建 nest new [名字]//选择要用的工具 npm / yarn / pnpm 文件信息&#xff1a; 【main.ts】&#xff1a; 入口文件&#xff0c;通过NestFactory&#xff08;由nestjs/core库抛出的对象&#x…

微信小程序手写签名

微信小程序手写签名组件 该组件基于signature_pad封装&#xff0c;signature_pad本身是web端的插件&#xff0c;此处将插件代码修改为小程序端可用。 signature_pad.js /*!* Signature Pad v5.0.3 | https://github.com/szimek/signature_pad* (c) 2024 Szymon Nowak | Releas…

九盾叉车U型区域警示灯,高效照明和安全警示

叉车运作的环境比较复杂&#xff0c;在方便人们物流运输的同时也存在着很大的安全隐患&#xff0c;特别是叉车碰撞人的事故发生率很高&#xff0c;那我们该怎么在减少成本的同时又能避免碰撞事故的发生呢&#xff1f; 九盾叉车U型区域警示灯&#xff0c;仅需一盏灯安装在叉车尾…

十一 面向对象技术(考点篇)试题

A &#xff1b;D&#xff0c;D。实际答案&#xff1a;C&#xff1b;D&#xff0c;D 考的很偏了。UML 2.0基础结构的设计目标是定义一个元语言的核心 UML 2.0 【InfrastructureLibrary】,通过对此核心的复用&#xff0c;除了可以定义一个自展的UML元模型&#xff0c;也可以 Infr…

基于IP子网的VLAN典型配置举例(H3C,其他厂商同理)

基于IP子网的VLAN典型配置举例 1. 组网需求 如下图所示&#xff0c;办公区的主机属于不同的网段192.168.5.0/24和192.168.50.0/24&#xff0c;Device C在收到来自办公区主机的报文时&#xff0c;根据报文的源IP地址&#xff0c;使来自不同网段主机的报文分别在指定的VLAN中传…

7、Django Admin删除默认应用程序

admin文件 from django.contrib.auth.models import User, Groupadmin.site.unregister(User) admin.site.unregister(Group) 显示效果&#xff1a; 前 后

基于FreeRTOS的STM32多功能手表

前言 项目背景 项目演示 使用到的硬件 项目原理图 目前版本实现的功能 设计到的freertos知识 实现思路 代码讲解 初始化GPIO引脚、配置时钟 蜂鸣器初始化以及软件定时器创建 系统默认创建的defaultTaskHandle 创建七个Task&#xff0c;代表七个功能 ShowTimeTask …

2024.9自然语言及语言处理设计开发工程师专项培训通知!

为进一步贯彻落实中共中央印发《关于深化人才发展体制机制改革的意见》和国务院印发《关于“十四五”数字经济发展规划》等有关工作的部署要求&#xff0c;深入实施人才强国战略和创新驱动发展战略&#xff0c;加强全国数字化人才队伍建设&#xff0c;持续推进人工智能从业人员…

Epoll 用法

Epoll 监听 EPOLL_CTL_DEL EPOLL_CTL_ADD epoll_event event event.events event.data.fd

双指针(3)_快慢指针_快乐数问题

个人主页&#xff1a;C忠实粉丝 欢迎 点赞&#x1f44d; 收藏✨ 留言✉ 加关注&#x1f493;本文由 C忠实粉丝 原创 双指针(3)_快慢指针_快乐数问题 收录于专栏【经典算法练习】 本专栏旨在分享学习C的一点学习笔记&#xff0c;欢迎大家在评论区交流讨论&#x1f48c; 目录 1.…

Android Studio gradle下载太慢了!怎么办?(已解决)

Android Studio&#xff01;你到底干了什么&#xff1f;&#xff01; 不能高速下载gradle&#xff0c;我等如何进行app编程&#xff1f;&#xff01; 很简单&#xff0c;我修改gradle地址不就是了。 找到gradle-wrapper.properties文件 修改其中distributionUrl的地址。 将 ht…

ES配合高德地图JS-API实现地理位置查询

目录 实现功能点 技术选型 具体实现 Vue3整合高德地图JS API-2.0 添加商户&#xff1a;前端 添加商户&#xff1a;后端/ES 查询用户当前地理坐标 获取附近&#xff08;指定距离&#xff09;的商户 总结/测试Demo代码地址 测试概述&#xff1a;用户使用高德地图组件获取商户…

SpringBoot2:学SpringBoot前的知识准备-用IDEA创建传统的webapp工程,并整合SpringMVC

1、IDEA创建工程 基于Maven模板创建的SpringMVC工程 工程创建好后&#xff0c;只有webapp目录 这里&#xff0c;我们需要手动创建java目录和resources配置文件目录 创建好后&#xff0c;配置下目录属性 最终结构 至此&#xff0c;工程就创建好了 2、配置Tomcat 参考&am…

论文笔记:2023顶会SIGIR - Strategy-aware Bundle Recommender System

论文笔记&#xff1a;2023顶会SIGIR - Strategy-aware Bundle Recommender System

【Python报错已解决】`Provisional headers are shown Learn more`

&#x1f3ac; 鸽芷咕&#xff1a;个人主页 &#x1f525; 个人专栏: 《C干货基地》《粉丝福利》 ⛺️生活的理想&#xff0c;就是为了理想的生活! 文章目录 引言&#xff1a;一、问题描述&#xff1a;1.1 报错示例&#xff1a;1.2 报错分析&#xff1a;1.3 解决思路&#xff…

145. 利用 Redis Bitmap实践: 用户签到统计

文章目录 一、Redis Bitmap简介二、Bitmap 的主要应用三、Go使用Redis实现签到统计用户签到查询用户签到状态统计今年累计签到天数统计当月的签到情况 总结 在现代应用程序中&#xff0c;用户签到是一个常见的功能。我们通常使用 MySQL 数据库来存储用户的签到记录。然而&#…

智能家居系统(基于STM32F103C8T6标准库+FreeRTOS+Qt串口开发实现)

视频演示&#xff1a;基于STM32F103C8T6标准库FreeRTOSQt串口开发实现的智能家居项目_哔哩哔哩_bilibili 基于STM32F103C8T6标准库FreeRTOSQt串口开发实现的智能家居项目: https://pan.baidu.com/s/1f41gAfOOnlcQoKoMx3o84A?pwd6j2g 提取码: 6j2g 注&#xff1a;本项目为学习完…

Windows I/O系统

硬件存储体系 寄存器 处理器内部定义的存储体&#xff0c;它们除了存储功能&#xff0c;往往还兼有其他的能力&#xff0c;比如参与运算&#xff0c;地址解析&#xff0c;指示处理器的状态&#xff0c;等等。寄存器是由处理器内部专门的触发器电路实现的&#xff0c;处理器往…

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

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

基于物联网的低成本便携式传感器节点用于火灾和空气污染的检测与报警

目录 摘要 引言 材料和方法 传感器节点 IoT 微控制器 颗粒物传感器 环境和气体传感器 MQTT代理 Node-Red监控平台 系统结构 数据存储 工作描述 实验结果 讨论 结论 致谢 参考文献 这篇论文的标题是《Low-cost IoT-based Portable Sensor Node for Fire and Air…