SpringBoot配置文件(热部署、Properties和YAML、自定义属性对象集合)

1、热部署

  修改完代码,想让SpringBoot自动加载我们修改的内容(pom.xml添加依赖)

<!-- spring-boot的开发工具,可以在修改代码时,不需要手动重启服务器 -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-devtools</artifactId>
</dependency>

2、 配置文件:Properties和YAML

  SpringBoot是基于约定的,所以很多配置都有默认值,但如果想使用自己的配置替换默认配置的话,

就可以使用application.properties或者application.yml/application.yaml(官方推荐使用的格式)进行配置。

  SpringBoot默认会从Resources目录下加载application.properties或application.yml(application.yaml)文件

Application属性文件:按优先级排序,位置高的将覆盖位置低的

# tomcat 端口号
server.port=18081
# 配置项目所在的根目录
server.servlet.context-path=/springboot-demo02

yml配置文件

简介:

  YML文件格式是YAML (YAML Aint Markup Language)编写的文件格式,YAML是一种直观的能够被电脑识别的的数据数据序列化格式,并且容易被人类阅读,容易和脚本语言交互的,可以被支持YAML库的不同的编程语言程序导入,比如: C/C++, Ruby, Python, Java, Perl, C#, PHP等。YML文件是以数据为核心的,比传统的xml方式更加简洁

server:
  port: 8899

冒号(:)与value之间必须有一个空格,另起一行时尽量不要用tab,推荐使用空格空行

properties文件与yml文件之间的区别:

  • properties文件中,配置属性的方式是key=value的方式
  • yml文件中,配置属性的方式是: key: value

application.properties的配置方式:

server.port=8999

yml文件的配置方式:

server:
  port: 8899

  将yml与properties对比之后发现,yml最大的好处在于其拥有天然的树状结构,所以着手尝试将properties文件更改为yml文件,发现了几个要注意的地方:

  • 1、在properties文件中是以”.”进行分割的, 在yml中是用”:”进行分割; 
  • 2、yml的数据格式和json的格式很像,都是K-V格式,并且通过”:”进行赋值; 
  • 3、在yml中缩进一定不能使用TAB,否则会报很奇怪的错误;(缩进特么只能用空格!!!!) 
  • 4、每个k的冒号后面一定都要加一个空格; 

在线的properties文件与yml文件的转换:https://www.toyaml.com/index.html

yml自定义属性:

application.yml

user: 
   id: 1001
   username: laosan

controller.java

@Controller
public class controller {
    @Value("${user.id}")
    private Integer id;
    @Value("${user.username}")
    private String usernmae;

配置随机值

  通过${random}来产生int值,long值或者String字符串,来支持属性的随机值.

yml中

#随机字符串
suke.secret=${random.value}
#随机int
suke.number=${random.int}
#随机long
suke.bignumber=${random.long}
#10以内的随机数
suke.number.less.than.ten=${random.int(10)}
#12-65的随机数
suke.number.in.range=${random.int[12,65]}

读取使用注解:@Value( "${suke.secret}")

属性占位符

  当application.properties里的值被使用时,它们会被存在的Environment过滤,所以你能够引用先前定义的值(比如,系统属性)

suke.name=www.suke.com
suke.desc=${suke.name} is a domain name

最后suke.desc的值是: www.suke.com is a domin name

配置绑定对象,数组

user.java实体类:

@Data
@ToString
@Component
@ConfigurationProperties(prefix = "user")//绑定配置类中的user属性
public class User {
    private Integer id;
    private String username;
    private Integer age;
    private Date nowtime = new Date();
    private String random;
    
    private List<Integer> list = new ArrayList<>();
    private List<User> users = new ArrayList<>();
}

如果@ConfigurationProperties(prefix = "user") 报警告

//解决这个警告,我们只需要配一个依赖,点击提示自动生成
<dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-configuration-processor</artifactId>
   <optional>true</optional>
</dependency>

application.yml配置文件

server:
 port: 8899

spring:
  jackson:
    time-zone: Asia/Shanghai  //时区时间
    date-format: yyyy-MM-dd HH:mm:ss  //显示日期格式
 
  #json对属性值为null 忽略
    default-property-inclusion: NON_NULL
user:
  id: 1002
  username: zhangsan
  age: 18
  random: ${random.value} //随机生成一个String随机数
  list:
    - 123 //集合中的第一个值
    - 234
    - 345
  users:
    - id: 1003 //对象集合中的第一个对象
      username: lisi
      age: 28
      random: ${random.value}
    - id: 1004
      username: wangwu
      age: 38
      random: ${random.value}

测试类:

    @Autowired
    private User user;
    
    @RequestMapping("hello")
    @ResponseBody
    public User helloTest() {
        System.out.println(user);
        return user;
    }

自定义配置文件@propertySources

  application.properties文件中,但是在一些场景下,比如某个配置项比较多时,为了方便区分,我们会分开存放

可使用@propertySources设置数组,引入多个文件.

原文地址:https://www.cnblogs.com/64Byte/p/13234380.html