Spring boot四大特性之一: starter
- starter即为启动依赖,在spring boot项目启动时候,就会加载不同插件的配置, 如引入spring-boot-starter-data-redis依赖时候就会加载redis相关的依赖bean.
- 应用:用于制作spring boot插件
- 原理: Spring boot自动配置
构建简单spring-boot-redis插件工具
- 接下来以构建一个简单spring boot redis插件为例
- 新建一个maven项目
- 添加依赖
<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> <!--optional为true不会有依赖传递,即导入该项目依赖不会为引入spring-boot-stater依赖--> </dependency>
- 创建配置类和redis的参数配置类
//参数配置类 //通过该注解可以来申明参数配置类,在项目启动时application.properties中的配置可以通过 prefix .field的方式将值注入到该类中. //eg: redis.host=192.168.12.12 @ConfigurationProperties(prefix = "redis") public class RedisPropertiesConfiguration { private String host="localhost"; private int port=6379; private int timeout; private boolean isSSL; ....省略属性get,set方法 }
//配置类 @ConditionalOnClass(Redisson.class) //条件加载,当classpath中存在Redisson类时才会加载该配置 @Configuration @EnableConfigurationProperties(RedisPropertiesConfiguration.class) //将RedisPropertiesConfiguration注册到IOC容器中 public class RedisAutoConfiguration { @Bean RedissonClient redissonClient(RedisPropertiesConfiguration redisPropertiesConfiguration) { Config config = new Config(); String prefix = "redis://"; //redis有多种配置形式,如主从,哨兵,可针对不同的配置形式以不同的配置参数返回使用不同配置的RedissonClient config.useSingleServer() .setAddress(prefix + redisPropertiesConfiguration.getHost() + ":" + redisPropertiesConfiguration.getPort()) .setTimeout(redisPropertiesConfiguration.getTimeout()); return Redisson.create(config); } }
- 构建自动装配配置文件spring.factories
- 这是一种约定, spring boot启动会自动扫描该文件中配置去加载插件配置(详情见AutoConfigurationImportSelector.class)
- 文件位置:classpath: META-INF/spring.factories, 在idea中是/resources/META-INF/spring.factories
- 内容
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ com.oocl.configuration.RedisAutoConfiguration
- 配置提示.
- 通过以上方式构建的插件通过在本地构建就可以在本地使用了,但是在application.properties并不会有该插件的配置属性类属性的提示信息,接下来就是添加配置属性提示信息的内容.
- 依赖导入
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-configuration-processor</artifactId> <version>2.4.8</version> <optional>true</optional> </dependency>
- 编写提示配置文件:
文件位置:classpath: META-INF/conditional-spring-configuration-metadata.json, 在idea中是/resources/META-INF/conditional-spring-configuration-metadata.json 文件内容: { "properties": [ { "name": "redis.host", "type": "java.lang.String", "description": "redis的服务器地址", "defaultValue": "localhost" }, { "name": "redis.port", "type": "java.lang.Integer", "description": "redis端口", "defaultValue": 6379 } ] }
- 这样在application.properties配置文件就会有提示了.
使用插件工具
- 以在本地使用为例
- 通过maven构建项目,使得生成本地的依赖包,本地项目可导入依赖来使用该插件
- 导入依赖后在application的配置中配置redis配置属性.
redis.host=localhost
redis.port=6379
-
由于自动化配置,RedissonClient以被加载到IOC容器,通过依赖注入的方式,就可以使用RedissonClient了.
-
源码地址: https://github.com/MrJDA/springBootRedisStarter/tree/master