• springboot自写插件封包


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

    1. 创建项目

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

    2. 添加依赖

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

    1. <dependencies>
    2. <dependency>
    3. <groupId>org.springframework.boot</groupId>
    4. <artifactId>spring-boot-starter</artifactId>
    5. <version>${spring-boot.version}</version>
    6. </dependency>
    7. <!-- 其他依赖 -->
    8. </dependencies>

    xml复制代码

    3. 创建自动配置类

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

    1. @Configuration
    2. @EnableConfigurationProperties(MyPluginProperties.class)
    3. public class MyPluginAutoConfiguration {
    4. @Autowired
    5. private MyPluginProperties properties;
    6. @Bean
    7. public MyPluginService myPluginService() {
    8. return new MyPluginServiceImpl(properties);
    9. }
    10. }

    4. 创建配置属性类

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

    1. @ConfigurationProperties(prefix = "my-plugin")
    2. public class MyPluginProperties {
    3. private String someProperty;
    4. // getters and setters
    5. }

    5. 创建服务类

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

    1. public class MyPluginServiceImpl implements MyPluginService {
    2. private final MyPluginProperties properties;
    3. public MyPluginServiceImpl(MyPluginProperties properties) {
    4. this.properties = properties;
    5. }
    6. // 实现你的插件功能
    7. }

    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

    1. org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
    2. 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
    1. package com.zxs.sso.config;
    2. import com.zxs.sso.core.util.JedisUtil;
    3. import com.zxs.sso.properties.ZxsProperties;
    4. import jakarta.annotation.Resource;
    5. import org.springframework.beans.factory.DisposableBean;
    6. import org.springframework.boot.context.properties.EnableConfigurationProperties;
    7. import org.springframework.boot.web.servlet.FilterRegistrationBean;
    8. import org.springframework.context.annotation.Bean;
    9. import org.springframework.context.annotation.ComponentScan;
    10. import org.springframework.context.annotation.Configuration;
    11. @Configuration
    12. @EnableConfigurationProperties(ZxsProperties.class)
    13. @ComponentScan("com.zxs")
    14. public class ZxsAutoConfig implements DisposableBean {
    15. @Resource
    16. ZxsProperties zxsProperties;
    17. @Bean
    18. public FilterRegistrationBean xxlSsoFilterRegistration() {
    19. JedisUtil.init(zxsProperties.getRedisAddress());
    20. FilterRegistrationBean registration = new FilterRegistrationBean();
    21. //逻辑代码
    22. return registration;
    23. }
    24. @Override
    25. public void destroy() throws Exception {
    26. }
    27. }

     ZxsProperties

    1. package com.zxs.sso.properties;
    2. import org.springframework.boot.context.properties.ConfigurationProperties;
    3. import org.springframework.stereotype.Component;
    4. @Component
    5. @ConfigurationProperties(prefix = "zxs")
    6. public class ZxsProperties {
    7. private String zxsServer;
    8. private String logout;
    9. private String excludeds;
    10. private String redisAddress;
    11. private Integer expire;
    12. private Boolean isToken;
    13. public String getZxsServer() {
    14. return zxsServer;
    15. }
    16. public void setZxsServer(String zxsServer) {
    17. this.zxsServer = zxsServer;
    18. }
    19. public String getLogout() {
    20. return logout;
    21. }
    22. public void setLogout(String logout) {
    23. this.logout = logout;
    24. }
    25. public String getExcludeds() {
    26. return excludeds;
    27. }
    28. public void setExcludeds(String excludeds) {
    29. this.excludeds = excludeds;
    30. }
    31. public String getRedisAddress() {
    32. return redisAddress;
    33. }
    34. public void setRedisAddress(String redisAddress) {
    35. this.redisAddress = redisAddress;
    36. }
    37. public Integer getExpire() {
    38. return expire;
    39. }
    40. public void setExpire(Integer expire) {
    41. this.expire = expire;
    42. }
    43. public Boolean getToken() {
    44. return isToken;
    45. }
    46. public void setToken(Boolean token) {
    47. isToken = token;
    48. }
    49. }

     additional-spring-configuration-metadata.json

    1. {
    2. "properties": [
    3. {
    4. "name": "zxs.zxsServer",
    5. "description": "SSO服务地址.",
    6. "defaultValue": "http://127.0.0.1:8080/zxs-server",
    7. "type": "java.lang.String"
    8. },
    9. {
    10. "name": "zxs.login",
    11. "type": "java.lang.String"
    12. },
    13. {
    14. "name": "zxs.logout",
    15. "description": "登出路径.",
    16. "type": "java.lang.String"
    17. },
    18. {
    19. "name": "zxs.excludeds",
    20. "description": "排除路径.",
    21. "type": "java.lang.String"
    22. },
    23. {
    24. "name": "zxs.redisAddress",
    25. "description": "redis地址.",
    26. "defaultValue": "redis://zxs:zkb123456@127.0.0.1:6379/0",
    27. "type": "java.lang.String"
    28. },
    29. {
    30. "name": "zxs.isToken",
    31. "description": "授权类型.",
    32. "defaultValue": false,
    33. "type": "java.lang.Boolean"
    34. },
    35. {
    36. "name": "zxs.expire",
    37. "description": "时长.",
    38. "defaultValue": 3600,
    39. "type": "java.lang.Integer"
    40. }
    41. ]
    42. }

     org.springframework.boot.autoconfigure.AutoConfiguration.imports

    com.zxs.sso.config.ZxsAutoConfig
    

  • 相关阅读:
    Linear Feedback Shift Register
    一文带你搞懂ArrayList 从源码角度剖析底层原理
    自建网上商城平台该如何做好运营?
    OAuth2+JWT新一代认证技术
    24张宇八套卷复盘(五)
    IBM ELM—系统工程全生命周期管理平台
    Python中的*args 和 **kwargs
    【1796. 字符串中第二大的数字】
    Django中的Cookie和Session
    操作符详解
  • 原文地址:https://blog.csdn.net/qq_14926283/article/details/136319950