springboot自写插件封包

在Spring Boot中自写插件或封包(通常指的是创建自定义的starter)是一种常见的做法,用于将一系列相关的配置和组件打包成一个独立的模块,从而简化依赖管理和配置过程。以下是一个简单的步骤,指导你如何创建一个自定义的Spring Boot Starter:

1. 创建项目

使用你喜欢的构建工具(如Maven或Gradle)创建一个新的项目。

2. 添加依赖

在你的pom.xmlbuild.gradle文件中,添加Spring Boot Starter的依赖。例如,使用Maven的话,你可以这样添加依赖:

<dependencies>  
    <dependency>  
        <groupId>org.springframework.boot</groupId>  
        <artifactId>spring-boot-starter</artifactId>  
        <version>${spring-boot.version}</version>  
    </dependency>  
    <!-- 其他依赖 -->  
</dependencies>

xml复制代码

3. 创建自动配置类

创建一个自动配置类,使用@Configuration@EnableConfigurationProperties注解。这个类将负责配置你的插件。

@Configuration  
@EnableConfigurationProperties(MyPluginProperties.class)  
public class MyPluginAutoConfiguration {  
  
    @Autowired  
    private MyPluginProperties properties;  
  
    @Bean  
    public MyPluginService myPluginService() {  
        return new MyPluginServiceImpl(properties);  
    }  
}

4. 创建配置属性类

创建一个配置属性类,使用@ConfigurationProperties注解,定义你的插件需要的配置。

@ConfigurationProperties(prefix = "my-plugin")  
public class MyPluginProperties {  
  
    private String someProperty;  
  
    // getters and setters  
}

5. 创建服务类

创建一个服务类,实现你的插件功能。

public class MyPluginServiceImpl implements MyPluginService {  
  
    private final MyPluginProperties properties;  
  
    public MyPluginServiceImpl(MyPluginProperties properties) {  
        this.properties = properties;  
    }  
  
    // 实现你的插件功能  
}

6. 在src/main/resources/META-INF/spring.factories中注册自动配置类

创建一个spring.factories文件,在src/main/resources/META-INF/目录下  springboot3.x以后用org.springframework.boot.autoconfigure.AutoConfiguration.imports文件代替,

并添加以下内容:

spring.factories   springboot2.x

org.springframework.boot.autoconfigure.EnableAutoConfiguration=\  
com.yourpackage.MyPluginAutoConfiguration

 org.springframework.boot.autoconfigure.AutoConfiguration.imports    springboot3.x

com.yourpackage.MyPluginAutoConfiguration

7. 打包和发布

使用构建工具打包你的项目,并发布到你的Maven仓库或其他仓库。

8. 使用你的插件

在其他Spring Boot项目中,添加你发布的starter作为依赖,然后在application.propertiesapplication.yml中配置你的插件。

my-plugin.some-property=some-value

最后,你可以在项目中使用@Autowired注解注入你的服务类,并开始使用你的插件功能。

这就是创建一个简单的Spring Boot Starter的基本步骤。你可以根据你的需求进行扩展和定制。

部分代码示例

ZxsAutoConfig
package com.zxs.sso.config;


import com.zxs.sso.core.util.JedisUtil;
import com.zxs.sso.properties.ZxsProperties;
import jakarta.annotation.Resource;
import org.springframework.beans.factory.DisposableBean;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;

@Configuration
@EnableConfigurationProperties(ZxsProperties.class)
@ComponentScan("com.zxs")
public class ZxsAutoConfig implements DisposableBean {

    @Resource
    ZxsProperties zxsProperties;

    @Bean
    public FilterRegistrationBean xxlSsoFilterRegistration() {
        JedisUtil.init(zxsProperties.getRedisAddress());
        FilterRegistrationBean registration = new FilterRegistrationBean();
        
        //逻辑代码
        return registration;
    }

    @Override
    public void destroy() throws Exception {
        
    }
}

 ZxsProperties

package com.zxs.sso.properties;

import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

@Component
@ConfigurationProperties(prefix = "zxs")
public class ZxsProperties {

    private String zxsServer;
    private String logout;
    private String excludeds;
    private String redisAddress;
    private Integer expire;
    private Boolean isToken;

    public String getZxsServer() {
        return zxsServer;
    }

    public void setZxsServer(String zxsServer) {
        this.zxsServer = zxsServer;
    }

    public String getLogout() {
        return logout;
    }

    public void setLogout(String logout) {
        this.logout = logout;
    }

    public String getExcludeds() {
        return excludeds;
    }

    public void setExcludeds(String excludeds) {
        this.excludeds = excludeds;
    }

    public String getRedisAddress() {
        return redisAddress;
    }

    public void setRedisAddress(String redisAddress) {
        this.redisAddress = redisAddress;
    }

