springboot自定义starter实现redis-starter

springboot自定义starter实现redis-starter

Spring Boot 是用于构建单个微服务应用程序的框架。它的自定义 starter 是一组用于配置 Spring Boot 应用程序的起始依赖项。通过使用自定义 starter,可以简化应用程序的依赖关系管理,并简化应用程序配置。要创建自定义 starter,需要编写一个新的 Spring Boot 工程,然后在其中添加所需的依赖项并定义自己的配置类,下面我们便开始编写自己的redis-starter。

1.创建springboot项目

在这里插入图片描述
在这里插入图片描述

2.编写redis-starter项目代码

项目结构如下图
在这里插入图片描述
pom.xml代码

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>

        <dependency>
            <groupId>redis.clients</groupId>
            <artifactId>jedis</artifactId>
            <version>2.9.0</version>
        </dependency>

        <dependency>
            <groupId>commons-lang</groupId>
            <artifactId>commons-lang</artifactId>
            <version>2.5</version>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-configuration-processor</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                                <executions>
                                    <execution>
                                        <goals>
                                            <goal>repackage</goal>
                                        </goals>
                                    </execution>
                                </executions>
                <configuration>
<!--                    <classifier>exec</classifier>-->
                    <skip>true</skip>
                </configuration>
            </plugin>
        </plugins>
    </build>

MyRedisProperties代码


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


@ConfigurationProperties(prefix = "myredis") //自定义yml格式 随便起名
public class MyRedisProperties {
    /**
     * ip地址
     */
    private String host;
    /**
     * 端口号
     */
    private  int  port;

    /**
     * 密码
     */
    private String password;
    /**
     * 接池中总连接的最大数量
     */
    private int   maxActive;
    /**
     *  连接池中空闲连接的最大数量
     */
    private int   maxIdle;
    /**
     * 最大建立连接等待时间
     */
    private  int  maxWait;
    /**
     * 超时时间
     */
    private  int timeout;
    /**
     *    第几个数据库
     */
    private int database;

    public String getPassword() {
        return password;
    }
    public void setPassword(String password) {
        this.password = password;
    }

    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;
    }
    public int getMaxActive() {
        return maxActive;
    }
    public void setMaxActive(int maxActive) {
        this.maxActive = maxActive;
    }
    public int getMaxIdle() {
        return maxIdle;
    }
    public void setMaxIdle(int maxIdle) {
        this.maxIdle = maxIdle;
    }
    public int getMaxWait() {
        return maxWait;
    }
    public void setMaxWait(int maxWait) {
        this.maxWait = maxWait;
    }

    public int getTimeout() {
        return timeout;
    }

    public void setTimeout(int timeout) {
        this.timeout = timeout;
    }

    public int getDatabase() {
        return database;
    }

    public void setDatabase(int database) {
        this.database = database;
    }
}

RedisAutoConfiguration代码

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 org.springframework.context.annotation.Configuration;
import redis.clients.jedis.Jedis;

/**
 * @author hsq
 * @date 2023/3/9 15:35
 */
@Configuration
@EnableConfigurationProperties(MyRedisProperties.class)//开启属性注入,通过@autowired注入
@ConditionalOnClass(Jedis.class)
public class RedisAutoConfiguration {
    @Bean
    @ConditionalOnMissingBean(Jedis.class)
    public Jedis jedis(MyRedisProperties MyRedisProperties) {
        Jedis jedis = new Jedis(MyRedisProperties.getHost(),MyRedisProperties.getPort());
        jedis.auth(MyRedisProperties.getPassword());
        return jedis;
    }
}

spring.factories文件配置

org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
com.hsq.redis.RedisAutoConfiguration,\
com.hsq.redis.MyRedisAutoConfiguration

spring.factories配置文件注意事项
1.多个配置类必须用 ,\ 分开 最后一个不需要
2.注意每行的结尾是否多添加了一个空格

application.properties文件

myredis.host=127.0.0.1
myredis.port=6379
myredis.password=123456

对项目功能进行测试


    @Autowired
    private Jedis Jedis;

    @Test
    void contextLoads() {
        Jedis.set("username", "给博主一个小小的关注吧");
		String username = Jedis.get("username");
		System.out.println("username=" + username);
//        RedisClient.set("hhh", "nimade");
//        System.out.printf(RedisClient.get("hhh"));
    }

测试运行无误后对项目进行打包。

3.项目打包

打包分为两种方式
1.点击mevan的install即可,之后便能在mevan管理jar包路径里看到你打进去的jar包。
在这里插入图片描述
2.点击package将项目打包,再通过命令将jar包导入到mevan中,操作如图所示。
在这里插入图片描述
在这里插入图片描述

命令编写方式:如Dm7JdbcDriver16.jar,maven指令如下:

mvn install:install-file -DgroupId=com.dm -DartifactId=DmJdbcDriver -Dversion=1.7.0 -Dpackaging=jar  -Dfile=D:\Dm7JdbcDriver16.jar

属性详解

-Dfile:包的本地真实地址

-DgroupId:pom.xml中groupId

-DartifactId:pom.xml中artifactId

-Dversion:pom.xml中0.0.1-SNAPSHOT

-Dpackaging:jar或war,包的后缀名

-Dclassifier:兄弟包的别名,也就是-Dversion值后面的字符common-auth-0.0.1-SNAPSHOT-core.jar的-core

4.主启动项目调用redis-starter

和第一步一样,创建一个springboot项目,注意java版本,选择8即可。
pom.xml导入制作好的jar包

		<dependency>
			<groupId>com.hsq</groupId>
			<artifactId>redis</artifactId>
			<version>0.0.1-SNAPSHOT</version>
		</dependency>

检查一下jar包是否导入成功
在这里插入图片描述
配置yml文件

myredis.host=127.0.0.1
myredis.port=6379
myredis.password=123456

测试是否可以成功启动。

    @Autowired
    private Jedis Jedis;

    @Test
    void contextLoads() {
        Jedis.set("username", "给博主一个小小的关注吧");
		String username = Jedis.get("username");
		System.out.println("username=" + username);
//        RedisClient.set("hhh", "nimade");
//        System.out.printf(RedisClient.get("hhh"));
    }

容易出现的问题

Unable to read meta-data for class 启动异常解决方案
1.spring.factories配置文件有问题,查看本文的spring.factories配置文件注意事项。
2.jar打包存在问题,mevan打包需要添加下面这段。参考我的pom.xml文件的打包代码。

                <configuration>
                 <skip>true</skip>
                </configuration>

Unsupported class file major version 61 解决方案
将java换成8的,也就是配置项目时提醒的事项,也可以在项目内进行修改。
在这里插入图片描述
关于自启动starter的原理以及使用,博主提供一些本人观看学习的文章,方便各位的学习以及了解
1.springboot自启动简单教学

  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值