springboot-ConfigurationProperties读取application配置

记录下自己常使用的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());
    }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值