From 7568a626ff9229e6b47fe96c7e463dba8f76bb11 Mon Sep 17 00:00:00 2001 From: naah69 Date: Thu, 21 Mar 2024 12:25:48 +0800 Subject: [PATCH] add redisson graceful shutdown in quarkus Signed-off-by: naah69 --- .../client/runtime/RedissonClientProducer.java | 14 +++++++++++++- .../client/runtime/RedissonClientProducer.java | 14 +++++++++++++- .../redisson-quarkus-30/runtime/pom.xml | 5 +++++ .../client/runtime/RedissonClientProducer.java | 14 +++++++++++++- 4 files changed, 44 insertions(+), 3 deletions(-) diff --git a/redisson-quarkus/redisson-quarkus-16/runtime/src/main/java/io/quarkus/redisson/client/runtime/RedissonClientProducer.java b/redisson-quarkus/redisson-quarkus-16/runtime/src/main/java/io/quarkus/redisson/client/runtime/RedissonClientProducer.java index c71e46514..f04ff5738 100644 --- a/redisson-quarkus/redisson-quarkus-16/runtime/src/main/java/io/quarkus/redisson/client/runtime/RedissonClientProducer.java +++ b/redisson-quarkus/redisson-quarkus-16/runtime/src/main/java/io/quarkus/redisson/client/runtime/RedissonClientProducer.java @@ -17,6 +17,7 @@ package io.quarkus.redisson.client.runtime; import com.fasterxml.jackson.databind.MapperFeature; import io.quarkus.arc.DefaultBean; +import io.quarkus.runtime.shutdown.ShutdownConfig; import org.eclipse.microprofile.config.ConfigProvider; import org.redisson.Redisson; import org.redisson.api.RedissonClient; @@ -27,11 +28,14 @@ import org.redisson.config.PropertiesConvertor; import javax.annotation.PreDestroy; import javax.enterprise.context.ApplicationScoped; import javax.enterprise.inject.Produces; +import javax.inject.Inject; import javax.inject.Singleton; import java.io.IOException; import java.io.InputStream; import java.nio.charset.StandardCharsets; +import java.time.Duration; import java.util.*; +import java.util.concurrent.TimeUnit; import java.util.stream.Collectors; import java.util.stream.Stream; import java.util.stream.StreamSupport; @@ -46,6 +50,9 @@ public class RedissonClientProducer { private RedissonClient redisson; + @Inject + public ShutdownConfig shutdownConfig; + @Produces @Singleton @DefaultBean @@ -87,7 +94,12 @@ public class RedissonClientProducer { @PreDestroy public void close() { if (redisson != null) { - redisson.shutdown(); + if (shutdownConfig.isShutdownTimeoutSet()){ + Duration grace = shutdownConfig.timeout.get(); + redisson.shutdown(grace.toMillis(),grace.toMillis()*2, TimeUnit.MILLISECONDS); + }else{ + redisson.shutdown(); + } } } diff --git a/redisson-quarkus/redisson-quarkus-20/runtime/src/main/java/io/quarkus/redisson/client/runtime/RedissonClientProducer.java b/redisson-quarkus/redisson-quarkus-20/runtime/src/main/java/io/quarkus/redisson/client/runtime/RedissonClientProducer.java index fb140e1d7..3b83e1efc 100644 --- a/redisson-quarkus/redisson-quarkus-20/runtime/src/main/java/io/quarkus/redisson/client/runtime/RedissonClientProducer.java +++ b/redisson-quarkus/redisson-quarkus-20/runtime/src/main/java/io/quarkus/redisson/client/runtime/RedissonClientProducer.java @@ -17,6 +17,7 @@ package io.quarkus.redisson.client.runtime; import com.fasterxml.jackson.databind.MapperFeature; import io.quarkus.arc.DefaultBean; +import io.quarkus.runtime.shutdown.ShutdownConfig; import org.eclipse.microprofile.config.ConfigProvider; import org.redisson.Redisson; import org.redisson.api.RedissonClient; @@ -27,11 +28,14 @@ import org.redisson.config.PropertiesConvertor; import javax.annotation.PreDestroy; import javax.enterprise.context.ApplicationScoped; import javax.enterprise.inject.Produces; +import javax.inject.Inject; import javax.inject.Singleton; import java.io.IOException; import java.io.InputStream; import java.nio.charset.StandardCharsets; +import java.time.Duration; import java.util.Optional; +import java.util.concurrent.TimeUnit; import java.util.stream.Collectors; import java.util.stream.Stream; import java.util.stream.StreamSupport; @@ -46,6 +50,9 @@ public class RedissonClientProducer { private RedissonClient redisson; + @Inject + public ShutdownConfig shutdownConfig; + @Produces @Singleton @DefaultBean @@ -83,7 +90,12 @@ public class RedissonClientProducer { @PreDestroy public void close() { if (redisson != null) { - redisson.shutdown(); + if (shutdownConfig.isShutdownTimeoutSet()){ + Duration grace = shutdownConfig.timeout.get(); + redisson.shutdown(grace.toMillis(),grace.toMillis()*2, TimeUnit.MILLISECONDS); + }else{ + redisson.shutdown(); + } } } diff --git a/redisson-quarkus/redisson-quarkus-30/runtime/pom.xml b/redisson-quarkus/redisson-quarkus-30/runtime/pom.xml index 29c8c5956..f2daf4e4b 100644 --- a/redisson-quarkus/redisson-quarkus-30/runtime/pom.xml +++ b/redisson-quarkus/redisson-quarkus-30/runtime/pom.xml @@ -50,6 +50,11 @@ jakarta.enterprise.cdi-api + + jakarta.inject + jakarta.inject-api + + org.graalvm.nativeimage svm diff --git a/redisson-quarkus/redisson-quarkus-30/runtime/src/main/java/io/quarkus/redisson/client/runtime/RedissonClientProducer.java b/redisson-quarkus/redisson-quarkus-30/runtime/src/main/java/io/quarkus/redisson/client/runtime/RedissonClientProducer.java index 1bdc721f4..b4b38b8c4 100644 --- a/redisson-quarkus/redisson-quarkus-30/runtime/src/main/java/io/quarkus/redisson/client/runtime/RedissonClientProducer.java +++ b/redisson-quarkus/redisson-quarkus-30/runtime/src/main/java/io/quarkus/redisson/client/runtime/RedissonClientProducer.java @@ -17,6 +17,8 @@ package io.quarkus.redisson.client.runtime; import com.fasterxml.jackson.databind.MapperFeature; import io.quarkus.arc.DefaultBean; +import io.quarkus.runtime.shutdown.ShutdownConfig; +import jakarta.inject.Inject; import org.eclipse.microprofile.config.ConfigProvider; import org.redisson.Redisson; import org.redisson.api.RedissonClient; @@ -31,7 +33,9 @@ import jakarta.inject.Singleton; import java.io.IOException; import java.io.InputStream; import java.nio.charset.StandardCharsets; +import java.time.Duration; import java.util.Optional; +import java.util.concurrent.TimeUnit; import java.util.stream.Collectors; import java.util.stream.Stream; import java.util.stream.StreamSupport; @@ -46,6 +50,9 @@ public class RedissonClientProducer { private RedissonClient redisson; + @Inject + public ShutdownConfig shutdownConfig; + @Produces @Singleton @DefaultBean @@ -83,7 +90,12 @@ public class RedissonClientProducer { @PreDestroy public void close() { if (redisson != null) { - redisson.shutdown(); + if (shutdownConfig.isShutdownTimeoutSet()){ + Duration grace = shutdownConfig.timeout.get(); + redisson.shutdown(grace.toMillis(),grace.toMillis()*2, TimeUnit.MILLISECONDS); + }else{ + redisson.shutdown(); + } } }