Skip to content

Commit a3135b4

Browse files
committed
Merge pull request #34764 from krzyk
* gh-34764: Polish "Fix support for default values in banner placeholders" Fix support for default values in banner placeholders Closes gh-34764
2 parents 4705e82 + 2d280bb commit a3135b4

File tree

2 files changed

+29
-22
lines changed

2 files changed

+29
-22
lines changed

spring-boot-project/spring-boot/src/main/java/org/springframework/boot/ResourceBanner.java

Lines changed: 18 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright 2012-2019 the original author or authors.
2+
* Copyright 2012-2023 the original author or authors.
33
*
44
* Licensed under the Apache License, Version 2.0 (the "License");
55
* you may not use this file except in compliance with the License.
@@ -19,7 +19,6 @@
1919
import java.io.PrintStream;
2020
import java.nio.charset.Charset;
2121
import java.nio.charset.StandardCharsets;
22-
import java.util.ArrayList;
2322
import java.util.Collections;
2423
import java.util.HashMap;
2524
import java.util.List;
@@ -29,6 +28,7 @@
2928
import org.apache.commons.logging.LogFactory;
3029

3130
import org.springframework.boot.ansi.AnsiPropertySource;
31+
import org.springframework.core.env.ConfigurableEnvironment;
3232
import org.springframework.core.env.Environment;
3333
import org.springframework.core.env.MapPropertySource;
3434
import org.springframework.core.env.MutablePropertySources;
@@ -45,13 +45,14 @@
4545
* @author Phillip Webb
4646
* @author Vedran Pavic
4747
* @author Toshiaki Maki
48+
* @author Krzysztof Krason
4849
* @since 1.2.0
4950
*/
5051
public class ResourceBanner implements Banner {
5152

5253
private static final Log logger = LogFactory.getLog(ResourceBanner.class);
5354

54-
private Resource resource;
55+
private final Resource resource;
5556

5657
public ResourceBanner(Resource resource) {
5758
Assert.notNull(resource, "Resource must not be null");
@@ -77,18 +78,18 @@ public void printBanner(Environment environment, Class<?> sourceClass, PrintStre
7778
}
7879

7980
protected List<PropertyResolver> getPropertyResolvers(Environment environment, Class<?> sourceClass) {
80-
List<PropertyResolver> resolvers = new ArrayList<>();
81-
resolvers.add(environment);
82-
resolvers.add(getVersionResolver(sourceClass));
83-
resolvers.add(getAnsiResolver());
84-
resolvers.add(getTitleResolver(sourceClass));
85-
return resolvers;
81+
MutablePropertySources propertySources = new MutablePropertySources();
82+
if (environment instanceof ConfigurableEnvironment) {
83+
((ConfigurableEnvironment) environment).getPropertySources().forEach(propertySources::addLast);
84+
}
85+
propertySources.addLast(getTitleSource(sourceClass));
86+
propertySources.addLast(getAnsiSource());
87+
propertySources.addLast(getVersionSource(sourceClass));
88+
return Collections.singletonList(new PropertySourcesPropertyResolver(propertySources));
8689
}
8790

88-
private PropertyResolver getVersionResolver(Class<?> sourceClass) {
89-
MutablePropertySources propertySources = new MutablePropertySources();
90-
propertySources.addLast(new MapPropertySource("version", getVersionsMap(sourceClass)));
91-
return new PropertySourcesPropertyResolver(propertySources);
91+
private MapPropertySource getVersionSource(Class<?> sourceClass) {
92+
return new MapPropertySource("version", getVersionsMap(sourceClass));
9293
}
9394

9495
private Map<String, Object> getVersionsMap(Class<?> sourceClass) {
@@ -118,19 +119,15 @@ private String getVersionString(String version, boolean format) {
118119
return format ? " (v" + version + ")" : version;
119120
}
120121

121-
private PropertyResolver getAnsiResolver() {
122-
MutablePropertySources sources = new MutablePropertySources();
123-
sources.addFirst(new AnsiPropertySource("ansi", true));
124-
return new PropertySourcesPropertyResolver(sources);
122+
private AnsiPropertySource getAnsiSource() {
123+
return new AnsiPropertySource("ansi", true);
125124
}
126125

127-
private PropertyResolver getTitleResolver(Class<?> sourceClass) {
128-
MutablePropertySources sources = new MutablePropertySources();
126+
private MapPropertySource getTitleSource(Class<?> sourceClass) {
129127
String applicationTitle = getApplicationTitle(sourceClass);
130128
Map<String, Object> titleMap = Collections.singletonMap("application.title",
131129
(applicationTitle != null) ? applicationTitle : "");
132-
sources.addFirst(new MapPropertySource("title", titleMap));
133-
return new PropertySourcesPropertyResolver(sources);
130+
return new MapPropertySource("title", titleMap);
134131
}
135132

136133
protected String getApplicationTitle(Class<?> sourceClass) {

spring-boot-project/spring-boot/src/test/java/org/springframework/boot/ResourceBannerTests.java

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright 2012-2019 the original author or authors.
2+
* Copyright 2012-2023 the original author or authors.
33
*
44
* Licensed under the Apache License, Version 2.0 (the "License");
55
* you may not use this file except in compliance with the License.
@@ -40,6 +40,7 @@
4040
* @author Phillip Webb
4141
* @author Vedran Pavic
4242
* @author Toshiaki Maki
43+
* @author Krzysztof Krason
4344
*/
4445
class ResourceBannerTests {
4546

@@ -126,6 +127,15 @@ void renderWithoutTitle() {
126127
assertThat(banner).startsWith("banner 1");
127128
}
128129

130+
@Test
131+
void renderWithDefaultValues() {
132+
Resource resource = new ByteArrayResource(
133+
"banner ${a:default-a} ${b:default-b} ${spring-boot.version:default-boot-version} ${application.version:default-application-version}"
134+
.getBytes());
135+
String banner = printBanner(resource, "10.2", "1.0", null);
136+
assertThat(banner).startsWith("banner 1 default-b 10.2 1.0");
137+
}
138+
129139
private String printBanner(Resource resource, String bootVersion, String applicationVersion,
130140
String applicationTitle) {
131141
ResourceBanner banner = new MockResourceBanner(resource, bootVersion, applicationVersion, applicationTitle);

0 commit comments

Comments
 (0)