开发属于自己的Spring Boot Starter-18

为什么要开发专用的Spring Boot Starter

Spring在通常使用时,一般是通过pom.xml文件中引入相关的jar包,然后再通过application.yml文件配置初始化bean的配置,但随着项目越来越复杂或是项目组中的应用数量越来越多,可能会带来几个问题:

  1. jar包依赖越来越多;
  2. 同一jar包的版本在不同的应用中可能不一样,甚至会发生冲突依赖;
  3. 自定义的配置没有相应的文档辅助,导致很多配置无从查找,进而可能会出现应用中重复开发;
  4. 最终,导致项目组中技术基线不统一,而且在很长一段时间内很难统一;
    在这里插入图片描述
    上述问题的解决方案有两种,一是定义一个通用的pom.xml,但公用的pom.xml也存在维护等问题,另一个问题是基础的pom.xml只是一个maven依赖配置,无法携带公用的java代码。
    在这里插入图片描述

所以最好的解决文案就是采用自定义的starter。
在这里插入图片描述

开发步骤

1. 新建Maven项目,在项目的POM文件中定义使用的依赖;
2. 新建配置类,写好配置项和默认的配置值,指明配置项前缀;
4. 新建自动装配类,使用@Configuration@Bean来进行自动装配;
5. 新建spring.factories文件,指定Starter的自动装配类;

自定义的 Spring Boot Starter实现

自定义的Spring Boot Starter就是一个普通的spring项目,下面就一步步来实现。
在这里插入图片描述

创建工程

创建一个springboot类型的模块。如下图所示,一路默认即可:
在这里插入图片描述

pom.xml依赖

这里的pom.xml依赖没有太严格的要求,就是按需引入,比如你在自定义的starter中实现了一些功能,比如jdbc操作mysql功能,那么是肯定要引入mysql-driver.jar驱动包的,因为这样才能做到版本统一管理,

但统一建议添加<optional>true</optional>不传递。这样防止多层依赖时冲突的发生。如下:

  • Starter 命名规则,即artifactId命名规则:Spring 官方定义的 Starter 通常命名遵循的格式为 spring-boot-starter-{name},例如 spring-boot-starter-data-mongodb。Spring 官方建议,非官方 Starter 命名应遵循 {name}-spring-boot-starter 的格式,例如,myjson-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坐标 -->
    <groupId>com.korgs</groupId>
    <artifactId>korgs-framework-spring-boot-starter</artifactId>
    <name>framework-springboot-starter</name>
    <version>1.0-SNAPSHOT</version>
    <packaging>jar</packaging>

    <!--编译版本,这个一定要指定 -->
    <properties>
        <maven.compiler.source>17</maven.compiler.source>
        <maven.compiler.target>17</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>

    <!-- 功能依赖,scope按需添加,但注意添加optional=true,不强制但建议 -->
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
            <version>3.2.4</version>
            <scope>compile</scope>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-configuration-processor</artifactId>
            <version>3.2.4</version>
            <scope>annotationProcessor</scope>
            <optional>true</optional>
        </dependency>

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.30</version>
            <scope>annotationProcessor</scope>
            <optional>true</optional>
        </dependency>

    </dependencies>

</project>

AppConfig自定义配置类实现

这个示例中,只是为了演示,如何在application.yml文件中添加自定义的配置,因为自定义的starter除了做maven管理外,另一个主要目的就是实现一些基础的功能(可配置)。

package com.korgs.framework.starter;

import lombok.Data;
import lombok.extern.slf4j.Slf4j;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Configuration;

@Slf4j
@Configuration
@Data
@ConfigurationProperties(prefix = "framework.config")
public class AppConfig {
    String appRegisterName;

    /*可以通过这种方式实现一次功能上的扩展,总之是和正常的项目开发没太大区别*/
    /*@Bean
    public AppServer appServer(){
        return  new AppServer(appRegisterName);
    }*/
}

spring.factories配置

src/resources/META-INF/目录下新建一个名为spring.factories的文件,META-INF这个目录需要手动创建一下,添加以下内容:

org.springframework.boot.autoconfigure.EnableAutoConfiguration=com.korgs.framework.starter.AppConfig

spring.factories文件的作用是,springboot启动时会扫描jar下的spring.factories文件,如果发现了就根据配置内容执行相应的初始化工作。

工程打包

最后运行 mvn -clear install安装在本地maven缓存中,测试好了之后可以发布到公司的maven私服上面。
在这里插入图片描述

