SpringBoot 读取配置的几种方式

简介: 本文介绍了SpringBoot中读取配置文件的几种方法,包括使用`@Value`、`Environment`和`@ConfigurationProperties`注解,以及如何通过`@PropertySource`指定配置文件位置和编码。还讲解了如何自定义工厂类以支持读取`.yaml`文件。

SpringBoot中读取项目配置的主要分为两大类,第一种就是直接将配置读取到指定的一个字段上,第二种就是将配置读取到配置类上,然后其他使用到配置的组件装配配置类就可以了

classpath

在介绍SpringBoot读取配置之前,首先有必要了解一下classpath,因为程序默认都是加载classpath目录下面的配置文件

SpringBoot中的classpath其实就是class的路径,也就是springBoot项目编译之后生产的target/classes文件夹,这个文件夹就是对src/main/javasrc/main/resource编译的结果,所以有时候提到classpath也会说是这两个目录

SpringBoot加载配置的顺序

SpringBoot默认加载配置的顺序如下所示:

arduino

代码解读

复制代码

–file:./config/  // 项目根目录下面的 config 文件夹
–file:./         // 项目根目录下面的配置文件
–classpath:/config/
–classpath:/

当然也可以通过注解去指定配置文件的路径,下面就详细介绍一下程序加载配置的几种方式

SpringBoot加载配置

@Value注解

配置文件:application.properties

ini

代码解读

复制代码

```
demo.name=Name
demo.age=18
```

读取文件代码:

kotlin

代码解读

复制代码

```
@RestController
public class GatewayController {
 
    @Value("${demo.name}")  //此处直接读取 application.properties 文件中的 key 就可以了
    private String name;
 
    @Value("${demo.age}")
    private String age;
 
    @RequestMapping(value = "/gateway")
    public String gateway() {
        return "get properties value by ''@Value'' :" +
                " name=" + name +
                " , age=" + age;
    }
}
```

Enviroment读取配置

配置文件为:application.properties

ini

代码解读

复制代码

```
demo.sex=男
demo.address=山东
```

读取配置文件的代码

kotlin

代码解读

复制代码

```
@RestController
public class GatewayController {
    @Autowired
    private Environment environment;
 
    @RequestMapping(value = "/gateway")
    public String gateway() {
        return "get properties value by ''@Value'' :" +
                // 使用 Environment 读取
                " , sex=" + environment.getProperty("demo.sex") +
                " , address=" + environment.getProperty("demo.address");
    }
}
```

@ConfigurationProperties注解

使用该注解就可以直接将配置文件读取到一个类当中,然后其他组件使用该配置则装配这个类就好了,下面是具体的代码示例:

配置文件为:config.properties,配置的内容如下:

ini

代码解读

复制代码

```
demo.phone=10086
demo.wife=self
```

java代码读取配置:

less

代码解读

复制代码

```
@Component
@ConfigurationProperties(prefix = "demo")
@Data
public class ConfigBeanProp {
 
    private String phone;
 
    private String wife;
 
}
```

这样就可以在其他组件中装配此类获取相应的配置了;@ConfigurationProperties指定了配置中的前缀,这样字段就可以与后面的内容进行匹配了

@ConfigurationProperties默认是从application.properties中加载配置的;它也可以与注解@PropertySource一起使用来指定要加载的配置的位置

less

代码解读

复制代码

```
@ConfigurationProperties
@Component
@Data
@PropertySource(value = "config.properties",encoding = "utf-8")
public class Config {
    
    private String name;

    private int age;
}
```

使用@PropertySource注解有以下几点需要注意:

  1. @PropertySource默认读取的文件为classpath:application.properties,如果需要更改,则可以通过value指定
  2. @PropertySource默认读取的编码为ios8859-1,所以如果要指定编码可以通过encoding="utf-8"指定
  3. @PropertySource默认读取的文件为.properties,如果要读取.yaml文件则需要重新DefaultPropertySourceFactory,让其加载yaml文件,实现代码如下:

scala

  1. 代码解读
  2. 复制代码
