自定义Sprin-Boot-Starter

本文涉及的产品
云数据库 Tair(兼容Redis),内存型 2GB
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
简介: 自定义Sprin-Boot-Starter

@[TOC]

1 创建redis-spring-boot-autoconfigure模块

1.1 新建RedisProperties配置类

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

@ConfigurationProperties(prefix = "redis")
public class RedisProperties {
   

    private String host = "localhost";

    private int port = 6379;

    public String getHost() {
   
        return host;
    }

    public void setHost(String host) {
   
        this.host = host;
    }

    public int getPort() {
   
        return port;
    }

    public void setPort(int port) {
   
        this.port = port;
    }
}

1.2 新建RedisAutoConfiguration,注入bean

import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;
import redis.clients.jedis.Jedis;
import org.springframework.context.annotation.Configuration;

@Configuration
@EnableConfigurationProperties(RedisProperties.class)
@ConditionalOnClass(Jedis.class)
public class RedisAutoConfiguration {
   

    /**
     * 提供Jedis jedis
     * @return
     */
    @Bean
    @ConditionalOnMissingBean(name = "jedis")
    public Jedis jedis(RedisProperties redisProperties){
   
        System.out.println("RedisAutoConfiguration.......");
        return new Jedis(redisProperties.getHost(),redisProperties.getPort());
    }
}

1.3 新建spring.factories

  • 路径为:resources\META-INF\spring.factories
  • 内容如下:

    org.springframework.boot.autoconfigure.EnableAutoConfiguration=com.yunfeng.redis.config.RedisAutoConfiguration
    

    1.4 pom的依赖如下

      <dependencies>
          <dependency>
              <groupId>org.springframework.boot</groupId>
              <artifactId>spring-boot-starter</artifactId>
          </dependency>
    
          <!-- 引入jedis依赖 -->
          <dependency>
              <groupId>redis.clients</groupId>
              <artifactId>jedis</artifactId>
          </dependency>
      </dependencies>
    

    2 创建redis-spring-boot-starter模块,并依赖redis-spring-boot-autoconfigure的模块

  • 此模块只是包装作用,无需其他代码
  • pom依赖如下:

      <dependencies>
          <dependency>
              <groupId>org.springframework.boot</groupId>
              <artifactId>spring-boot-starter</artifactId>
          </dependency>
    
          <!-- 引入配置模块 -->
          <dependency>
              <groupId>com.yunfeng</groupId>
              <artifactId>redis-spring-boot-autoconfigure</artifactId>
              <version>0.0.1-SNAPSHOT</version>
          </dependency>
      </dependencies>
    

    3 新建测试模块,并引入自定义的redis-starter依赖,测试获取Jedis的Bean,并操作redis

    3.1 测试模块的pom中引入自己定义的starter

      <!-- 引入自定义redis的starter -->
          <dependency>
              <groupId>com.example</groupId>
              <artifactId>redis-spring-boot-starter</artifactId>
              <version>0.0.1-SNAPSHOT</version>
          </dependency>
    

    3.2 测试模块的启动类里测试

    ```java
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.context.ConfigurableApplicationContext;
    import org.springframework.context.annotation.Bean;
    import redis.clients.jedis.Jedis;

@SpringBootApplication
public class SpringbootConditionApplication {

public static void main(String[] args) {
    //启动Springboot的应用,返回Spring的IOC容器
    ConfigurableApplicationContext context = SpringApplication.run(SpringbootConditionApplication.class, args);

    Jedis jedis = context.getBean(Jedis.class);
    System.out.println(jedis);

    jedis.set("name","husiyuan");
    String name = jedis.get("name");
    System.out.println("name = " + name);
}

//若存在则不使用自定义starter中的Jedis
@Bean
public Jedis jedis(){
    return new Jedis("localhost",6379);
}

}
```

