From b91313d9130c99ee7375a9332de4297d8966ff1b Mon Sep 17 00:00:00 2001 From: durigon Date: Thu, 20 Sep 2018 09:41:07 +0900 Subject: [PATCH 1/2] Refactor String#replaceAll (#417) If we repeatedly call String#replaceAll, we internally repeatedly call the regular expression pattern compilation every time as following: ```java public String replaceAll(String regex, String replacement) { return Pattern.compile(regex).matcher(this).replaceAll(replacement); } ``` The modifications are to keep the compiled pattern. Therefore, compiling a relatively expensive regular expression pattern does not have to be done every time. --- .../cloud/context/encrypt/EncryptorFactory.java | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/spring-cloud-context/src/main/java/org/springframework/cloud/context/encrypt/EncryptorFactory.java b/spring-cloud-context/src/main/java/org/springframework/cloud/context/encrypt/EncryptorFactory.java index 3fcf4830..6ac4d86d 100644 --- a/spring-cloud-context/src/main/java/org/springframework/cloud/context/encrypt/EncryptorFactory.java +++ b/spring-cloud-context/src/main/java/org/springframework/cloud/context/encrypt/EncryptorFactory.java @@ -18,6 +18,7 @@ package org.springframework.cloud.context.encrypt; import java.io.IOException; import java.io.StringReader; import java.io.StringWriter; +import java.util.regex.Pattern; import org.bouncycastle.asn1.pkcs.PrivateKeyInfo; import org.bouncycastle.openssl.MiscPEMGenerator; @@ -36,6 +37,8 @@ import org.springframework.security.rsa.crypto.RsaSecretEncryptor; */ public class EncryptorFactory { + private static final Pattern NEWLINE_ESCAPE_PATTERN = Pattern.compile("\\r|\\n"); + private String salt = "deadbeef"; public EncryptorFactory() { @@ -53,7 +56,7 @@ public class EncryptorFactory { try { String normalizedPemData = normalizePem(data); encryptor = new RsaSecretEncryptor( - normalizedPemData.replaceAll("\\n", "").replaceAll("\\r", "")); + NEWLINE_ESCAPE_PATTERN.matcher(normalizedPemData).replaceAll("")); } catch (IllegalArgumentException e) { throw new KeyFormatException(e); From edd4d0e7592b24b4b8db518b9a8feabba00859b6 Mon Sep 17 00:00:00 2001 From: Spencer Gibb Date: Fri, 5 Oct 2018 17:43:00 -0400 Subject: [PATCH 2/2] Adds @ConditionalOnBean(HealthAggregator.class) to DiscoveryCompositeHealthIndicator bean. see https://github.com/spring-cloud/spring-cloud-netflix/issues/3161 --- .../cloud/client/CommonsClientAutoConfiguration.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spring-cloud-commons/src/main/java/org/springframework/cloud/client/CommonsClientAutoConfiguration.java b/spring-cloud-commons/src/main/java/org/springframework/cloud/client/CommonsClientAutoConfiguration.java index 8db01ff0..e277b0c2 100644 --- a/spring-cloud-commons/src/main/java/org/springframework/cloud/client/CommonsClientAutoConfiguration.java +++ b/spring-cloud-commons/src/main/java/org/springframework/cloud/client/CommonsClientAutoConfiguration.java @@ -65,7 +65,7 @@ public class CommonsClientAutoConfiguration { @Bean @ConditionalOnProperty(value = "spring.cloud.discovery.client.composite-indicator.enabled", matchIfMissing = true) - @ConditionalOnBean(DiscoveryHealthIndicator.class) + @ConditionalOnBean({ DiscoveryHealthIndicator.class, HealthAggregator.class }) public DiscoveryCompositeHealthIndicator discoveryCompositeHealthIndicator( HealthAggregator aggregator, List indicators) { return new DiscoveryCompositeHealthIndicator(aggregator, indicators);