最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

springboot之Duration(java.time.Duration)在yml properties中的配置方式

 更新時(shí)間:2023年12月18日 15:18:43   作者:hank009  
這篇文章主要介紹了springboot之Duration(java.time.Duration)在yml properties中的配置方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

在新版本的spring boot中的redis的時(shí)間相關(guān)的配置使用了 java.time.Duration類

在配置時(shí)間時(shí)發(fā)現(xiàn)與老版本不同,就研究了下,發(fā)現(xiàn)使用了新的方式配置時(shí)間,這里記錄下

從源碼中可以看出 時(shí)間配置應(yīng)該諸如: 1s 1.5s 0s 0.001S  1h 2d 1m 1M -PT0.001S P1DT2H15M(1天+2小時(shí)+15分鐘) 形式

內(nèi)部源碼詳解

1. 我們可通過(guò)源碼找到springboot的轉(zhuǎn)換器StringToDurationConverter,其中轉(zhuǎn)換的核心代碼使用了DurationStyle定義了時(shí)間格式:

	private Duration convert(String source, DurationStyle style, ChronoUnit unit) {
		style = (style != null) ? style : DurationStyle.detect(source);
		return style.parse(source, unit);
	}

2. 我們?cè)?strong>DurationStyle中可以看到有兩種格式(簡(jiǎn)單格式和ISO-8601格式)的支持:

	/**
	 * Simple formatting, for example '1s'.(簡(jiǎn)單格式)
	 */
	SIMPLE("^([+-]?\\d+)([a-zA-Z]{0,2})$") {
 
		......
	},
 
	/**
	 * ISO-8601 formatting. (ISO-8601格式)
	 */
	ISO8601("^[+-]?[pP].*$") {
 
		......
	};

簡(jiǎn)單格式

