Skip to content

Commit 3dc5634

Browse files
authored
Fallback beans (#17357)
* Fallback beans in Spring * Fallback beans in Spring * Fallback beans in Spring
1 parent dd43432 commit 3dc5634

File tree

9 files changed

+154
-1
lines changed

9 files changed

+154
-1
lines changed

spring-boot-modules/spring-boot-3/pom.xml

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -211,9 +211,17 @@
211211
<maven-surefire-plugin.version>3.0.0-M7</maven-surefire-plugin.version>
212212
<start-class>com.baeldung.sample.TodoApplication</start-class>
213213
<mockserver.version>5.14.0</mockserver.version>
214-
<spring-boot.version>3.2.4</spring-boot.version>
214+
<spring-boot.version>3.4.0-M1</spring-boot.version>
215215
<lombok-mapstruct-binding.version>0.2.0</lombok-mapstruct-binding.version>
216216
<springdoc-openapi-webmvc-ui.version>2.5.0</springdoc-openapi-webmvc-ui.version>
217217
</properties>
218218

219+
<repositories>
220+
<repository>
221+
<id>spring-milestone</id>
222+
<name>Spring Milestone</name>
223+
<url>https://repo.spring.io/milestone</url>
224+
</repository>
225+
</repositories>
226+
219227
</project>
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
package com.baeldung.fallback;
2+
3+
import org.springframework.boot.SpringApplication;
4+
import org.springframework.boot.autoconfigure.SpringBootApplication;
5+
6+
7+
@SpringBootApplication
8+
public class MessagingApplication {
9+
10+
public static void main(String[] args) {
11+
SpringApplication.run(MessagingApplication.class, args);
12+
}
13+
14+
}
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
package com.baeldung.fallback.messaging;
2+
3+
import org.springframework.context.annotation.Profile;
4+
import org.springframework.stereotype.Service;
5+
6+
@Service
7+
@Profile("!test")
8+
public class DevelopmentMessagingService implements MessagingService {
9+
10+
@Override
11+
public void sendMessage(String text) {
12+
// implementation in development environment
13+
}
14+
}
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
package com.baeldung.fallback.messaging;
2+
3+
import org.springframework.context.annotation.Fallback;
4+
import org.springframework.stereotype.Service;
5+
6+
@Service
7+
@Fallback
8+
public class FallbackMessagingService implements MessagingService {
9+
10+
@Override
11+
public void sendMessage(String text) {
12+
// fallback implementation
13+
}
14+
}
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
package com.baeldung.fallback.messaging;
2+
3+
public interface MessagingService {
4+
void sendMessage(String text);
5+
}
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
package com.baeldung.fallback.messaging;
2+
3+
import org.springframework.context.annotation.Primary;
4+
import org.springframework.context.annotation.Profile;
5+
import org.springframework.stereotype.Service;
6+
7+
@Service
8+
@Profile("production")
9+
@Primary
10+
public class ProductionMessagingService implements MessagingService {
11+
12+
@Override
13+
public void sendMessage(String text) {
14+
// implementation in production environment
15+
}
16+
}
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
package com.baeldung.fallback;
2+
3+
import com.baeldung.fallback.messaging.DevelopmentMessagingService;
4+
import com.baeldung.fallback.messaging.FallbackMessagingService;
5+
import com.baeldung.fallback.messaging.MessagingService;
6+
import com.baeldung.fallback.messaging.ProductionMessagingService;
7+
import org.junit.Test;
8+
import org.junit.runner.RunWith;
9+
import org.springframework.beans.factory.annotation.Autowired;
10+
import org.springframework.boot.test.context.SpringBootTest;
11+
import org.springframework.test.context.junit4.SpringRunner;
12+
13+
import static org.junit.Assert.assertEquals;
14+
15+
@RunWith(SpringRunner.class)
16+
@SpringBootTest(classes = {FallbackMessagingService.class, DevelopmentMessagingService.class, ProductionMessagingService.class})
17+
public class DevelopmentMessagingServiceUnitTest {
18+
19+
@Autowired
20+
private MessagingService messagingService;
21+
22+
@Test
23+
public void givenNoProfile_whenSendMessage_thenDevelopmentMessagingService() {
24+
assertEquals(messagingService.getClass(), DevelopmentMessagingService.class);
25+
}
26+
}
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
package com.baeldung.fallback;
2+
3+
import com.baeldung.fallback.messaging.DevelopmentMessagingService;
4+
import com.baeldung.fallback.messaging.FallbackMessagingService;
5+
import com.baeldung.fallback.messaging.MessagingService;
6+
import com.baeldung.fallback.messaging.ProductionMessagingService;
7+
import org.junit.Test;
8+
import org.junit.runner.RunWith;
9+
import org.springframework.beans.factory.annotation.Autowired;
10+
import org.springframework.boot.test.context.SpringBootTest;
11+
import org.springframework.test.context.ActiveProfiles;
12+
import org.springframework.test.context.junit4.SpringRunner;
13+
14+
import static org.junit.Assert.assertEquals;
15+
16+
@RunWith(SpringRunner.class)
17+
@SpringBootTest(classes = {FallbackMessagingService.class, DevelopmentMessagingService.class, ProductionMessagingService.class})
18+
@ActiveProfiles("test")
19+
public class FallbackMessagingServiceUnitTest {
20+
21+
@Autowired
22+
private MessagingService messagingService;
23+
24+
@Test
25+
public void givenTestProfile_whenSendMessage_thenFallbackMessagingService() {
26+
assertEquals(messagingService.getClass(), FallbackMessagingService.class);
27+
}
28+
}
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
package com.baeldung.fallback;
2+
3+
import com.baeldung.fallback.messaging.DevelopmentMessagingService;
4+
import com.baeldung.fallback.messaging.FallbackMessagingService;
5+
import com.baeldung.fallback.messaging.MessagingService;
6+
import com.baeldung.fallback.messaging.ProductionMessagingService;
7+
import org.junit.Test;
8+
import org.junit.runner.RunWith;
9+
import org.springframework.beans.factory.annotation.Autowired;
10+
import org.springframework.boot.test.context.SpringBootTest;
11+
import org.springframework.test.context.ActiveProfiles;
12+
import org.springframework.test.context.junit4.SpringRunner;
13+
14+
import static org.junit.Assert.assertEquals;
15+
16+
@RunWith(SpringRunner.class)
17+
@SpringBootTest(classes = {FallbackMessagingService.class, DevelopmentMessagingService.class, ProductionMessagingService.class})
18+
@ActiveProfiles("production")
19+
public class ProductionMessagingServiceUnitTest {
20+
21+
@Autowired
22+
private MessagingService messagingService;
23+
24+
@Test
25+
public void givenProductionProfile_whenSendMessage_thenProductionMessagingService() {
26+
assertEquals(messagingService.getClass(), ProductionMessagingService.class);
27+
}
28+
}

0 commit comments

Comments
 (0)