文章目录
前言
官方提供了各种starter,给导入和开发带来了很大的便利。那么如何自己定义starter?
自定义redis-spring-boot-starter
第一步、redis-spring-boot-autoconfigure模块
-
创建springboot模块(名称为:redis-spring-boot-autoconfigure),不选择任何组件
-
引入jedis的依赖
<!--引入jedis依赖-->
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>3.6.3</version>
<scope>compile</scope>
</dependency>
- 新建RedisProperties ,这一步是为了接收配置文件的参数
package com.it2.redis.config;
import org.springframework.boot.context.properties.ConfigurationProperties;
@ConfigurationProperties(prefix = "my.redis")
public class RedisProperties {
private String host="127.0.0.1";
private int port=6379;
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;
}
}
- 编写RedisAutoConfiguration,声明为配置类,创建jedis bean注入到容器里
package com.it2.redis.config;
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;
@Configuration //声明为配置类
@EnableConfigurationProperties(RedisProperties.class) //启动属性,将配置注入进来
@ConditionalOnClass(Jedis.class) //如果引入了jedis才加载这个类
public class RedisAutoConfiguration {
/**
* 将redis注入到Bean
* @param redisProperties
* @return
*/
@Bean
@ConditionalOnMissingBean(name="jedis") //如果容器里没有jedis,才加载这个bean
public Jedis jedis(RedisProperties redisProperties){
System.out.println("RedisAutoConfiguration.....");
Jedis jedis=new Jedis(redisProperties.getHost(),redisProperties.getPort());
return jedis;
}
}
- 配置META-INF/spring.factories 文件,名称不能写错,否则@EnableAutoConfiguration 扫描不到
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
com.it2.redis.config.RedisAutoConfiguration
- 项目结构(多余的文件,测试和启动类等文件可以删除掉)
第二步、定义redis-spring-boot-starter
-
创建springboot模块(名称为:redis-spring-boot-starter),不选择任何组件
-
引入依赖
<!--引入自定义的configure-->
<dependency>
<groupId>com.it2</groupId>
<artifactId>redis-spring-boot-autoconfigure</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
- 项目结构(多余的文件,测试和启动类等文件可以删除掉)
第三步、引入自己定义的redis-spring-boot-starter
- 找一个springboot工程(重新创建一个或者已有工程都可以),引入定义的starter
<!--引入自定义的redis starter-->
<dependency>
<groupId>com.it2</groupId>
<artifactId>redis-spring-boot-starter</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
- 从容器里获取Jedis,并运行。发现可以获取到redis
- 配置一下redis
- 重新再次执行,并查看远端的redis数据。
这表明自定义的starter是可以获取到项目的配置文件的。
扩展
官方已经提供了这个RedisAutoConfiguration
关于错误
问题1:如果找不到自定义的依赖包。
解决方案:
mvn install ,将自己定义的jar安装到本地maven仓库。