记录下自己常使用的springboot读取application中的配置的几种方法
1.如果只是单个文件中的配置,且文件已经注入spring IOC,则可以受用@Value注解
如下可读取application中service.name到username,加上冒号,若没有配置,则username为空,不加冒号,不配置启动会报错
@Service
public class UserService{
@Value("${service.username:}")
private String username
}
2.若类没有加到spring IOC中,使用@Value不会读取到配置,此时可以先制作一个获取spring bean的工具类:
@Component
public class SpringContextUtil implements ApplicationContextAware {
private static ApplicationContext context;
public static Object getBean(String beanName){
return context.getBean(beanName);
}
public static String getMessage(String key){
return context.getMessage(key, null, Locale.getDefault());
}
@Override
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
context = applicationContext;
}
}
然后在new 出的类中从spring IOC中获取environment环境bean,application的配置都已经被读取到该环境中,然后可取出相关的配置:
public void init(){
Environment environment = (Environment)SpringContextUtil.getBean("environment");
String endpoint = environment.getProperty("io.minio.endpoint");
}
3.若有多个参数需要配置,可自己写一个配置类,然后通过
@ConfigurationProperties注解自动注入配置,示例:
@Data
@ConfigurationProperties(prefix = "my.oss")
public class OSSProperties {
private MinioProperties minio = new MinioProperties();
private ObsProperties obs = new ObsProperties();
private FtpProperties ftp = new FtpProperties();
private LocalProperties local = new LocalProperties();
@Data
public static class MinioProperties {
private String endpoint = "";
private String accessKey = "";
private String secretKey = "";
private String bucket = "";
}
@Data
public static class ObsProperties {
private String endpoint = "";
private String accessKey = "";
private String secretKey = "";
private String bucket = "";
}
@Data
public static class FtpProperties {
private String host = "";
private String port = "";
private String username = "";
private String password = "";
private String bucket = "";
}
@Data
public static class LocalProperties {
private String baseDir = "";
private String bucket = "";
}
}
上图,若在application中配置my.oss.minio.endPoint,则对应的配置就能够读取到,不过不要忘记在启动类上加上
@EnableConfigurationProperties(OSSProperties.class)
注解,否则不会注入。
最后可通过构造的方式将配置传入对应的bean:
@Bean
@ConditionalOnMissingBean
public MinioOSSClient minioOSSClient(OSSProperties ossProperties){
return new MinioOSSClient(ossProperties.getMinio().getEndpoint(),
ossProperties.getMinio().getAccessKey(),
ossProperties.getMinio().getSecretKey(),
ossProperties.getMinio().getBucket());
}