SpringBoot入门到精通-SpringBoot自定义starter(六)

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

定义自己的starter

1.认识spring-boot-starter

SpringBoot可以很容易就可以整合其他的组件,比如对于SpringMVC而言,我们只需要导入spring-boot-starter-web就可以直接编写Controller。这个包可不仅仅是导入了一个jar,它把集成SpringMVC所需要的所有的jar都导入了进来

在这里插入图片描述

对于不同的组件的集成都有对应的start,比如: spring-boot-starter-redis 就是用来整合Redis,它把Redis所需要的jar都导入进来了。在starter中不仅包含了集成某个组件所需要的所有jar, 还包括集成该组件的配置类。总结如下

  • 它整合了这个模块需要的依赖库;
  • 提供对模块的配置项给使用者;
  • 提供自动配置类对模块内的Bean进行自动装配;

下面我们来开发一个自己的starter

2.定义自己的starter

我们来定义一个自动装配 redis 的 starter,当某个项目导入该starter之后就可以根据默认配置自动去连接redis服务器。如何才能做到这样的效果呢?或许你应该想到了,仿照SpringBoot的自动配置流程,封装一个自己的jar包。那么我们需要做什么事情

  1. 创建一个maven工厂,导入操作redis所需要的jar包,我这里会使用 jedis 来演示
  2. 定义一个Properties类,用来加载yml配置的redis配置项
  3. 新建自动装配类,使用@Configuration和@Bean来进行自动装配
  4. 创建 MET-INF/spring.factories文件,把自动配置类配置进去,让SpringBoot可以自动去加载;

2.1.创建工程,导入依赖

我的项目名为:springboot-starter-redis , 需要导入SpringBoot基础依赖,以及jedis基础依赖。

<packaging>jar</packaging>

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starters</artifactId>
    <version>2.2.5.RELEASE</version>
</parent>

<dependencies>
    <!-- SpringBoot自动配置基础依赖 -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-configuration-processor</artifactId>
        <optional>true</optional>
    </dependency>
    <!-- SpringBoot核心基础依赖 -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter</artifactId>
        <version>2.2.5.RELEASE</version>
        <scope>compile</scope>
    </dependency>
    <!-- 使用jedis操作Redis -->
    <dependency>
        <groupId>redis.clients</groupId>
        <artifactId>jedis</artifactId>
        <version>3.1.0</version>
    </dependency>
    <dependency>
        <groupId>commons-pool</groupId>
        <artifactId>commons-pool</artifactId>
        <version>1.6</version>
    </dependency>
</dependencies>

2.2.定义Redis自动配置

第一步,先创建一个RedisProperties来,用来读取yaml的配置

//@ConfigurationProperties: 把 "spring.redis" 前缀下的配置同名绑定到该对象的字段上
@ConfigurationProperties(prefix = "spring.redis")
public class RedisProperties {
   
   
    //redis主机
    private String host ="127.0.0.1";
    //redis密码
    private String password;
    //redis端口
    private int port = 6379;
    //超时时间,1秒超时
    private int timeout = 1000;
    //最大空闲
    private int maxIdle = 8;
    //最大链接
    private int maxTotal = 8;
    //最大等待超时
    private long maxWaitMillis = -1;
    //开启测试
    private boolean testOnBorrow = false;
    ...省略get,set...
}

第二步:创建Redis自动配置类 , 注册 JedisPool 连接池对象

@Configuration
//如果有Jedis.class这个类就创建Bean
@ConditionalOnClass({
   
   Jedis.class,JedisPoolConfig.class})
//如果还没有创建Jedis,就创建
@ConditionalOnMissingBean(Jedis.class)
//@EnableConfigurationProperties : 启用RedisProperties
@EnableConfigurationProperties(RedisProperties.class)
public class RedisAutoConfiguration {
   
   

    @Bean
    public JedisPool jedisPool(RedisProperties redisProperties){
   
   
        JedisPoolConfig config = new JedisPoolConfig();
        //最大空闲连接数
        config.setMaxIdle(redisProperties.getMaxIdle());
        //最大链接对象数
        config.setMaxTotal(redisProperties.getMaxTotal());
        //链接超时时间
        config.setMaxWaitMillis(redisProperties.getMaxWaitMillis());
        //获取连接是测试连接是否畅通
        config.setTestOnBorrow(redisProperties.isTestOnBorrow());
        //参数:配置对象,redis主机地址 ,超时时间,密码
        return new JedisPool(config,redisProperties.getHost(),redisProperties.getPort(),redisProperties.getTimeout(),redisProperties.getPassword());
    }

    @Bean
    public RedisTemplate redisTemplate(JedisPool jedisPool){
   
   
        return new RedisTemplate(jedisPool);
    }
}

2.3.创建RedisTemplate

创建RedisTemplate , 该类是是用来操作Redis的工具类,代码如下

public class RedisTemplate {
   
   

    //连接池
    private JedisPool jedisPool;

    public RedisTemplate(JedisPool jedisPool){
   
   
        this.jedisPool = jedisPool;
    }
    public RedisTemplate(){
   
   }


    public Jedis getJedis(){
   
   
        return jedisPool.getResource();
    }
    //保存字符串
    public String set(String key ,String value){
   
   
        Jedis jedis = getJedis();
        String result = jedis.set(key  , value);
        jedis.close();
        return result;
    }
    //获取字符串
    public String get(String key){
   
   
        Jedis jedis = getJedis();
        String result = jedis.get(key);
        jedis.close();
        return result;
    }

}

2.4.创建spring.factories

