Skip to content

Commit 95665a4

Browse files
committed
Fall back to connection details when configuring Rabbit Streams
Closes gh-42489
1 parent 05b4edf commit 95665a4

File tree

2 files changed

+77
-21
lines changed

2 files changed

+77
-21
lines changed

spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/amqp/RabbitStreamConfiguration.java

Lines changed: 19 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright 2012-2023 the original author or authors.
2+
* Copyright 2012-2024 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.
@@ -65,9 +65,9 @@ StreamRabbitListenerContainerFactory streamRabbitListenerContainerFactory(Enviro
6565

6666
@Bean(name = "rabbitStreamEnvironment")
6767
@ConditionalOnMissingBean(name = "rabbitStreamEnvironment")
68-
Environment rabbitStreamEnvironment(RabbitProperties properties,
68+
Environment rabbitStreamEnvironment(RabbitProperties properties, RabbitConnectionDetails connectionDetails,
6969
ObjectProvider<EnvironmentBuilderCustomizer> customizers) {
70-
EnvironmentBuilder builder = configure(Environment.builder(), properties);
70+
EnvironmentBuilder builder = configure(Environment.builder(), properties, connectionDetails);
7171
customizers.orderedStream().forEach((customizer) -> customizer.customize(builder));
7272
return builder.build();
7373
}
@@ -96,18 +96,29 @@ RabbitStreamTemplate rabbitStreamTemplate(Environment rabbitStreamEnvironment, R
9696
return template;
9797
}
9898

99-
static EnvironmentBuilder configure(EnvironmentBuilder builder, RabbitProperties properties) {
99+
static EnvironmentBuilder configure(EnvironmentBuilder builder, RabbitProperties properties,
100+
RabbitConnectionDetails connectionDetails) {
101+
return configure(builder, properties.getStream(), connectionDetails);
102+
}
103+
104+
private static EnvironmentBuilder configure(EnvironmentBuilder builder, RabbitProperties.Stream stream,
105+
RabbitConnectionDetails connectionDetails) {
100106
builder.lazyInitialization(true);
101-
RabbitProperties.Stream stream = properties.getStream();
102107
PropertyMapper map = PropertyMapper.get();
103108
map.from(stream.getHost()).to(builder::host);
104109
map.from(stream.getPort()).to(builder::port);
105110
map.from(stream.getVirtualHost())
106-
.as(withFallback(properties::getVirtualHost))
111+
.as(withFallback(connectionDetails::getVirtualHost))
107112
.whenNonNull()
108113
.to(builder::virtualHost);
109-
map.from(stream.getUsername()).as(withFallback(properties::getUsername)).whenNonNull().to(builder::username);
110-
map.from(stream.getPassword()).as(withFallback(properties::getPassword)).whenNonNull().to(builder::password);
114+
map.from(stream.getUsername())
115+
.as(withFallback(connectionDetails::getUsername))
116+
.whenNonNull()
117+
.to(builder::username);
118+
map.from(stream.getPassword())
119+
.as(withFallback(connectionDetails::getPassword))
120+
.whenNonNull()
121+
.to(builder::password);
111122
return builder;
112123
}
113124

spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/amqp/RabbitStreamConfigurationTests.java

Lines changed: 58 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright 2012-2023 the original author or authors.
2+
* Copyright 2012-2024 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.
@@ -17,6 +17,7 @@
1717
package org.springframework.boot.autoconfigure.amqp;
1818

1919
import java.time.Duration;
20+
import java.util.List;
2021

2122
import com.rabbitmq.stream.BackOffDelayPolicy;
2223
import com.rabbitmq.stream.Codec;
@@ -113,12 +114,14 @@ void whenCustomMessageListenerContainerFactoryIsDefinedThenAutoConfiguredContain
113114
}
114115

115116
@Test
116-
void environmentUsesPropertyDefaultsByDefault() {
117+
void environmentUsesConnectionDetailsByDefault() {
117118
EnvironmentBuilder builder = mock(EnvironmentBuilder.class);
118119
RabbitProperties properties = new RabbitProperties();
119-
RabbitStreamConfiguration.configure(builder, properties);
120+
RabbitStreamConfiguration.configure(builder, properties,
121+
new TestRabbitConnectionDetails("guest", "guest", "vhost"));
120122
then(builder).should().port(5552);
121123
then(builder).should().host("localhost");
124+
then(builder).should().virtualHost("vhost");
122125
then(builder).should().lazyInitialization(true);
123126
then(builder).should().username("guest");
124127
then(builder).should().password("guest");
@@ -130,7 +133,8 @@ void whenStreamPortIsSetThenEnvironmentUsesCustomPort() {
130133
EnvironmentBuilder builder = mock(EnvironmentBuilder.class);
131134
RabbitProperties properties = new RabbitProperties();
132135
properties.getStream().setPort(5553);
133-
RabbitStreamConfiguration.configure(builder, properties);
136+
RabbitStreamConfiguration.configure(builder, properties,
137+
new TestRabbitConnectionDetails("guest", "guest", "vhost"));
134138
then(builder).should().port(5553);
135139
}
136140

@@ -139,7 +143,8 @@ void whenStreamHostIsSetThenEnvironmentUsesCustomHost() {
139143
EnvironmentBuilder builder = mock(EnvironmentBuilder.class);
140144
RabbitProperties properties = new RabbitProperties();
141145
properties.getStream().setHost("stream.rabbit.example.com");
142-
RabbitStreamConfiguration.configure(builder, properties);
146+
RabbitStreamConfiguration.configure(builder, properties,
147+
new TestRabbitConnectionDetails("guest", "guest", "vhost"));
143148
then(builder).should().host("stream.rabbit.example.com");
144149
}
145150

@@ -148,28 +153,31 @@ void whenStreamVirtualHostIsSetThenEnvironmentUsesCustomVirtualHost() {
148153
EnvironmentBuilder builder = mock(EnvironmentBuilder.class);
149154
RabbitProperties properties = new RabbitProperties();
150155
properties.getStream().setVirtualHost("stream-virtual-host");
151-
RabbitStreamConfiguration.configure(builder, properties);
156+
RabbitStreamConfiguration.configure(builder, properties,
157+
new TestRabbitConnectionDetails("guest", "guest", "vhost"));
152158
then(builder).should().virtualHost("stream-virtual-host");
153159
}
154160

155161
@Test
156162
void whenStreamVirtualHostIsNotSetButDefaultVirtualHostIsSetThenEnvironmentUsesDefaultVirtualHost() {
157163
EnvironmentBuilder builder = mock(EnvironmentBuilder.class);
158164
RabbitProperties properties = new RabbitProperties();
159-
properties.setVirtualHost("default-virtual-host");
160-
RabbitStreamConfiguration.configure(builder, properties);
165+
properties.setVirtualHost("properties-virtual-host");
166+
RabbitStreamConfiguration.configure(builder, properties,
167+
new TestRabbitConnectionDetails("guest", "guest", "default-virtual-host"));
161168
then(builder).should().virtualHost("default-virtual-host");
162169
}
163170

164171
@Test
165-
void whenStreamCredentialsAreNotSetThenEnvironmentUsesRabbitCredentials() {
172+
void whenStreamCredentialsAreNotSetThenEnvironmentUsesConnectionDetailsCredentials() {
166173
EnvironmentBuilder builder = mock(EnvironmentBuilder.class);
167174
RabbitProperties properties = new RabbitProperties();
168175
properties.setUsername("alice");
169176
properties.setPassword("secret");
170-
RabbitStreamConfiguration.configure(builder, properties);
171-
then(builder).should().username("alice");
172-
then(builder).should().password("secret");
177+
RabbitStreamConfiguration.configure(builder, properties,
178+
new TestRabbitConnectionDetails("bob", "password", "vhost"));
179+
then(builder).should().username("bob");
180+
then(builder).should().password("password");
173181
}
174182

175183
@Test
@@ -180,7 +188,8 @@ void whenStreamCredentialsAreSetThenEnvironmentUsesStreamCredentials() {
180188
properties.setPassword("secret");
181189
properties.getStream().setUsername("bob");
182190
properties.getStream().setPassword("confidential");
183-
RabbitStreamConfiguration.configure(builder, properties);
191+
RabbitStreamConfiguration.configure(builder, properties,
192+
new TestRabbitConnectionDetails("charlotte", "hidden", "vhost"));
184193
then(builder).should().username("bob");
185194
then(builder).should().password("confidential");
186195
}
@@ -334,4 +343,40 @@ EnvironmentBuilderCustomizer customizerB() {
334343

335344
}
336345

346+
private static final class TestRabbitConnectionDetails implements RabbitConnectionDetails {
347+
348+
private final String username;
349+
350+
private final String password;
351+
352+
private final String virtualHost;
353+
354+
private TestRabbitConnectionDetails(String username, String password, String virtualHost) {
355+
this.username = username;
356+
this.password = password;
357+
this.virtualHost = virtualHost;
358+
}
359+
360+
@Override
361+
public String getUsername() {
362+
return this.username;
363+
}
364+
365+
@Override
366+
public String getPassword() {
367+
return this.password;
368+
}
369+
370+
@Override
371+
public String getVirtualHost() {
372+
return this.virtualHost;
373+
}
374+
375+
@Override
376+
public List<Address> getAddresses() {
377+
throw new UnsupportedOperationException();
378+
}
379+
380+
}
381+
337382
}

0 commit comments

Comments
 (0)