From 685a6116d101705800ce78fa0488973d00107849 Mon Sep 17 00:00:00 2001 From: Tadaya Tsuyukubo Date: Mon, 27 Jul 2020 15:32:18 -0700 Subject: [PATCH 1/2] Use milliseconds when configuring awaitTerminationPeriod Prior to this change, TaskExecutorBuilder used seconds as its precision to map the awaitTerminationPeriod value. This caused a loss of millisecond information in the period. This commit fixes the loss by converting the period to millisecond and using setAwaitTerminationMillis to configure the executor. See gh-22604 --- .../org/springframework/boot/task/TaskExecutorBuilder.java | 2 +- .../springframework/boot/task/TaskExecutorBuilderTests.java | 4 ++++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/task/TaskExecutorBuilder.java b/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/task/TaskExecutorBuilder.java index 7a5313a6607..960d57ffa78 100644 --- a/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/task/TaskExecutorBuilder.java +++ b/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/task/TaskExecutorBuilder.java @@ -308,7 +308,7 @@ public class TaskExecutorBuilder { map.from(this.keepAlive).asInt(Duration::getSeconds).to(taskExecutor::setKeepAliveSeconds); map.from(this.allowCoreThreadTimeOut).to(taskExecutor::setAllowCoreThreadTimeOut); map.from(this.awaitTermination).to(taskExecutor::setWaitForTasksToCompleteOnShutdown); - map.from(this.awaitTerminationPeriod).asInt(Duration::getSeconds).to(taskExecutor::setAwaitTerminationSeconds); + map.from(this.awaitTerminationPeriod).as(Duration::toMillis).to(taskExecutor::setAwaitTerminationMillis); map.from(this.threadNamePrefix).whenHasText().to(taskExecutor::setThreadNamePrefix); map.from(this.taskDecorator).to(taskExecutor::setTaskDecorator); if (!CollectionUtils.isEmpty(this.customizers)) { diff --git a/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/task/TaskExecutorBuilderTests.java b/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/task/TaskExecutorBuilderTests.java index 763d6af607a..cb0d9caf55b 100644 --- a/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/task/TaskExecutorBuilderTests.java +++ b/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/task/TaskExecutorBuilderTests.java @@ -65,6 +65,10 @@ class TaskExecutorBuilderTests { Duration period = Duration.ofMinutes(1); ThreadPoolTaskExecutor executor = this.builder.awaitTerminationPeriod(period).build(); assertThat(executor).hasFieldOrPropertyWithValue("awaitTerminationMillis", period.toMillis()); + + period = Duration.ofMillis(50); + executor = this.builder.awaitTerminationPeriod(period).build(); + assertThat(executor).hasFieldOrPropertyWithValue("awaitTerminationMillis", period.toMillis()); } @Test From ea5284ca918b62dcab70ef38710f060890c0960f Mon Sep 17 00:00:00 2001 From: Andy Wilkinson Date: Tue, 28 Jul 2020 09:03:57 +0100 Subject: [PATCH 2/2] Polish "Use milliseconds when configuring awaitTerminationPeriod" See gh-22604 --- .../springframework/boot/task/TaskExecutorBuilder.java | 2 +- .../boot/task/TaskExecutorBuilderTests.java | 8 ++------ 2 files changed, 3 insertions(+), 7 deletions(-) diff --git a/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/task/TaskExecutorBuilder.java b/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/task/TaskExecutorBuilder.java index 960d57ffa78..94996b1a124 100644 --- a/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/task/TaskExecutorBuilder.java +++ b/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/task/TaskExecutorBuilder.java @@ -1,5 +1,5 @@ /* - * Copyright 2012-2019 the original author or authors. + * Copyright 2012-2020 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/task/TaskExecutorBuilderTests.java b/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/task/TaskExecutorBuilderTests.java index cb0d9caf55b..9a258243499 100644 --- a/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/task/TaskExecutorBuilderTests.java +++ b/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/task/TaskExecutorBuilderTests.java @@ -61,14 +61,10 @@ class TaskExecutorBuilderTests { } @Test - void awaitTerminationPeriodShouldApply() { - Duration period = Duration.ofMinutes(1); + void awaitTerminationPeriodShouldApplyWithMillisecondPrecision() { + Duration period = Duration.ofMillis(50); ThreadPoolTaskExecutor executor = this.builder.awaitTerminationPeriod(period).build(); assertThat(executor).hasFieldOrPropertyWithValue("awaitTerminationMillis", period.toMillis()); - - period = Duration.ofMillis(50); - executor = this.builder.awaitTerminationPeriod(period).build(); - assertThat(executor).hasFieldOrPropertyWithValue("awaitTerminationMillis", period.toMillis()); } @Test