public class YmlConfigFactory extends DefaultPropertySourceFactory {
    @Override
    public PropertySource<?> createPropertySource(String name, EncodedResource resource) throws IOException {
        String sourceName = name != null ? name : resource.getResource().getFilename();
        if (!resource.getResource().exists()) {
            return new PropertiesPropertySource(sourceName, new Properties());
        } else if (sourceName.endsWith(".yml") || sourceName.endsWith(".yaml")) {
            Properties propertiesFromYaml = loadYml(resource);
            return new PropertiesPropertySource(sourceName, propertiesFromYaml);
        } else {
            return super.createPropertySource(name, resource);
        }
    }

    private Properties loadYml(EncodedResource resource) throws IOException {
        YamlPropertiesFactoryBean factory = new YamlPropertiesFactoryBean();
        factory.setResources(resource.getResource());
        factory.afterPropertiesSet();
        return factory.getObject();
    }
 }
  1. 添加注解为:

python

  1. 代码解读
  2. 复制代码
@PropertySource(value = {"classpath:config.properties"},encoding="gbk",factory = YmlConfigFactory.class)


转载来源:https://juejin.cn/post/7139772982552952846

相关文章
|
Java Maven Spring
SpringBoot-读取配置文件(映射法)
本文是关于Spring Boot框架下读取配置文件的指南。该指南介绍了如何通过注解和属性文件来加载和访问应用程序的配置信息。Spring Boot提供了简单而强大的功能,可以轻松地加载各种类型的配置文件,并将其映射到Java对象中。通过使用@ConfigurationProperties注解,或者使用@Value注解从配置文件中读取属性值。
1007 0
|
Java Spring 容器
SpringBoot读取配置文件的6种方式,包括:通过Environment、@PropertySource、@ConfigurationProperties、@Value读取配置信息
SpringBoot读取配置文件的6种方式,包括:通过Environment、@PropertySource、@ConfigurationProperties、@Value读取配置信息
3512 3
|
前端开发 Cloud Native Java
Java||Springboot读取本地目录的文件和文件结构,读取服务器文档目录数据供前端渲染的API实现
博客不应该只有代码和解决方案,重点应该在于给出解决方案的同时分享思维模式,只有思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来以备不时之需,有疑问和错误欢迎在评论区指出~
Java||Springboot读取本地目录的文件和文件结构,读取服务器文档目录数据供前端渲染的API实现
|
Java Spring
SpringBoot接收参数的方式
本文介绍了Java Spring Boot中处理GET请求的多种方式。可以使用方法参数直接接收,或者通过`@RequestParam`注解指定必传参数。此外,可以用实体类接收多个相关参数,但不能同时使用`@RequestParam`。还可以通过`HttpServletRequest`对象获取参数,或利用`@PathVariable`接收路径变量。对于数组和集合参数,需注意使用`@RequestParam`注解。
1722 1
|
Java 数据库连接 数据库
微服务——SpringBoot使用归纳——Spring Boot集成MyBatis——MyBatis 介绍和配置
本文介绍了Spring Boot集成MyBatis的方法,重点讲解基于注解的方式。首先简述MyBatis作为持久层框架的特点,接着说明集成时的依赖导入,包括`mybatis-spring-boot-starter`和MySQL连接器。随后详细展示了`properties.yml`配置文件的内容,涵盖数据库连接、驼峰命名规范及Mapper文件路径等关键设置,帮助开发者快速上手Spring Boot与MyBatis的整合开发。
1938 0
|
存储 安全 Java
Spring Boot读取配置文件
Spring Boot读取配置文件
|
Java 测试技术 Maven
SpringBoot 实战:加载和读取资源文件
Resource接口抽象出一种更底层的方式管理资源,可以实现通过统一的方式处理各类文件资源。下面是几种获取资源实例的方法。
1454 0
SpringBoot 实战:加载和读取资源文件
|
前端开发 JavaScript Java
Springboot静态资源访问、上传、回显和下载
Springboot静态资源访问、上传、回显和下载
2215 0
Springboot静态资源访问、上传、回显和下载
|
Java Spring
springboot项目读取 resources 目录下的文件的9种方式(总结)
springboot项目读取 resources 目录下的文件的9种方式(总结)
8738 1

热门文章

最新文章