Spring Boot 的Properties 配置

Properties 配置

所放位置

Spring Boot项目中的application.properties配置文件一共可以出现在如下4个位置(后面数字代表优先级)

  • 项目根目录下的config 文件夹中。1
  • 项目根目录下。2
  • classpath 下的config文件夹中。(classpath是resources文件下,是放的静态资源) 3
  • classpath 下。4

当使用了yaml文件时优先级是一样的

类型安全配置属性

无论是 Properties 配置还是 YAML 配置,最终都会被加载到spring Environment(环境)中。Spring 提供了@Value注解以及EnvironmentAware接口来将Spring Environment中的数据注入到属性上,SpringBoot对此进一步提出了类型安全配置属性(Type-safe ConfigurationProperties这样即使在数据量非常庞大的情况下,也可以更加方便地将配置文件中的数据注入Bean中。考虑在application.properties 中添加如下一段配置:

user.name=张三
user.gender=男
user.age=30

将这一段配置数据注入如 Bean 中:

@Data
@AllArgsConstructor
@NoArgsConstructor
@Component
@ToString
@ConfigurationProperties(prefix="user")
public class User{
    private String name;
    private String gender;
    private String age;
}

代码解释

  • @ConfigurationProperties中的prefix属性描述了要加载的配置文件的前缀。

  • 如果配置文件是一个YAML文件,那么可以将数据注入一个集合中。

  • Spring Boot 采用了一种宽松的规则来进行属性绑定,如果Bean中的属性名为authorName,那么配置文件中的属性可以是book.author_name、book.author-name、book.authorName或者book.AUTHORNAME。

最后 UserController 行简单测试

@RestController
public class UserController{
    @Autowired
    User user;
    @GetMapping("/one")
    public String User(){
        return User.toString();
    }
}

YAML 配置

常规配置

YAML JSON 的超集,简洁而强大,是 种专门用来书写配置文件的语言,可以替代application.properties 。在创建 Spring Boot 项目时,引入的 pring-boot-starter-web 依赖间接地引入了 snakeyaml 依赖, snakeyaml 会实现对 YAML 配置的解析。 YAML 的使用非常简单,利用缩进来表示层级关系,并且大小写敏感。在 Spring Boot 目中使用 YAML 只需要在 resources 目录下创建 application yml 文件即可,然后向 application. yml 中添加如下配置:

server:
 port: 80 
 servlet:
  context-path: /chapter02 
 tomcat:
  uri-encoding: utf-8

这一段配置等效于 application. properties 中的如下配置:

server.port=80 
server.servlet.context-path=/chapter02 
server.tomcat.uri-encoding=utf-8

复杂配置

YAML 不仅可 配置常规属性,也 配置复杂属性 例如下面一组配置:

user: 
 name: 张三
 age: 18

像Properties 配置文件一样,这一段配置也可以注入到Bean中,代码如下:

@Data
@AllArgsConstructor
@NoArgsConstructor
@Component
@ToString
@ConfigurationProperties(prefix="user")
public class User{
    private String name;
    private String age;
}

YAML 还支持列表配置 ,例如下面一组

favorites: 
- 足球
- 徒步
- Coding

这一组配置可注入如Bean中:

@Data
@AllArgsConstructor
@NoArgsConstructor
@Component
@ToString
@ConfigurationProperties(prefix="user")
public class User{
    private String name;
    private String age;
    private	List<String> favorites;
}

YAML 还支持更复杂的配置,即集合中也可以是一个对象,例如下面一组配置:

my: 
 user:
  name: 张三
  age: 18
  favorites: 
   - 足球
   - 徒步
   - Coding
  name: 李四
  age: 30
  favorites: 
   - 游戏
   - 泡妞
   - 鬼火少年

这组配置在集合中放的是一个对象,因 注入如下集合中:

@Data
@AllArgsConstructor
@NoArgsConstructor
@Component
@ToString
@ConfigurationProperties(prefix="my")
public class User{
    private List<User> user;
}

在Spring Boot 中使用 YAML 虽然方便, 但是 YAML 有一些缺陷 ,例如无法使用@ProprtySource 注解加载 YAML 文件,如项目中有这种需求还是需要使用 Properties 格式的配置文件。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值