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自启动简单教学