spring boot starter 制作
创建一个starter项目
pom.xml如下
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<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.13.1</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<version>2.3.1.RELEASE</version>
</dependency>
项目结构如下图
自动配置类
@Configuration
@EnableConfigurationProperties(RedissonProperties.class)
@ConditionalOnClass(Redisson.class)
public class RedissonAutoConfiguration {
@Bean
public RedissonClient redissonClient(RedissonProperties redissonProperties){
Config config = new Config();
String prefix = "redis://";
config.useSingleServer().
setAddress(prefix+ redissonProperties.getHost()+":"+ redissonProperties.getPort()).
setConnectTimeout(redissonProperties.getTimeout()).setPassword(redissonProperties.getPassword());
return Redisson.create(config);
}
}
配置文件类
@ConfigurationProperties(prefix = "omg.redisson")
public class RedissonProperties {
private String host;
private int port = 7100;
private String password;
private Boolean ssl = false;
private int timeout;
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 Boolean getSsl() {
return ssl;
}
public void setSsl(Boolean ssl) {
this.ssl = ssl;
}
public int getTimeout() {
return timeout;
}
public void setTimeout(int timeout) {
this.timeout = timeout;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
约定配置,在resource下创建META-INF目录,再创建spring.factories文件。
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
com.omg.example.redissonspringbootstarter.RedissonAutoConfiguration
additional-spring-configuration-metadata.json中设置自定义提示
{
"properties": [
{
"name": "omg.redisson.host",
"type": "java.lang.String",
"description": "host",
"defaultValue": "localhost"
},{
"name": "omg.redisson.port",
"type": "java.lang.Integer",
"description": "端口",
"defaultValue": 6379
}
]
}
测试
将starter项目install,放在本地maven仓库里。然后再新建一个spring boot项目测试下。
1.pom文件里引入starter
2.填写配置信息
3.测试类
可能遇到的问题
maven打包后,jar包内部层级出现boot-inf,导致配置类无法找到。
加入以下配置
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<skip>true</skip>
</configuration>
</plugin>
</plugins>
</build>