DurationStyle中簡(jiǎn)單格式支持的單位定義在下方的Unit枚舉中:

  • ns: 納秒 
  • us: 微秒 
  • ms: 毫秒 
  • s: 秒
  • m: 分鐘 
  • h: 小時(shí) 
  • d: 天; (都不區(qū)分大小寫(xiě))
	/**
	 * Units that we support.
	 */
	enum Unit {
 
		/**
		 * Nanoseconds.
		 */
		NANOS(ChronoUnit.NANOS, "ns", Duration::toNanos),
 
		/**
		 * Microseconds.
		 */
		MICROS(ChronoUnit.MICROS, "us", (duration) -> duration.toNanos() / 1000L),
 
		/**
		 * Milliseconds.
		 */
		MILLIS(ChronoUnit.MILLIS, "ms", Duration::toMillis),
 
		/**
		 * Seconds.
		 */
		SECONDS(ChronoUnit.SECONDS, "s", Duration::getSeconds),
 
		/**
		 * Minutes.
		 */
		MINUTES(ChronoUnit.MINUTES, "m", Duration::toMinutes),
 
		/**
		 * Hours.
		 */
		HOURS(ChronoUnit.HOURS, "h", Duration::toHours),
 
		/**
		 * Days.
		 */
		DAYS(ChronoUnit.DAYS, "d", Duration::toDays);

ISO-8601格式

格式說(shuō)明

采用ISO-8601時(shí)間格式。格式為:PnYnMnDTnHnMnS   (n為個(gè)數(shù))

例如:P1Y2M3DT4H5M6.7S = 1年2個(gè)月3天4小時(shí)5分鐘6.7秒

P:開(kāi)始標(biāo)記

  • 1Y:1年 (Duration中沒(méi)有)
  • 2M:2個(gè)月 (Duration中沒(méi)有)
  • 3D:3天

T:日期和時(shí)間的分割標(biāo)記

  • 4H:4個(gè)小時(shí)
  • 5M:5分鐘
  • 6.7S:6.7秒

注意: 這里的Duration只有D,H,M,S沒(méi)有Y,M

詳解

1."P", "D", "H", "M" 和 "S"可以是大寫(xiě)或者小寫(xiě)(建議大寫(xiě))

2.可以用“-”表示負(fù)數(shù)

示例:

          "PT20.345S" -- parses as "20.345 seconds"
          "PT15M"     -- parses as "15 minutes" (where a minute is 60 seconds)
          "PT10H"     -- parses as "10 hours" (where an hour is 3600 seconds)
          "P2D"       -- parses as "2 days" (where a day is 24 hours or 86400 seconds)
          "P2DT3H4M"  -- parses as "2 days, 3 hours and 4 minutes"
          "PT-6H3M"    -- parses as "-6 hours and +3 minutes"
          "-PT6H3M"    -- parses as "-6 hours and -3 minutes"
          "-PT-6H+3M"  -- parses as "+6 hours and -3 minutes"

源碼介紹

ISO-8601格式在DurationStyle中直接是使用Duration.parse方法進(jìn)行處理,Duration.parse方法的

定義如下:

/**
     * Obtains a {@code Duration} from a text string such as {@code PnDTnHnMn.nS}.
     * <p>
     * This will parse a textual representation of a duration, including the
     * string produced by {@code toString()}. The formats accepted are based
     * on the ISO-8601 duration format {@code PnDTnHnMn.nS} with days
     * considered to be exactly 24 hours.
     * <p>
     * The string starts with an optional sign, denoted by the ASCII negative
     * or positive symbol. If negative, the whole period is negated.
     * The ASCII letter "P" is next in upper or lower case.
     * There are then four sections, each consisting of a number and a suffix.
     * The sections have suffixes in ASCII of "D", "H", "M" and "S" for
     * days, hours, minutes and seconds, accepted in upper or lower case.
     * The suffixes must occur in order. The ASCII letter "T" must occur before
     * the first occurrence, if any, of an hour, minute or second section.
     * At least one of the four sections must be present, and if "T" is present
     * there must be at least one section after the "T".
     * The number part of each section must consist of one or more ASCII digits.
     * The number may be prefixed by the ASCII negative or positive symbol.
     * The number of days, hours and minutes must parse to an {@code long}.
     * The number of seconds must parse to an {@code long} with optional fraction.
     * The decimal point may be either a dot or a comma.
     * The fractional part may have from zero to 9 digits.
     * <p>
     * The leading plus/minus sign, and negative values for other units are
     * not part of the ISO-8601 standard.
     * <p>
     * Examples:
     * <pre>
     *    "PT20.345S" -- parses as "20.345 seconds"
     *    "PT15M"     -- parses as "15 minutes" (where a minute is 60 seconds)
     *    "PT10H"     -- parses as "10 hours" (where an hour is 3600 seconds)
     *    "P2D"       -- parses as "2 days" (where a day is 24 hours or 86400 seconds)
     *    "P2DT3H4M"  -- parses as "2 days, 3 hours and 4 minutes"
     *    "P-6H3M"    -- parses as "-6 hours and +3 minutes"
     *    "-P6H3M"    -- parses as "-6 hours and -3 minutes"
     *    "-P-6H+3M"  -- parses as "+6 hours and -3 minutes"
     * </pre>
     *
     * @param text  the text to parse, not null
     * @return the parsed duration, not null
     * @throws DateTimeParseException if the text cannot be parsed to a duration
     */
    public static Duration parse(CharSequence text) {
        Objects.requireNonNull(text, "text");
        Matcher matcher = PATTERN.matcher(text);
        if (matcher.matches()) {
            // check for letter T but no time sections
            if ("T".equals(matcher.group(3)) == false) {
                boolean negate = "-".equals(matcher.group(1));
                String dayMatch = matcher.group(2);
                String hourMatch = matcher.group(4);
                String minuteMatch = matcher.group(5);
                String secondMatch = matcher.group(6);
                String fractionMatch = matcher.group(7);
                if (dayMatch != null || hourMatch != null || minuteMatch != null || secondMatch != null) {
                    long daysAsSecs = parseNumber(text, dayMatch, SECONDS_PER_DAY, "days");
                    long hoursAsSecs = parseNumber(text, hourMatch, SECONDS_PER_HOUR, "hours");
                    long minsAsSecs = parseNumber(text, minuteMatch, SECONDS_PER_MINUTE, "minutes");
                    long seconds = parseNumber(text, secondMatch, 1, "seconds");
                    int nanos = parseFraction(text,  fractionMatch, seconds < 0 ? -1 : 1);
                    try {
                        return create(negate, daysAsSecs, hoursAsSecs, minsAsSecs, seconds, nanos);
                    } catch (ArithmeticException ex) {
                        throw (DateTimeParseException) new DateTimeParseException("Text cannot be parsed to a Duration: overflow", text, 0).initCause(ex);
                    }
                }
            }
        }
        throw new DateTimeParseException("Text cannot be parsed to a Duration", text, 0);
    }

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • lambda表達(dá)式解決java后臺(tái)分組排序過(guò)程解析

    lambda表達(dá)式解決java后臺(tái)分組排序過(guò)程解析

    這篇文章主要介紹了lambda表達(dá)式解決java后臺(tái)分組排序過(guò)程解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-10-10
  • RocketMQ消息丟失場(chǎng)景以及解決方法

    RocketMQ消息丟失場(chǎng)景以及解決方法

    這篇文章主要給大家介紹了關(guān)于RocketMQ消息丟失場(chǎng)景以及解決方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-09-09
  • java字符串?dāng)?shù)組進(jìn)行大小排序的簡(jiǎn)單實(shí)現(xiàn)

    java字符串?dāng)?shù)組進(jìn)行大小排序的簡(jiǎn)單實(shí)現(xiàn)

    下面小編就為大家?guī)?lái)一篇java字符串?dāng)?shù)組進(jìn)行大小排序的簡(jiǎn)單實(shí)現(xiàn)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2016-09-09
  • Java之Maven工程打包jar

    Java之Maven工程打包jar

    Maven打包一般可以生成兩種包一種是可以直接運(yùn)行的包,一種是依賴包(只是編譯包)。Maven默認(rèn)打包時(shí)jar,如果需要修改其他類型,可以修改pom.xml。感興趣的同學(xué)可以參考閱讀
    2023-04-04
  • SpringMVC MVC架構(gòu)與Servlet使用詳解

    SpringMVC MVC架構(gòu)與Servlet使用詳解

    MVC設(shè)計(jì)模式一般指 MVC 框架,M(Model)指數(shù)據(jù)模型層,V(View)指視圖層,C(Controller)指控制層。使用 MVC 的目的是將 M 和 V 的實(shí)現(xiàn)代碼分離,使同一個(gè)程序可以有不同的表現(xiàn)形式。其中,View 的定義比較清晰,就是用戶界面
    2022-10-10
  • Java中替代equals,compareTo和toString的方法

    Java中替代equals,compareTo和toString的方法

    這篇文章主要介紹了Java中替代equals,compareTo和toString的方法,文中代碼十分詳細(xì),幫助大家更好的理解的學(xué)習(xí),感興趣的朋友可以了解下
    2020-06-06
  • 詳解Java 中的嵌套類與內(nèi)部類

    詳解Java 中的嵌套類與內(nèi)部類

    這篇文章主要介紹了詳解Java 中的嵌套類與內(nèi)部類的相關(guān)資料,希望通過(guò)本文大家能掌握J(rèn)ava 嵌套類與內(nèi)部類的使用方法,需要的朋友可以參考下
    2017-09-09
  • Java設(shè)計(jì)模式中的策略模式詳細(xì)解析

    Java設(shè)計(jì)模式中的策略模式詳細(xì)解析

    這篇文章主要介紹了Java設(shè)計(jì)模式中的策略模式詳細(xì)解析,所謂策略模式,指的是做某一件事時(shí)有多種選擇(即策略),且不同的策略之間相互獨(dú)立,而且無(wú)論使用哪種策略,得到的結(jié)果都是相同的,需要的朋友可以參考下
    2023-12-12
  • java生成抽樣隨機(jī)數(shù)的多種算法

    java生成抽樣隨機(jī)數(shù)的多種算法

    本文主要介紹了java生成抽樣隨機(jī)數(shù)的多種算法,主要是基于random庫(kù)函數(shù)的,有需要的可以了解一下。
    2016-10-10
  • 詳解Java中Dijkstra(迪杰斯特拉)算法的圖解與實(shí)現(xiàn)

    詳解Java中Dijkstra(迪杰斯特拉)算法的圖解與實(shí)現(xiàn)

    Dijkstra(迪杰斯特拉)算法是典型的單源最短路徑算法,用于計(jì)算一個(gè)節(jié)點(diǎn)到其他所有節(jié)點(diǎn)的最短路徑。本文將詳解該算法的圖解與實(shí)現(xiàn),需要的可以參考一下
    2022-05-05

最新評(píng)論

吉水县| 横峰县| 固安县| 浑源县| 上饶县| 肇源县| 嘉定区| 宽城| 乌海市| 锡林浩特市| 松溪县| 邳州市| 宜兰市| 甘孜县| 肥城市| 博野县| 鲁甸县| 南城县| 社会| 共和县| 全南县| 宽城| 商丘市| 元江| 云林县| 义马市| 滦南县| 新宁县| 板桥市| 五大连池市| 金湖县| 绵竹市| 太原市| 来安县| 盐津县| 盐山县| 盐城市| 江北区| 吴忠市| 望江县| 和平县|