diff --git a/2022-08/spring-31/spring-31-exercise/pom.xml b/2022-08/spring-31/spring-31-exercise/pom.xml index 7c252869..f61dbede 100644 --- a/2022-08/spring-31/spring-31-exercise/pom.xml +++ b/2022-08/spring-31/spring-31-exercise/pom.xml @@ -11,7 +11,8 @@ org.springframework.boot spring-boot-starter-parent - 2.3.3.RELEASE + 2.7.8 + @@ -19,10 +20,6 @@ org.springframework.boot spring-boot-starter-integration - - org.springframework - spring-messaging - org.apache.commons commons-lang3 diff --git a/2022-08/spring-31/spring-31-exercise/src/main/java/ru/otus/spring/integration/App.java b/2022-08/spring-31/spring-31-exercise/src/main/java/ru/otus/spring/integration/App.java index 15edfe62..14058f97 100644 --- a/2022-08/spring-31/spring-31-exercise/src/main/java/ru/otus/spring/integration/App.java +++ b/2022-08/spring-31/spring-31-exercise/src/main/java/ru/otus/spring/integration/App.java @@ -1,70 +1,16 @@ package ru.otus.spring.integration; -import org.apache.commons.lang3.RandomUtils; -import org.springframework.context.annotation.AnnotationConfigApplicationContext; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.ComponentScan; -import org.springframework.context.annotation.Configuration; -import org.springframework.context.support.AbstractApplicationContext; -import org.springframework.integration.annotation.IntegrationComponentScan; - -import org.springframework.integration.channel.PublishSubscribeChannel; -import org.springframework.integration.channel.QueueChannel; -import org.springframework.integration.config.EnableIntegration; -import org.springframework.integration.dsl.IntegrationFlow; -import org.springframework.integration.dsl.IntegrationFlows; - -import org.springframework.integration.dsl.MessageChannels; -import ru.otus.spring.integration.domain.Food; -import ru.otus.spring.integration.domain.OrderItem; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.context.ConfigurableApplicationContext; +import ru.otus.spring.integration.services.OrderService; -@IntegrationComponentScan -@SuppressWarnings({"resource", "Duplicates", "InfiniteLoopStatement"}) -@ComponentScan -@Configuration -@EnableIntegration +@SpringBootApplication public class App { - private static final String[] MENU = {"coffee", "tea", "smoothie", "whiskey", "beer", "cola", "water"}; - - @Bean - public QueueChannel itemsChannel() { - return MessageChannels.queue(10).get(); - } - - @Bean - public PublishSubscribeChannel foodChannel() { - return MessageChannels.publishSubscribe().get(); - } - - // TODO: create default poller - - @Bean - public IntegrationFlow cafeFlow() { - return IntegrationFlows.from("itemsChannel") - // TODO: cook OrderItem in the kitchen - // TODO*: add splitter and aggregator - // TODO: forward it to the publish subscriber channel - .get(); - } - - public static void main(String[] args) throws Exception { - AbstractApplicationContext ctx = new AnnotationConfigApplicationContext(App.class); - - // here we works with cafe using interface - Cafe cafe = ctx.getBean(Cafe.class); - - while (true) { - Thread.sleep(1000); - - OrderItem orderItem = generateOrderItem(); - System.out.println("New orderItem: " + orderItem.getItemName()); - Food food = cafe.process(orderItem); - System.out.println("Ready food: " + food.getName()); - } - } - - private static OrderItem generateOrderItem() { - return new OrderItem(MENU[RandomUtils.nextInt(0, MENU.length)]); + public static void main(String[] args) { + ConfigurableApplicationContext ctx = SpringApplication.run(App.class, args); + OrderService orderService = ctx.getBean(OrderService.class); + orderService.startGenerateOrdersLoop(); } } diff --git a/2022-08/spring-31/spring-31-exercise/src/main/java/ru/otus/spring/integration/config/IntegrationConfig.java b/2022-08/spring-31/spring-31-exercise/src/main/java/ru/otus/spring/integration/config/IntegrationConfig.java new file mode 100644 index 00000000..9021a611 --- /dev/null +++ b/2022-08/spring-31/spring-31-exercise/src/main/java/ru/otus/spring/integration/config/IntegrationConfig.java @@ -0,0 +1,33 @@ +package ru.otus.spring.integration.config; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.integration.channel.PublishSubscribeChannel; +import org.springframework.integration.channel.QueueChannel; +import org.springframework.integration.dsl.IntegrationFlow; +import org.springframework.integration.dsl.IntegrationFlows; +import org.springframework.integration.dsl.MessageChannels; + +@Configuration +public class IntegrationConfig { + @Bean + public QueueChannel itemsChannel() { + return MessageChannels.queue(10).get(); + } + + @Bean + public PublishSubscribeChannel foodChannel() { + return MessageChannels.publishSubscribe().get(); + } + + // TODO: create default poller + + @Bean + public IntegrationFlow cafeFlow() { + return IntegrationFlows.from("itemsChannel") + // TODO: cook OrderItem in the kitchen + // TODO*: add splitter and aggregator + // TODO: forward it to the publish subscriber channel + .get(); + } +} diff --git a/2022-08/spring-31/spring-31-exercise/src/main/java/ru/otus/spring/integration/kitchen/KitchenService.java b/2022-08/spring-31/spring-31-exercise/src/main/java/ru/otus/spring/integration/kitchen/KitchenService.java deleted file mode 100644 index 8e40715f..00000000 --- a/2022-08/spring-31/spring-31-exercise/src/main/java/ru/otus/spring/integration/kitchen/KitchenService.java +++ /dev/null @@ -1,16 +0,0 @@ -package ru.otus.spring.integration.kitchen; - -import org.springframework.stereotype.Service; -import ru.otus.spring.integration.domain.Food; -import ru.otus.spring.integration.domain.OrderItem; - -@Service -public class KitchenService { - - public Food cook(OrderItem orderItem) throws Exception { - System.out.println("Cooking " + orderItem.getItemName()); - Thread.sleep(3000); - System.out.println("Cooking " + orderItem.getItemName() + " done"); - return new Food(orderItem.getItemName()); - } -} diff --git a/2022-08/spring-31/spring-31-exercise/src/main/java/ru/otus/spring/integration/Cafe.java b/2022-08/spring-31/spring-31-exercise/src/main/java/ru/otus/spring/integration/services/CafeGateway.java similarity index 76% rename from 2022-08/spring-31/spring-31-exercise/src/main/java/ru/otus/spring/integration/Cafe.java rename to 2022-08/spring-31/spring-31-exercise/src/main/java/ru/otus/spring/integration/services/CafeGateway.java index 0114f741..58c24077 100644 --- a/2022-08/spring-31/spring-31-exercise/src/main/java/ru/otus/spring/integration/Cafe.java +++ b/2022-08/spring-31/spring-31-exercise/src/main/java/ru/otus/spring/integration/services/CafeGateway.java @@ -1,11 +1,11 @@ -package ru.otus.spring.integration; +package ru.otus.spring.integration.services; import ru.otus.spring.integration.domain.Food; import ru.otus.spring.integration.domain.OrderItem; // TODO: add messaging gateway annotation -public interface Cafe { +public interface CafeGateway { // TODO: add gateway annotation with required channels Food process(OrderItem orderItem); diff --git a/2022-08/spring-31/spring-31-exercise/src/main/java/ru/otus/spring/integration/services/KitchenService.java b/2022-08/spring-31/spring-31-exercise/src/main/java/ru/otus/spring/integration/services/KitchenService.java new file mode 100644 index 00000000..2ae92af2 --- /dev/null +++ b/2022-08/spring-31/spring-31-exercise/src/main/java/ru/otus/spring/integration/services/KitchenService.java @@ -0,0 +1,9 @@ +package ru.otus.spring.integration.services; + +import ru.otus.spring.integration.domain.Food; +import ru.otus.spring.integration.domain.OrderItem; + +public interface KitchenService { + + Food cook(OrderItem orderItem); +} diff --git a/2022-08/spring-31/spring-31-exercise/src/main/java/ru/otus/spring/integration/kitchen/KitchenServiceImpl.java b/2022-08/spring-31/spring-31-exercise/src/main/java/ru/otus/spring/integration/services/KitchenServiceImpl.java similarity index 51% rename from 2022-08/spring-31/spring-31-exercise/src/main/java/ru/otus/spring/integration/kitchen/KitchenServiceImpl.java rename to 2022-08/spring-31/spring-31-exercise/src/main/java/ru/otus/spring/integration/services/KitchenServiceImpl.java index a1e36f1a..8a01a914 100644 --- a/2022-08/spring-31/spring-31-exercise/src/main/java/ru/otus/spring/integration/kitchen/KitchenServiceImpl.java +++ b/2022-08/spring-31/spring-31-exercise/src/main/java/ru/otus/spring/integration/services/KitchenServiceImpl.java @@ -1,17 +1,25 @@ -package ru.otus.spring.integration.kitchen; +package ru.otus.spring.integration.services; import org.springframework.stereotype.Service; import ru.otus.spring.integration.domain.Food; import ru.otus.spring.integration.domain.OrderItem; @Service -public class KitchenServiceImpl implements KitchenService{ +public class KitchenServiceImpl implements KitchenService { @Override - public Food cook(OrderItem orderItem) throws Exception { + public Food cook(OrderItem orderItem) { System.out.println("Cooking " + orderItem.getItemName()); - Thread.sleep(3000); + delay(); System.out.println("Cooking " + orderItem.getItemName() + " done"); return new Food(orderItem.getItemName()); } + + private static void delay() { + try { + Thread.sleep(3000); + } catch (InterruptedException e) { + throw new RuntimeException(e); + } + } } diff --git a/2022-08/spring-31/spring-31-exercise/src/main/java/ru/otus/spring/integration/services/OrderService.java b/2022-08/spring-31/spring-31-exercise/src/main/java/ru/otus/spring/integration/services/OrderService.java new file mode 100644 index 00000000..e50dc07d --- /dev/null +++ b/2022-08/spring-31/spring-31-exercise/src/main/java/ru/otus/spring/integration/services/OrderService.java @@ -0,0 +1,5 @@ +package ru.otus.spring.integration.services; + +public interface OrderService { + void startGenerateOrdersLoop(); +} diff --git a/2022-08/spring-31/spring-31-exercise/src/main/java/ru/otus/spring/integration/services/OrderServiceImpl.java b/2022-08/spring-31/spring-31-exercise/src/main/java/ru/otus/spring/integration/services/OrderServiceImpl.java new file mode 100644 index 00000000..f5a4e400 --- /dev/null +++ b/2022-08/spring-31/spring-31-exercise/src/main/java/ru/otus/spring/integration/services/OrderServiceImpl.java @@ -0,0 +1,40 @@ +package ru.otus.spring.integration.services; + +import org.apache.commons.lang3.RandomUtils; +import org.springframework.stereotype.Service; +import ru.otus.spring.integration.domain.Food; +import ru.otus.spring.integration.domain.OrderItem; + +@Service +public class OrderServiceImpl implements OrderService { + private static final String[] MENU = {"coffee", "tea", "smoothie", "whiskey", "beer", "cola", "water"}; + + private final CafeGateway cafe; + + public OrderServiceImpl(CafeGateway cafe) { + this.cafe = cafe; + } + + public void startGenerateOrdersLoop() { + for (int i = 0; i < 10; i++) { + delay(); + + OrderItem orderItem = generateOrderItem(); + System.out.println("New orderItem: " + orderItem.getItemName()); + Food food = cafe.process(orderItem); + System.out.println("Ready food: " + food.getName()); + } + } + + private static OrderItem generateOrderItem() { + return new OrderItem(MENU[RandomUtils.nextInt(0, MENU.length)]); + } + + private void delay() { + try { + Thread.sleep(1000); + } catch (InterruptedException e) { + throw new RuntimeException(e); + } + } +} diff --git a/2022-08/spring-31/spring-31-solution/pom.xml b/2022-08/spring-31/spring-31-solution/pom.xml index 5efcc8b8..cebe4933 100644 --- a/2022-08/spring-31/spring-31-solution/pom.xml +++ b/2022-08/spring-31/spring-31-solution/pom.xml @@ -11,7 +11,8 @@ org.springframework.boot spring-boot-starter-parent - 2.3.3.RELEASE + 2.7.8 + @@ -19,10 +20,7 @@ org.springframework.boot spring-boot-starter-integration - - org.springframework - spring-messaging - + org.apache.commons commons-lang3 diff --git a/2022-08/spring-31/spring-31-solution/src/main/java/ru/otus/spring/integration/App.java b/2022-08/spring-31/spring-31-solution/src/main/java/ru/otus/spring/integration/App.java index bd7a48f2..79be8664 100644 --- a/2022-08/spring-31/spring-31-solution/src/main/java/ru/otus/spring/integration/App.java +++ b/2022-08/spring-31/spring-31-solution/src/main/java/ru/otus/spring/integration/App.java @@ -1,96 +1,17 @@ package ru.otus.spring.integration; -import org.apache.commons.lang3.RandomUtils; -import org.springframework.context.annotation.AnnotationConfigApplicationContext; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.ComponentScan; -import org.springframework.context.annotation.Configuration; -import org.springframework.context.support.AbstractApplicationContext; -import org.springframework.integration.annotation.IntegrationComponentScan; -import org.springframework.integration.channel.PublishSubscribeChannel; -import org.springframework.integration.channel.QueueChannel; -import org.springframework.integration.config.EnableIntegration; -import org.springframework.integration.dsl.IntegrationFlow; -import org.springframework.integration.dsl.IntegrationFlows; -import org.springframework.integration.dsl.MessageChannels; -import org.springframework.integration.dsl.Pollers; -import org.springframework.integration.scheduling.PollerMetadata; -import ru.otus.spring.integration.domain.Food; -import ru.otus.spring.integration.domain.OrderItem; - -import java.util.ArrayList; -import java.util.Collection; -import java.util.List; -import java.util.concurrent.ForkJoinPool; -import java.util.stream.Collectors; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.context.ConfigurableApplicationContext; +import ru.otus.spring.integration.services.OrderService; -@IntegrationComponentScan -@SuppressWarnings({ "resource", "Duplicates", "InfiniteLoopStatement" }) -@ComponentScan -@Configuration -@EnableIntegration +@SpringBootApplication public class App { - private static final String[] MENU = { "coffee", "tea", "smoothie", "whiskey", "beer", "cola", "water" }; - @Bean - public QueueChannel itemsChannel() { - return MessageChannels.queue( 10 ).get(); - } - - @Bean - public PublishSubscribeChannel foodChannel() { - return MessageChannels.publishSubscribe().get(); - } - - @Bean(name = PollerMetadata.DEFAULT_POLLER) - public PollerMetadata poller() { - return Pollers.fixedRate( 100 ).maxMessagesPerPoll( 2 ).get(); - } - - @Bean - public IntegrationFlow cafeFlow() { - return IntegrationFlows.from( "itemsChannel" ) - .split() - .handle( "kitchenService", "cook" ) - .aggregate() - .channel( "foodChannel" ) - .get(); - } - - public static void main( String[] args ) throws Exception { - AbstractApplicationContext ctx = new AnnotationConfigApplicationContext( App.class ); - - // here we works with cafe using interface - Cafe cafe = ctx.getBean( Cafe.class ); - - ForkJoinPool pool = ForkJoinPool.commonPool(); - - while ( true ) { - Thread.sleep( 7000 ); - - pool.execute( () -> { - Collection items = generateOrderItems(); - System.out.println( "New orderItems: " + - items.stream().map( OrderItem::getItemName ) - .collect( Collectors.joining( "," ) ) ); - Collection food = cafe.process( items ); - System.out.println( "Ready food: " + food.stream() - .map( Food::getName ) - .collect( Collectors.joining( "," ) ) ); - } ); - } - } - - private static OrderItem generateOrderItem() { - return new OrderItem( MENU[ RandomUtils.nextInt( 0, MENU.length ) ] ); - } - - private static Collection generateOrderItems() { - List items = new ArrayList<>(); - for ( int i = 0; i < RandomUtils.nextInt( 1, 5 ); ++ i ) { - items.add( generateOrderItem() ); - } - return items; + public static void main(String[] args) { + ConfigurableApplicationContext ctx = SpringApplication.run(App.class, args); + OrderService orderService = ctx.getBean(OrderService.class); + orderService.startGenerateOrdersLoop(); } } diff --git a/2022-08/spring-31/spring-31-solution/src/main/java/ru/otus/spring/integration/config/IntegrationConfig.java b/2022-08/spring-31/spring-31-solution/src/main/java/ru/otus/spring/integration/config/IntegrationConfig.java new file mode 100644 index 00000000..b6a10576 --- /dev/null +++ b/2022-08/spring-31/spring-31-solution/src/main/java/ru/otus/spring/integration/config/IntegrationConfig.java @@ -0,0 +1,41 @@ +package ru.otus.spring.integration.config; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.integration.channel.PublishSubscribeChannel; +import org.springframework.integration.channel.QueueChannel; +import org.springframework.integration.dsl.IntegrationFlow; +import org.springframework.integration.dsl.IntegrationFlows; +import org.springframework.integration.dsl.MessageChannels; +import org.springframework.integration.dsl.Pollers; +import org.springframework.integration.scheduling.PollerMetadata; +import ru.otus.spring.integration.services.KitchenServiceImpl; + +@Configuration +public class IntegrationConfig { + + @Bean + public QueueChannel itemsChannel() { + return MessageChannels.queue(10).get(); + } + + @Bean + public PublishSubscribeChannel foodChannel() { + return MessageChannels.publishSubscribe().get(); + } + + @Bean(name = PollerMetadata.DEFAULT_POLLER) + public PollerMetadata poller() { + return Pollers.fixedRate(100).maxMessagesPerPoll(2).get(); + } + + @Bean + public IntegrationFlow cafeFlow(KitchenServiceImpl kitchenService) { + return IntegrationFlows.from(itemsChannel()) + .split() + .handle(kitchenService, "cook") + .aggregate() + .channel(foodChannel()) + .get(); + } +} diff --git a/2022-08/spring-31/spring-31-solution/src/main/java/ru/otus/spring/integration/kitchen/KitchenService.java b/2022-08/spring-31/spring-31-solution/src/main/java/ru/otus/spring/integration/kitchen/KitchenService.java deleted file mode 100644 index 8e40715f..00000000 --- a/2022-08/spring-31/spring-31-solution/src/main/java/ru/otus/spring/integration/kitchen/KitchenService.java +++ /dev/null @@ -1,16 +0,0 @@ -package ru.otus.spring.integration.kitchen; - -import org.springframework.stereotype.Service; -import ru.otus.spring.integration.domain.Food; -import ru.otus.spring.integration.domain.OrderItem; - -@Service -public class KitchenService { - - public Food cook(OrderItem orderItem) throws Exception { - System.out.println("Cooking " + orderItem.getItemName()); - Thread.sleep(3000); - System.out.println("Cooking " + orderItem.getItemName() + " done"); - return new Food(orderItem.getItemName()); - } -} diff --git a/2022-08/spring-31/spring-31-solution/src/main/java/ru/otus/spring/integration/Cafe.java b/2022-08/spring-31/spring-31-solution/src/main/java/ru/otus/spring/integration/services/CafeGateway.java similarity index 84% rename from 2022-08/spring-31/spring-31-solution/src/main/java/ru/otus/spring/integration/Cafe.java rename to 2022-08/spring-31/spring-31-solution/src/main/java/ru/otus/spring/integration/services/CafeGateway.java index 6b31f40a..85cae973 100644 --- a/2022-08/spring-31/spring-31-solution/src/main/java/ru/otus/spring/integration/Cafe.java +++ b/2022-08/spring-31/spring-31-solution/src/main/java/ru/otus/spring/integration/services/CafeGateway.java @@ -1,4 +1,4 @@ -package ru.otus.spring.integration; +package ru.otus.spring.integration.services; import org.springframework.integration.annotation.Gateway; @@ -9,7 +9,7 @@ import ru.otus.spring.integration.domain.OrderItem; import java.util.Collection; @MessagingGateway -public interface Cafe { +public interface CafeGateway { @Gateway(requestChannel = "itemsChannel", replyChannel = "foodChannel") Collection process(Collection orderItem); diff --git a/2022-08/spring-31/spring-31-solution/src/main/java/ru/otus/spring/integration/services/KitchenService.java b/2022-08/spring-31/spring-31-solution/src/main/java/ru/otus/spring/integration/services/KitchenService.java new file mode 100644 index 00000000..2ae92af2 --- /dev/null +++ b/2022-08/spring-31/spring-31-solution/src/main/java/ru/otus/spring/integration/services/KitchenService.java @@ -0,0 +1,9 @@ +package ru.otus.spring.integration.services; + +import ru.otus.spring.integration.domain.Food; +import ru.otus.spring.integration.domain.OrderItem; + +public interface KitchenService { + + Food cook(OrderItem orderItem); +} diff --git a/2022-08/spring-31/spring-31-solution/src/main/java/ru/otus/spring/integration/services/KitchenServiceImpl.java b/2022-08/spring-31/spring-31-solution/src/main/java/ru/otus/spring/integration/services/KitchenServiceImpl.java new file mode 100644 index 00000000..8a01a914 --- /dev/null +++ b/2022-08/spring-31/spring-31-solution/src/main/java/ru/otus/spring/integration/services/KitchenServiceImpl.java @@ -0,0 +1,25 @@ +package ru.otus.spring.integration.services; + +import org.springframework.stereotype.Service; +import ru.otus.spring.integration.domain.Food; +import ru.otus.spring.integration.domain.OrderItem; + +@Service +public class KitchenServiceImpl implements KitchenService { + + @Override + public Food cook(OrderItem orderItem) { + System.out.println("Cooking " + orderItem.getItemName()); + delay(); + System.out.println("Cooking " + orderItem.getItemName() + " done"); + return new Food(orderItem.getItemName()); + } + + private static void delay() { + try { + Thread.sleep(3000); + } catch (InterruptedException e) { + throw new RuntimeException(e); + } + } +} diff --git a/2022-08/spring-31/spring-31-solution/src/main/java/ru/otus/spring/integration/services/OrderService.java b/2022-08/spring-31/spring-31-solution/src/main/java/ru/otus/spring/integration/services/OrderService.java new file mode 100644 index 00000000..e50dc07d --- /dev/null +++ b/2022-08/spring-31/spring-31-solution/src/main/java/ru/otus/spring/integration/services/OrderService.java @@ -0,0 +1,5 @@ +package ru.otus.spring.integration.services; + +public interface OrderService { + void startGenerateOrdersLoop(); +} diff --git a/2022-08/spring-31/spring-31-solution/src/main/java/ru/otus/spring/integration/services/OrderServiceImpl.java b/2022-08/spring-31/spring-31-solution/src/main/java/ru/otus/spring/integration/services/OrderServiceImpl.java new file mode 100644 index 00000000..fc28f314 --- /dev/null +++ b/2022-08/spring-31/spring-31-solution/src/main/java/ru/otus/spring/integration/services/OrderServiceImpl.java @@ -0,0 +1,61 @@ +package ru.otus.spring.integration.services; + +import org.apache.commons.lang3.RandomUtils; +import org.springframework.stereotype.Service; +import ru.otus.spring.integration.domain.Food; +import ru.otus.spring.integration.domain.OrderItem; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; +import java.util.concurrent.ForkJoinPool; +import java.util.stream.Collectors; + +@Service +public class OrderServiceImpl implements OrderService { + private static final String[] MENU = {"coffee", "tea", "smoothie", "whiskey", "beer", "cola", "water"}; + + private final CafeGateway cafe; + + public OrderServiceImpl(CafeGateway cafe) { + this.cafe = cafe; + } + + public void startGenerateOrdersLoop() { + ForkJoinPool pool = ForkJoinPool.commonPool(); + for (int i = 0; i < 10; i++) { + delay(); + pool.execute(() -> { + Collection items = generateOrderItems(); + System.out.println("New orderItems: " + + items.stream().map(OrderItem::getItemName) + .collect(Collectors.joining(","))); + Collection food = cafe.process(items); + System.out.println("Ready food: " + food.stream() + .map(Food::getName) + .collect(Collectors.joining(","))); + }); + } + } + + private static OrderItem generateOrderItem() { + return new OrderItem(MENU[RandomUtils.nextInt(0, MENU.length)]); + } + + private static Collection generateOrderItems() { + List items = new ArrayList<>(); + for (int i = 0; i < RandomUtils.nextInt(1, 5); ++i) { + items.add(generateOrderItem()); + } + return items; + } + + private void delay() { + try { + Thread.sleep(7000); + } catch (InterruptedException e) { + throw new RuntimeException(e); + } + + } +} diff --git a/2023-01/spring-13-data-jpa/demo/pom.xml b/2023-01/spring-13-data-jpa/demo/pom.xml index 48523ba6..6decee96 100644 --- a/2023-01/spring-13-data-jpa/demo/pom.xml +++ b/2023-01/spring-13-data-jpa/demo/pom.xml @@ -11,7 +11,8 @@ org.springframework.boot spring-boot-starter-parent - 2.4.5 + 2.7.8 + diff --git a/2023-01/spring-13-data-jpa/exercise/pom.xml b/2023-01/spring-13-data-jpa/exercise/pom.xml index 172b613d..46d446db 100644 --- a/2023-01/spring-13-data-jpa/exercise/pom.xml +++ b/2023-01/spring-13-data-jpa/exercise/pom.xml @@ -11,7 +11,8 @@ org.springframework.boot spring-boot-starter-parent - 2.4.5 + 2.7.8 + diff --git a/2023-01/spring-13-data-jpa/solution-01/pom.xml b/2023-01/spring-13-data-jpa/solution-01/pom.xml index 355f4335..d89e13de 100644 --- a/2023-01/spring-13-data-jpa/solution-01/pom.xml +++ b/2023-01/spring-13-data-jpa/solution-01/pom.xml @@ -11,7 +11,8 @@ org.springframework.boot spring-boot-starter-parent - 2.4.5 + 2.7.8 + diff --git a/2023-01/spring-13-data-jpa/solution-02/pom.xml b/2023-01/spring-13-data-jpa/solution-02/pom.xml index c6dd4ab8..7a32f631 100644 --- a/2023-01/spring-13-data-jpa/solution-02/pom.xml +++ b/2023-01/spring-13-data-jpa/solution-02/pom.xml @@ -11,7 +11,8 @@ org.springframework.boot spring-boot-starter-parent - 2.4.5 + 2.7.8 + diff --git a/2023-01/spring-13-data-jpa/solution-03/pom.xml b/2023-01/spring-13-data-jpa/solution-03/pom.xml index 4fff22c3..4a9a6008 100644 --- a/2023-01/spring-13-data-jpa/solution-03/pom.xml +++ b/2023-01/spring-13-data-jpa/solution-03/pom.xml @@ -11,7 +11,8 @@ org.springframework.boot spring-boot-starter-parent - 2.4.5 + 2.7.8 + diff --git a/2023-01/spring-13-data-jpa/solution-04/pom.xml b/2023-01/spring-13-data-jpa/solution-04/pom.xml index 6f0a221c..a7e1de42 100644 --- a/2023-01/spring-13-data-jpa/solution-04/pom.xml +++ b/2023-01/spring-13-data-jpa/solution-04/pom.xml @@ -11,7 +11,8 @@ org.springframework.boot spring-boot-starter-parent - 2.4.5 + 2.7.8 +