一、starter 组件的原理
starter的组件就是自动装配,不了解的同学可以看看我的另一篇文章
springboot是怎么实现自动装配的?
二、基于redission(连接redis的客户端)手写一个starter
1.创建一个工程
我这里取名为redission-spring-boot-starter
2.导入jar包
<dependency>
<groupId>org
.springframework
.boot
</groupId
>
<artifactId>spring
-boot
-starter
</artifactId
>
<version>2.3.1.RELEASE
</version
>
<optional>true</optional
>
</dependency
>
<dependency>
<groupId>org
.redisson
</groupId
>
<artifactId>redisson
</artifactId
>
<version>3.9.0</version
>
</dependency
>
spring-boot-starter:我们需要依赖springboot的jar,<optional>true</optional>:表示包的依赖不向下传递 redisson:我们用redisson 来连接redis
3.创建配置类RedissionAutoConfiguration
@ConditionalOnClass(RedisClient
.class)
@Configuration
@EnableConfigurationProperties(value
= RedissionProperties
.class)
public class RedissionAutoConfiguration {
@Bean
public RedissonClient
redissonClient(RedissionProperties redissionProperties
) {
Config config
= new Config();
String prefix
= "redis://";
if (redissionProperties
.getSsl()) {
prefix
= "rediss://";
}
config
.useSingleServer().setAddress(prefix
+redissionProperties
.getHost()+":"+redissionProperties
.getPort())
.setConnectTimeout(redissionProperties
.getConnectTimeout());
return Redisson
.create(config
);
}
}
@ConditionalOnClass(RedisClient.class):表示当RedisClient这个类存在时,才会加载这个类到spring ioc 容器 @Configuration:配置类 @EnableConfigurationProperties(value = RedissionProperties.class):导入一个RedissionProperties的文件类,该类会被spring ioc容器管理
4.创建properties文件类
@ConfigurationProperties(prefix
= "kangping.redission")
public class RedissionProperties {
private String host
= "localhost";
private Integer port
;
private Integer connectTimeout
;
private Boolean ssl
;
public String
getHost() {
return host
;
}
public void setHost(String host
) {
this.host
= host
;
}
public Integer
getPort() {
return port
;
}
public void setPort(Integer port
) {
this.port
= port
;
}
public Integer
getConnectTimeout() {
return connectTimeout
;
}
public void setConnectTimeout(Integer connectTimeout
) {
this.connectTimeout
= connectTimeout
;
}
public Boolean
getSsl() {
return ssl
;
}
public void setSsl(Boolean ssl
) {
this.ssl
= ssl
;
}
}
@ConfigurationProperties:定义配置的前缀
5.创建properties文件类
在META-INF目录下创建一个文件spring.factories,内容如下:
# Auto Configure
org
.springframework
.boot
.autoconfigure
.EnableAutoConfiguration
=\
com
.kangping
.redission
.RedissionAutoConfiguration
6.导入生成配置提示的jar包
<dependency>
<groupId>org
.springframework
.boot
</groupId
>
<artifactId>spring
-boot
-configuration
-processor
</artifactId
>
<version>2.3.1.RELEASE
</version
>
</dependency
>
我们配置的时候就会有提示
这个时候我们将包安装到maven本地。
三、测试
1.我这里创建了一个user-service的工程,导入我们写的starter组件
2.配置我们写的starter
我们看到这里有提示:就是上面的2-6导入的jar包的作用,他会在我们写的starter当中生成一个文件 配置好,下面是我的配置地址: kangping.redission.host=localhost kangping.redission.port=6379 kangping.redission.connectTimeout=5000 kangping.redission.ssl=false
3编写测试类
@Autowired
RedissonClient redissonClient
;
@GetMapping("/getRedisString")
public String
getRedisString() {
RBucket
<String> name
= redissonClient
.getBucket("name");
if (name
.get() == null
) {
name
.set("kangping");
}
return name
.get();
}
访问结果:
结束!!!!