    public Integer getExpire() {
        return expire;
    }

    public void setExpire(Integer expire) {
        this.expire = expire;
    }

    public Boolean getToken() {
        return isToken;
    }

    public void setToken(Boolean token) {
        isToken = token;
    }
}

 additional-spring-configuration-metadata.json

{
    "properties": [
        {
            "name": "zxs.zxsServer",
            "description": "SSO服务地址.",
            "defaultValue": "http://127.0.0.1:8080/zxs-server",
            "type": "java.lang.String"
        },
        {
            "name": "zxs.login",
            "type": "java.lang.String"
        },
        {
            "name": "zxs.logout",
            "description": "登出路径.",
            "type": "java.lang.String"
        },
        {
            "name": "zxs.excludeds",
            "description": "排除路径.",
            "type": "java.lang.String"
        },
        {
            "name": "zxs.redisAddress",
            "description": "redis地址.",
            "defaultValue": "redis://zxs:zkb123456@127.0.0.1:6379/0",
            "type": "java.lang.String"
        },
        {
            "name": "zxs.isToken",
            "description": "授权类型.",
            "defaultValue": false,
            "type": "java.lang.Boolean"
        },
        {
            "name": "zxs.expire",
            "description": "时长.",
            "defaultValue": 3600,
            "type": "java.lang.Integer"
        }
    ]
}

 org.springframework.boot.autoconfigure.AutoConfiguration.imports

com.zxs.sso.config.ZxsAutoConfig

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

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

相关文章

如何高效管理项目:从规划到执行

导语&#xff1a;项目管理是一项复杂而重要的工作&#xff0c;涉及多个方面&#xff0c;包括规划、执行、监控和收尾。本文将介绍如何高效管理项目&#xff0c;从规划到执行&#xff0c;帮助您成功完成项目目标。 一、项目规划 项目规划是项目成功的关键。在规划阶段&#xff0…

JVM原理-基础篇

Java虚拟机&#xff08;JVM, Java Virtual Machine&#xff09;是运行Java应用程序的核心组件&#xff0c;它是一个抽象化的计算机系统模型&#xff0c;为Java字节码提供运行环境。JVM的主要功能包括&#xff1a;类加载机制、内存管理、垃圾回收、指令解释与执行、异常处理与安…

[每周一更]-(第89期):开源许可证介绍

开源代码本就是一种共享精神&#xff0c;一种大无畏行为&#xff0c;为了发扬代码的魅力&#xff0c;创造更多的价值&#xff0c;让爱传递四方&#xff0c;让知识惠及更多人&#xff1b; 写文章也是一种共享精神&#xff0c;让知识传播出去。 介绍下开源中不同许可证的内容限…

【leetcode】随机链表的复制

大家好&#xff0c;我是苏貝&#xff0c;本篇博客带大家刷题&#xff0c;如果你觉得我写的还不错的话&#xff0c;可以给我一个赞&#x1f44d;吗&#xff0c;感谢❤️ 点击查看题目 思路: struct Node* copyRandomList(struct Node* head) {struct Node* curhead;//1.copy原链…

【矩阵】【方向】【素数】3044 出现频率最高的素数

作者推荐 动态规划的时间复杂度优化 本文涉及知识点 素数 矩阵 方向 LeetCode 3044 出现频率最高的素数 给你一个大小为 m x n 、下标从 0 开始的二维矩阵 mat 。在每个单元格&#xff0c;你可以按以下方式生成数字&#xff1a; 最多有 8 条路径可以选择&#xff1a;东&am…

Nginx基础知识

文章目录 简介安装Ubuntu安装CentOS安装windows 常用命令配置文件 nginx.confnginx -V 反向代理 & 负载均衡 简介 Web服务器&#xff0c;高性能&#xff0c;Http与反向代理的服务器。启动后浏览器输入 http://localhost/ 显示欢迎页面就是启动成功了。在nginx安装目录下cm…

【AntDesign】解决嵌套section或layout中,h1字体比h2小问题

问题&#xff1a;以下情况均会导致h1比h2小&#xff0c;具体原因是浏览器默认样式里面&#xff0c;对h1不同层级设置了特殊的样式&#xff0c; <section class"css-dev-only-do-not-override-12q8zf4 ant-layout"><section class"css-dev-only-do-not…

THINKPHP 跨域报错解决方案

报错&#xff1a;has been blocked by CORS policy: Response to preflight request doesnt pass access control check: No Access-Control-Allow-Origin header is present on the requested resource. 环境&#xff1a;thinkphp6 nginx 今天和VUE配合调用接口的时候发现跨…

Maven-私服(黑马学习笔记)