测试自定义的 Spring Boot Starter

再新建一个springboot工程,然后引入上面的自定义starter包。比如:

        <dependency>
            <groupId>com.korgs</groupId>
            <artifactId>korgs-framework-spring-boot-starter</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>

application.properties配置

这时在application.properties中配置时,如果是idea就会有提示功能(但这并不是最重要的):
在这里插入图片描述

AppConfig配置类测试

其实上面自定义的starter就是一个普通的配置类,和本模块中代码实现一样,比如:
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

邦注科技 即热式节能模温机的原理及应用介绍

模温机是一种用于控制模具温度的设备&#xff0c;它在各种工业领域中发挥着重要作用&#xff0c;特别是在塑料加工行业中。以下是关于模温机的原理及应用的详细介绍&#xff1a; 原理 模温机的工作原理主要是通过加热和冷却功能&#xff0c;维持模具温度在一个恒定的范围内。…

Redis - hiredis源码安装和接口使用介绍

一、hiredis源码安装说明 本文创作基于 hiredisv1.2.0版本 1.简介 hiredis是一个用于与Redis交互的C语言客户端库。它提供了一组简单易用的API&#xff0c;使开发人员可以轻松地连接到Redis服务器&#xff0c;并执行各种操作&#xff0c;如设置和获取键值对、执行命令、订阅和…

绝地求生:29.2商城更新内容预览:挣脱尘网通行证,经典皮肤返场,空投活动

就在今天历经9小时维护&#xff0c;29.2版本终于上线&#xff0c;柠檬茶带大家一起看看&#xff0c;这次游戏里都更新了哪些内容吧。 挣脱尘网通行证 豪华版&#xff1a;$14.99 普通版&#xff1a;$4.99 豪华版比普通版多10级升级券和2套生存者宝箱 分支一 分支二 分支三 额外…

我21岁玩“撸货”,被骗1000多万

最近&#xff0c;撸货业界内发生了一些颇受瞩目的事件。 在郑州&#xff0c;数码档口下面抢手团长跑路失联&#xff0c;涉及金额几百万&#xff0c;在南京&#xff0c;一家知名的电商平台下的收货站点突然失联&#xff0c;涉及金额高达一千多万&#xff0c;令众多交易者震惊不已…

【oracle】图片转为字节、base64编码等形式批量插入oracle数据库并查询

1.熟悉、梳理、总结下Oracle相关知识体系 2.欢迎批评指正&#xff0c;跪谢一键三连&#xff01; 资源下载&#xff1a; oci.dll、oraocci11.dll、oraociei11.dll3个资源文件资源下载&#xff1a; Instant Client Setup.exe资源下载&#xff1a; oci.dll、oraocci11.dll、oraoc…

CTFshow 爆破

第一题0 抓包发现输入账号密码后数据包会多一个base64编码 所有推出用户密码在传输的时候进行了加密 所以爆破时也用base64加密 设置paylod 用题目给的字典 在添加两条规则 第一个是增加前缀 admin: 第二个是使得payload进行base64编码 取消URL编码字符 因为会把号编码了 开…

【多模态】31、Qwen-VL | 一个开源的全能的视觉-语言多模态大模型

文章目录 一、背景二、方法2.1 模型架构2.2 输入和输出2.3 训练 三、效果3.1 Image Caption 和 General Visual Question Answering3.2 Text-oriented Visual Question Answering3.3 Refer Expression Comprehension3.4 视觉-语言任务的少样本学习3.5 真实世界用户行为中的指令…

【FPGA、maltab】基于FPGA的SOQPSK调制解调技术的设计与实现

基于FPGA的SOQPSK调制解调技术的设计与实现 SOQPSK一、QPSK、OQPSK、SOQPSK之间的关系二、SOQPSK调制原理 matlab 仿真FPGA 实现顶层设计发射模块接收模块顶层调制解调FPGA代码 SOQPSK 一、QPSK、OQPSK、SOQPSK之间的关系 SOQPSK&#xff08;Shaped Offset Quadrature Phase …

Oracle 自治数据库 Select AI 初体验

这几天有点时间&#xff0c;准备尝试下Oracle Select AI&#xff0c;虽然此功能2023年就已经发布了。 Oracle自治数据库已经集成好了Select AI&#xff0c;本文也是讲的这个。 配置 Select AI 需要以下步骤&#xff1a; 创建ADB申请Cohere/OpenAI免费账号设置ADB测试Select…

第十七篇:数据库性能优化的数学视角:理论与实践的融合

