所有分类
  • 所有分类
  • 未分类

SpringBoot–yml配置文件的时间/大小的单位转换

简介

说明

本文介绍SpringBoot的yml(properties)配置文件的时间/大小的单位转换。

概述

SpringBoot可以将yml中的配置绑定到一个Java类的字段,而且支持单位的转换。以时间为例,yml中指定为2m,则可以用Duration来接收这个字段,接收到的字段值为3分钟。

注意

本处的单位转换支持配置放到一个类中,也支持@Value等。

时间的转换

概述

Spring 使用 java.time.Duration 类代表时间大小,以下场景适用:

  1. 除非指定 @DurationUnit ,否则一个 long 代表的时间为毫秒。
  2. ISO-8601 标准格式( java.time.Duration 的实现就是参照此标准)
  3. 你也可以使用以下支持的单位(用大写也可以):
    1. ns – 纳秒
    2. us – 微秒
    3. ms – 毫秒
    4. s – 秒
    5. m – 分
    6. h – 时
    7. d – 天

示例

application.yml

custom:
  monitor:
    name: myMonitor
    interval: 3m

实体类

package com.knife.config;

import lombok.Data;

import java.time.Duration;

@Data
public class MonitorProperty {
    private String name;

    private Duration interval;
}

配置类

package com.knife.config;

import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class MonitorConfig {
    @ConfigurationProperties(prefix = "custom.monitor")
    @Bean
    public MonitorProperty monitorProperty() {
        return new MonitorProperty();
    }
}

测试类

package com.knife.controller;

import com.knife.config.MonitorProperty;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class HelloController {
    @Autowired
    private MonitorProperty monitorProperty;

    @GetMapping("/test")
    public String test() {
        return "test success";
    }
}

测试

打个断点,然后请求:

工具类实例

SpringBoot的转换时间的工具类是:DurationStyle(org.springframework.core.convert.support包)。

示例:

import org.springframework.core.convert.support.DurationStyle;
import java.time.Duration;

public class MyApp {

    public static void main(String[] args) {
        String durationString = "3m";
        Duration duration = DurationStyle.SIMPLE.parse(durationString);
        System.out.println(duration); // 输出 PT3M (3 minutes)
    }
}

大小的转换

概述

Spring 使用 DataSize 类代表数据大小,以下场景适用:

  1. long 值(默认视为 byte)
  2. 你也可以使用以下支持的单位:
    1. B
    2. KB
    3. MB
    4. GB
    5. TB

示例

修改上边示例中的两个文件:

 application.yml

custom:
  monitor:
    name: myMonitor
    interval: 3m
    size: 3KB

实体类

package com.knife.config;

import lombok.Data;

import java.time.Duration;
import org.springframework.util.unit.DataSize;

@Data
public class MonitorProperty {
    private String name;

    private Duration interval;

    private DataSize size;
}

测试

打个断点,然后请求:

工具类实例

SpringBoot的转换时间的工具类是:DataSize。

package com.knife.example.demo;

import org.springframework.util.unit.DataSize;
 
public class Demo {
 
    public static void main(String[] args) {
        DataSize dataSize = DataSize.parse("2KB");
        System.out.println(dataSize.toBytes());
    }
}

打印结果

2048
0

评论0

请先

显示验证码
没有账号?注册  忘记密码?

社交账号快速登录