diff --git a/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/metrics/jdbc/DataSourcePoolMetricsAutoConfiguration.java b/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/metrics/jdbc/DataSourcePoolMetricsAutoConfiguration.java index 2ee47d82ea77..e31f977a3c9c 100644 --- a/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/metrics/jdbc/DataSourcePoolMetricsAutoConfiguration.java +++ b/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/metrics/jdbc/DataSourcePoolMetricsAutoConfiguration.java @@ -68,6 +68,8 @@ static class DataSourcePoolMetadataMetricsConfiguration { @Autowired void bindDataSourcesToRegistry(Map dataSources, MeterRegistry registry, ObjectProvider metadataProviders) { + // doesn't matter the ordering here since they are usually distinct and are + // used as first match wins basis. List metadataProvidersList = metadataProviders.stream() .collect(Collectors.toList()); dataSources.forEach( diff --git a/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/admin/SpringApplicationAdminJmxAutoConfiguration.java b/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/admin/SpringApplicationAdminJmxAutoConfiguration.java index 1ed6ca48994a..f4d4c3a4f819 100644 --- a/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/admin/SpringApplicationAdminJmxAutoConfiguration.java +++ b/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/admin/SpringApplicationAdminJmxAutoConfiguration.java @@ -62,6 +62,7 @@ public SpringApplicationAdminMXBeanRegistrar springApplicationAdminRegistrar( ObjectProvider mbeanExporters, Environment environment) throws MalformedObjectNameException { String jmxName = environment.getProperty(JMX_NAME_PROPERTY, DEFAULT_JMX_NAME); if (mbeanExporters != null) { // Make sure to not register that MBean twice + // ordering is not important for exporters, thus just iterate them for (MBeanExporter mbeanExporter : mbeanExporters) { mbeanExporter.addExcludedBean(jmxName); } diff --git a/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/flyway/FlywayAutoConfiguration.java b/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/flyway/FlywayAutoConfiguration.java index 0414145042b3..782d72476223 100644 --- a/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/flyway/FlywayAutoConfiguration.java +++ b/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/flyway/FlywayAutoConfiguration.java @@ -123,6 +123,8 @@ public Flyway flyway(FlywayProperties properties, DataSourceProperties dataSourc configureCallbacks(configuration, orderedCallbacks); fluentConfigurationCustomizers.orderedStream().forEach((customizer) -> customizer.customize(configuration)); configureFlywayCallbacks(configuration, orderedCallbacks); + // flyway orders migrations by itself with their versions; thus use normal + // stream to collect them List migrations = javaMigrations.stream().collect(Collectors.toList()); configureJavaMigrations(configuration, migrations); return configuration.load(); diff --git a/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/task/TaskExecutionAutoConfiguration.java b/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/task/TaskExecutionAutoConfiguration.java index 21c608b8b235..bbf1e4d9951a 100644 --- a/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/task/TaskExecutionAutoConfiguration.java +++ b/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/task/TaskExecutionAutoConfiguration.java @@ -17,6 +17,7 @@ package org.springframework.boot.autoconfigure.task; import java.util.concurrent.Executor; +import java.util.stream.Collectors; import org.springframework.beans.factory.ObjectProvider; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; @@ -67,7 +68,7 @@ public TaskExecutorBuilder taskExecutorBuilder(TaskExecutionProperties propertie builder = builder.awaitTermination(shutdown.isAwaitTermination()); builder = builder.awaitTerminationPeriod(shutdown.getAwaitTerminationPeriod()); builder = builder.threadNamePrefix(properties.getThreadNamePrefix()); - builder = builder.customizers(taskExecutorCustomizers); + builder = builder.customizers(taskExecutorCustomizers.orderedStream().collect(Collectors.toList())); builder = builder.taskDecorator(taskDecorator.getIfUnique()); return builder; }