1.在pom.xml文件中引入spring-boot-starter 依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
2.实现自动配置
在starter项目中,创建自动配置类xxxProperties。
package org.h2cn.module.file.config;
import org.springframework.boot.context.properties.ConfigurationProperties;
/**
* oss配置
*
* @author eric
*/
@ConfigurationProperties(prefix = OssProperties.PREFIX)
public class OssProperties {
public static final String PREFIX = "spring.oss";
private String bucket;
private String endPoint;
private String accessKey;
private String accessSecret;
private boolean enabled;
public String getBucket() {
return bucket;
}
public void setBucket(String bucket) {
this.bucket = bucket;
}
public String getEndPoint() {
return endPoint;
}
public void setEndPoint(String endPoint) {
this.endPoint = endPoint;
}
public String getAccessKey() {
return accessKey;
}
public void setAccessKey(String accessKey) {
this.accessKey = accessKey;
}
public String getAccessSecret() {
return accessSecret;
}
public void setAccessSecret(String accessSecret) {
this.accessSecret = accessSecret;
}
public boolean isEnabled() {
return enabled;
}
public void setEnabled(boolean enabled) {
this.enabled = enabled;
}
}
3.定义Configuration,这个类要使用@Configuration
注解,并根据条件使用@ConditionalOn...
注解来条件化地配置beans。
package org.h2cn.module.file.config;
import org.h2cn.module.file.FileService;
import org.h2cn.module.file.MockFileServiceImpl;
import org.h2cn.module.file.OssServiceImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Profile;
/**
* @author eric
*/
@Configuration
@EnableConfigurationProperties(OssProperties.class)
public class OssConfiguration {
@Autowired
private OssProperties properties;
@Bean
@ConditionalOnMissingBean
@ConditionalOnProperty(prefix = OssProperties.PREFIX, value = "enabled", havingValue = "true")
@Profile({"default", "prod"})
public FileService ossService() {
OssServiceImpl ossService = new OssServiceImpl();
ossService.setBucket(properties.getBucket());
ossService.setEndPoint(properties.getEndPoint());
ossService.setAccessKey(properties.getAccessKey());
ossService.setAccessSecret(properties.getAccessSecret());
return ossService;
}
@Bean
@ConditionalOnMissingBean
@Profile({"dev", "test"})
public FileService mockFileService() {
return new MockFileServiceImpl();
}
}
4.创建配置类入口文件
org.springframework.boot.autoconfigure.AutoConfiguration.imports文件内容如下:
org.h2cn.module.file.config.OssConfiguration
到此我们就定义好了一个starter,只需要在需要的地方引入,并且配置上我们定义在XXXProperties中的配置项就OK啦。
之前springboot2.x时,我们配置这些Configuration的时候会用spring.factories,但是这个已经被官方标记为过期,不建议使用了。