spring boot 用@CONFIGURATIONPROPERTIES 和 @Configuration两种方法读取配置文件

spring cloud  读取 配置文件属性值

1、bean

@Data
public class LocalFileConfig {

    /**
     * 文件存储地址
     */
    private String fileServerPath;

    private String fileDownloadUrl;

    private String defaultCutSize;

    private String fileValidateType;

    private Long fileSize;
}

  配置

@Configuration
@PropertySource(value = { "classpath:properties/oss.properties" })
public class LocalFileConfigConfiguration {

    @Value("${file.config.server.path}")
    private String fileServerPath;

    @Value("${file.config.download.url}")
    private String fileDownloadUrl;

    @Value("${file.config.default.cutSize}")
    private String fileDefaultCutSize;

    @Value("${file.config.validate.type}")
    private String fileValidateType;

    @Value("${file.config.validate.fileSize}")
    private Long fileSize;

    @Bean
    public LocalFileConfig localFileConfig(){
        LocalFileConfig localFileConfig = new LocalFileConfig();
        localFileConfig.setFileServerPath(fileServerPath);
        localFileConfig.setFileDownloadUrl(fileDownloadUrl);
        localFileConfig.setFileValidateType(fileValidateType);
        localFileConfig.setDefaultCutSize(fileDefaultCutSize);
        localFileConfig.setFileSize(fileSize);
        return localFileConfig;
    }
}

  

2、

@NoArgsConstructor@AllArgsConstructor@Component@ConfigurationProperties(prefix = "file")public class FileStorageProperties {    private String uploadDir;

    public String getUploadDir() {        return uploadDir;    }

    public void setUploadDir(String uploadDir) {        this.uploadDir = uploadDir;    }}

网上找到第二种方法,级联应用

链接:https://www.cnblogs.com/lihaoyang/p/10223339.html

SPRINGBOOT用@CONFIGURATIONPROPERTIES获取配置文件值

SpringBoot的配置文件有yml和properties两种,看一些文章说yml以数据为中心,比较好。个人觉得properties更好用,所以这里以properties格式为例来说。

我们都知道@Value 注解可以从配置文件读取一个配置,如果只是配置某个值,比如 某一个域名,配置为xxx.domain = www.xxx.com ,这样直接在代码里用@Value获取,比较方便。

但是如果是一组相关的配置,比如验证码相关的配置,有图片验证码、手机验证码、邮箱验证码,如果想把验证码的长度做成可配置。是否能像springboot的配置,

参照着写成:

肯定是可以的!

参照源码是最好的学习方式,下面来看springboot是怎么做的

server对应着一个配置类:ServerProperties(只粘贴出了部分成员变量,来说明问题)

