在實際項目中我們需要手動來手寫Starter組件的場景相對來說還是比較少的,但是對於自定義Starter組件的原理大家還是需要掌握清楚,第一個是增加自己的自信心,第二個是掌握的自動裝配的原理後Starter組件的實現其實就是非常簡單的事情了。我們通過Redis的客戶端程序來給大家介紹。對於Redis服務我們可以使用的Java客戶端還是比較多的,但是在SpringBoot項目中我們怎麼來使用呢?
手寫SpringBoot Starter組件
1.自定義Starter
創建一個普通的Maven項目,名稱爲redisson-spring-boot-starter
,命名要注意,第三方starter約定是 xxxx
+spring-boot-starter
.
添加相關的依賴
<dependencies>
<dependency>
<groupId>org.redisson</groupId>
<artifactId>redisson</artifactId>
<version>3.15.6</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
<version>2.4.8</version>
<optional>true</optional>
</dependency>
</dependencies>
添加屬性類
/**
* 定義屬性類
* 指定前綴爲 bobo.redisson
*/
@ConfigurationProperties(prefix = "bobo.redisson")
public class RedissonProperties {
private String host = "localhost";
private int port = 6379;
private int timeout = 0;
private boolean ssl = false;
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 getTimeout() {
return timeout;
}
public void setTimeout(int timeout) {
this.timeout = timeout;
}
public boolean isSsl() {
return ssl;
}
public void setSsl(boolean ssl) {
this.ssl = ssl;
}
}
然後創建對應的配置類。
@ConditionalOnClass(Redisson.class) // 條件裝配
// 關聯 屬性配置類
@EnableConfigurationProperties(RedissonProperties.class)
@Configuration
public class RedissonAutoConfiguration {
@Bean
public RedissonClient redissonClient(RedissonProperties redissonProperties){
Config config = new Config();
String prefix = "redis://";
if(redissonProperties.isSsl()){
prefix = "rediss://";
}
// 單節點連接配置
config.useSingleServer()
.setAddress(prefix+redissonProperties.getHost()+":"+redissonProperties.getPort())
.setConnectTimeout(redissonProperties.getTimeout());
return Redisson.create(config);
}
}
這樣我們的自定義Starter的功能就差不多了,然後是要創建spring.factories文件。來實現和SpringBoot項目的自動裝配。
最後爲了增加在添加屬性文件的時候有提示信息。我們可以先導入依賴
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<version>2.4.8</version>
</dependency>
然後添加json文件,名稱必須爲additional-spring-configuration-metadata.json
{
"properties": [
{
"name": "bobo.redisson.host",
"type": "java.lang.String",
"description": "Redis的服務器地址",
"defaultValue": "localhost"
},{
"name": "bobo.redisson.port",
"type": "java.lang.Integer",
"description": "Redis的服務器端口",
"defaultValue": 6379
}
]
}
到這兒就可以了install了,然後就可以使用了。
2.SpringBoot項目使用
自定義Starter項目創建完成後,我們就可以在SpringBoot項目中來使用了。先導入對應的依賴。
然後我們在屬性文件中配置Redis的連接信息,首先可以看到提示信息了
完整的配置信息
# 添加MyBatis 的相關配置信息
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/mybatisdb?serverTimezone=UTC
spring.datasource.username=root
spring.datasource.password=123456
# 連接池的配置
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
## 指定映射文件的位置
mybatis.mapper-locations=classpath:mapper/*.xml
## 自定義Start 的屬性配置 Redis 配置
bobo.redisson.host=192.168.100.120
bobo.redisson.port=6379
bobo.redisson.timeout=5000
然後創建控制器測試。
@RestController
public class UserController {
@Autowired
private IUserService userService;
@Autowired
private RedissonClient redissonClient;
@GetMapping("/hello")
public List<User> hello(){
return userService.query();
}
@GetMapping("/query")
public String query(){
RBucket<Object> name = redissonClient.getBucket("name");
if(name.get() == null){
name.set("BOBO");
}
return name.get().toString();
}
}
啓動服務測試:
看完三件事❤️
如果你覺得這篇內容對你還蠻有幫助,我想邀請你幫我三個小忙:
點贊,轉發,有你們的 『點贊和評論』,纔是我創造的動力。
關注公衆號 『 java爛豬皮 』,不定期分享原創知識。
同時可以期待後續文章ing🚀
.關注後回覆【666】掃碼即可獲取學習資料包