创建 resources\META-INF\spring.factories 文件,把配置类的名字加进去

org.springframework.boot.autoconfigure.EnableAutoConfiguration=cn.whale.config.RedisAutoConfiguration

2.5.打包start

使用terminal,执行 : mvn install ,把工厂打包到本地仓库
在这里插入图片描述

到这里,start开发完毕。接下来就是在项目pom.xml中去引入该start(springboot-starter-redis),当项目启动,SpringBoot自动配置流程会加载 springboot-startr-redis/MATE-INF/spring.factories 中的 RedisAutoConfiguration ,然后其中的JedisPool 和 RedisTemplate都会被注册到Spring容器中。 剩下就是在项目中注入 RedisTemplate 使用接口。

项目结构如下

在这里插入图片描述

3.使用Starter

3.1.pom导入依赖

这里会找到我们上面install的starter项目

<dependency>
    <groupId>cn.whale</groupId>
    <artifactId>springboot-starter-redis</artifactId>
    <version>1.0-SNAPSHOT</version>
</dependency>

3.2.配置Redis

这个配置项目对应了springboot-starter-redis 中的 RedisProperties ,如果不配置会使用默认的值

spring:
  redis:
    password: 123456
    host: 127.0.0.1
    port: 6379

3.3.编写controller

在controller注入 RedisTemplate,进行set,get方法演示

@RestController
public class UserController {
   
   

    @Autowired
    private RedisTemplate redisTemplate;

    @RequestMapping("/redis/set/{key}/{value}")
    public String redisSet(@PathVariable("key")String key , @PathVariable("value")String value){
   
   
        return redisTemplate.set(key,value);
    }
    @RequestMapping("/redis/get/{key}")
    public String redisGet(@PathVariable("key")String key){
   
   
        return redisTemplate.get(key);
    }

}

3.4.启动测试

启动项目,访问该路径进行测试,效果如下

在这里插入图片描述

测试 get

在这里插入图片描述

下面是Redis中的效果
在这里插入图片描述

你可能会问定义starter有什么用?其实是比较有用的,比如我们要开发一个通用的组件,封装一个jar,这个组件需要被依赖到多个项目中,那么我们怎么样才能在程序启动的时候做一些初始化配置呢?定义starter就是一种很好的方式。

文章结束啦,如果文章对你有所帮助,请一定给个好评哦,请一定给个好评哦,请一定给个好评哦

相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore &nbsp; &nbsp; ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库&nbsp;ECS 实例和一台目标数据库&nbsp;RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&amp;RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
相关文章
|
2月前
|
前端开发 Java 数据库
SpringBoot入门 - 对Hello world进行MVC分层
SpringBoot入门 - 对Hello world进行MVC分层
53 3
SpringBoot入门 - 对Hello world进行MVC分层
|
2月前
|
Java 数据库连接 测试技术
SpringBoot入门 - 添加内存数据库H2
SpringBoot入门 - 添加内存数据库H2
99 3
SpringBoot入门 - 添加内存数据库H2
|
2月前
|
Java 应用服务中间件 数据库连接
SpringBoot入门(2) - SpringBoot HelloWorld
SpringBoot入门(2) - SpringBoot HelloWorld
43 2
SpringBoot入门(2) - SpringBoot HelloWorld
|
2月前
|
Java 中间件
SpringBoot入门(6)- 添加Logback日志
SpringBoot入门(6)- 添加Logback日志
104 5
|
2月前
|
前端开发 Java 数据库
SpringBoot入门(3) - 对Hello world进行MVC分层
SpringBoot入门(3) - 对Hello world进行MVC分层
37 4
|
2天前
|
JavaScript Java 程序员
SpringBoot自动配置及自定义Starter
Java程序员依赖Spring框架简化开发,但复杂的配置文件增加了负担。SpringBoot以“约定大于配置”理念简化了这一过程,通过引入各种Starter并加载默认配置,几乎做到开箱即用。
37 10
SpringBoot自动配置及自定义Starter
|
16天前
|
Java 数据库连接 Maven
最新版 | SpringBoot3如何自定义starter(面试常考)
在Spring Boot中,starter是一种特殊的依赖,帮助开发人员快速引入和配置特定功能模块。自定义starter可以封装一组特定功能的依赖和配置,简化项目中的功能引入。其主要优点包括模块化、简化配置、提高代码复用性和实现特定功能。常见的应用场景有短信发送模块、AOP日志切面、分布式ID生成等。通过创建autoconfigure和starter两个Maven工程,并编写自动配置类及必要的配置文件,可以实现一个自定义starter。最后在测试项目中验证其有效性。这种方式使开发者能够更便捷地管理和维护代码,提升开发效率。
最新版 | SpringBoot3如何自定义starter(面试常考)
|
1月前
|
Java 开发者 微服务
Spring Boot 入门:简化 Java Web 开发的强大工具
Spring Boot 是一个开源的 Java 基础框架,用于创建独立、生产级别的基于Spring框架的应用程序。它旨在简化Spring应用的初始搭建以及开发过程。
67 6
Spring Boot 入门:简化 Java Web 开发的强大工具
|
2月前
|
Java 应用服务中间件 数据库连接
SpringBoot入门 - SpringBoot HelloWorld
SpringBoot入门 - SpringBoot HelloWorld
SpringBoot入门 - SpringBoot HelloWorld
|
2月前
|
Java Spring
SpringBoot入门 - 定制自己的Banner
SpringBoot入门 - 定制自己的Banner
30 2
SpringBoot入门 - 定制自己的Banner
下一篇
开通oss服务