前面我们在讲解多模块开发的时候&#xff0c;我们讲到我们所拆分的模块是可以在同一个公司各个项目组之间进行资源共享的。这个模块的资源共享&#xff0c;就需要通过我们接下来所讲解的Maven的私服来实现。 首先我们先介绍一下什么是私服&#xff0c;以及它的作用是什么。再来…

瑞吉苍穹外卖如何拓展?已经经过不同公司多轮面试。项目中会问到哪些问题?以及问题如何解决?

别催了&#xff0c;别催了&#xff0c;先收藏吧。 作者大大正在加班加点完成。 文章会尽快发布&#xff0c;关注收藏&#xff0c;尽请期待。 想要加入并查阅作者的知识库可以联系作者 不要白嫖&#xff0c;通过后&#xff0c;附上关注和收藏截图。 已有众多小伙伴加入 目前…

mysql读写分离方案

什么是读写分离&#xff1f; 读写分离就是将对数据库的读操作和写操作分散到不同的数据库节点上 如何实现读写分离&#xff1f; 因为更多的读多写少&#xff0c;所以为了缓解主库的读能力从而引入了从库&#xff0c;这样就可以减少主库的负担&#xff0c;从而解决了应用的并发…

【教程】移动互联网时代的APP上架流程和要点

目录 摘要 引言 正文 一、应用商店注册 二、准备APP材料 三、打包上传App 摘要 本文将介绍移动应用程序上架的基本流程和要点&#xff0c;包括应用商店注册、APP材料准备、打包上传App、APP审核以及发布APP的详细步骤。此外&#xff0c;还会提到利用appuploder工具简化i…

【JavaScript】面试手撕节流

引入 上篇我们讲了防抖&#xff0c;这篇我们就谈谈防抖的好兄弟 – 节流。这里在老生常谈般的提一下他们两者之间的区别,顺带给读者巩固下。 PS: 开源节流中节流与这个技术上的节流&#xff0c;个人认为本质上是一样的。 开源节流的节流指的是节省公司的金钱开支。前端技术上的…

Windows的Docker-Desktop安装与问题总结

目录 Docker-Desktop安装步骤 环境配置 Docker-Desktop安装问题总结 问题1&#xff1a;docker-desktop setting界面一直加载转圈 问题2&#xff1a;docker镜像的存储位置变更&#xff08;防止C盘空间不足&#xff09; 参考文献&#xff1a; Docker-Desktop安装步骤 环境…

Unity(第十八部)物理力学,碰撞,触发、关节和材质

1、重力 刚体组件 英文中文描述RigidBody刚体组件physics->rigidbody &#xff0c;刚体组件使一个物体有了质量&#xff0c;重力等。&#xff0c;use gravity 勾选后&#xff0c;物体才会受到重力&#xff0c;会自动下落&#xff0c;取消勾选就不会。&#xff0c;&#xf…

计算机网络物理层知识点总结

本篇博客是基于谢希仁编写的《计算机网络》和王道考研视频总结出来的知识点&#xff0c;本篇总结的主要知识点是第二章的物理层。上一章的传送门&#xff1a;计算机网络体系结构-CSDN博客 通信基础 物理层概念 物理层解决如何在连接各种计算机的传输媒体上传输数据比特流&am…

ElasticSearch搜索引擎使用指南

一、ES数据基础类型 1、数据类型 字符串 主要包括: text和keyword两种类型&#xff0c;keyword代表精确值不会参与分词&#xff0c;text类型的字符串会参与分词处理 数值 包括: long, integer, short, byte, double, float 布尔值 boolean 时间 date 数组 数组类型不…

汽车三元催化器的废品项目详解,三元催化再生项目的回收技术教学

一、教程描述 这是一个收废品项目&#xff0c;就收那些别人不懂的&#xff0c;三元催化器的附加值高&#xff0c;只要掌握技术&#xff0c;怎么玩都行的&#xff0c;只是要放得下你的面子。三元催化器&#xff0c;是安装在汽车排气系统中最重要的机外净化装置&#xff0c;它可…

CodeWhisperer安装教导--一步到位!以及本人使用Whisperer的初体验。

CodeWhisperer是亚马逊出品的一款基于机器学习的通用代码生成器&#xff0c;可实时提供代码建议。类似 Cursor 和Github AWS CodeWhisperer 亚马逊科技的CodeWhisperer是Amazon于2021年12月推出的一款代码补全工具&#xff0c;与GitHub Copilot类似。主要的功能有:代码补全注释…

网络编程学习

思维导图 代码练习 TCP实现通信 服务器端代码 #include <myhead.h> #define SER_IP "192.168.152.135" #define SER_PORT 8910 int main(int argc, const char *argv[]) {//&#xff11;创建用于监听的套接字int sfd -1;sfd socket(AF_INET,SOCK_STREAM,0)…