相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
目录
相关文章
|
网络协议 Java 中间件
2024年最新阿里Java高级岗200+面试题,掌握80%进阿里没问题
更新的阿里集团Java岗JD标准,信息来源于阿里集团的招聘专场,包括天猫、蚂蚁金服、中间件团队的高级Java、技术专家岗位。文末随附BATJTMD等一线互联网企业的Java高级研发岗位的面试题目及答案。
|
6月前
|
Ubuntu 安全 Linux
宝塔Linux面板安装教程
这是一篇关于宝塔Linux面板安装教程的文章,支持CentOS/Ubuntu/Deepin/Debian/Fedora系统。文章详细列出了各系统的安装脚本命令,并提供更新升级脚本、安装后操作指南及注意事项。重点包括开放必要端口、解决权限问题、查看安装日志以及推荐的安全设置,如启用登录限制和定期更新面板。若遇问题可参考宝塔官方论坛或寻求技术支持。
344 0
|
消息中间件 存储 Cloud Native
基于 RocketMQ 的云原生 MQTT 消息引擎设计
本文将介绍阿里云如何将 Serverless 架构应用于消息队列,有效降低运营成本,同时利用云原生环境的特性,为 IoT 设备提供快速响应和灵活伸缩的通讯能力。
430 116
|
7月前
|
缓存 负载均衡 Java
2025春招 SpringCloud 面试题汇总
大家好,我是V哥。SpringCloud是面试中的重点,涵盖基础概念、组件细节、高级特性及性能优化等内容。为帮助大家更好地准备2025年的Spring Cloud面试,我整理了一系列常见面试题及答案,涉及服务注册与发现(Eureka)、配置管理(Spring Cloud Config)、负载均衡(Ribbon)、断路器(Hystrix)、微服务网关(Spring Cloud Gateway)等关键知识点。此外,还包括分布式事务管理、链路追踪(Sleuth+Zipkin)、安全性(OAuth2)以及性能优化和实践经验。希望这些内容能助你一臂之力,顺利通过面试。欢迎关注威哥爱编程,全栈之路就你行。
1806 24
|
7月前
|
Java 程序员 开发者
Java社招面试题:一个线程运行时发生异常会怎样?
大家好,我是小米。今天分享一个经典的 Java 面试题:线程运行时发生异常,程序会怎样处理?此问题考察 Java 线程和异常处理机制的理解。线程发生异常,默认会导致线程终止,但可以通过 try-catch 捕获并处理,避免影响其他线程。未捕获的异常可通过 Thread.UncaughtExceptionHandler 处理。线程池中的异常会被自动处理,不影响任务执行。希望这篇文章能帮助你深入理解 Java 线程异常处理机制,为面试做好准备。如果你觉得有帮助,欢迎收藏、转发!
406 14
|
8月前
|
SQL Java 数据库连接
Java MyBatis 面试题
Java MyBatis相关基础面试题
|
8月前
|
前端开发 安全 Java
2025春招,Spring 面试题汇总
本文详细整理了2025年春招必备的Spring面试题,分为基础和高级两大部分,帮助求职者全面掌握Spring相关知识点,结合实际项目经验,提升面试成功率。内容涉及Spring框架、AOP、事务管理、数据库集成、Spring Boot、Spring Security、微服务架构等,助力你在春招中脱颖而出。
1215 0
|
8月前
|
存储 关系型数据库 MySQL
美团面试:MySQL为什么 不用 Docker部署?
45岁老架构师尼恩在读者交流群中分享了关于“MySQL为什么不推荐使用Docker部署”的深入分析。通过系统化的梳理,尼恩帮助读者理解为何大型MySQL数据库通常不使用Docker部署,主要涉及性能、管理复杂度和稳定性等方面的考量。文章详细解释了有状态容器的特点、Docker的资源隔离问题以及磁盘IO性能损耗,并提供了小型MySQL使用Docker的最佳实践。此外,尼恩还介绍了Share Nothing架构的优势及其应用场景,强调了配置管理和数据持久化的挑战。最后,尼恩建议读者参考《尼恩Java面试宝典PDF》以提升技术能力,更好地应对面试中的难题。
|
7月前
|
存储 前端开发 数据可视化
Grafana Loki,轻量级日志系统
本文介绍了基于Grafana、Loki和Alloy构建的轻量级日志系统。Loki是一个由Grafana Labs开发的日志聚合系统,具备高可用性和多租户支持,专注于日志而非指标,通过标签索引而非内容索引实现高效存储。Alloy则是用于收集和转发日志至Loki的强大工具。文章详细描述了系统的架构、组件及其工作流程,并提供了快速搭建指南,包括准备步骤、部署命令及验证方法。此外,还展示了如何使用Grafana查看日志,以及一些基本的LogQL查询示例。最后,作者探讨了Loki架构的独特之处,提出了“巨型单体模块化”的概念,即一个应用既可单体部署也可分布式部署,整体协同实现全部功能。
2264 70
Grafana Loki,轻量级日志系统
|
11月前
|
消息中间件 存储 弹性计算
云消息队列 RabbitMQ 版实践解决方案评测
随着企业业务的增长,对消息队列的需求日益提升。阿里云的云消息队列 RabbitMQ 版通过架构优化,解决了消息积压、内存泄漏等问题,并支持弹性伸缩和按量计费,大幅降低资源和运维成本。本文从使用者角度详细评测这一解决方案,涵盖实践原理、部署体验、实际优势及应用场景。