数据库性能优化的数学视角&#xff1a;理论与实践的融合 1. 引言 在现代信息技术快速发展的背景下&#xff0c;数据库性能优化已经成为计算机科学领域的一个热点问题。随着数据量的爆炸式增长和用户需求的多样化&#xff0c;数据库系统所承载的数据处理任务变得越来越复杂&…

unity制作app(7)--panel control

根据用户的状态&#xff0c;在界面中显示不同的panel 1.新建一个脚本PanelControl&#xff0c;控制各个脚本的显示与隐藏 2.实现第一个逻辑判断功能&#xff1a;如果没有登记过信息&#xff0c;就直接跳转到登记界面&#xff0c;如果登记过&#xff0c;跳转到住界面。许多需要…

2A 150KHz 40V Buck DC to DC 转换器XL1509

前言&#xff1a; 该器件仅做介绍&#xff0c;不推荐在新设计中使用。 新设计应尽量使用MHZ开关频率&#xff0c;以降低电感量&#xff0c;从而降低成本。 新设计应使用同步DCDC降压转换器。 XL1509丝印和封装 引脚定义 XL1509管脚描述 管脚编号 管脚名称 管脚描述 1 电压输入…

Online RL + IL :Policy Improvement via Imitation of Multiple Oracles

NIPS 2020 paper code 如何利用多个次优专家策略来引导智能体在线学习&#xff0c;后续有多个文章研究该设定下的RL。 Intro 论文探讨了在强化学习&#xff08;RL&#xff09;中&#xff0c;如何通过模仿多个次优策略&#xff08;称为oracle&#xff09;来提升策略性能的问题…

宁静致远(“静”)

宁静致远是一个成语&#xff0c;读音为nng jng zh yuǎn&#xff0c;意思是只有心境平稳沉着、专心致志&#xff0c;才能厚积薄发、 有所作为。出自《淮南子:主术训》。 出处 宁静致远张铭篆刻 此句最早出自西汉初年道家刘安的《淮南子:主术训》&#xff0c;蜀汉丞相诸葛亮的…

TEMU电商行情分析:未来趋势与盈利机遇探讨

近年来&#xff0c;跨境电商行业风起云涌&#xff0c;其中TEMU作为新兴力量&#xff0c;其市场表现备受关注。那么&#xff0c;TEMU电商现在的行情究竟如何?对于卖家而言&#xff0c;是否仍然是一个能够赚钱的平台呢? 首先&#xff0c;从市场趋势来看 TEMU电商正处于一个快速…

创建按钮的第二种方法

可以设置两个参数&#xff0c;按钮的内容和父对象 QPushButton * button2 new QPushButton("第二个按钮",this); 区别&#xff1a; 方式1&#xff1a;窗口默认大小&#xff0c;按钮显示在左上角 方式2&#xff1a;窗口是根据按钮的大小来创建的 (所以需要重置窗…

Java入门基础学习笔记27——生成随机数

Random的使用&#xff1a;生成随机数。 随机数应用&#xff1a; 随机点名&#xff1a; 年会抽奖&#xff1a; 猜数字游戏&#xff1a; 密码学。 查看API文档&#xff1a; package cn.ensource.random;import java.util.Random;public class RandomDemo1 {public static voi…

强化学习的优化策略PPO和DPO

DPO DPO(直接偏好优化)简化了RLHF流程。它的工作原理是创建人类偏好对的数据集&#xff0c;每个偏好对都包含一个提示和两种可能的完成方式——一种是首选&#xff0c;一种是不受欢迎。然后对LLM进行微调&#xff0c;以最大限度地提高生成首选完成的可能性&#xff0c;并最大限…

win编写bat脚本启动java服务

新建txt&#xff0c;编写&#xff0c;前台启动&#xff0c;出现cmd黑窗口 echo off start java -jar zhoao1.jar start java -jar zhoao2.jar pause完成后&#xff0c;重命名.bat 1、后台启动&#xff0c;不出现cmd黑窗口&#xff0c;app是窗口名称 echo off start "名…

如何同步管理1000个设备的VLAN数据?

什么是VLAN&#xff1f; VLAN&#xff0c;也就是虚拟局域网&#xff0c;是通过为子网提供数据链路连接来抽象出局域网的概念。在企业网中&#xff0c;一个企业级交换机一般是24口或者是48口&#xff0c;连接这些接口的终端在物理上形成一个广播域。广播域过大&#xff0c;就会导…