@ConfigurationProperties(prefix = "server", ignoreUnknownFields = true)
public class ServerProperties
        implements EmbeddedServletContainerCustomizer, EnvironmentAware, Ordered {

    /**
     * Server HTTP port.
     */
    private Integer port;

    @NestedConfigurationProperty
    private Compression compression = new Compression();

  //省略其他成员变量、getter 、setter 


Compression类部分代码:

public class Compression {

    /**
     * If response compression is enabled.
     */
    private boolean enabled = false;

看过后应该很明白了,之所以能写成server.port=8081,server.display-name=lhyapp,server.compression.enabled=true  ,是因为 ServerProperties 类上使用了

@ConfigurationProperties(prefix = "server", ignoreUnknownFields = true) 注解,其中prefix 指定配置文件里的前缀, 如果想弄成这样式的 server.compression.enabled = true ,就需要再声名一个类 Compression ,然后在ServerProperties 中引用这个类,属性名对应配置文件中的配置名。

@ConfigurationProperties:

  告诉SpringBoot将本类中的所有属性和配置文件中相关的配置进行绑定;
   prefix = "xxx":配置文件中哪个下面的所有属性进行一一映射

只有这个组件是容器中的组件,才能容器提供的@ConfigurationProperties功能;
 @ConfigurationProperties(prefix = "xxx")默认从全局配置文件中获取值;

下边实现上面说的验证码配置,需要的类:

代码:CoreConfiguration.java

@Configuration
@EnableConfigurationProperties(SecurityProperties.class)
public class CoreConfiguration {

    //配置一些bean
    //@Bean
    //public XXXX xxxx(){}
}

SecurityProperties.java

@ConfigurationProperties(prefix = "myapp")
public class SecurityProperties {

    private ValidateCodeProperties code = new ValidateCodeProperties();

    public ValidateCodeProperties getCode() {
        return code;
    }

    public void setCode(ValidateCodeProperties code) {
        this.code = code;
    }
}

ValidateCodeProperties.java

public class ValidateCodeProperties {

    private SmsCodeProperties sms = new SmsCodeProperties();

    private ImageCodeProperties image = new ImageCodeProperties();

    public SmsCodeProperties getSms() {
        return sms;
    }

    public void setSms(SmsCodeProperties sms) {
        this.sms = sms;
    }

    public ImageCodeProperties getImage() {
        return image;
    }

    public void setImage(ImageCodeProperties image) {
        this.image = image;
    }
}

SmsCodeProperties.java

public class SmsCodeProperties {

    private int length = 4;

    public int getLength() {
        return length;
    }

    public void setLength(int length) {
        this.length = length;
    }
}

在application.properties 里配置
myapp.code.sms.length = 10
使用配置:

  @Autowired
    private SecurityProperties securityProperties;

    @RequestMapping("/length")
    public @ResponseBody String length(){
        int length = securityProperties.getCode().getSms().getLength();
        return String.valueOf(length);
    }

原文地址:https://www.cnblogs.com/Struts-pring/p/12021711.html

时间: 2024-10-27 14:01:31

spring boot 用@CONFIGURATIONPROPERTIES 和 @Configuration两种方法读取配置文件的相关文章

Spring Boot 中实现定时任务的两种方式

在 Spring + SpringMVC 环境中,一般来说,要实现定时任务,我们有两中方案,一种是使用 Spring 自带的定时任务处理器 @Scheduled 注解,另一种就是使用第三方框架 Quartz ,Spring Boot 源自 Spring+SpringMVC ,因此天然具备这两个 Spring 中的定时任务实现策略,当然也支持 Quartz,本文我们就来看下 Spring Boot 中两种定时任务的实现方式. @Scheduled 使用 @Scheduled 非常容易,直接创建一个

spring boot 学习10 定义springboot的两种方法

使用spring boot的两种方法: A:继承spring-boot-starter-parent项目 这种方式很简单,只需要在POM里面添加parent父工程即可. B: 如果你不喜欢继承spring-boot-starter-parent POM的方式,需要使用公司的标准parent(而parent只能有一个), 或者比较倾向显示声明所有Maven配置.你可以使用一个scope=import导入的方式使用Spring Boot <dependencyManagement> <dep

代码大爆炸|用Spring Boot创建微服务的21种代码描述(上)

代码大爆炸|用Spring Boot创建微服务的21种代码描述(上)

spring 配置文件 引入外部的property文件的两种方法

spring  的配置文件 引入外部的property文件的两种方法 <!-- 引入jdbc配置文件    方法一 --> <bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> <property name="locations"> <lis

(01)Spring MVC之处理异常的两种方式及优先级

项目开发中异常需要统一处理,总的来说有两种方式,一种是实现HandlerExceptionResolver接口,一种是使用@ExceptionHandler注解的方式.其中Spring已经为我们提供了一个实现了HandlerExceptionResolver接口的类SimpleMappingExceptionResolver,有人把它单独列为一种方式,不过我认为方式越少越好,哈哈哈哈哈,下面记录一下Spring MVC处理异常的这两种方式. 1.实现HandlerExceptionResolve

Cisco设备IOS的恢复方法 两种方法

如果不小心把Router或者Switch的IOS删除了,特别是Flash中的IOS和ROM中的Mini IOS都没有了的话,连启动都不行的话,有什么方法恢复它呢?答案是方法不只一种,而是两种.其实是我只知道两种:) 第一种方法:X-Modem 以前我曾经尝试过一种方法,就是当Flash被删除后,启动无法进入系统,可以用X-Modem来恢复它.当时我不小心删除了一台Cisco2950交换机的Flash IOS,导致系统无法启动,在查过不少资料后得到一个结论:唯一的方法通过X-Modem来恢复.我的

C# web api 返回类型设置为json的两种方法

每次写博客,第一句话都是这样的:程序员很苦逼,除了会写程序,还得会写博客!当然,希望将来的一天,某位老板看到此博客,给你的程序员职工加点薪资吧!因为程序员的世界除了苦逼就是沉默.我眼中的程序员大多都不爱说话,默默承受着编程的巨大压力,除了技术上的交流外,他们不愿意也不擅长和别人交流,更不乐意任何人走进他们的内心! 悟出来一个道理,在这儿分享给大家:学历代表你的过去,能力代表你的现在,学习代表你的将来.我们都知道计算机技术发展日新月异,速度惊人的快,你我稍不留神,就会被慢慢淘汰!因此:每日不间断的

华硕笔记本怎么设置u盘启动(两种方法)

华硕笔记本怎么设置u盘启动(两种方法) 华硕笔记本怎么设置u盘启动.我想用U盘安装系统但是 我不知道如何设置U盘启动,那么该如何设置呢?下面和大家分享一下我的经验,希望能够帮到大家.如果你的系统是预装win8的系统,那么如果你要想安装win7系统,需要你在BIOS中有相关的设置,你可以看我之前的经验,建议在百度上搜索---华硕笔记本预装win8改win7如何在bios中设置 工具/原料 华硕笔记本 U盘启动 方法一.bios设置开机启动 1 开机长按F2键,进入bios. 2 我们左右移动找到"

C# web api返回类型设置为json的两种方法

web api写api接口时默认返回的是把你的对象序列化后以XML形式返回,那么怎样才能让其返回为json呢,下面就介绍两种方法: 方法一:(改配置法) 找到Global.asax文件,在Application_Start()方法中添加一句: 代码如下: GlobalConfiguration.Configuration.Formatters.XmlFormatter.SupportedMediaTypes.Clear(); 修改后: 代码如下: protected void Applicati