gitextract_g84ntzib/ ├── .gitignore ├── README.md ├── httpRequests/ │ ├── 2020-12-20T004250.200.json │ ├── 2020-12-20T004328.500.json │ ├── 2020-12-20T004337.200.json │ ├── 2020-12-20T004347.200.json │ ├── 2020-12-20T004347.500.json │ ├── 2020-12-20T004358.200.json │ ├── 2020-12-20T004358.500.json │ ├── 2020-12-20T004401.200.json │ ├── 2020-12-20T004401.500.json │ ├── 2020-12-20T004538.200.json │ ├── 2020-12-20T004547.500.json │ ├── 2020-12-20T004638.500.json │ ├── 2020-12-20T004645.500.json │ ├── 2020-12-20T004809.200.json │ ├── 2020-12-20T004813.500.json │ ├── 2020-12-20T010724.200.json │ ├── 2020-12-20T010738.200.json │ ├── 2020-12-20T010809.200.json │ ├── 2020-12-20T010823.500.json │ ├── 2020-12-20T010840.200.json │ ├── 2020-12-20T011020.500.json │ ├── 2020-12-20T011347.500.json │ ├── 2020-12-20T011526.200.json │ ├── 2020-12-20T011530.200.json │ ├── 2020-12-20T011541.400.json │ ├── 2020-12-20T011551.500.json │ ├── 2020-12-20T011556.200.json │ ├── 2020-12-20T011628-1.200.json │ ├── 2020-12-20T011628.200.json │ ├── 2020-12-20T011646.200.json │ ├── 2020-12-20T011650.200.json │ ├── 2020-12-20T011653.500.json │ ├── 2020-12-20T011818.200.json │ ├── 2020-12-20T011843.200.json │ ├── 2020-12-20T011847.500.json │ ├── 2020-12-20T012507.200.json │ ├── 2020-12-20T012510.200.json │ ├── 2020-12-20T012527.200.json │ ├── 2020-12-20T012540.400.json │ ├── 2020-12-20T012544.200.json │ ├── 2020-12-20T012703.500.json │ ├── 2020-12-20T012708.200.json │ ├── 2020-12-20T012710.200.json │ ├── 2020-12-20T013544.200.json │ ├── 2020-12-20T013552.200.json │ ├── 2020-12-20T013558.500.json │ ├── 2020-12-20T013845.200.json │ ├── 2020-12-20T014019.200.json │ ├── 2020-12-20T021415.200.json │ ├── http-client.cookies │ └── http-requests-log.http ├── lab-01-spring-security/ │ ├── lab-01-springsecurity-demo/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springboot/ │ │ │ └── lab01/ │ │ │ └── springsecurity/ │ │ │ ├── Application.java │ │ │ └── controller/ │ │ │ └── AdminController.java │ │ └── resources/ │ │ └── application.yaml │ ├── lab-01-springsecurity-demo-role/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ └── java/ │ │ └── cn/ │ │ └── iocoder/ │ │ └── springboot/ │ │ └── lab01/ │ │ └── springsecurity/ │ │ ├── Application.java │ │ ├── config/ │ │ │ └── SecurityConfig.java │ │ └── controller/ │ │ ├── DemoController.java │ │ └── TestController.java │ ├── pom.xml │ └── 《芋道 Spring Boot 安全框架 Spring Security 入门》.md ├── lab-02-spring-security-oauth/ │ ├── authorization-code-server/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springboot/ │ │ │ └── labs/ │ │ │ └── lab01/ │ │ │ ├── Application.java │ │ │ ├── authorization/ │ │ │ │ └── OAuth2AuthorizationServer.java │ │ │ └── resource/ │ │ │ ├── OAuth2ResourceServer.java │ │ │ └── api/ │ │ │ └── ExampleController.java │ │ └── resources/ │ │ └── application.properties │ ├── client-credentials-server/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ └── java/ │ │ └── lab01/ │ │ ├── Application.java │ │ ├── authorization/ │ │ │ └── OAuth2AuthorizationServer.java │ │ └── resource/ │ │ ├── OAuth2ResourceServer.java │ │ └── api/ │ │ └── ExampleController.java │ ├── implicit-server/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── lab01/ │ │ │ ├── Application.java │ │ │ ├── authorization/ │ │ │ │ └── OAuth2AuthorizationServer.java │ │ │ └── resource/ │ │ │ ├── OAuth2ResourceServer.java │ │ │ └── api/ │ │ │ └── ExampleController.java │ │ └── resources/ │ │ └── application.properties │ ├── pom.xml │ ├── resource-owner-password-credentials-server/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── lab01/ │ │ │ ├── Application.java │ │ │ ├── authorization/ │ │ │ │ └── OAuth2AuthorizationServer.java │ │ │ └── resource/ │ │ │ ├── OAuth2ResourceServer.java │ │ │ └── api/ │ │ │ └── ExampleController.java │ │ └── resources/ │ │ └── application.properties │ ├── resource-owner-password-credentials-server-by-jdbc-token-store/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── lab02/ │ │ │ ├── Application.java │ │ │ ├── authorization/ │ │ │ │ └── OAuth2AuthorizationServer.java │ │ │ └── resource/ │ │ │ ├── OAuth2ResourceServer.java │ │ │ └── api/ │ │ │ └── ExampleController.java │ │ └── resources/ │ │ ├── application.properties │ │ ├── data.sql │ │ └── schema.sql │ ├── resource-owner-password-credentials-server-with-refresh-token/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── lab01/ │ │ │ ├── Application.java │ │ │ ├── authorization/ │ │ │ │ └── OAuth2AuthorizationServer.java │ │ │ └── resource/ │ │ │ ├── OAuth2ResourceServer.java │ │ │ └── api/ │ │ │ └── ExampleController.java │ │ └── resources/ │ │ └── application.properties │ ├── resource-owner-password-credentials-server-with-revoke-token/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── lab2/ │ │ │ ├── Application.java │ │ │ ├── authorization/ │ │ │ │ ├── OAuth2AuthorizationServer.java │ │ │ │ └── token/ │ │ │ │ └── TokenController.java │ │ │ └── resource/ │ │ │ ├── OAuth2ResourceServer.java │ │ │ └── api/ │ │ │ └── ExampleController.java │ │ └── resources/ │ │ └── application.properties │ ├── 《芋道 Spring Security OAuth2 入门(新)》.md │ └── 《芋道 Spring Security OAuth2 入门(老)》.md ├── lab-03-kafka/ │ ├── lab-03-kafka-demo/ │ │ ├── pom.xml │ │ └── src/ │ │ ├── main/ │ │ │ ├── java/ │ │ │ │ └── cn/ │ │ │ │ └── iocoder/ │ │ │ │ └── springboot/ │ │ │ │ └── lab03/ │ │ │ │ └── kafkademo/ │ │ │ │ ├── Application.java │ │ │ │ ├── config/ │ │ │ │ │ └── KafkaConfiguration.java │ │ │ │ ├── consumer/ │ │ │ │ │ ├── Demo01AConsumer.java │ │ │ │ │ ├── Demo01Consumer.java │ │ │ │ │ └── Demo04Consumer.java │ │ │ │ ├── message/ │ │ │ │ │ ├── Demo01Message.java │ │ │ │ │ └── Demo04Message.java │ │ │ │ └── producer/ │ │ │ │ ├── Demo01Producer.java │ │ │ │ └── Demo04Producer.java │ │ │ └── resources/ │ │ │ ├── application.yaml │ │ │ └── application_bak.yaml │ │ └── test/ │ │ └── java/ │ │ └── cn/ │ │ └── iocoder/ │ │ └── springboot/ │ │ └── lab03/ │ │ └── kafkademo/ │ │ ├── package-info.java │ │ └── producer/ │ │ ├── Demo01ProducerTest.java │ │ └── Demo04ProducerTest.java │ ├── lab-03-kafka-demo-ack/ │ │ ├── pom.xml │ │ └── src/ │ │ ├── main/ │ │ │ ├── java/ │ │ │ │ └── cn/ │ │ │ │ └── iocoder/ │ │ │ │ └── springboot/ │ │ │ │ └── lab03/ │ │ │ │ └── kafkademo/ │ │ │ │ ├── Application.java │ │ │ │ ├── consumer/ │ │ │ │ │ └── Demo08Consumer.java │ │ │ │ ├── message/ │ │ │ │ │ └── Demo08Message.java │ │ │ │ └── producer/ │ │ │ │ └── Demo08Producer.java │ │ │ └── resources/ │ │ │ └── application.yaml │ │ └── test/ │ │ └── java/ │ │ └── cn/ │ │ └── iocoder/ │ │ └── springboot/ │ │ └── lab03/ │ │ └── kafkademo/ │ │ ├── package-info.java │ │ └── producer/ │ │ └── Demo08ProducerTest.java │ ├── lab-03-kafka-demo-batch/ │ │ ├── pom.xml │ │ └── src/ │ │ ├── main/ │ │ │ ├── java/ │ │ │ │ └── cn/ │ │ │ │ └── iocoder/ │ │ │ │ └── springboot/ │ │ │ │ └── lab03/ │ │ │ │ └── kafkademo/ │ │ │ │ ├── Application.java │ │ │ │ ├── consumer/ │ │ │ │ │ └── Demo02Consumer.java │ │ │ │ ├── message/ │ │ │ │ │ └── Demo02Message.java │ │ │ │ └── producer/ │ │ │ │ └── Demo02Producer.java │ │ │ └── resources/ │ │ │ └── application.yaml │ │ └── test/ │ │ └── java/ │ │ └── cn/ │ │ └── iocoder/ │ │ └── springboot/ │ │ └── lab03/ │ │ └── kafkademo/ │ │ ├── package-info.java │ │ └── producer/ │ │ └── Demo02ProducerTest.java │ ├── lab-03-kafka-demo-batch-consume/ │ │ ├── pom.xml │ │ └── src/ │ │ ├── main/ │ │ │ ├── java/ │ │ │ │ └── cn/ │ │ │ │ └── iocoder/ │ │ │ │ └── springboot/ │ │ │ │ └── lab03/ │ │ │ │ └── kafkademo/ │ │ │ │ ├── Application.java │ │ │ │ ├── consumer/ │ │ │ │ │ └── Demo02Consumer.java │ │ │ │ ├── message/ │ │ │ │ │ └── Demo02Message.java │ │ │ │ └── producer/ │ │ │ │ └── Demo02Producer.java │ │ │ └── resources/ │ │ │ └── application.yaml │ │ └── test/ │ │ └── java/ │ │ └── cn/ │ │ └── iocoder/ │ │ └── springboot/ │ │ └── lab03/ │ │ └── kafkademo/ │ │ ├── package-info.java │ │ └── producer/ │ │ └── Demo02ProducerTest.java │ ├── lab-03-kafka-demo-broadcast/ │ │ ├── pom.xml │ │ └── src/ │ │ ├── main/ │ │ │ ├── java/ │ │ │ │ └── cn/ │ │ │ │ └── iocoder/ │ │ │ │ └── springboot/ │ │ │ │ └── lab03/ │ │ │ │ └── kafkademo/ │ │ │ │ ├── Application.java │ │ │ │ ├── consumer/ │ │ │ │ │ └── Demo05Consumer.java │ │ │ │ ├── message/ │ │ │ │ │ └── Demo05Message.java │ │ │ │ └── producer/ │ │ │ │ └── Demo05Producer.java │ │ │ └── resources/ │ │ │ └── application.yaml │ │ └── test/ │ │ └── java/ │ │ └── cn/ │ │ └── iocoder/ │ │ └── springboot/ │ │ └── lab03/ │ │ └── kafkademo/ │ │ ├── package-info.java │ │ └── producer/ │ │ └── Demo05ProducerTest.java │ ├── lab-03-kafka-demo-concurrency/ │ │ ├── pom.xml │ │ └── src/ │ │ ├── main/ │ │ │ ├── java/ │ │ │ │ └── cn/ │ │ │ │ └── iocoder/ │ │ │ │ └── springboot/ │ │ │ │ └── lab03/ │ │ │ │ └── kafkademo/ │ │ │ │ ├── Application.java │ │ │ │ ├── consumer/ │ │ │ │ │ └── Demo06Consumer.java │ │ │ │ ├── message/ │ │ │ │ │ └── Demo06Message.java │ │ │ │ └── producer/ │ │ │ │ └── Demo06Producer.java │ │ │ └── resources/ │ │ │ └── application.yaml │ │ └── test/ │ │ └── java/ │ │ └── cn/ │ │ └── iocoder/ │ │ └── springboot/ │ │ └── lab03/ │ │ └── kafkademo/ │ │ ├── package-info.java │ │ └── producer/ │ │ └── Demo06ProducerTest.java │ ├── lab-03-kafka-demo-transaction/ │ │ ├── pom.xml │ │ └── src/ │ │ ├── main/ │ │ │ ├── java/ │ │ │ │ └── cn/ │ │ │ │ └── iocoder/ │ │ │ │ └── springboot/ │ │ │ │ └── lab03/ │ │ │ │ └── kafkademo/ │ │ │ │ ├── Application.java │ │ │ │ ├── consumer/ │ │ │ │ │ └── Demo07Consumer.java │ │ │ │ ├── message/ │ │ │ │ │ └── Demo07Message.java │ │ │ │ └── producer/ │ │ │ │ └── Demo07Producer.java │ │ │ └── resources/ │ │ │ ├── application.yaml │ │ │ └── application_bak.yaml │ │ └── test/ │ │ └── java/ │ │ └── cn/ │ │ └── iocoder/ │ │ └── springboot/ │ │ └── lab03/ │ │ └── kafkademo/ │ │ ├── package-info.java │ │ └── producer/ │ │ └── Demo07ProducerTest.java │ ├── lab-03-kafka-native/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ └── java/ │ │ └── cn/ │ │ └── iocoder/ │ │ └── springboot/ │ │ └── lab03/ │ │ └── kafkademo/ │ │ ├── ConsumerMain.java │ │ └── ProducerMain.java │ ├── pom.xml │ └── 《芋道 Spring Boot 消息队列 Kafka 入门》.md ├── lab-04-rabbitmq/ │ ├── lab-04-rabbitmq-consume-retry/ │ │ ├── pom.xml │ │ └── src/ │ │ ├── main/ │ │ │ ├── java/ │ │ │ │ └── cn/ │ │ │ │ └── iocoder/ │ │ │ │ └── springboot/ │ │ │ │ └── lab04/ │ │ │ │ └── rabbitmqdemo/ │ │ │ │ ├── Application.java │ │ │ │ ├── config/ │ │ │ │ │ └── RabbitConfig.java │ │ │ │ ├── consumer/ │ │ │ │ │ ├── Demo07Consumer.java │ │ │ │ │ └── Demo07DeadConsumer.java │ │ │ │ ├── message/ │ │ │ │ │ └── Demo07Message.java │ │ │ │ └── producer/ │ │ │ │ └── Demo07Producer.java │ │ │ └── resources/ │ │ │ └── application.yaml │ │ └── test/ │ │ └── java/ │ │ └── cn/ │ │ └── iocoder/ │ │ └── springboot/ │ │ └── lab04/ │ │ └── rabbitmqdemo/ │ │ ├── package-info.java │ │ └── producer/ │ │ └── Demo07ProducerTest.java │ ├── lab-04-rabbitmq-demo/ │ │ ├── pom.xml │ │ └── src/ │ │ ├── main/ │ │ │ ├── java/ │ │ │ │ └── cn/ │ │ │ │ └── iocoder/ │ │ │ │ └── springboot/ │ │ │ │ └── lab04/ │ │ │ │ └── rabbitmqdemo/ │ │ │ │ ├── Application.java │ │ │ │ ├── config/ │ │ │ │ │ └── RabbitConfig.java │ │ │ │ ├── consumer/ │ │ │ │ │ ├── Demo01Consumer.java │ │ │ │ │ ├── Demo02Consumer.java │ │ │ │ │ ├── Demo03ConsumerA.java │ │ │ │ │ ├── Demo03ConsumerB.java │ │ │ │ │ └── Demo04Consumer.java │ │ │ │ ├── message/ │ │ │ │ │ ├── Demo01Message.java │ │ │ │ │ ├── Demo02Message.java │ │ │ │ │ ├── Demo03Message.java │ │ │ │ │ └── Demo04Message.java │ │ │ │ └── producer/ │ │ │ │ ├── Demo01Producer.java │ │ │ │ ├── Demo02Producer.java │ │ │ │ ├── Demo03Producer.java │ │ │ │ └── Demo04Producer.java │ │ │ └── resources/ │ │ │ └── application.yaml │ │ └── test/ │ │ └── java/ │ │ └── cn/ │ │ └── iocoder/ │ │ └── springboot/ │ │ └── lab04/ │ │ └── rabbitmqdemo/ │ │ ├── package-info.java │ │ └── producer/ │ │ ├── Demo01ProducerTest.java │ │ ├── Demo02ProducerTest.java │ │ ├── Demo03ProducerTest.java │ │ └── Demo04ProducerTest.java │ ├── lab-04-rabbitmq-demo-ack/ │ │ ├── pom.xml │ │ └── src/ │ │ ├── main/ │ │ │ ├── java/ │ │ │ │ └── cn/ │ │ │ │ └── iocoder/ │ │ │ │ └── springboot/ │ │ │ │ └── lab04/ │ │ │ │ └── rabbitmqdemo/ │ │ │ │ ├── Application.java │ │ │ │ ├── config/ │ │ │ │ │ └── RabbitConfig.java │ │ │ │ ├── consumer/ │ │ │ │ │ └── Demo12Consumer.java │ │ │ │ ├── message/ │ │ │ │ │ └── Demo12Message.java │ │ │ │ └── producer/ │ │ │ │ └── Demo12Producer.java │ │ │ └── resources/ │ │ │ └── application.yaml │ │ └── test/ │ │ └── java/ │ │ └── cn/ │ │ └── iocoder/ │ │ └── springboot/ │ │ └── lab04/ │ │ └── rabbitmqdemo/ │ │ ├── package-info.java │ │ └── producer/ │ │ └── Demo12ProducerTest.java │ ├── lab-04-rabbitmq-demo-batch/ │ │ ├── pom.xml │ │ └── src/ │ │ ├── main/ │ │ │ ├── java/ │ │ │ │ └── cn/ │ │ │ │ └── iocoder/ │ │ │ │ └── springboot/ │ │ │ │ └── lab04/ │ │ │ │ └── rabbitmqdemo/ │ │ │ │ ├── Application.java │ │ │ │ ├── config/ │ │ │ │ │ └── RabbitConfig.java │ │ │ │ ├── consumer/ │ │ │ │ │ └── Demo05Consumer.java │ │ │ │ ├── message/ │ │ │ │ │ └── Demo05Message.java │ │ │ │ └── producer/ │ │ │ │ └── Demo05Producer.java │ │ │ └── resources/ │ │ │ └── application.yaml │ │ └── test/ │ │ └── java/ │ │ └── cn/ │ │ └── iocoder/ │ │ └── springboot/ │ │ └── lab04/ │ │ └── rabbitmqdemo/ │ │ ├── package-info.java │ │ └── producer/ │ │ └── Demo05ProducerTest.java │ ├── lab-04-rabbitmq-demo-batch-consume/ │ │ ├── pom.xml │ │ └── src/ │ │ ├── main/ │ │ │ ├── java/ │ │ │ │ └── cn/ │ │ │ │ └── iocoder/ │ │ │ │ └── springboot/ │ │ │ │ └── lab04/ │ │ │ │ └── rabbitmqdemo/ │ │ │ │ ├── Application.java │ │ │ │ ├── config/ │ │ │ │ │ └── RabbitConfig.java │ │ │ │ ├── consumer/ │ │ │ │ │ └── Demo05Consumer.java │ │ │ │ ├── message/ │ │ │ │ │ └── Demo05Message.java │ │ │ │ └── producer/ │ │ │ │ └── Demo06Producer.java │ │ │ └── resources/ │ │ │ └── application.yaml │ │ └── test/ │ │ └── java/ │ │ └── cn/ │ │ └── iocoder/ │ │ └── springboot/ │ │ └── lab04/ │ │ └── rabbitmqdemo/ │ │ ├── package-info.java │ │ └── producer/ │ │ └── Demo05ProducerTest.java │ ├── lab-04-rabbitmq-demo-batch-consume-02/ │ │ ├── pom.xml │ │ └── src/ │ │ ├── main/ │ │ │ ├── java/ │ │ │ │ └── cn/ │ │ │ │ └── iocoder/ │ │ │ │ └── springboot/ │ │ │ │ └── lab04/ │ │ │ │ └── rabbitmqdemo/ │ │ │ │ ├── Application.java │ │ │ │ ├── config/ │ │ │ │ │ └── RabbitConfig.java │ │ │ │ ├── consumer/ │ │ │ │ │ └── Demo06Consumer.java │ │ │ │ ├── message/ │ │ │ │ │ └── Demo06Message.java │ │ │ │ └── producer/ │ │ │ │ └── Demo06Producer.java │ │ │ └── resources/ │ │ │ └── application.yaml │ │ └── test/ │ │ └── java/ │ │ └── cn/ │ │ └── iocoder/ │ │ └── springboot/ │ │ └── lab04/ │ │ └── rabbitmqdemo/ │ │ ├── package-info.java │ │ └── producer/ │ │ └── Demo06ProducerTest.java │ ├── lab-04-rabbitmq-demo-concurrency/ │ │ ├── pom.xml │ │ └── src/ │ │ ├── main/ │ │ │ ├── java/ │ │ │ │ └── cn/ │ │ │ │ └── iocoder/ │ │ │ │ └── springboot/ │ │ │ │ └── lab04/ │ │ │ │ └── rabbitmqdemo/ │ │ │ │ ├── Application.java │ │ │ │ ├── config/ │ │ │ │ │ └── RabbitConfig.java │ │ │ │ ├── consumer/ │ │ │ │ │ └── Demo09Consumer.java │ │ │ │ ├── message/ │ │ │ │ │ └── Demo09Message.java │ │ │ │ └── producer/ │ │ │ │ └── Demo09Producer.java │ │ │ └── resources/ │ │ │ └── application.yaml │ │ └── test/ │ │ └── java/ │ │ └── cn/ │ │ └── iocoder/ │ │ └── springboot/ │ │ └── lab04/ │ │ └── rabbitmqdemo/ │ │ ├── package-info.java │ │ └── producer/ │ │ └── Demo09ProducerTest.java │ ├── lab-04-rabbitmq-demo-confirm/ │ │ ├── pom.xml │ │ └── src/ │ │ ├── main/ │ │ │ ├── java/ │ │ │ │ └── cn/ │ │ │ │ └── iocoder/ │ │ │ │ └── springboot/ │ │ │ │ └── lab04/ │ │ │ │ └── rabbitmqdemo/ │ │ │ │ ├── Application.java │ │ │ │ ├── config/ │ │ │ │ │ └── RabbitConfig.java │ │ │ │ ├── consumer/ │ │ │ │ │ └── Demo13Consumer.java │ │ │ │ ├── message/ │ │ │ │ │ └── Demo13Message.java │ │ │ │ └── producer/ │ │ │ │ └── Demo13Producer.java │ │ │ └── resources/ │ │ │ └── application.yaml │ │ └── test/ │ │ └── java/ │ │ └── cn/ │ │ └── iocoder/ │ │ └── springboot/ │ │ └── lab04/ │ │ └── rabbitmqdemo/ │ │ ├── package-info.java │ │ └── producer/ │ │ └── Demo13ProducerTest.java │ ├── lab-04-rabbitmq-demo-confirm-async/ │ │ ├── pom.xml │ │ └── src/ │ │ ├── main/ │ │ │ ├── java/ │ │ │ │ └── cn/ │ │ │ │ └── iocoder/ │ │ │ │ └── springboot/ │ │ │ │ └── lab04/ │ │ │ │ └── rabbitmqdemo/ │ │ │ │ ├── Application.java │ │ │ │ ├── config/ │ │ │ │ │ └── RabbitConfig.java │ │ │ │ ├── consumer/ │ │ │ │ │ └── Demo13Consumer.java │ │ │ │ ├── core/ │ │ │ │ │ ├── RabbitProducerConfirmCallback.java │ │ │ │ │ └── RabbitProducerReturnCallback.java │ │ │ │ ├── message/ │ │ │ │ │ └── Demo13Message.java │ │ │ │ └── producer/ │ │ │ │ └── Demo13Producer.java │ │ │ └── resources/ │ │ │ └── application.yaml │ │ └── test/ │ │ └── java/ │ │ └── cn/ │ │ └── iocoder/ │ │ └── springboot/ │ │ └── lab04/ │ │ └── rabbitmqdemo/ │ │ ├── package-info.java │ │ └── producer/ │ │ └── Demo13ProducerTest.java │ ├── lab-04-rabbitmq-demo-delay/ │ │ ├── pom.xml │ │ └── src/ │ │ ├── main/ │ │ │ ├── java/ │ │ │ │ └── cn/ │ │ │ │ └── iocoder/ │ │ │ │ └── springboot/ │ │ │ │ └── lab04/ │ │ │ │ └── rabbitmqdemo/ │ │ │ │ ├── Application.java │ │ │ │ ├── config/ │ │ │ │ │ └── RabbitConfig.java │ │ │ │ ├── consumer/ │ │ │ │ │ └── Demo08Consumer.java │ │ │ │ ├── message/ │ │ │ │ │ └── Demo08Message.java │ │ │ │ └── producer/ │ │ │ │ └── Demo08Producer.java │ │ │ └── resources/ │ │ │ └── application.yaml │ │ └── test/ │ │ └── java/ │ │ └── cn/ │ │ └── iocoder/ │ │ └── springboot/ │ │ └── lab04/ │ │ └── rabbitmqdemo/ │ │ ├── package-info.java │ │ └── producer/ │ │ └── Demo08ProducerTest.java │ ├── lab-04-rabbitmq-demo-error-handler/ │ │ ├── pom.xml │ │ └── src/ │ │ ├── main/ │ │ │ ├── java/ │ │ │ │ └── cn/ │ │ │ │ └── iocoder/ │ │ │ │ └── springboot/ │ │ │ │ └── lab04/ │ │ │ │ └── rabbitmqdemo/ │ │ │ │ ├── Application.java │ │ │ │ ├── config/ │ │ │ │ │ └── RabbitConfig.java │ │ │ │ ├── consumer/ │ │ │ │ │ └── Demo16Consumer.java │ │ │ │ ├── core/ │ │ │ │ │ ├── RabbitListenerErrorHandlerImpl.java │ │ │ │ │ └── RabbitLoggingErrorHandler.java │ │ │ │ ├── message/ │ │ │ │ │ └── Demo16Message.java │ │ │ │ └── producer/ │ │ │ │ └── Demo16Producer.java │ │ │ └── resources/ │ │ │ └── application.yaml │ │ └── test/ │ │ └── java/ │ │ └── cn/ │ │ └── iocoder/ │ │ └── springboot/ │ │ └── lab04/ │ │ └── rabbitmqdemo/ │ │ ├── package-info.java │ │ └── producer/ │ │ └── Demo16ProducerTest.java │ ├── lab-04-rabbitmq-demo-json/ │ │ ├── pom.xml │ │ └── src/ │ │ ├── main/ │ │ │ ├── java/ │ │ │ │ └── cn/ │ │ │ │ └── iocoder/ │ │ │ │ └── springboot/ │ │ │ │ └── lab04/ │ │ │ │ └── rabbitmqdemo/ │ │ │ │ ├── Application.java │ │ │ │ ├── config/ │ │ │ │ │ └── RabbitConfig.java │ │ │ │ ├── consumer/ │ │ │ │ │ └── Demo15Consumer.java │ │ │ │ ├── message/ │ │ │ │ │ └── Demo15Message.java │ │ │ │ └── producer/ │ │ │ │ └── Demo15Producer.java │ │ │ └── resources/ │ │ │ └── application.yaml │ │ └── test/ │ │ └── java/ │ │ └── cn/ │ │ └── iocoder/ │ │ └── springboot/ │ │ └── lab04/ │ │ └── rabbitmqdemo/ │ │ ├── package-info.java │ │ └── producer/ │ │ └── Demo15ProducerTest.java │ ├── lab-04-rabbitmq-demo-message-model/ │ │ ├── pom.xml │ │ └── src/ │ │ ├── main/ │ │ │ ├── java/ │ │ │ │ └── cn/ │ │ │ │ └── iocoder/ │ │ │ │ └── springboot/ │ │ │ │ └── lab04/ │ │ │ │ └── rabbitmqdemo/ │ │ │ │ ├── Application.java │ │ │ │ ├── config/ │ │ │ │ │ └── RabbitConfig.java │ │ │ │ ├── consumer/ │ │ │ │ │ ├── BroadcastConsumer.java │ │ │ │ │ └── ClusteringConsumer.java │ │ │ │ ├── message/ │ │ │ │ │ ├── BroadcastMessage.java │ │ │ │ │ └── ClusteringMessage.java │ │ │ │ └── producer/ │ │ │ │ ├── BroadcastProducer.java │ │ │ │ └── ClusteringProducer.java │ │ │ └── resources/ │ │ │ └── application.yaml │ │ └── test/ │ │ └── java/ │ │ └── cn/ │ │ └── iocoder/ │ │ └── springboot/ │ │ └── lab04/ │ │ └── rabbitmqdemo/ │ │ ├── package-info.java │ │ └── producer/ │ │ ├── BroadcastProducerTest.java │ │ └── ClusteringProducerTest.java │ ├── lab-04-rabbitmq-demo-orderly/ │ │ ├── pom.xml │ │ └── src/ │ │ ├── main/ │ │ │ ├── java/ │ │ │ │ └── cn/ │ │ │ │ └── iocoder/ │ │ │ │ └── springboot/ │ │ │ │ └── lab04/ │ │ │ │ └── rabbitmqdemo/ │ │ │ │ ├── Application.java │ │ │ │ ├── config/ │ │ │ │ │ └── RabbitConfig.java │ │ │ │ ├── consumer/ │ │ │ │ │ └── Demo10Consumer.java │ │ │ │ ├── message/ │ │ │ │ │ └── Demo10Message.java │ │ │ │ └── producer/ │ │ │ │ └── Demo10Producer.java │ │ │ └── resources/ │ │ │ └── application.yaml │ │ └── test/ │ │ └── java/ │ │ └── cn/ │ │ └── iocoder/ │ │ └── springboot/ │ │ └── lab04/ │ │ └── rabbitmqdemo/ │ │ ├── package-info.java │ │ └── producer/ │ │ └── Demo10ProducerTest.java │ ├── lab-04-rabbitmq-demo-rpc/ │ │ ├── pom.xml │ │ └── src/ │ │ ├── main/ │ │ │ ├── java/ │ │ │ │ └── cn/ │ │ │ │ └── iocoder/ │ │ │ │ └── springboot/ │ │ │ │ └── lab04/ │ │ │ │ └── rabbitmqdemo/ │ │ │ │ ├── Application.java │ │ │ │ ├── config/ │ │ │ │ │ └── RabbitConfig.java │ │ │ │ ├── consumer/ │ │ │ │ │ └── Demo14Consumer.java │ │ │ │ ├── message/ │ │ │ │ │ └── Demo14Message.java │ │ │ │ └── producer/ │ │ │ │ └── Demo14Producer.java │ │ │ └── resources/ │ │ │ └── application.yaml │ │ └── test/ │ │ └── java/ │ │ └── cn/ │ │ └── iocoder/ │ │ └── springboot/ │ │ └── lab04/ │ │ └── rabbitmqdemo/ │ │ ├── package-info.java │ │ └── producer/ │ │ └── Demo14ProducerTest.java │ ├── lab-04-rabbitmq-demo-transaction/ │ │ ├── pom.xml │ │ └── src/ │ │ ├── main/ │ │ │ ├── java/ │ │ │ │ └── cn/ │ │ │ │ └── iocoder/ │ │ │ │ └── springboot/ │ │ │ │ └── lab04/ │ │ │ │ └── rabbitmqdemo/ │ │ │ │ ├── Application.java │ │ │ │ ├── config/ │ │ │ │ │ └── RabbitConfig.java │ │ │ │ ├── consumer/ │ │ │ │ │ └── Demo11Consumer.java │ │ │ │ ├── message/ │ │ │ │ │ └── Demo11Message.java │ │ │ │ └── producer/ │ │ │ │ └── Demo11Producer.java │ │ │ └── resources/ │ │ │ └── application.yaml │ │ └── test/ │ │ └── java/ │ │ └── cn/ │ │ └── iocoder/ │ │ └── springboot/ │ │ └── lab04/ │ │ └── rabbitmqdemo/ │ │ ├── package-info.java │ │ └── producer/ │ │ └── Demo11ProducerTest.java │ ├── lab-04-rabbitmq-native/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ └── java/ │ │ └── cn/ │ │ └── iocoder/ │ │ └── springboot/ │ │ └── lab04/ │ │ └── rabbitmqdemo/ │ │ ├── RabbitMQConsumer.java │ │ └── RabbitMQProducer.java │ ├── pom.xml │ └── 《芋道 Spring Boot 消息队列 RabbitMQ 入门》.md ├── lab-05-benchmark-tomcat-jetty-undertow/ │ ├── lab-05-jetty/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ └── java/ │ │ └── cn/ │ │ └── iocoder/ │ │ └── springboot/ │ │ └── labs/ │ │ └── lab05/ │ │ └── tomcat/ │ │ ├── Controller.java │ │ └── JettyApplication.java │ ├── lab-05-tomcat/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ └── java/ │ │ └── cn/ │ │ └── iocoder/ │ │ └── springboot/ │ │ └── labs/ │ │ └── lab05/ │ │ └── tomcat/ │ │ ├── Controller.java │ │ └── TomcatApplication.java │ ├── lab-05-tomcat-apr/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ └── java/ │ │ └── cn/ │ │ └── iocoder/ │ │ └── springboot/ │ │ └── labs/ │ │ └── lab05/ │ │ └── tomcat/ │ │ ├── Controller.java │ │ └── TomcatAprApplication.java │ ├── lab-05-undertow/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ └── java/ │ │ └── cn/ │ │ └── iocoder/ │ │ └── springboot/ │ │ └── labs/ │ │ └── lab05/ │ │ └── undertow/ │ │ ├── Controller.java │ │ └── UndertowApplication.java │ ├── pom.xml │ └── 《性能测试 —— Tomcat、Jetty、Undertow 基准测试》.md ├── lab-06/ │ ├── lab-06-springmvc-tomcat/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ └── java/ │ │ └── cn/ │ │ └── iocoder/ │ │ └── springboot/ │ │ └── labs/ │ │ └── lab06/ │ │ └── springmvc/ │ │ ├── Controller.java │ │ └── SpringMVCApplication.java │ ├── lab-06-webflux-netty/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ └── java/ │ │ └── cn/ │ │ └── iocoder/ │ │ └── springboot/ │ │ └── labs/ │ │ └── lab06/ │ │ └── webflux/ │ │ ├── Controller.java │ │ └── WebfluxNettyApplication.java │ ├── lab-06-webflux-tomcat/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ └── java/ │ │ └── cn/ │ │ └── iocoder/ │ │ └── springboot/ │ │ └── labs/ │ │ └── lab06/ │ │ └── webflux/ │ │ ├── Controller.java │ │ └── WebfluxTomcatApplication.java │ ├── pom.xml │ └── 《性能测试 —— SpringMVC、Webflux 基准测试》.md ├── lab-07/ │ ├── lab-07-spring-cloud-gateway/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springboot/ │ │ │ └── labs/ │ │ │ └── lab07/ │ │ │ └── springcloudgateway/ │ │ │ └── SpringCloudGatewayApplication.java │ │ └── resources/ │ │ └── application.yml │ ├── lab-07-zuul/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springboot/ │ │ │ └── labs/ │ │ │ └── lab07/ │ │ │ └── zuul/ │ │ │ └── ZuulApplication.java │ │ └── resources/ │ │ └── application.yml │ ├── pom.xml │ └── 《性能测试 —— Spring Cloud Gateway、Zuul 基准测试》.md ├── lab-11-spring-data-redis/ │ ├── lab-07-spring-data-redis-unit-test/ │ │ ├── pom.xml │ │ └── src/ │ │ ├── main/ │ │ │ ├── java/ │ │ │ │ └── cn/ │ │ │ │ └── iocoder/ │ │ │ │ └── springboot/ │ │ │ │ └── labs/ │ │ │ │ └── lab10/ │ │ │ │ └── springdatarediswithjedis/ │ │ │ │ ├── Application.java │ │ │ │ ├── config/ │ │ │ │ │ └── RedisConfiguration.java │ │ │ │ └── util/ │ │ │ │ └── JSONUtil.java │ │ │ └── resources/ │ │ │ ├── application.yml │ │ │ └── redisson.yml │ │ └── test/ │ │ └── java/ │ │ └── cn/ │ │ └── iocoder/ │ │ └── springboot/ │ │ └── labs/ │ │ └── lab10/ │ │ └── springdatarediswithjedis/ │ │ ├── Test01.java │ │ └── config/ │ │ └── TestRedisConfiguration.java │ ├── lab-07-spring-data-redis-with-jedis/ │ │ ├── pom.xml │ │ └── src/ │ │ ├── main/ │ │ │ ├── java/ │ │ │ │ └── cn/ │ │ │ │ └── iocoder/ │ │ │ │ └── springboot/ │ │ │ │ └── labs/ │ │ │ │ └── lab10/ │ │ │ │ └── springdatarediswithjedis/ │ │ │ │ ├── Application.java │ │ │ │ ├── cacheobject/ │ │ │ │ │ ├── ProductCacheObject.java │ │ │ │ │ └── UserCacheObject.java │ │ │ │ ├── config/ │ │ │ │ │ └── RedisConfiguration.java │ │ │ │ ├── dao/ │ │ │ │ │ ├── package-info.java │ │ │ │ │ └── redis/ │ │ │ │ │ └── UserCacheDao.java │ │ │ │ ├── listener/ │ │ │ │ │ ├── TestChannelTopicMessageListener.java │ │ │ │ │ └── TestPatternTopicMessageListener.java │ │ │ │ ├── service/ │ │ │ │ │ ├── UserService01.java │ │ │ │ │ └── UserService02.java │ │ │ │ └── util/ │ │ │ │ └── JSONUtil.java │ │ │ └── resources/ │ │ │ ├── application.yml │ │ │ └── lua/ │ │ │ ├── compareAndSet.lua │ │ │ ├── compareAndSet2.lua │ │ │ └── test.lua │ │ └── test/ │ │ └── java/ │ │ └── cn/ │ │ └── iocoder/ │ │ └── springboot/ │ │ └── labs/ │ │ └── lab10/ │ │ └── springdatarediswithjedis/ │ │ ├── PipelineTest.java │ │ ├── PubSubTest.java │ │ ├── ScriptTest.java │ │ ├── SessionTest.java │ │ ├── Test01.java │ │ ├── TransactionTest.java │ │ ├── UserService02Test.java │ │ └── package-info.java │ ├── lab-07-spring-data-redis-with-redisson/ │ │ ├── pom.xml │ │ └── src/ │ │ ├── main/ │ │ │ ├── java/ │ │ │ │ └── cn/ │ │ │ │ └── iocoder/ │ │ │ │ └── springboot/ │ │ │ │ └── labs/ │ │ │ │ └── lab10/ │ │ │ │ └── springdatarediswithjedis/ │ │ │ │ ├── Application.java │ │ │ │ ├── cacheobject/ │ │ │ │ │ ├── ProductCacheObject.java │ │ │ │ │ └── UserCacheObject.java │ │ │ │ ├── config/ │ │ │ │ │ └── RedisConfiguration.java │ │ │ │ ├── dao/ │ │ │ │ │ ├── package-info.java │ │ │ │ │ └── redis/ │ │ │ │ │ └── UserCacheDao.java │ │ │ │ ├── listener/ │ │ │ │ │ ├── TestChannelTopicMessageListener.java │ │ │ │ │ └── TestPatternTopicMessageListener.java │ │ │ │ ├── service/ │ │ │ │ │ ├── UserService01.java │ │ │ │ │ └── UserService02.java │ │ │ │ └── util/ │ │ │ │ └── JSONUtil.java │ │ │ └── resources/ │ │ │ ├── application.yml │ │ │ ├── lua/ │ │ │ │ ├── compareAndSet.lua │ │ │ │ ├── compareAndSet2.lua │ │ │ │ └── test.lua │ │ │ └── redisson.yml │ │ └── test/ │ │ └── java/ │ │ └── cn/ │ │ └── iocoder/ │ │ └── springboot/ │ │ └── labs/ │ │ └── lab10/ │ │ └── springdatarediswithjedis/ │ │ ├── LockTest.java │ │ ├── PipelineTest.java │ │ ├── PubSubTest.java │ │ ├── RateLimiterTest.java │ │ ├── ScriptTest.java │ │ ├── SessionTest.java │ │ ├── Test01.java │ │ ├── TransactionTest.java │ │ ├── UserService02Test.java │ │ └── package-info.java │ ├── pom.xml │ └── 《芋道 Spring Boot Redis 入门》.md ├── lab-12-mybatis/ │ ├── lab-12-mybatis-annotation/ │ │ ├── pom.xml │ │ └── src/ │ │ ├── main/ │ │ │ ├── java/ │ │ │ │ └── cn/ │ │ │ │ └── iocoder/ │ │ │ │ └── springboot/ │ │ │ │ └── lab12/ │ │ │ │ └── mybatis/ │ │ │ │ ├── Application.java │ │ │ │ ├── dataobject/ │ │ │ │ │ └── UserDO.java │ │ │ │ └── mapper/ │ │ │ │ └── UserMapper.java │ │ │ └── resources/ │ │ │ ├── application.yaml │ │ │ ├── mapper/ │ │ │ │ └── UserMapper.xml │ │ │ ├── mybatis-config.xml │ │ │ └── sql/ │ │ │ └── users.sql │ │ └── test/ │ │ └── java/ │ │ └── cn/ │ │ └── iocoder/ │ │ └── springboot/ │ │ └── lab12/ │ │ └── mybatis/ │ │ └── mapper/ │ │ └── UserMapperTest.java │ ├── lab-12-mybatis-plus/ │ │ ├── pom.xml │ │ └── src/ │ │ ├── main/ │ │ │ ├── java/ │ │ │ │ └── cn/ │ │ │ │ └── iocoder/ │ │ │ │ └── springboot/ │ │ │ │ └── lab12/ │ │ │ │ └── mybatis/ │ │ │ │ ├── Application.java │ │ │ │ ├── dataobject/ │ │ │ │ │ └── UserDO.java │ │ │ │ └── mapper/ │ │ │ │ └── UserMapper.java │ │ │ └── resources/ │ │ │ ├── application.yaml │ │ │ ├── mapper/ │ │ │ │ └── UserMapper.xml │ │ │ └── sql/ │ │ │ └── users.sql │ │ └── test/ │ │ └── java/ │ │ └── cn/ │ │ └── iocoder/ │ │ └── springboot/ │ │ └── lab12/ │ │ └── mybatis/ │ │ └── mapper/ │ │ └── UserMapperTest.java │ ├── lab-12-mybatis-plus-tenant/ │ │ ├── pom.xml │ │ └── src/ │ │ ├── main/ │ │ │ ├── java/ │ │ │ │ └── cn/ │ │ │ │ └── iocoder/ │ │ │ │ └── springboot/ │ │ │ │ └── lab12/ │ │ │ │ └── mybatis/ │ │ │ │ ├── Application.java │ │ │ │ ├── config/ │ │ │ │ │ ├── AsyncConfig.java │ │ │ │ │ └── MybatisPlusConfig.java │ │ │ │ ├── context/ │ │ │ │ │ └── TenantHolder.java │ │ │ │ ├── core/ │ │ │ │ │ └── TtlThreadPoolTaskExecutor.java │ │ │ │ ├── dataobject/ │ │ │ │ │ ├── UserDO.java │ │ │ │ │ └── UserProfileDO.java │ │ │ │ ├── mapper/ │ │ │ │ │ ├── UserMapper.java │ │ │ │ │ └── UserProfileMapper.java │ │ │ │ ├── service/ │ │ │ │ │ └── UserService.java │ │ │ │ ├── util/ │ │ │ │ │ └── TtlExecutorsUtil.java │ │ │ │ └── vo/ │ │ │ │ └── UserDetailVO.java │ │ │ └── resources/ │ │ │ ├── application.yaml │ │ │ ├── mapper/ │ │ │ │ └── UserMapper.xml │ │ │ └── sql/ │ │ │ └── users.sql │ │ └── test/ │ │ └── java/ │ │ └── cn/ │ │ └── iocoder/ │ │ └── springboot/ │ │ └── lab12/ │ │ └── mybatis/ │ │ ├── mapper/ │ │ │ └── UserMapperTest.java │ │ └── service/ │ │ └── UserServiceTest.java │ ├── lab-12-mybatis-tk/ │ │ ├── pom.xml │ │ └── src/ │ │ ├── main/ │ │ │ ├── java/ │ │ │ │ └── cn/ │ │ │ │ └── iocoder/ │ │ │ │ └── springboot/ │ │ │ │ └── lab12/ │ │ │ │ └── mybatis/ │ │ │ │ ├── Application.java │ │ │ │ ├── dataobject/ │ │ │ │ │ └── UserDO.java │ │ │ │ ├── mapper/ │ │ │ │ │ └── UserMapper.java │ │ │ │ └── util/ │ │ │ │ └── BaseMapper.java │ │ │ └── resources/ │ │ │ ├── application.yaml │ │ │ ├── mapper/ │ │ │ │ └── UserMapper.xml │ │ │ ├── mybatis-config.xml │ │ │ └── sql/ │ │ │ └── users.sql │ │ └── test/ │ │ └── java/ │ │ └── cn/ │ │ └── iocoder/ │ │ └── springboot/ │ │ └── lab12/ │ │ └── mybatis/ │ │ └── mapper/ │ │ └── UserMapperTest.java │ ├── lab-12-mybatis-xml/ │ │ ├── pom.xml │ │ └── src/ │ │ ├── main/ │ │ │ ├── java/ │ │ │ │ └── cn/ │ │ │ │ └── iocoder/ │ │ │ │ └── springboot/ │ │ │ │ └── lab12/ │ │ │ │ └── mybatis/ │ │ │ │ ├── Application.java │ │ │ │ ├── dataobject/ │ │ │ │ │ └── UserDO.java │ │ │ │ └── mapper/ │ │ │ │ └── UserMapper.java │ │ │ └── resources/ │ │ │ ├── application.yaml │ │ │ ├── mapper/ │ │ │ │ └── UserMapper.xml │ │ │ ├── mybatis-config.xml │ │ │ └── sql/ │ │ │ └── users.sql │ │ └── test/ │ │ └── java/ │ │ └── cn/ │ │ └── iocoder/ │ │ └── springboot/ │ │ └── lab12/ │ │ └── mybatis/ │ │ └── mapper/ │ │ └── UserMapperTest.java │ ├── pom.xml │ └── 《芋道 Spring Boot MyBatis 入门》.md ├── lab-13-spring-data-jpa/ │ ├── lab-13-jpa/ │ │ ├── pom.xml │ │ └── src/ │ │ ├── main/ │ │ │ ├── java/ │ │ │ │ └── cn/ │ │ │ │ └── iocoder/ │ │ │ │ └── springboot/ │ │ │ │ └── lab13/ │ │ │ │ └── jpa/ │ │ │ │ ├── Application.java │ │ │ │ ├── dataobject/ │ │ │ │ │ └── UserDO.java │ │ │ │ └── repository/ │ │ │ │ ├── UserRepository01.java │ │ │ │ ├── UserRepository02.java │ │ │ │ ├── UserRepository03.java │ │ │ │ └── UserRepository04.java │ │ │ └── resources/ │ │ │ └── application.yaml │ │ └── test/ │ │ └── java/ │ │ └── cn/ │ │ └── iocoder/ │ │ └── springboot/ │ │ └── lab13/ │ │ └── jpa/ │ │ └── repository/ │ │ ├── UserRepository01Test.java │ │ ├── UserRepository02Test.java │ │ ├── UserRepository03Test.java │ │ └── UserRepository04Test.java │ ├── pom.xml │ └── 《芋道 Spring Boot JPA 入门》.md ├── lab-14-spring-jdbc-template/ │ ├── lab-14-jdbctemplate/ │ │ ├── pom.xml │ │ └── src/ │ │ ├── main/ │ │ │ ├── java/ │ │ │ │ └── cn/ │ │ │ │ └── iocoder/ │ │ │ │ └── springboot/ │ │ │ │ └── lab14/ │ │ │ │ └── jdbctemplate/ │ │ │ │ ├── Application.java │ │ │ │ ├── dao/ │ │ │ │ │ └── UserDao.java │ │ │ │ └── dataobject/ │ │ │ │ └── UserDO.java │ │ │ └── resources/ │ │ │ └── application.yaml │ │ └── test/ │ │ └── java/ │ │ └── cn/ │ │ └── iocoder/ │ │ └── springboot/ │ │ └── lab14/ │ │ └── jdbctemplate/ │ │ └── dao/ │ │ └── UserDaoTest.java │ ├── pom.xml │ └── 《芋道 Spring Boot JdbcTemplate 入门》.md ├── lab-15-spring-data-es/ │ ├── lab-15-spring-data-elasticsearch/ │ │ ├── pom.xml │ │ └── src/ │ │ ├── main/ │ │ │ ├── java/ │ │ │ │ └── cn/ │ │ │ │ └── iocoder/ │ │ │ │ └── springboot/ │ │ │ │ └── lab15/ │ │ │ │ └── springdataelasticsearch/ │ │ │ │ ├── Application.java │ │ │ │ ├── bo/ │ │ │ │ │ └── ProductConditionBO.java │ │ │ │ ├── constant/ │ │ │ │ │ └── FieldAnalyzer.java │ │ │ │ ├── dataobject/ │ │ │ │ │ └── ESProductDO.java │ │ │ │ └── repository/ │ │ │ │ └── ProductRepository.java │ │ │ └── resources/ │ │ │ └── application.yaml │ │ └── test/ │ │ └── java/ │ │ └── cn/ │ │ └── iocoder/ │ │ └── springboot/ │ │ └── lab15/ │ │ └── springdataelasticsearch/ │ │ └── repository/ │ │ ├── ProductRepository04Test.java │ │ └── ProductRepositoryTest.java │ ├── lab-15-spring-data-jest/ │ │ ├── pom.xml │ │ └── src/ │ │ ├── main/ │ │ │ ├── java/ │ │ │ │ └── cn/ │ │ │ │ └── iocoder/ │ │ │ │ └── springboot/ │ │ │ │ └── lab15/ │ │ │ │ └── springdatajest/ │ │ │ │ ├── Application.java │ │ │ │ ├── constant/ │ │ │ │ │ └── FieldAnalyzer.java │ │ │ │ ├── dataobject/ │ │ │ │ │ └── ESProductDO.java │ │ │ │ └── repository/ │ │ │ │ ├── ProductRepository.java │ │ │ │ ├── ProductRepository02.java │ │ │ │ └── ProductRepository03.java │ │ │ └── resources/ │ │ │ └── application.yaml │ │ └── test/ │ │ └── java/ │ │ └── cn/ │ │ └── iocoder/ │ │ └── springboot/ │ │ └── lab15/ │ │ └── springdatajest/ │ │ └── repository/ │ │ ├── ProductRepository02Test.java │ │ ├── ProductRepository03Test.java │ │ └── ProductRepositoryTest.java │ ├── pom.xml │ └── 《芋道 Spring Boot Elasticsearch 入门》.md ├── lab-16-spring-data-mongo/ │ ├── lab-16-spring-data-mongodb/ │ │ ├── pom.xml │ │ └── src/ │ │ ├── main/ │ │ │ ├── java/ │ │ │ │ └── cn/ │ │ │ │ └── iocoder/ │ │ │ │ └── springboot/ │ │ │ │ └── lab16/ │ │ │ │ └── springdatamongodb/ │ │ │ │ ├── Application.java │ │ │ │ ├── config/ │ │ │ │ │ └── MongoDBConfig.java │ │ │ │ ├── dao/ │ │ │ │ │ └── UserDao.java │ │ │ │ ├── dataobject/ │ │ │ │ │ ├── ProductDO.java │ │ │ │ │ └── UserDO.java │ │ │ │ ├── mongo/ │ │ │ │ │ ├── IncIdEntity.java │ │ │ │ │ └── MongoInsertEventListener.java │ │ │ │ └── repository/ │ │ │ │ ├── ProductRepository.java │ │ │ │ ├── UserRepository.java │ │ │ │ ├── UserRepository02.java │ │ │ │ └── UserRepository03.java │ │ │ └── resources/ │ │ │ └── application.yaml │ │ └── test/ │ │ └── java/ │ │ └── cn/ │ │ └── iocoder/ │ │ └── springboot/ │ │ └── lab16/ │ │ └── springdatamongodb/ │ │ ├── dao/ │ │ │ └── UserDaoTest.java │ │ └── repository/ │ │ ├── ProductRepositoryTest.java │ │ ├── UserRepository02Test.java │ │ ├── UserRepository03Test.java │ │ └── UserRepositoryTest.java │ ├── pom.xml │ └── 《芋道 Spring Boot MongoDB 入门》.md ├── lab-17/ │ ├── lab-17-dynamic-datasource-baomidou-01/ │ │ ├── pom.xml │ │ └── src/ │ │ ├── main/ │ │ │ ├── java/ │ │ │ │ └── cn/ │ │ │ │ └── iocoder/ │ │ │ │ └── springboot/ │ │ │ │ └── lab17/ │ │ │ │ └── dynamicdatasource/ │ │ │ │ ├── Application.java │ │ │ │ ├── constant/ │ │ │ │ │ └── DBConstants.java │ │ │ │ ├── dataobject/ │ │ │ │ │ ├── OrderDO.java │ │ │ │ │ └── UserDO.java │ │ │ │ ├── mapper/ │ │ │ │ │ ├── OrderMapper.java │ │ │ │ │ └── UserMapper.java │ │ │ │ └── service/ │ │ │ │ └── OrderService.java │ │ │ └── resources/ │ │ │ ├── application.yaml │ │ │ ├── mapper/ │ │ │ │ ├── OrderMapper.xml │ │ │ │ └── UserMapper.xml │ │ │ ├── mybatis-config.xml │ │ │ └── sql/ │ │ │ └── db.sql │ │ └── test/ │ │ └── java/ │ │ └── cn/ │ │ └── iocoder/ │ │ └── springboot/ │ │ └── lab17/ │ │ └── dynamicdatasource/ │ │ ├── mapper/ │ │ │ ├── OrderMapperTest.java │ │ │ └── UserMapperTest.java │ │ └── service/ │ │ └── OrderServiceTest.java │ ├── lab-17-dynamic-datasource-baomidou-02/ │ │ ├── pom.xml │ │ └── src/ │ │ ├── main/ │ │ │ ├── java/ │ │ │ │ └── cn/ │ │ │ │ └── iocoder/ │ │ │ │ └── springboot/ │ │ │ │ └── lab17/ │ │ │ │ └── dynamicdatasource/ │ │ │ │ ├── Application.java │ │ │ │ ├── constant/ │ │ │ │ │ └── DBConstants.java │ │ │ │ ├── dataobject/ │ │ │ │ │ └── OrderDO.java │ │ │ │ ├── mapper/ │ │ │ │ │ └── OrderMapper.java │ │ │ │ └── service/ │ │ │ │ └── OrderService.java │ │ │ └── resources/ │ │ │ ├── application.yaml │ │ │ ├── mapper/ │ │ │ │ └── OrderMapper.xml │ │ │ ├── mybatis-config.xml │ │ │ └── sql/ │ │ │ └── db.sql │ │ └── test/ │ │ └── java/ │ │ └── dynamicdatasource/ │ │ ├── mapper/ │ │ │ └── OrderMapperTest.java │ │ └── service/ │ │ └── OrderServiceTest.java │ ├── lab-17-dynamic-datasource-jdbctemplate/ │ │ ├── pom.xml │ │ └── src/ │ │ ├── main/ │ │ │ ├── java/ │ │ │ │ └── cn/ │ │ │ │ └── iocoder/ │ │ │ │ └── springboot/ │ │ │ │ └── lab17/ │ │ │ │ └── dynamicdatasource/ │ │ │ │ ├── Application.java │ │ │ │ ├── config/ │ │ │ │ │ ├── JdbcTemplateOrdersConfig.java │ │ │ │ │ └── JdbcTemplateUsersConfig.java │ │ │ │ ├── constant/ │ │ │ │ │ └── DBConstants.java │ │ │ │ ├── dao/ │ │ │ │ │ ├── OrderDao.java │ │ │ │ │ └── UserDao.java │ │ │ │ ├── dataobject/ │ │ │ │ │ ├── OrderDO.java │ │ │ │ │ └── UserDO.java │ │ │ │ └── service/ │ │ │ │ └── OrderService.java │ │ │ └── resources/ │ │ │ └── application.yaml │ │ └── test/ │ │ └── java/ │ │ └── cn/ │ │ └── iocoder/ │ │ └── springboot/ │ │ └── lab17/ │ │ └── dynamicdatasource/ │ │ ├── dao/ │ │ │ ├── OrderDaoTest.java │ │ │ └── UserDaoTest.java │ │ ├── package-info.java │ │ └── service/ │ │ └── OrderServiceTest.java │ ├── lab-17-dynamic-datasource-mybatis/ │ │ ├── pom.xml │ │ └── src/ │ │ ├── main/ │ │ │ ├── java/ │ │ │ │ └── cn/ │ │ │ │ └── iocoder/ │ │ │ │ └── springboot/ │ │ │ │ └── lab17/ │ │ │ │ └── dynamicdatasource/ │ │ │ │ ├── Application.java │ │ │ │ ├── config/ │ │ │ │ │ ├── MyBatisOrdersConfig.java │ │ │ │ │ └── MyBatisUsersConfig.java │ │ │ │ ├── constant/ │ │ │ │ │ └── DBConstants.java │ │ │ │ ├── dataobject/ │ │ │ │ │ ├── OrderDO.java │ │ │ │ │ └── UserDO.java │ │ │ │ ├── mapper/ │ │ │ │ │ ├── orders/ │ │ │ │ │ │ └── OrderMapper.java │ │ │ │ │ └── users/ │ │ │ │ │ └── UserMapper.java │ │ │ │ └── service/ │ │ │ │ └── OrderService.java │ │ │ └── resources/ │ │ │ ├── application.yaml │ │ │ ├── mapper/ │ │ │ │ ├── orders/ │ │ │ │ │ └── OrderMapper.xml │ │ │ │ └── users/ │ │ │ │ └── UserMapper.xml │ │ │ ├── mybatis-config.xml │ │ │ └── sql/ │ │ │ └── db.sql │ │ └── test/ │ │ └── java/ │ │ └── cn/ │ │ └── iocoder/ │ │ └── springboot/ │ │ └── lab17/ │ │ └── dynamicdatasource/ │ │ ├── mapper/ │ │ │ ├── orders/ │ │ │ │ └── OrderMapperTest.java │ │ │ └── users/ │ │ │ └── UserMapperTest.java │ │ ├── package-info.java │ │ └── service/ │ │ └── OrderServiceTest.java │ ├── lab-17-dynamic-datasource-sharding-jdbc-01/ │ │ ├── pom.xml │ │ └── src/ │ │ ├── main/ │ │ │ ├── java/ │ │ │ │ └── cn/ │ │ │ │ └── iocoder/ │ │ │ │ └── springboot/ │ │ │ │ └── lab17/ │ │ │ │ └── dynamicdatasource/ │ │ │ │ ├── Application.java │ │ │ │ ├── dataobject/ │ │ │ │ │ ├── OrderDO.java │ │ │ │ │ └── UserDO.java │ │ │ │ ├── mapper/ │ │ │ │ │ ├── OrderMapper.java │ │ │ │ │ └── UserMapper.java │ │ │ │ └── service/ │ │ │ │ └── OrderService.java │ │ │ └── resources/ │ │ │ ├── application.yaml │ │ │ ├── mapper/ │ │ │ │ ├── OrderMapper.xml │ │ │ │ └── UserMapper.xml │ │ │ ├── mybatis-config.xml │ │ │ └── sql/ │ │ │ └── db.sql │ │ └── test/ │ │ └── java/ │ │ └── dynamicdatasource/ │ │ ├── mapper/ │ │ │ ├── OrderMapperTest.java │ │ │ └── UserMapperTest.java │ │ └── service/ │ │ └── OrderServiceTest.java │ ├── lab-17-dynamic-datasource-sharding-jdbc-02/ │ │ ├── pom.xml │ │ └── src/ │ │ ├── main/ │ │ │ ├── java/ │ │ │ │ └── cn/ │ │ │ │ └── iocoder/ │ │ │ │ └── springboot/ │ │ │ │ └── lab17/ │ │ │ │ └── dynamicdatasource/ │ │ │ │ ├── Application.java │ │ │ │ ├── dataobject/ │ │ │ │ │ └── OrderDO.java │ │ │ │ ├── mapper/ │ │ │ │ │ └── OrderMapper.java │ │ │ │ └── service/ │ │ │ │ └── OrderService.java │ │ │ └── resources/ │ │ │ ├── application.yaml │ │ │ ├── mapper/ │ │ │ │ └── OrderMapper.xml │ │ │ ├── mybatis-config.xml │ │ │ └── sql/ │ │ │ └── db.sql │ │ └── test/ │ │ └── java/ │ │ └── cn/ │ │ └── iocoder/ │ │ └── springboot/ │ │ └── lab17/ │ │ └── dynamicdatasource/ │ │ ├── mapper/ │ │ │ └── OrderMapperTest.java │ │ └── service/ │ │ └── OrderServiceTest.java │ ├── lab-17-dynamic-datasource-springdatajpa/ │ │ ├── pom.xml │ │ └── src/ │ │ ├── main/ │ │ │ ├── java/ │ │ │ │ └── cn/ │ │ │ │ └── iocoder/ │ │ │ │ └── springboot/ │ │ │ │ └── lab17/ │ │ │ │ └── dynamicdatasource/ │ │ │ │ ├── Application.java │ │ │ │ ├── config/ │ │ │ │ │ ├── HibernateConfig.java │ │ │ │ │ ├── JpaOrdersConfig.java │ │ │ │ │ └── JpaUsersConfig.java │ │ │ │ ├── constant/ │ │ │ │ │ └── DBConstants.java │ │ │ │ ├── dataobject/ │ │ │ │ │ ├── OrderDO.java │ │ │ │ │ └── UserDO.java │ │ │ │ ├── repository/ │ │ │ │ │ ├── orders/ │ │ │ │ │ │ └── OrderRepository.java │ │ │ │ │ └── users/ │ │ │ │ │ └── UserRepository.java │ │ │ │ └── service/ │ │ │ │ └── OrderService.java │ │ │ └── resources/ │ │ │ ├── application.yaml │ │ │ └── sql/ │ │ │ └── db.sql │ │ └── test/ │ │ └── java/ │ │ └── cn/ │ │ └── iocoder/ │ │ └── springboot/ │ │ └── lab17/ │ │ └── dynamicdatasource/ │ │ ├── package-info.java │ │ ├── repository/ │ │ │ ├── orders/ │ │ │ │ └── OrderRepositoryTest.java │ │ │ └── users/ │ │ │ └── UserRepositoryTest.java │ │ └── service/ │ │ └── OrderServiceTest.java │ ├── pom.xml │ └── 《芋道 Spring Boot 多数据源(读写分离)入门》.md ├── lab-18/ │ ├── lab-18-sharding-datasource-01/ │ │ ├── pom.xml │ │ └── src/ │ │ ├── main/ │ │ │ ├── java/ │ │ │ │ └── cn/ │ │ │ │ └── iocoder/ │ │ │ │ └── springboot/ │ │ │ │ └── lab18/ │ │ │ │ └── shardingdatasource/ │ │ │ │ ├── Application.java │ │ │ │ ├── dataobject/ │ │ │ │ │ ├── OrderConfigDO.java │ │ │ │ │ └── OrderDO.java │ │ │ │ └── mapper/ │ │ │ │ ├── OrderConfigMapper.java │ │ │ │ └── OrderMapper.java │ │ │ └── resources/ │ │ │ ├── application.yaml │ │ │ ├── mapper/ │ │ │ │ ├── OrderConfigMapper.xml │ │ │ │ └── OrderMapper.xml │ │ │ ├── mybatis-config.xml │ │ │ └── sql/ │ │ │ ├── lab18_orders_0.sql │ │ │ └── lab18_orders_1.sql │ │ └── test/ │ │ └── java/ │ │ └── cn/ │ │ └── iocoder/ │ │ └── springboot/ │ │ └── lab18/ │ │ └── shardingdatasource/ │ │ └── mapper/ │ │ ├── OrderConfigMapperTest.java │ │ └── OrderMapperTest.java │ ├── lab-18-sharding-datasource-02/ │ │ ├── pom.xml │ │ └── src/ │ │ ├── main/ │ │ │ ├── java/ │ │ │ │ └── cn/ │ │ │ │ └── iocoder/ │ │ │ │ └── springboot/ │ │ │ │ └── lab18/ │ │ │ │ └── shardingdatasource/ │ │ │ │ ├── Application.java │ │ │ │ ├── dataobject/ │ │ │ │ │ └── OrderDO.java │ │ │ │ ├── mapper/ │ │ │ │ │ └── OrderMapper.java │ │ │ │ └── service/ │ │ │ │ └── OrderService.java │ │ │ └── resources/ │ │ │ └── application.yaml │ │ └── test/ │ │ └── java/ │ │ └── cn/ │ │ └── iocoder/ │ │ └── springboot/ │ │ └── lab18/ │ │ └── shardingdatasource/ │ │ ├── mapper/ │ │ │ └── OrderMapperTest.java │ │ └── service/ │ │ └── OrderServiceTest.java │ ├── pom.xml │ └── 《芋道 Spring Boot 分库分表入门》.md ├── lab-19/ │ ├── lab-19-datasource-pool-druid-multiple/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springboot/ │ │ │ └── lab19/ │ │ │ └── datasourcepool/ │ │ │ ├── Application.java │ │ │ └── config/ │ │ │ └── DataSourceConfig.java │ │ └── resources/ │ │ └── application.yaml │ ├── lab-19-datasource-pool-druid-single/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springboot/ │ │ │ └── lab19/ │ │ │ └── datasourcepool/ │ │ │ ├── Application.java │ │ │ └── controller/ │ │ │ └── DruidStatController.java │ │ └── resources/ │ │ └── application.yaml │ ├── lab-19-datasource-pool-hikaricp-multiple/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springboot/ │ │ │ └── lab19/ │ │ │ └── datasourcepool/ │ │ │ ├── Application.java │ │ │ └── config/ │ │ │ └── DataSourceConfig.java │ │ └── resources/ │ │ └── application.yaml │ ├── lab-19-datasource-pool-hikaricp-single/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springboot/ │ │ │ └── lab19/ │ │ │ └── datasourcepool/ │ │ │ └── Application.java │ │ └── resources/ │ │ └── application.yaml │ ├── pom.xml │ └── 《芋道 Spring Boot 数据库连接池入门》.md ├── lab-20/ │ ├── lab-20-database-version-control-flyway/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springboot/ │ │ │ └── lab20/ │ │ │ └── databaseversioncontrol/ │ │ │ ├── Application.java │ │ │ └── migration/ │ │ │ ├── ExampleFlywayCallback.java │ │ │ └── V1_1__FixUsername.java │ │ └── resources/ │ │ ├── application.yaml │ │ └── db/ │ │ └── migration/ │ │ └── V1.0__INIT_DB.sql │ ├── lab-20-database-version-control-liquibase/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springboot/ │ │ │ └── lab20/ │ │ │ └── databaseversioncontrol/ │ │ │ ├── Application.java │ │ │ └── migration/ │ │ │ └── CHANGE_SET_3_FixUsername.java │ │ └── resources/ │ │ ├── application.yaml │ │ └── db/ │ │ └── changelog/ │ │ ├── db.changelog-master-bak.yaml │ │ ├── db.changelog-master.yaml │ │ └── sqlfile/ │ │ └── CHAGE_SET_2_INIT_DB.sql │ ├── pom.xml │ └── 《芋道 Spring Boot 数据库版本管理入门》.md ├── lab-21/ │ ├── lab-21-cache-demo/ │ │ ├── pom.xml │ │ └── src/ │ │ ├── main/ │ │ │ ├── java/ │ │ │ │ └── cn/ │ │ │ │ └── iocoder/ │ │ │ │ └── springboot/ │ │ │ │ └── lab21/ │ │ │ │ └── cache/ │ │ │ │ ├── Application.java │ │ │ │ ├── dataobject/ │ │ │ │ │ └── UserDO.java │ │ │ │ ├── mapper/ │ │ │ │ │ ├── UserCacheDao.java │ │ │ │ │ └── UserMapper.java │ │ │ │ └── service/ │ │ │ │ └── UserService.java │ │ │ └── resources/ │ │ │ ├── application.yaml │ │ │ └── sql/ │ │ │ └── users.sql │ │ └── test/ │ │ └── java/ │ │ └── cn/ │ │ └── iocoder/ │ │ └── springboot/ │ │ └── lab21/ │ │ └── cache/ │ │ └── UserMapperTest.java │ ├── lab-21-cache-ehcache/ │ │ ├── pom.xml │ │ └── src/ │ │ ├── main/ │ │ │ ├── java/ │ │ │ │ └── cn/ │ │ │ │ └── iocoder/ │ │ │ │ └── springboot/ │ │ │ │ └── lab21/ │ │ │ │ └── cache/ │ │ │ │ ├── Application.java │ │ │ │ ├── dataobject/ │ │ │ │ │ └── UserDO.java │ │ │ │ └── mapper/ │ │ │ │ └── UserMapper.java │ │ │ └── resources/ │ │ │ ├── application.yaml │ │ │ ├── ehcache.xml │ │ │ └── sql/ │ │ │ └── users.sql │ │ └── test/ │ │ └── java/ │ │ └── cn/ │ │ └── iocoder/ │ │ └── springboot/ │ │ └── lab21/ │ │ └── cache/ │ │ └── UserMapperTest.java │ ├── lab-21-cache-redis/ │ │ ├── pom.xml │ │ └── src/ │ │ ├── main/ │ │ │ ├── java/ │ │ │ │ └── cn/ │ │ │ │ └── iocoder/ │ │ │ │ └── springboot/ │ │ │ │ └── lab21/ │ │ │ │ └── cache/ │ │ │ │ ├── Application.java │ │ │ │ ├── dataobject/ │ │ │ │ │ └── UserDO.java │ │ │ │ └── mapper/ │ │ │ │ └── UserMapper.java │ │ │ └── resources/ │ │ │ ├── application.yaml │ │ │ └── sql/ │ │ │ └── users.sql │ │ └── test/ │ │ └── java/ │ │ └── cn/ │ │ └── iocoder/ │ │ └── springboot/ │ │ └── lab21/ │ │ └── cache/ │ │ └── UserMapperTest.java │ ├── pom.xml │ └── 《芋道 Spring Boot 缓存 Cache 入门》.md ├── lab-22/ │ ├── lab-22-validation-01/ │ │ ├── pom.xml │ │ └── src/ │ │ ├── main/ │ │ │ ├── java/ │ │ │ │ └── cn/ │ │ │ │ └── iocoder/ │ │ │ │ └── springboot/ │ │ │ │ └── lab22/ │ │ │ │ └── validation/ │ │ │ │ ├── Application.java │ │ │ │ ├── config/ │ │ │ │ │ └── ValidationConfiguration.java │ │ │ │ ├── constants/ │ │ │ │ │ ├── GenderEnum.java │ │ │ │ │ └── ServiceExceptionEnum.java │ │ │ │ ├── controller/ │ │ │ │ │ └── UserController.java │ │ │ │ ├── core/ │ │ │ │ │ ├── exception/ │ │ │ │ │ │ └── ServiceException.java │ │ │ │ │ ├── package-info.java │ │ │ │ │ ├── validator/ │ │ │ │ │ │ ├── InEnum.java │ │ │ │ │ │ ├── InEnumValidator.java │ │ │ │ │ │ └── IntArrayValuable.java │ │ │ │ │ ├── vo/ │ │ │ │ │ │ └── CommonResult.java │ │ │ │ │ └── web/ │ │ │ │ │ ├── GlobalExceptionHandler.java │ │ │ │ │ └── GlobalResponseBodyHandler.java │ │ │ │ ├── dto/ │ │ │ │ │ ├── UserAddDTO.java │ │ │ │ │ ├── UserUpdateDTO.java │ │ │ │ │ ├── UserUpdateGenderDTO.java │ │ │ │ │ └── UserUpdateStatusDTO.java │ │ │ │ └── service/ │ │ │ │ └── UserService.java │ │ │ └── resources/ │ │ │ ├── application.yaml │ │ │ └── i18n/ │ │ │ ├── messages.properties │ │ │ ├── messages_en.properties │ │ │ └── messages_ja.properties │ │ └── test/ │ │ └── java/ │ │ └── cn/ │ │ └── iocoder/ │ │ └── springboot/ │ │ └── lab22/ │ │ └── validation/ │ │ └── service/ │ │ └── UserServiceTest.java │ ├── pom.xml │ └── 《芋道 Spring Boot 参数校验 Validation 入门》.md ├── lab-23/ │ ├── lab-springmvc-23-01/ │ │ ├── pom.xml │ │ └── src/ │ │ ├── main/ │ │ │ └── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springboot/ │ │ │ └── lab23/ │ │ │ └── springmvc/ │ │ │ ├── Application.java │ │ │ ├── controller/ │ │ │ │ ├── UserController.java │ │ │ │ └── UserController2.java │ │ │ ├── dto/ │ │ │ │ ├── UserAddDTO.java │ │ │ │ └── UserUpdateDTO.java │ │ │ ├── service/ │ │ │ │ └── UserService.java │ │ │ └── vo/ │ │ │ └── UserVO.java │ │ └── test/ │ │ └── java/ │ │ └── cn/ │ │ └── iocoder/ │ │ └── springboot/ │ │ └── lab23/ │ │ └── springmvc/ │ │ ├── controller/ │ │ │ ├── UserControllerTest.java │ │ │ └── UserControllerTest2.java │ │ └── package-info.java │ ├── lab-springmvc-23-02/ │ │ ├── pom.xml │ │ └── src/ │ │ ├── main/ │ │ │ └── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springboot/ │ │ │ └── lab23/ │ │ │ └── springmvc/ │ │ │ ├── Application.java │ │ │ ├── config/ │ │ │ │ └── SpringMVCConfiguration.java │ │ │ ├── constants/ │ │ │ │ └── ServiceExceptionEnum.java │ │ │ ├── controller/ │ │ │ │ ├── ProductController.java │ │ │ │ └── UserController.java │ │ │ ├── controller2/ │ │ │ │ └── TestController.java │ │ │ ├── core/ │ │ │ │ ├── exception/ │ │ │ │ │ └── ServiceException.java │ │ │ │ ├── interceptor/ │ │ │ │ │ ├── FirstInterceptor.java │ │ │ │ │ ├── SecondInterceptor.java │ │ │ │ │ └── ThirdInterceptor.java │ │ │ │ ├── package-info.java │ │ │ │ ├── servlet/ │ │ │ │ │ ├── TestFilter02.java │ │ │ │ │ ├── TestServlet02.java │ │ │ │ │ └── TestServletContextListener02.java │ │ │ │ ├── vo/ │ │ │ │ │ └── CommonResult.java │ │ │ │ └── web/ │ │ │ │ ├── GlobalExceptionHandler.java │ │ │ │ └── GlobalResponseBodyHandler.java │ │ │ └── vo/ │ │ │ ├── ProductVO.java │ │ │ └── UserVO.java │ │ └── test/ │ │ └── java/ │ │ └── cn/ │ │ └── iocoder/ │ │ └── springboot/ │ │ └── lab23/ │ │ └── springmvc/ │ │ └── package-info.java │ ├── pom.xml │ └── 《芋道 Spring Boot SpringMVC 入门》.md ├── lab-24/ │ ├── lab-24-apidoc-japidocs/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ └── java/ │ │ └── cn/ │ │ └── iocoder/ │ │ └── springboot/ │ │ └── lab24/ │ │ ├── Application.java │ │ ├── TestJApiDocs.java │ │ ├── controller/ │ │ │ └── UserController.java │ │ └── vo/ │ │ ├── UserCreateReqVO.java │ │ ├── UserListReqVO.java │ │ └── UserRespVO.java │ ├── lab-24-apidoc-showdoc/ │ │ ├── pom.xml │ │ ├── showdoc_api.sh │ │ ├── showdoc_db.sh │ │ ├── src/ │ │ │ └── main/ │ │ │ └── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springboot/ │ │ │ └── lab24/ │ │ │ └── apidoc/ │ │ │ ├── ShowDocApplication.java │ │ │ └── controller/ │ │ │ ├── UserController.java │ │ │ └── vo/ │ │ │ ├── UserLoginReqVO.java │ │ │ └── UserLoginRespVO.java │ │ └── swagger.json │ ├── lab-24-apidoc-swagger/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ └── java/ │ │ └── cn/ │ │ └── iocoder/ │ │ └── springboot/ │ │ └── lab24/ │ │ └── apidoc/ │ │ ├── Application.java │ │ ├── config/ │ │ │ └── SwaggerConfiguration.java │ │ ├── controller/ │ │ │ ├── TestController.java │ │ │ └── UserController.java │ │ ├── dto/ │ │ │ ├── UserAddDTO.java │ │ │ └── UserUpdateDTO.java │ │ └── vo/ │ │ └── UserVO.java │ ├── lab-24-apidoc-swagger-knife4j/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ └── java/ │ │ └── cn/ │ │ └── iocoder/ │ │ └── springboot/ │ │ └── lab24/ │ │ └── apidoc/ │ │ ├── Application.java │ │ ├── config/ │ │ │ └── SwaggerConfiguration.java │ │ ├── controller/ │ │ │ ├── TestController.java │ │ │ └── UserController.java │ │ ├── dto/ │ │ │ ├── UserAddDTO.java │ │ │ └── UserUpdateDTO.java │ │ └── vo/ │ │ └── UserVO.java │ ├── lab-24-apidoc-swagger-starter/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springboot/ │ │ │ └── lab24/ │ │ │ ├── Application.java │ │ │ ├── config/ │ │ │ │ └── SwaggerConfiguration.java │ │ │ ├── controller/ │ │ │ │ └── UserController.java │ │ │ ├── dto/ │ │ │ │ ├── UserAddDTO.java │ │ │ │ └── UserUpdateDTO.java │ │ │ └── vo/ │ │ │ └── UserVO.java │ │ └── resources/ │ │ └── application.yaml │ ├── pom.xml │ ├── 《芋道 Spring Boot API 接口文档 JApiDocs 入门》.md │ ├── 《芋道 Spring Boot API 接口文档 ShowDoc 入门》.md │ ├── 《芋道 Spring Boot API 接口文档 Swagger Starter 入门》.md │ └── 《芋道 Spring Boot API 接口文档 Swagger 入门》.md ├── lab-25/ │ ├── lab-websocket-25-01/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ └── java/ │ │ └── cn/ │ │ └── iocoder/ │ │ └── springboot/ │ │ └── lab25/ │ │ └── springwebsocket/ │ │ ├── Application.java │ │ ├── config/ │ │ │ └── WebSocketConfiguration.java │ │ ├── handler/ │ │ │ ├── AuthMessageHandler.java │ │ │ ├── MessageHandler.java │ │ │ ├── SendToAllHandler.java │ │ │ └── SendToOneHandler.java │ │ ├── message/ │ │ │ ├── AuthRequest.java │ │ │ ├── AuthResponse.java │ │ │ ├── Message.java │ │ │ ├── SendResponse.java │ │ │ ├── SendToAllRequest.java │ │ │ ├── SendToOneRequest.java │ │ │ ├── SendToUserRequest.java │ │ │ └── UserJoinNoticeRequest.java │ │ ├── util/ │ │ │ └── WebSocketUtil.java │ │ └── websocket/ │ │ └── WebsocketServerEndpoint.java │ ├── lab-websocket-25-02/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ └── java/ │ │ └── cn/ │ │ └── iocoder/ │ │ └── springboot/ │ │ └── lab25/ │ │ └── springwebsocket/ │ │ ├── Application.java │ │ ├── config/ │ │ │ └── WebSocketConfiguration.java │ │ ├── handler/ │ │ │ ├── AuthMessageHandler.java │ │ │ ├── MessageHandler.java │ │ │ ├── SendToAllHandler.java │ │ │ └── SendToOneHandler.java │ │ ├── message/ │ │ │ ├── AuthRequest.java │ │ │ ├── AuthResponse.java │ │ │ ├── Message.java │ │ │ ├── SendResponse.java │ │ │ ├── SendToAllRequest.java │ │ │ ├── SendToOneRequest.java │ │ │ ├── SendToUserRequest.java │ │ │ └── UserJoinNoticeRequest.java │ │ ├── util/ │ │ │ └── WebSocketUtil.java │ │ └── websocket/ │ │ ├── DemoWebSocketHandler.java │ │ └── DemoWebSocketShakeInterceptor.java │ ├── lab-websocket-25-03/ │ │ ├── pom.xml │ │ └── src/ │ │ ├── main/ │ │ │ └── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springboot/ │ │ │ └── lab25/ │ │ │ └── springwebsocket/ │ │ │ ├── Application.java │ │ │ ├── config/ │ │ │ │ └── WebSocketConfiguration.java │ │ │ ├── controller/ │ │ │ │ └── SendController.java │ │ │ └── message/ │ │ │ ├── AuthRequest.java │ │ │ ├── AuthResponse.java │ │ │ ├── Message.java │ │ │ ├── SendResponse.java │ │ │ ├── SendToAllRequest.java │ │ │ ├── SendToOneRequest.java │ │ │ ├── SendToUserRequest.java │ │ │ └── UserJoinNoticeRequest.java │ │ └── test/ │ │ └── java/ │ │ └── cn/ │ │ └── iocoder/ │ │ └── springboot/ │ │ └── lab25/ │ │ └── springwebsocket/ │ │ ├── Main.java │ │ └── client/ │ │ ├── DemoWebSocketStompClient.java │ │ └── handler/ │ │ ├── ConnectHandler.java │ │ └── SendToUserRequestHandler.java │ ├── pom.xml │ └── 《芋道 Spring Boot WebSocket 入门》.md ├── lab-26/ │ ├── lab-26-distributed-session-01/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springboot/ │ │ │ └── lab26/ │ │ │ └── distributedsession/ │ │ │ ├── Application.java │ │ │ ├── config/ │ │ │ │ └── SessionConfiguration.java │ │ │ └── controller/ │ │ │ └── SessionController.java │ │ └── resources/ │ │ └── application.yaml │ ├── lab-26-distributed-session-02/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springboot/ │ │ │ └── lab26/ │ │ │ └── distributedsession/ │ │ │ ├── Application.java │ │ │ ├── config/ │ │ │ │ └── SessionConfiguration.java │ │ │ └── controller/ │ │ │ └── SessionController.java │ │ └── resources/ │ │ └── application.yaml │ ├── lab-26-distributed-session-springsecurity/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springboot/ │ │ │ └── lab26/ │ │ │ └── distributedsession/ │ │ │ ├── Application.java │ │ │ ├── config/ │ │ │ │ └── SessionConfiguration.java │ │ │ └── controller/ │ │ │ └── SessionController.java │ │ └── resources/ │ │ └── application.yaml │ ├── pom.xml │ └── 《芋道 Spring Boot 分布式 Session 入门》.md ├── lab-27/ │ ├── lab-27-webflux-01/ │ │ ├── pom.xml │ │ └── src/ │ │ ├── main/ │ │ │ └── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springboot/ │ │ │ └── lab27/ │ │ │ └── springwebflux/ │ │ │ ├── Application.java │ │ │ ├── controller/ │ │ │ │ ├── UserController.java │ │ │ │ └── UserRouter.java │ │ │ ├── dto/ │ │ │ │ ├── UserAddDTO.java │ │ │ │ └── UserUpdateDTO.java │ │ │ ├── service/ │ │ │ │ └── UserService.java │ │ │ └── vo/ │ │ │ └── UserVO.java │ │ └── test/ │ │ └── java/ │ │ └── cn/ │ │ └── iocoder/ │ │ └── springboot/ │ │ └── lab27/ │ │ └── springwebflux/ │ │ ├── controller/ │ │ │ ├── UserControllerTest.java │ │ │ └── UserControllerTest2.java │ │ └── package-info.java │ ├── lab-27-webflux-02/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ └── java/ │ │ └── cn/ │ │ └── iocoder/ │ │ └── springboot/ │ │ └── lab27/ │ │ └── springwebflux/ │ │ ├── Application.java │ │ ├── config/ │ │ │ └── WebFluxConfiguration.java │ │ ├── constants/ │ │ │ └── ServiceExceptionEnum.java │ │ ├── controller/ │ │ │ ├── UserController.java │ │ │ └── UserRouter.java │ │ ├── controller2/ │ │ │ └── TestController.java │ │ ├── core/ │ │ │ ├── exception/ │ │ │ │ └── ServiceException.java │ │ │ ├── filter/ │ │ │ │ └── DemoWebFilter.java │ │ │ ├── package-info.java │ │ │ ├── vo/ │ │ │ │ └── CommonResult.java │ │ │ └── web/ │ │ │ ├── GlobalExceptionHandler.java │ │ │ └── GlobalResponseBodyHandler.java │ │ └── vo/ │ │ └── UserVO.java │ ├── lab-27-webflux-03/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ └── java/ │ │ └── cn/ │ │ └── iocoder/ │ │ └── springboot/ │ │ └── lab27/ │ │ └── springwebflux/ │ │ ├── Application.java │ │ ├── controller/ │ │ │ └── UserController.java │ │ ├── core/ │ │ │ ├── package-info.java │ │ │ └── servlet/ │ │ │ ├── TestFilter02.java │ │ │ ├── TestServlet02.java │ │ │ └── TestServletContextListener02.java │ │ └── vo/ │ │ └── UserVO.java │ ├── lab-27-webflux-elasticsearch/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springboot/ │ │ │ └── lab27/ │ │ │ └── springwebflux/ │ │ │ ├── Application.java │ │ │ ├── config/ │ │ │ │ └── ElasticsearchConfiguration.java │ │ │ ├── controller/ │ │ │ │ └── UserController.java │ │ │ ├── dao/ │ │ │ │ └── UserRepository.java │ │ │ ├── dataobject/ │ │ │ │ └── UserDO.java │ │ │ ├── dto/ │ │ │ │ ├── UserAddDTO.java │ │ │ │ └── UserUpdateDTO.java │ │ │ └── vo/ │ │ │ └── UserVO.java │ │ └── resources/ │ │ └── application.yaml │ ├── lab-27-webflux-mongodb/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springboot/ │ │ │ └── lab27/ │ │ │ └── springwebflux/ │ │ │ ├── Application.java │ │ │ ├── controller/ │ │ │ │ └── UserController.java │ │ │ ├── dao/ │ │ │ │ └── UserRepository.java │ │ │ ├── dataobject/ │ │ │ │ └── UserDO.java │ │ │ ├── dto/ │ │ │ │ ├── UserAddDTO.java │ │ │ │ └── UserUpdateDTO.java │ │ │ └── vo/ │ │ │ └── UserVO.java │ │ └── resources/ │ │ └── application.yaml │ ├── lab-27-webflux-r2dbc/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springboot/ │ │ │ └── lab27/ │ │ │ └── springwebflux/ │ │ │ ├── Application.java │ │ │ ├── config/ │ │ │ │ └── DatabaseConfiguration.java │ │ │ ├── controller/ │ │ │ │ └── UserController.java │ │ │ ├── dao/ │ │ │ │ └── UserRepository.java │ │ │ ├── dataobject/ │ │ │ │ └── UserDO.java │ │ │ ├── dto/ │ │ │ │ ├── UserAddDTO.java │ │ │ │ └── UserUpdateDTO.java │ │ │ └── vo/ │ │ │ └── UserVO.java │ │ └── resources/ │ │ ├── application.yaml │ │ └── sql/ │ │ └── users.sql │ ├── lab-27-webflux-redis/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springboot/ │ │ │ └── lab27/ │ │ │ └── springwebflux/ │ │ │ ├── Application.java │ │ │ ├── cacheobject/ │ │ │ │ └── UserCacheObject.java │ │ │ ├── config/ │ │ │ │ └── RedisConfiguration.java │ │ │ └── controller/ │ │ │ └── UserController.java │ │ └── resources/ │ │ └── application.yaml │ ├── pom.xml │ └── 《芋道 Spring Boot 响应式 WebFlux 入门》.md ├── lab-28/ │ ├── lab-28-task-demo/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springboot/ │ │ │ └── lab28/ │ │ │ └── task/ │ │ │ ├── Application.java │ │ │ ├── config/ │ │ │ │ └── ScheduleConfiguration.java │ │ │ └── job/ │ │ │ └── DemoJob.java │ │ └── resources/ │ │ └── application.yaml │ ├── lab-28-task-quartz-jdbc/ │ │ ├── pom.xml │ │ └── src/ │ │ ├── main/ │ │ │ ├── java/ │ │ │ │ └── cn/ │ │ │ │ └── iocoder/ │ │ │ │ └── springboot/ │ │ │ │ └── lab28/ │ │ │ │ └── task/ │ │ │ │ ├── Application.java │ │ │ │ ├── Application02.java │ │ │ │ ├── config/ │ │ │ │ │ ├── DataSourceConfiguration.java │ │ │ │ │ └── ScheduleConfiguration.java │ │ │ │ ├── job/ │ │ │ │ │ ├── DemoJob01.java │ │ │ │ │ └── DemoJob02.java │ │ │ │ └── service/ │ │ │ │ └── DemoService.java │ │ │ └── resources/ │ │ │ └── application.yaml │ │ └── test/ │ │ └── java/ │ │ └── cn/ │ │ └── iocoder/ │ │ └── springboot/ │ │ └── lab28/ │ │ └── task/ │ │ └── QuartzSchedulerTest.java │ ├── lab-28-task-quartz-memory/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springboot/ │ │ │ └── lab28/ │ │ │ └── task/ │ │ │ ├── Application.java │ │ │ ├── config/ │ │ │ │ └── ScheduleConfiguration.java │ │ │ ├── job/ │ │ │ │ ├── DemoJob01.java │ │ │ │ └── DemoJob02.java │ │ │ └── service/ │ │ │ └── DemoService.java │ │ └── resources/ │ │ └── application.yaml │ ├── lab-28-task-xxl-job/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springboot/ │ │ │ └── lab28/ │ │ │ └── task/ │ │ │ ├── Application.java │ │ │ ├── config/ │ │ │ │ └── XxlJobConfiguration.java │ │ │ └── job/ │ │ │ └── DemoJob.java │ │ └── resources/ │ │ └── application.yaml │ ├── pom.xml │ └── 《芋道 Spring Boot 定时任务入门》.md ├── lab-29/ │ ├── lab-29-async-demo/ │ │ ├── pom.xml │ │ └── src/ │ │ ├── main/ │ │ │ ├── java/ │ │ │ │ └── cn/ │ │ │ │ └── iocoder/ │ │ │ │ └── springboot/ │ │ │ │ └── lab29/ │ │ │ │ └── asynctask/ │ │ │ │ ├── Application.java │ │ │ │ ├── Demo.java │ │ │ │ ├── config/ │ │ │ │ │ └── AsyncConfig.java │ │ │ │ ├── core/ │ │ │ │ │ ├── async/ │ │ │ │ │ │ └── GlobalAsyncExceptionHandler.java │ │ │ │ │ └── package-info.java │ │ │ │ └── service/ │ │ │ │ └── DemoService.java │ │ │ └── resources/ │ │ │ └── application.yaml │ │ └── test/ │ │ └── java/ │ │ └── cn/ │ │ └── iocoder/ │ │ └── springboot/ │ │ └── lab29/ │ │ └── asynctask/ │ │ ├── package-info.java │ │ └── service/ │ │ └── DemoServiceTest.java │ ├── lab-29-async-two/ │ │ ├── pom.xml │ │ └── src/ │ │ ├── main/ │ │ │ ├── java/ │ │ │ │ └── cn/ │ │ │ │ └── iocoder/ │ │ │ │ └── springboot/ │ │ │ │ └── lab29/ │ │ │ │ └── asynctask/ │ │ │ │ ├── Application.java │ │ │ │ ├── config/ │ │ │ │ │ └── AsyncConfig.java │ │ │ │ └── service/ │ │ │ │ └── DemoService.java │ │ │ └── resources/ │ │ │ └── application.yaml │ │ └── test/ │ │ └── java/ │ │ └── cn/ │ │ └── iocoder/ │ │ └── springboot/ │ │ └── lab29/ │ │ └── asynctask/ │ │ ├── package-info.java │ │ └── service/ │ │ └── DemoServiceTest.java │ ├── pom.xml │ └── 《芋道 Spring Boot 异步任务入门》.md ├── lab-30/ │ ├── lab-30-dubbo-annotations-demo/ │ │ ├── pom.xml │ │ ├── user-rpc-service-api-02/ │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ └── main/ │ │ │ └── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springboot/ │ │ │ └── lab30/ │ │ │ └── rpc/ │ │ │ ├── api/ │ │ │ │ └── UserRpcService.java │ │ │ └── dto/ │ │ │ └── UserDTO.java │ │ ├── user-rpc-service-consumer-02/ │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ └── main/ │ │ │ ├── java/ │ │ │ │ └── cn/ │ │ │ │ └── iocoder/ │ │ │ │ └── springboot/ │ │ │ │ └── lab30/ │ │ │ │ └── rpc/ │ │ │ │ └── ConsumerApplication.java │ │ │ └── resources/ │ │ │ └── application.yaml │ │ └── user-rpc-service-provider-02/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springboot/ │ │ │ └── lab30/ │ │ │ └── rpc/ │ │ │ ├── ProviderApplication.java │ │ │ └── service/ │ │ │ └── UserRpcServiceImpl.java │ │ └── resources/ │ │ └── application.yaml │ ├── lab-30-dubbo-annotations-nacos/ │ │ ├── pom.xml │ │ ├── user-rpc-service-api-03/ │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ └── main/ │ │ │ └── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springboot/ │ │ │ └── lab30/ │ │ │ └── rpc/ │ │ │ ├── api/ │ │ │ │ └── UserRpcService.java │ │ │ └── dto/ │ │ │ └── UserDTO.java │ │ ├── user-rpc-service-consumer-03/ │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ └── main/ │ │ │ ├── java/ │ │ │ │ └── cn/ │ │ │ │ └── iocoder/ │ │ │ │ └── springboot/ │ │ │ │ └── lab30/ │ │ │ │ └── rpc/ │ │ │ │ └── ConsumerApplication.java │ │ │ └── resources/ │ │ │ └── application.yaml │ │ └── user-rpc-service-provider-03/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springboot/ │ │ │ └── lab30/ │ │ │ └── rpc/ │ │ │ ├── ProviderApplication.java │ │ │ └── service/ │ │ │ └── UserRpcServiceImpl.java │ │ └── resources/ │ │ └── application.yaml │ ├── lab-30-dubbo-annotations-sentinel/ │ │ ├── pom.xml │ │ ├── user-rpc-service-api-04/ │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ └── main/ │ │ │ └── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springboot/ │ │ │ └── lab30/ │ │ │ └── rpc/ │ │ │ ├── api/ │ │ │ │ └── UserRpcService.java │ │ │ └── dto/ │ │ │ └── UserDTO.java │ │ ├── user-rpc-service-consumer-04/ │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ └── main/ │ │ │ ├── java/ │ │ │ │ └── cn/ │ │ │ │ └── iocoder/ │ │ │ │ └── springboot/ │ │ │ │ └── lab30/ │ │ │ │ └── rpc/ │ │ │ │ ├── ConsumerApplication.java │ │ │ │ └── controller/ │ │ │ │ └── UserController.java │ │ │ └── resources/ │ │ │ ├── application.yaml │ │ │ └── sentinel.properties │ │ └── user-rpc-service-provider-04/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springboot/ │ │ │ └── lab30/ │ │ │ └── rpc/ │ │ │ ├── ProviderApplication.java │ │ │ └── service/ │ │ │ └── UserRpcServiceImpl.java │ │ └── resources/ │ │ ├── application.yaml │ │ └── sentinel.properties │ ├── lab-30-dubbo-xml-demo/ │ │ ├── pom.xml │ │ ├── user-rpc-service-api/ │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ └── main/ │ │ │ └── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springboot/ │ │ │ └── lab30/ │ │ │ └── rpc/ │ │ │ ├── api/ │ │ │ │ └── UserRpcService.java │ │ │ ├── core/ │ │ │ │ ├── ServiceException.java │ │ │ │ └── ServiceExceptionEnum.java │ │ │ └── dto/ │ │ │ ├── UserAddDTO.java │ │ │ └── UserDTO.java │ │ ├── user-rpc-service-consumer/ │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ └── main/ │ │ │ ├── java/ │ │ │ │ └── cn/ │ │ │ │ └── iocoder/ │ │ │ │ └── springboot/ │ │ │ │ └── lab30/ │ │ │ │ └── rpc/ │ │ │ │ └── ConsumerApplication.java │ │ │ └── resources/ │ │ │ ├── application.yaml │ │ │ └── dubbo.xml │ │ └── user-rpc-service-provider/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springboot/ │ │ │ └── lab30/ │ │ │ └── rpc/ │ │ │ ├── ProviderApplication.java │ │ │ ├── filter/ │ │ │ │ └── DubboExceptionFilter.java │ │ │ └── service/ │ │ │ └── UserRpcServiceImpl.java │ │ └── resources/ │ │ ├── META-INF/ │ │ │ └── dubbo/ │ │ │ └── org.apache.dubbo.rpc.Filter │ │ ├── application.yaml │ │ └── dubbo.xml │ ├── pom.xml │ ├── 《芋道 Dubbo Admin 快速入门》.md │ ├── 《芋道 Dubbo Swagger 快速入门》.md │ └── 《芋道 Spring Boot Dubbo 入门》.md ├── lab-31/ │ ├── lab-31-rocketmq-demo/ │ │ ├── pom.xml │ │ └── src/ │ │ ├── main/ │ │ │ ├── java/ │ │ │ │ └── cn/ │ │ │ │ └── iocoder/ │ │ │ │ └── springboot/ │ │ │ │ └── lab31/ │ │ │ │ └── rocketmqdemo/ │ │ │ │ ├── Application.java │ │ │ │ ├── consumer/ │ │ │ │ │ ├── Demo01AConsumer.java │ │ │ │ │ ├── Demo01Consumer.java │ │ │ │ │ ├── Demo02Consumer.java │ │ │ │ │ ├── Demo03Consumer.java │ │ │ │ │ ├── Demo04Consumer.java │ │ │ │ │ ├── Demo05Consumer.java │ │ │ │ │ ├── Demo06Consumer.java │ │ │ │ │ └── Demo07Consumer.java │ │ │ │ ├── core/ │ │ │ │ │ └── ExtRocketMQTemplate.java │ │ │ │ ├── message/ │ │ │ │ │ ├── Demo01Message.java │ │ │ │ │ ├── Demo02Message.java │ │ │ │ │ ├── Demo03Message.java │ │ │ │ │ ├── Demo04Message.java │ │ │ │ │ ├── Demo05Message.java │ │ │ │ │ ├── Demo06Message.java │ │ │ │ │ └── Demo07Message.java │ │ │ │ └── producer/ │ │ │ │ ├── Demo01Producer.java │ │ │ │ ├── Demo02Producer.java │ │ │ │ ├── Demo03Producer.java │ │ │ │ ├── Demo04Producer.java │ │ │ │ ├── Demo05Producer.java │ │ │ │ ├── Demo06Producer.java │ │ │ │ └── Demo07Producer.java │ │ │ └── resources/ │ │ │ └── application.yaml │ │ └── test/ │ │ └── java/ │ │ └── cn/ │ │ └── iocoder/ │ │ └── springboot/ │ │ └── lab31/ │ │ └── rocketmqdemo/ │ │ ├── package-info.java │ │ └── producer/ │ │ ├── Demo01ProducerTest.java │ │ ├── Demo02ProducerTest.java │ │ ├── Demo03ProducerTest.java │ │ ├── Demo04ProducerTest.java │ │ ├── Demo05ProducerTest.java │ │ ├── Demo06ProducerTest.java │ │ └── Demo07ProducerTest.java │ ├── lab-31-rocketmq-ons/ │ │ ├── pom.xml │ │ └── src/ │ │ ├── main/ │ │ │ ├── java/ │ │ │ │ └── cn/ │ │ │ │ └── iocoder/ │ │ │ │ └── springboot/ │ │ │ │ └── lab31/ │ │ │ │ └── rocketmqdemo/ │ │ │ │ ├── Application.java │ │ │ │ ├── consumer/ │ │ │ │ │ └── Demo01Consumer.java │ │ │ │ ├── message/ │ │ │ │ │ └── Demo01Message.java │ │ │ │ └── producer/ │ │ │ │ └── Demo01Producer.java │ │ │ └── resources/ │ │ │ └── application.yaml │ │ └── test/ │ │ └── java/ │ │ └── cn/ │ │ └── iocoder/ │ │ └── springboot/ │ │ └── lab31/ │ │ └── rocketmqdemo/ │ │ ├── package-info.java │ │ └── producer/ │ │ └── Demo01ProducerTest.java │ ├── pom.xml │ └── 《芋道 Spring Boot 消息队列 RocketMQ 入门》.md ├── lab-32/ │ ├── lab-32-activemq-demo/ │ │ ├── pom.xml │ │ └── src/ │ │ ├── main/ │ │ │ ├── java/ │ │ │ │ └── cn/ │ │ │ │ └── iocoder/ │ │ │ │ └── springboot/ │ │ │ │ └── lab32/ │ │ │ │ └── activemqdemo/ │ │ │ │ ├── Application.java │ │ │ │ ├── consumer/ │ │ │ │ │ └── Demo01Consumer.java │ │ │ │ ├── message/ │ │ │ │ │ └── Demo01Message.java │ │ │ │ └── producer/ │ │ │ │ └── Demo01Producer.java │ │ │ └── resources/ │ │ │ └── application.yaml │ │ └── test/ │ │ └── java/ │ │ └── cn/ │ │ └── iocoder/ │ │ └── springboot/ │ │ └── lab32/ │ │ └── activemqdemo/ │ │ ├── package-info.java │ │ └── producer/ │ │ └── Demo01ProducerTest.java │ ├── lab-32-activemq-demo-concurrency/ │ │ ├── pom.xml │ │ └── src/ │ │ ├── main/ │ │ │ ├── java/ │ │ │ │ └── cn/ │ │ │ │ └── iocoder/ │ │ │ │ └── springboot/ │ │ │ │ └── lab32/ │ │ │ │ └── activemqdemo/ │ │ │ │ ├── Application.java │ │ │ │ ├── consumer/ │ │ │ │ │ └── Demo03Consumer.java │ │ │ │ ├── message/ │ │ │ │ │ └── Demo03Message.java │ │ │ │ └── producer/ │ │ │ │ └── Demo03Producer.java │ │ │ └── resources/ │ │ │ └── application.yaml │ │ └── test/ │ │ └── java/ │ │ └── cn/ │ │ └── iocoder/ │ │ └── springboot/ │ │ └── lab32/ │ │ └── activemqdemo/ │ │ ├── package-info.java │ │ └── producer/ │ │ └── Demo03ProducerTest.java │ ├── lab-32-activemq-demo-consume-retry/ │ │ ├── pom.xml │ │ └── src/ │ │ ├── main/ │ │ │ ├── java/ │ │ │ │ └── cn/ │ │ │ │ └── iocoder/ │ │ │ │ └── springboot/ │ │ │ │ └── lab32/ │ │ │ │ └── activemqdemo/ │ │ │ │ ├── Application.java │ │ │ │ ├── config/ │ │ │ │ │ └── ActiveMQConfig.java │ │ │ │ ├── consumer/ │ │ │ │ │ └── Demo05Consumer.java │ │ │ │ ├── message/ │ │ │ │ │ └── Demo05Message.java │ │ │ │ └── producer/ │ │ │ │ └── Demo05Producer.java │ │ │ └── resources/ │ │ │ └── application.yaml │ │ └── test/ │ │ └── java/ │ │ └── cn/ │ │ └── iocoder/ │ │ └── springboot/ │ │ └── lab32/ │ │ └── activemqdemo/ │ │ ├── package-info.java │ │ └── producer/ │ │ └── Demo05ProducerTest.java │ ├── lab-32-activemq-demo-delay/ │ │ ├── pom.xml │ │ └── src/ │ │ ├── main/ │ │ │ ├── java/ │ │ │ │ └── cn/ │ │ │ │ └── iocoder/ │ │ │ │ └── springboot/ │ │ │ │ └── lab32/ │ │ │ │ └── activemqdemo/ │ │ │ │ ├── Application.java │ │ │ │ ├── consumer/ │ │ │ │ │ └── Demo02Consumer.java │ │ │ │ ├── message/ │ │ │ │ │ └── Demo02Message.java │ │ │ │ └── producer/ │ │ │ │ └── Demo02Producer.java │ │ │ └── resources/ │ │ │ └── application.yaml │ │ └── test/ │ │ └── java/ │ │ └── cn/ │ │ └── iocoder/ │ │ └── springboot/ │ │ └── lab32/ │ │ └── activemqdemo/ │ │ ├── package-info.java │ │ └── producer/ │ │ └── Demo02ProducerTest.java │ ├── lab-32-activemq-demo-message-model/ │ │ ├── pom.xml │ │ └── src/ │ │ ├── main/ │ │ │ ├── java/ │ │ │ │ └── cn/ │ │ │ │ └── iocoder/ │ │ │ │ └── springboot/ │ │ │ │ └── lab32/ │ │ │ │ └── activemqdemo/ │ │ │ │ ├── Application.java │ │ │ │ ├── config/ │ │ │ │ │ └── ActiveMQConfig.java │ │ │ │ ├── consumer/ │ │ │ │ │ ├── BroadcastConsumer.java │ │ │ │ │ └── ClusteringConsumer.java │ │ │ │ ├── message/ │ │ │ │ │ ├── BroadcastMessage.java │ │ │ │ │ └── ClusteringMessage.java │ │ │ │ └── producer/ │ │ │ │ ├── BroadcastProducer.java │ │ │ │ └── ClusteringProducer.java │ │ │ └── resources/ │ │ │ └── application.yaml │ │ └── test/ │ │ └── java/ │ │ └── cn/ │ │ └── iocoder/ │ │ └── springboot/ │ │ └── lab32/ │ │ └── activemqdemo/ │ │ ├── package-info.java │ │ └── producer/ │ │ ├── BroadcastProducerTest.java │ │ └── ClusteringProducerTest.java │ ├── lab-32-activemq-demo-orderly/ │ │ ├── pom.xml │ │ └── src/ │ │ ├── main/ │ │ │ ├── java/ │ │ │ │ └── cn/ │ │ │ │ └── iocoder/ │ │ │ │ └── springboot/ │ │ │ │ └── lab32/ │ │ │ │ └── activemqdemo/ │ │ │ │ ├── Application.java │ │ │ │ ├── consumer/ │ │ │ │ │ └── Demo04Consumer.java │ │ │ │ ├── message/ │ │ │ │ │ └── Demo04Message.java │ │ │ │ └── producer/ │ │ │ │ └── Demo04Producer.java │ │ │ └── resources/ │ │ │ └── application.yaml │ │ └── test/ │ │ └── java/ │ │ └── cn/ │ │ └── iocoder/ │ │ └── springboot/ │ │ └── lab32/ │ │ └── activemqdemo/ │ │ ├── package-info.java │ │ └── producer/ │ │ └── Demo04ProducerTest.java │ ├── lab-32-activemq-native/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ └── java/ │ │ └── cn/ │ │ └── iocoder/ │ │ └── springboot/ │ │ └── lab32/ │ │ └── activemqdemo/ │ │ ├── ActiveMQConsumer.java │ │ └── ActiveMQProducer.java │ ├── pom.xml │ └── 《芋道 Spring Boot 消息队列 ActiveMQ 入门》.md ├── lab-33/ │ ├── lab-33-shiro-demo/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springboot/ │ │ │ └── lab01/ │ │ │ └── shirodemo/ │ │ │ ├── Application.java │ │ │ ├── config/ │ │ │ │ └── ShiroConfig.java │ │ │ └── controller/ │ │ │ ├── DemoController.java │ │ │ ├── SecurityController.java │ │ │ └── TestController.java │ │ └── resources/ │ │ └── static/ │ │ └── login.html │ ├── pom.xml │ └── 《芋道 Spring Boot 安全框架 Shiro 入门》.md ├── lab-34/ │ ├── lab-34-actuator-demo/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springboot/ │ │ │ └── lab34/ │ │ │ └── actuatordemo/ │ │ │ └── Application.java │ │ └── resources/ │ │ └── application.yaml │ ├── lab-34-actuator-demo-auditevents/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springboot/ │ │ │ └── lab34/ │ │ │ └── actuatordemo/ │ │ │ ├── Application.java │ │ │ └── config/ │ │ │ └── ActuateConfig.java │ │ └── resources/ │ │ └── application.yaml │ ├── lab-34-actuator-demo-custom-endpoint/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springboot/ │ │ │ └── lab34/ │ │ │ └── actuatordemo/ │ │ │ ├── Application.java │ │ │ └── endpoint/ │ │ │ └── DemoEndPoint.java │ │ └── resources/ │ │ └── application.yaml │ ├── lab-34-actuator-demo-health/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springboot/ │ │ │ └── lab34/ │ │ │ └── actuatordemo/ │ │ │ ├── Application.java │ │ │ └── actuate/ │ │ │ └── DemoHealthIndicator.java │ │ └── resources/ │ │ └── application.yaml │ ├── lab-34-actuator-demo-httptrace/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springboot/ │ │ │ └── lab34/ │ │ │ └── actuatordemo/ │ │ │ ├── Application.java │ │ │ └── config/ │ │ │ └── ActuateConfig.java │ │ └── resources/ │ │ └── application.yaml │ ├── lab-34-actuator-demo-info/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springboot/ │ │ │ └── lab34/ │ │ │ └── actuatordemo/ │ │ │ ├── Application.java │ │ │ ├── config/ │ │ │ │ └── ActuateConfig.java │ │ │ └── demo/ │ │ │ └── DemoInfoContributor.java │ │ └── resources/ │ │ └── application.yaml │ ├── lab-34-actuator-demo-metrics/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springboot/ │ │ │ └── lab34/ │ │ │ └── actuatordemo/ │ │ │ ├── Application.java │ │ │ └── controller/ │ │ │ ├── DemoController.java │ │ │ └── ExampleController.java │ │ └── resources/ │ │ └── application.yaml │ ├── lab-34-actuator-demo-security/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springboot/ │ │ │ └── lab34/ │ │ │ └── actuatordemo/ │ │ │ ├── Application.java │ │ │ └── config/ │ │ │ └── SecurityConfig.java │ │ └── resources/ │ │ └── application.yaml │ ├── lab-34-actuator-test/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springboot/ │ │ │ └── lab34/ │ │ │ └── actuatordemo/ │ │ │ ├── Application.java │ │ │ └── controller/ │ │ │ └── TestController.java │ │ └── resources/ │ │ └── application.yaml │ ├── pom.xml │ └── 《芋道 Spring Boot 监控端点 Actuator 入门》.md ├── lab-35/ │ ├── lab-35-admin-01-adminserver/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ └── java/ │ │ └── cn/ │ │ └── iocoder/ │ │ └── springboot/ │ │ └── lab35/ │ │ └── adminserver/ │ │ └── AdminServerApplication.java │ ├── lab-35-admin-01-demo-application/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springboot/ │ │ │ └── lab35/ │ │ │ └── demo/ │ │ │ └── DemoApplication.java │ │ └── resources/ │ │ └── application.yaml │ ├── lab-35-admin-02-adminserver/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springboot/ │ │ │ └── lab35/ │ │ │ └── adminserver/ │ │ │ └── AdminServerApplication.java │ │ └── resources/ │ │ └── application.yaml │ ├── lab-35-admin-02-demo-application/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springboot/ │ │ │ └── lab35/ │ │ │ └── demo/ │ │ │ ├── Demo01Application.java │ │ │ └── Demo02Application.java │ │ └── resources/ │ │ └── application.yaml │ ├── lab-35-admin-02-eurekaserver/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springboot/ │ │ │ └── lab35/ │ │ │ └── eurekaserver/ │ │ │ └── EurekaServerApplication.java │ │ └── resources/ │ │ └── application.yaml │ ├── lab-35-admin-03-adminserver/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ └── java/ │ │ └── cn/ │ │ └── iocoder/ │ │ └── springboot/ │ │ └── lab35/ │ │ └── adminserver/ │ │ ├── AdminServerApplication.java │ │ └── config/ │ │ └── SecurityConfig.java │ ├── lab-35-admin-03-demo-application/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springboot/ │ │ │ └── lab35/ │ │ │ └── demo/ │ │ │ └── DemoApplication.java │ │ └── resources/ │ │ └── application.yaml │ ├── lab-35-admin-04-adminserver/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springboot/ │ │ │ └── lab35/ │ │ │ └── adminserver/ │ │ │ └── AdminServerApplication.java │ │ └── resources/ │ │ └── application.yaml │ ├── lab-35-admin-05-adminserver/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ └── java/ │ │ └── cn/ │ │ └── iocoder/ │ │ └── springboot/ │ │ └── lab35/ │ │ └── adminserver/ │ │ ├── AdminServerApplication.java │ │ └── notify/ │ │ └── LoggerNotifier.java │ ├── pom.xml │ └── 《芋道 Spring Boot 监控工具 Admin 入门》.md ├── lab-36/ │ ├── lab-36-prometheus-demo/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springboot/ │ │ │ └── lab36/ │ │ │ └── prometheusdemo/ │ │ │ └── Application.java │ │ └── resources/ │ │ └── application.yaml │ ├── pom.xml │ └── 《芋道 Spring Boot 监控平台 Prometheus + Grafana 入门》.md ├── lab-37/ │ ├── lab-37-logging-actuator/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springboot/ │ │ │ └── lab37/ │ │ │ └── loggingdemo/ │ │ │ ├── Application.java │ │ │ └── controller/ │ │ │ └── DemoController.java │ │ └── resources/ │ │ └── application.yaml │ ├── lab-37-logging-aop/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springboot/ │ │ │ └── lab37/ │ │ │ └── loggingdemo/ │ │ │ ├── Application.java │ │ │ ├── aspect/ │ │ │ │ └── HttpAccessAspect.java │ │ │ └── controller/ │ │ │ └── DemoController.java │ │ └── resources/ │ │ └── application.yaml │ ├── lab-37-logging-debug/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springboot/ │ │ │ └── lab37/ │ │ │ └── loggingdemo/ │ │ │ ├── Application.java │ │ │ └── controller/ │ │ │ └── DemoController.java │ │ └── resources/ │ │ └── application.yaml │ ├── lab-37-logging-demo/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springboot/ │ │ │ └── lab37/ │ │ │ └── loggingdemo/ │ │ │ ├── Application.java │ │ │ └── controller/ │ │ │ └── DemoController.java │ │ └── resources/ │ │ └── application.yaml │ ├── lab-37-logging-log4j2/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springboot/ │ │ │ └── lab37/ │ │ │ └── loggingdemo/ │ │ │ └── Application.java │ │ └── resources/ │ │ ├── application.yaml │ │ └── log4j2-spring.xml │ ├── lab-37-logging-logback/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springboot/ │ │ │ └── lab37/ │ │ │ └── loggingdemo/ │ │ │ └── Application.java │ │ └── resources/ │ │ ├── application.yaml │ │ └── logback-spring.xml │ ├── lab-37-logging-multi-env/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springboot/ │ │ │ └── lab37/ │ │ │ └── loggingdemo/ │ │ │ └── Application.java │ │ └── resources/ │ │ ├── application-dev.yaml │ │ └── application-prod.yaml │ ├── pom.xml │ └── 《芋道 Spring Boot 日志集成 Logging 入门》.md ├── lab-38/ │ ├── lab-38-elk-demo/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springboot/ │ │ │ └── lab38/ │ │ │ └── elkdemo/ │ │ │ └── Application.java │ │ └── resources/ │ │ └── application.yaml │ ├── pom.xml │ └── 《芋道 Spring Boot 日志平台 ELK + Filebeat 入门》.md ├── lab-39/ │ ├── lab-39-activemq/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springboot/ │ │ │ └── lab39/ │ │ │ └── skywalkingdemo/ │ │ │ ├── ActiveMQApplication.java │ │ │ ├── consumer/ │ │ │ │ └── DemoConsumer.java │ │ │ ├── controller/ │ │ │ │ └── DemoController.java │ │ │ ├── message/ │ │ │ │ └── DemoMessage.java │ │ │ └── producer/ │ │ │ └── DemoProducer.java │ │ └── resources/ │ │ └── application.yaml │ ├── lab-39-async/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springboot/ │ │ │ └── lab39/ │ │ │ └── skywalkingdemo/ │ │ │ ├── AsyncApplication.java │ │ │ ├── controller/ │ │ │ │ └── DemoController.java │ │ │ └── service/ │ │ │ └── DemoService.java │ │ └── resources/ │ │ └── application.yml │ ├── lab-39-demo/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springboot/ │ │ │ └── lab39/ │ │ │ └── skywalkingdemo/ │ │ │ ├── Application.java │ │ │ └── controller/ │ │ │ └── DemoController.java │ │ └── resources/ │ │ └── application.yml │ ├── lab-39-elasticsearch/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springboot/ │ │ │ └── lab39/ │ │ │ └── skywalkingdemo/ │ │ │ ├── ElasticsearchApplication.java │ │ │ ├── controller/ │ │ │ │ └── DemoController.java │ │ │ ├── dataobject/ │ │ │ │ └── ESUserDO.java │ │ │ └── repository/ │ │ │ └── ESUserRepository.java │ │ └── resources/ │ │ └── application.yml │ ├── lab-39-elasticsearch-jest/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springboot/ │ │ │ └── lab39/ │ │ │ └── skywalkingdemo/ │ │ │ ├── ElasticsearchJestApplication.java │ │ │ ├── controller/ │ │ │ │ └── DemoController.java │ │ │ ├── dataobject/ │ │ │ │ └── ESUserDO.java │ │ │ └── repository/ │ │ │ └── ESUserRepository.java │ │ └── resources/ │ │ └── application.yml │ ├── lab-39-kafka/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springboot/ │ │ │ └── lab39/ │ │ │ └── skywalkingdemo/ │ │ │ ├── KafkaApplication.java │ │ │ ├── consumer/ │ │ │ │ └── DemoConsumer.java │ │ │ ├── controller/ │ │ │ │ └── DemoController.java │ │ │ ├── message/ │ │ │ │ └── DemoMessage.java │ │ │ └── producer/ │ │ │ └── DemoProducer.java │ │ └── resources/ │ │ └── application.yaml │ ├── lab-39-logback/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springboot/ │ │ │ └── lab39/ │ │ │ └── skywalkingdemo/ │ │ │ ├── LogbackApplication.java │ │ │ └── controller/ │ │ │ └── DemoController.java │ │ └── resources/ │ │ ├── application.yml │ │ └── logback-spring.xml │ ├── lab-39-mongodb/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springboot/ │ │ │ └── lab39/ │ │ │ └── skywalkingdemo/ │ │ │ ├── MongoDBApplication.java │ │ │ ├── controller/ │ │ │ │ └── DemoController.java │ │ │ └── dataobject/ │ │ │ └── UserDO.java │ │ └── resources/ │ │ └── application.yml │ ├── lab-39-mysql/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springboot/ │ │ │ └── lab39/ │ │ │ └── skywalkingdemo/ │ │ │ ├── MySQLApplication.java │ │ │ └── controller/ │ │ │ └── DemoController.java │ │ └── resources/ │ │ └── application.yml │ ├── lab-39-opentracing/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springboot/ │ │ │ └── lab39/ │ │ │ └── skywalkingdemo/ │ │ │ ├── OpentracingApplication.java │ │ │ └── controller/ │ │ │ └── DemoController.java │ │ └── resources/ │ │ └── application.yml │ ├── lab-39-rabbitmq-demo/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springboot/ │ │ │ └── lab39/ │ │ │ └── skywalkingdemo/ │ │ │ ├── RabbitMQApplication.java │ │ │ ├── config/ │ │ │ │ └── RabbitConfig.java │ │ │ ├── consumer/ │ │ │ │ └── DemoConsumer.java │ │ │ ├── controller/ │ │ │ │ └── DemoController.java │ │ │ ├── message/ │ │ │ │ └── DemoMessage.java │ │ │ └── producer/ │ │ │ └── DemoProducer.java │ │ └── resources/ │ │ └── application.yaml │ ├── lab-39-redis/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springboot/ │ │ │ └── lab39/ │ │ │ └── skywalkingdemo/ │ │ │ ├── RedisApplication.java │ │ │ └── controller/ │ │ │ └── DemoController.java │ │ └── resources/ │ │ └── application.yml │ ├── lab-39-rocketmq/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springboot/ │ │ │ └── lab39/ │ │ │ └── skywalkingdemo/ │ │ │ └── rocketmqdemo/ │ │ │ ├── RocketMQApplication.java │ │ │ ├── consumer/ │ │ │ │ └── DemoConsumer.java │ │ │ ├── controller/ │ │ │ │ └── DemoController.java │ │ │ ├── message/ │ │ │ │ └── DemoMessage.java │ │ │ └── producer/ │ │ │ └── DemoProducer.java │ │ └── resources/ │ │ └── application.yaml │ ├── lab-39-skywalking-dubbo/ │ │ ├── lab-39-skywalking-dubbo-api/ │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ └── main/ │ │ │ └── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springboot/ │ │ │ └── lab39/ │ │ │ └── skywalkingdemo/ │ │ │ ├── api/ │ │ │ │ └── UserService.java │ │ │ └── package-info.java │ │ ├── lab-39-skywalking-dubbo-consumer/ │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ └── main/ │ │ │ ├── java/ │ │ │ │ └── cn/ │ │ │ │ └── iocoder/ │ │ │ │ └── springboot/ │ │ │ │ └── lab39/ │ │ │ │ └── skywalkingdemo/ │ │ │ │ └── consumerdemo/ │ │ │ │ ├── ConsumerApplication.java │ │ │ │ └── controller/ │ │ │ │ └── UserController.java │ │ │ └── resources/ │ │ │ └── application.yaml │ │ ├── lab-39-skywalking-dubbo-provider/ │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ └── main/ │ │ │ ├── java/ │ │ │ │ └── cn/ │ │ │ │ └── iocoder/ │ │ │ │ └── springboot/ │ │ │ │ └── lab39/ │ │ │ │ └── skywalkingdemo/ │ │ │ │ └── providerdemo/ │ │ │ │ ├── ProviderApplication.java │ │ │ │ └── service/ │ │ │ │ └── UserServiceImpl.java │ │ │ └── resources/ │ │ │ └── application.yaml │ │ └── pom.xml │ ├── lab-39-springmvc/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springboot/ │ │ │ └── lab39/ │ │ │ └── skywalkingdemo/ │ │ │ ├── Application.java │ │ │ └── controller/ │ │ │ └── DemoController.java │ │ └── resources/ │ │ └── application.yml │ ├── lab-39-trace-annotations/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springboot/ │ │ │ └── lab39/ │ │ │ └── skywalkingdemo/ │ │ │ ├── TraceAnnotationsApplication.java │ │ │ └── controller/ │ │ │ └── DemoController.java │ │ └── resources/ │ │ └── application.yml │ ├── pom.xml │ └── 《芋道 Spring Boot 链路追踪 SkyWalking 入门》.md ├── lab-40/ │ ├── lab-40-activemq/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springboot/ │ │ │ └── lab40/ │ │ │ └── zipkindemo/ │ │ │ ├── ActiveMQApplication.java │ │ │ ├── config/ │ │ │ │ ├── SpringMvcConfiguration.java │ │ │ │ └── ZipkinConfiguration.java │ │ │ ├── consumer/ │ │ │ │ └── DemoConsumer.java │ │ │ ├── controller/ │ │ │ │ └── DemoController.java │ │ │ ├── message/ │ │ │ │ └── DemoMessage.java │ │ │ └── producer/ │ │ │ └── DemoProducer.java │ │ └── resources/ │ │ └── application.yaml │ ├── lab-40-demo/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springboot/ │ │ │ └── lab40/ │ │ │ └── zipkindemo/ │ │ │ ├── Application.java │ │ │ ├── Application2.java │ │ │ ├── config/ │ │ │ │ ├── SpringMvcConfiguration.java │ │ │ │ └── ZipkinConfiguration.java │ │ │ └── controller/ │ │ │ └── DemoController.java │ │ └── resources/ │ │ └── application.yaml │ ├── lab-40-elasticsearch/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springboot/ │ │ │ └── lab40/ │ │ │ └── zipkindemo/ │ │ │ ├── ElasticsearchApplication.java │ │ │ ├── config/ │ │ │ │ ├── SpringMvcConfiguration.java │ │ │ │ └── ZipkinConfiguration.java │ │ │ ├── controller/ │ │ │ │ └── DemoController.java │ │ │ ├── dataobject/ │ │ │ │ └── ESUserDO.java │ │ │ ├── repository/ │ │ │ │ └── ESUserRepository.java │ │ │ └── spring/ │ │ │ ├── ClusterNodes.java │ │ │ └── TracingTransportClientFactoryBean.java │ │ └── resources/ │ │ └── application.yml │ ├── lab-40-kafka/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springboot/ │ │ │ └── lab40/ │ │ │ └── zipkindemo/ │ │ │ ├── KafkaApplication.java │ │ │ ├── config/ │ │ │ │ ├── SpringMvcConfiguration.java │ │ │ │ └── ZipkinConfiguration.java │ │ │ ├── consumer/ │ │ │ │ └── DemoConsumer.java │ │ │ ├── controller/ │ │ │ │ └── DemoController.java │ │ │ ├── message/ │ │ │ │ └── DemoMessage.java │ │ │ └── producer/ │ │ │ └── DemoProducer.java │ │ └── resources/ │ │ └── application.yaml │ ├── lab-40-logback/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springboot/ │ │ │ └── lab40/ │ │ │ └── zipkindemo/ │ │ │ ├── LogbackApplication.java │ │ │ ├── config/ │ │ │ │ ├── SpringMvcConfiguration.java │ │ │ │ └── ZipkinConfiguration.java │ │ │ └── controller/ │ │ │ └── DemoController.java │ │ └── resources/ │ │ └── application.yaml │ ├── lab-40-mongodb/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springboot/ │ │ │ └── lab40/ │ │ │ └── zipkin/ │ │ │ ├── MongoDBApplication.java │ │ │ ├── config/ │ │ │ │ ├── SpringMvcConfiguration.java │ │ │ │ └── ZipkinConfiguration.java │ │ │ ├── controller/ │ │ │ │ └── DemoController.java │ │ │ └── dataobject/ │ │ │ └── UserDO.java │ │ └── resources/ │ │ └── application.yml │ ├── lab-40-mysql/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springboot/ │ │ │ └── lab40/ │ │ │ └── zipkindemo/ │ │ │ ├── MySQLApplication.java │ │ │ ├── config/ │ │ │ │ ├── SpringMvcConfiguration.java │ │ │ │ └── ZipkinConfiguration.java │ │ │ └── controller/ │ │ │ └── DemoController.java │ │ └── resources/ │ │ └── application.yaml │ ├── lab-40-opentracing/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springboot/ │ │ │ └── lab40/ │ │ │ └── zipkindemo/ │ │ │ ├── OpentracingApplication.java │ │ │ ├── config/ │ │ │ │ ├── SpringMvcConfiguration.java │ │ │ │ └── ZipkinConfiguration.java │ │ │ └── controller/ │ │ │ └── DemoController.java │ │ └── resources/ │ │ └── application.yml │ ├── lab-40-rabbitmq/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springboot/ │ │ │ └── lab40/ │ │ │ └── zipkindemo/ │ │ │ ├── RabbitMQApplication.java │ │ │ ├── config/ │ │ │ │ ├── RabbitConfig.java │ │ │ │ ├── SpringMvcConfiguration.java │ │ │ │ └── ZipkinConfiguration.java │ │ │ ├── consumer/ │ │ │ │ └── DemoConsumer.java │ │ │ ├── controller/ │ │ │ │ └── DemoController.java │ │ │ ├── message/ │ │ │ │ └── DemoMessage.java │ │ │ └── producer/ │ │ │ └── DemoProducer.java │ │ └── resources/ │ │ └── application.yaml │ ├── lab-40-redis/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springboot/ │ │ │ └── lab40/ │ │ │ └── zipkindemo/ │ │ │ ├── RedisApplication.java │ │ │ ├── config/ │ │ │ │ ├── SpringMvcConfiguration.java │ │ │ │ └── ZipkinConfiguration.java │ │ │ └── controller/ │ │ │ └── DemoController.java │ │ └── resources/ │ │ └── application.yaml │ ├── lab-40-springmvc/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springboot/ │ │ │ └── lab40/ │ │ │ └── zipkindemo/ │ │ │ ├── SpringMVCApplication.java │ │ │ ├── config/ │ │ │ │ ├── SpringMvcConfiguration.java │ │ │ │ └── ZipkinConfiguration.java │ │ │ └── controller/ │ │ │ └── DemoController.java │ │ └── resources/ │ │ └── application.yaml │ ├── lab-40-zipkin-dubbo/ │ │ ├── lab-40-zipkin-dubbo-api/ │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ └── main/ │ │ │ └── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springboot/ │ │ │ └── lab40/ │ │ │ └── zipkindemo/ │ │ │ ├── api/ │ │ │ │ └── UserService.java │ │ │ └── package-info.java │ │ ├── lab-40-zipkin-dubbo-consumer/ │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ └── main/ │ │ │ ├── java/ │ │ │ │ └── cn/ │ │ │ │ └── iocoder/ │ │ │ │ └── springboot/ │ │ │ │ └── lab40/ │ │ │ │ └── zpkindemo/ │ │ │ │ └── consumerdemo/ │ │ │ │ ├── ConsumerApplication.java │ │ │ │ ├── config/ │ │ │ │ │ ├── SpringMvcConfiguration.java │ │ │ │ │ └── ZipkinConfiguration.java │ │ │ │ └── controller/ │ │ │ │ └── UserController.java │ │ │ └── resources/ │ │ │ └── application.yaml │ │ ├── lab-40-zipkin-dubbo-provider/ │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ └── main/ │ │ │ ├── java/ │ │ │ │ └── cn/ │ │ │ │ └── iocoder/ │ │ │ │ └── springboot/ │ │ │ │ └── lab40/ │ │ │ │ └── zipkindemo/ │ │ │ │ └── providerdemo/ │ │ │ │ ├── ProviderApplication.java │ │ │ │ ├── config/ │ │ │ │ │ └── ZipkinConfiguration.java │ │ │ │ └── service/ │ │ │ │ └── UserServiceImpl.java │ │ │ └── resources/ │ │ │ └── application.yaml │ │ └── pom.xml │ ├── pom.xml │ └── 《芋道 Spring Boot 链路追踪 Zipkin 入门》.md ├── lab-41/ │ ├── deploy.sh │ ├── lab-41-demo01/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springboot/ │ │ │ └── lab40/ │ │ │ └── jenkinsdemo/ │ │ │ ├── Application.java │ │ │ └── controller/ │ │ │ └── DemoController.java │ │ └── resources/ │ │ ├── application-dev.yaml │ │ ├── application-local.yaml │ │ ├── application-pre.yaml │ │ ├── application-prod.yaml │ │ └── application-uat.yaml │ ├── lab-41-demo02/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springboot/ │ │ │ └── lab40/ │ │ │ └── jenkinsdemo/ │ │ │ ├── Demo02Application.java │ │ │ ├── actuate/ │ │ │ │ └── ServerHealthIndicator.java │ │ │ └── controller/ │ │ │ └── DemoController.java │ │ └── resources/ │ │ ├── application-dev.yaml │ │ ├── application-local.yaml │ │ ├── application-pre.yaml │ │ ├── application-prod.yaml │ │ └── application-uat.yaml │ ├── pom.xml │ └── 《芋道 Spring Boot 持续交付 Jenkins 入门》.md ├── lab-42/ │ ├── lab-42-demo01/ │ │ ├── pom.xml │ │ └── src/ │ │ ├── main/ │ │ │ ├── java/ │ │ │ │ └── cn/ │ │ │ │ └── iocoder/ │ │ │ │ └── springboot/ │ │ │ │ └── lab23/ │ │ │ │ └── testdemo/ │ │ │ │ ├── Application.java │ │ │ │ ├── controller/ │ │ │ │ │ └── UserController.java │ │ │ │ ├── dao/ │ │ │ │ │ └── UserDao.java │ │ │ │ ├── dataobject/ │ │ │ │ │ └── UserDO.java │ │ │ │ └── service/ │ │ │ │ └── UserService.java │ │ │ └── resources/ │ │ │ └── application.yaml │ │ └── test/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springboot/ │ │ │ └── lab23/ │ │ │ └── testdemo/ │ │ │ ├── controller/ │ │ │ │ └── UserControllerTest.java │ │ │ ├── dao/ │ │ │ │ └── UserDaoTest.java │ │ │ ├── package-info.java │ │ │ └── service/ │ │ │ └── UserServiceTest.java │ │ └── resources/ │ │ ├── application.yaml │ │ └── sql/ │ │ ├── clean.sql │ │ └── create_tables.sql │ ├── lab-42-demo02/ │ │ ├── pom.xml │ │ └── src/ │ │ ├── main/ │ │ │ ├── java/ │ │ │ │ └── cn/ │ │ │ │ └── iocoder/ │ │ │ │ └── springboot/ │ │ │ │ └── lab23/ │ │ │ │ └── testdemo/ │ │ │ │ ├── Application.java │ │ │ │ ├── controller/ │ │ │ │ │ └── UserController.java │ │ │ │ ├── dao/ │ │ │ │ │ └── UserDao.java │ │ │ │ ├── dataobject/ │ │ │ │ │ └── UserDO.java │ │ │ │ └── service/ │ │ │ │ └── UserService.java │ │ │ └── resources/ │ │ │ └── application.yaml │ │ └── test/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springboot/ │ │ │ └── lab23/ │ │ │ └── testdemo/ │ │ │ ├── controller/ │ │ │ │ └── UserControllerTest.java │ │ │ ├── dao/ │ │ │ │ └── UserDaoTest.java │ │ │ ├── package-info.java │ │ │ └── service/ │ │ │ ├── UserServiceTest.java │ │ │ └── UserServiceTest2.java │ │ └── resources/ │ │ ├── application.yaml │ │ └── sql/ │ │ ├── clean.sql │ │ └── create_tables.sql │ ├── pom.xml │ └── 《芋道 Spring Boot 单元测试 Test 入门》.md ├── lab-43/ │ ├── lab-43-demo/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springboot/ │ │ │ └── lab43/ │ │ │ └── propertydemo/ │ │ │ ├── Application.java │ │ │ └── OrderProperties.java │ │ └── resources/ │ │ └── application.yaml │ ├── lab-43-demo-configname/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springboot/ │ │ │ └── lab43/ │ │ │ └── propertydemo/ │ │ │ └── Application.java │ │ └── resources/ │ │ ├── application.yaml │ │ └── rpc.yaml │ ├── lab-43-demo-jasypt/ │ │ ├── pom.xml │ │ └── src/ │ │ ├── main/ │ │ │ ├── java/ │ │ │ │ └── cn/ │ │ │ │ └── iocoder/ │ │ │ │ └── springboot/ │ │ │ │ └── lab43/ │ │ │ │ └── propertydemo/ │ │ │ │ └── Application.java │ │ │ └── resources/ │ │ │ └── application.yaml │ │ └── test/ │ │ └── java/ │ │ └── cn/ │ │ └── iocoder/ │ │ └── springboot/ │ │ └── lab43/ │ │ └── propertydemo/ │ │ └── JasyptTest.java │ ├── lab-43-demo-profiles/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springboot/ │ │ │ └── lab43/ │ │ │ └── propertydemo/ │ │ │ └── ProfilesApplication.java │ │ └── resources/ │ │ ├── application-dev.yaml │ │ ├── application-local.yaml │ │ ├── application-pre.yaml │ │ ├── application-prod.yaml │ │ ├── application-uat.yaml │ │ └── application.yaml │ ├── pom.xml │ └── 《芋道 Spring Boot 配置文件入门》.md ├── lab-44/ │ ├── lab-44-nacos-config-demo/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springboot/ │ │ │ └── lab44/ │ │ │ └── nacosdemo/ │ │ │ ├── Application.java │ │ │ └── OrderProperties.java │ │ └── resources/ │ │ └── application.yaml │ ├── lab-44-nacos-config-demo-actuator/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springboot/ │ │ │ └── lab44/ │ │ │ └── nacosdemo/ │ │ │ ├── Application.java │ │ │ ├── controller/ │ │ │ │ └── DemoController.java │ │ │ ├── listener/ │ │ │ │ └── LoggingSystemConfigListener.java │ │ │ └── properties/ │ │ │ └── TestProperties.java │ │ └── resources/ │ │ └── application.yaml │ ├── lab-44-nacos-config-demo-auto-refresh/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springboot/ │ │ │ └── lab44/ │ │ │ └── nacosdemo/ │ │ │ ├── Application.java │ │ │ ├── controller/ │ │ │ │ └── DemoController.java │ │ │ ├── listener/ │ │ │ │ └── LoggingSystemConfigListener.java │ │ │ └── properties/ │ │ │ └── TestProperties.java │ │ └── resources/ │ │ └── application.yaml │ ├── lab-44-nacos-config-demo-jasypt/ │ │ ├── pom.xml │ │ └── src/ │ │ ├── main/ │ │ │ ├── java/ │ │ │ │ └── cn/ │ │ │ │ └── iocoder/ │ │ │ │ └── springboot/ │ │ │ │ └── lab44/ │ │ │ │ └── nacosdemo/ │ │ │ │ ├── Application.java │ │ │ │ └── controller/ │ │ │ │ └── DemoController.java │ │ │ └── resources/ │ │ │ └── application.yaml │ │ └── test/ │ │ └── java/ │ │ └── cn/ │ │ └── iocoder/ │ │ └── springboot/ │ │ └── lab44/ │ │ └── nacosdemo/ │ │ └── JasyptTest.java │ ├── lab-44-nacos-config-demo-multi/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springboot/ │ │ │ └── lab44/ │ │ │ └── nacosdemo/ │ │ │ ├── Application.java │ │ │ └── controller/ │ │ │ └── DemoController.java │ │ └── resources/ │ │ └── application.yaml │ ├── lab-44-nacos-config-demo-profiles/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springboot/ │ │ │ └── lab44/ │ │ │ └── nacosdemo/ │ │ │ └── ProfilesApplication.java │ │ └── resources/ │ │ ├── application-dev.yaml │ │ ├── application-prod.yaml │ │ └── application.yaml │ ├── lab-44-nacos-discovery-demo/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springboot/ │ │ │ └── lab44/ │ │ │ └── nacosdemo/ │ │ │ ├── Application.java │ │ │ └── controller/ │ │ │ ├── ConsumerController.java │ │ │ └── ProviderController.java │ │ └── resources/ │ │ └── application.yaml │ ├── pom.xml │ ├── 《芋道 Spring Boot 注册中心 Nacos 入门》.md │ └── 《芋道 Spring Boot 配置中心 Nacos 入门》.md ├── lab-45/ │ ├── lab-45-apollo-demo/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springboot/ │ │ │ └── lab45/ │ │ │ └── apollodemo/ │ │ │ ├── Application.java │ │ │ └── OrderProperties.java │ │ └── resources/ │ │ └── application.yaml │ ├── lab-45-apollo-demo-auto-refresh/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springboot/ │ │ │ └── lab45/ │ │ │ └── apollodemo/ │ │ │ ├── Application.java │ │ │ ├── controller/ │ │ │ │ └── DemoController.java │ │ │ ├── listener/ │ │ │ │ └── LoggingSystemConfigListener.java │ │ │ └── properties/ │ │ │ └── TestProperties.java │ │ └── resources/ │ │ └── application.yaml │ ├── lab-45-apollo-demo-jasypt/ │ │ ├── pom.xml │ │ └── src/ │ │ ├── main/ │ │ │ ├── java/ │ │ │ │ └── cn/ │ │ │ │ └── iocoder/ │ │ │ │ └── springboot/ │ │ │ │ └── lab45/ │ │ │ │ └── apollodemo/ │ │ │ │ ├── Application.java │ │ │ │ └── controller/ │ │ │ │ └── DemoController.java │ │ │ └── resources/ │ │ │ └── application.yaml │ │ └── test/ │ │ └── java/ │ │ └── cn/ │ │ └── iocoder/ │ │ └── springboot/ │ │ └── lab45/ │ │ └── apollodemo/ │ │ └── JasyptTest.java │ ├── lab-45-apollo-demo-multi/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springboot/ │ │ │ └── lab45/ │ │ │ └── apollodemo/ │ │ │ ├── Application.java │ │ │ └── controller/ │ │ │ └── DemoController.java │ │ └── resources/ │ │ └── application.yaml │ ├── lab-45-apollo-demo-profiles/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springboot/ │ │ │ └── lab45/ │ │ │ └── apollodemo/ │ │ │ └── ProfilesApplication.java │ │ └── resources/ │ │ ├── application-dev.yaml │ │ ├── application-prod.yaml │ │ └── application.yaml │ ├── pom.xml │ └── 《芋道 Spring Boot 配置中心 Apollo 入门》.md ├── lab-46/ │ ├── lab-46-sentinel-demo/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springboot/ │ │ │ └── lab46/ │ │ │ └── sentineldemo/ │ │ │ ├── Application.java │ │ │ ├── config/ │ │ │ │ ├── SentinelConfiguration.java │ │ │ │ └── SpringMvcConfiguration.java │ │ │ ├── controller/ │ │ │ │ └── DemoController.java │ │ │ └── web/ │ │ │ └── GlobalExceptionHandler.java │ │ └── resources/ │ │ └── sentinel.properties │ ├── lab-46-sentinel-demo-apollo/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springboot/ │ │ │ └── lab46/ │ │ │ └── sentineldemo/ │ │ │ ├── Application.java │ │ │ ├── config/ │ │ │ │ ├── SentinelConfiguration.java │ │ │ │ └── SpringMvcConfiguration.java │ │ │ ├── controller/ │ │ │ │ └── DemoController.java │ │ │ └── web/ │ │ │ └── GlobalExceptionHandler.java │ │ └── resources/ │ │ ├── application.yaml │ │ └── sentinel.properties │ ├── lab-46-sentinel-demo-file/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springboot/ │ │ │ └── lab46/ │ │ │ └── sentineldemo/ │ │ │ ├── Application.java │ │ │ ├── config/ │ │ │ │ ├── SentinelConfiguration.java │ │ │ │ └── SpringMvcConfiguration.java │ │ │ ├── controller/ │ │ │ │ └── DemoController.java │ │ │ └── web/ │ │ │ └── GlobalExceptionHandler.java │ │ └── resources/ │ │ ├── flow-rule.json │ │ └── sentinel.properties │ ├── lab-46-sentinel-demo-nacos/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springboot/ │ │ │ └── lab46/ │ │ │ └── sentineldemo/ │ │ │ ├── Application.java │ │ │ ├── config/ │ │ │ │ ├── SentinelConfiguration.java │ │ │ │ └── SpringMvcConfiguration.java │ │ │ ├── controller/ │ │ │ │ └── DemoController.java │ │ │ └── web/ │ │ │ └── GlobalExceptionHandler.java │ │ └── resources/ │ │ └── sentinel.properties │ ├── pom.xml │ └── 《芋道 Spring Boot 服务容错 Sentinel 入门》.md ├── lab-47/ │ ├── lab-47-demo/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springboot/ │ │ │ └── lab47/ │ │ │ └── demo/ │ │ │ └── DemoApplication.java │ │ └── resources/ │ │ └── application.yaml │ ├── pom.xml │ ├── yunai-server-spring-boot-starter/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springboot/ │ │ │ └── lab47/ │ │ │ └── yunaiserver/ │ │ │ └── autoconfigure/ │ │ │ ├── YunaiServerAutoConfiguration.java │ │ │ └── YunaiServerProperties.java │ │ └── resources/ │ │ └── META-INF/ │ │ └── spring.factories │ └── 《芋道 Spring Boot 自动配置原理》.md ├── lab-48-hot-swap/ │ ├── lab-48-demo/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ └── java/ │ │ └── cn/ │ │ └── iocoder/ │ │ └── springboot/ │ │ └── lab48/ │ │ └── demo/ │ │ ├── DemoApplication.java │ │ └── controller/ │ │ └── DemoController.java │ ├── pom.xml │ └── 《芋道 Spring Boot 热部署入门》.md ├── lab-49/ │ ├── lab-49-lombok-demo/ │ │ ├── pom.xml │ │ └── src/ │ │ ├── main/ │ │ │ └── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springboot/ │ │ │ └── lab49/ │ │ │ └── lombokdemo/ │ │ │ ├── LombokApplication.java │ │ │ ├── dataobject/ │ │ │ │ ├── UserDO.java │ │ │ │ └── UserDO01.java │ │ │ └── service/ │ │ │ ├── UserService.java │ │ │ └── UserService01.java │ │ └── test/ │ │ └── java/ │ │ └── cn/ │ │ └── iocoder/ │ │ └── springboot/ │ │ └── lab49/ │ │ └── lombokdemo/ │ │ ├── dataobject/ │ │ │ └── UserDOTest.java │ │ ├── package-info.java │ │ └── service/ │ │ └── UserService01Test.java │ ├── pom.xml │ └── 《芋道 Spring Boot 消除冗余代码 Lombok 入门》.md ├── lab-50/ │ ├── lab-50-demo/ │ │ ├── pom.xml │ │ └── src/ │ │ ├── main/ │ │ │ ├── java/ │ │ │ │ └── cn/ │ │ │ │ └── iocoder/ │ │ │ │ └── springboot/ │ │ │ │ └── lab50/ │ │ │ │ └── maildemo/ │ │ │ │ └── Application.java │ │ │ └── resources/ │ │ │ └── application.yml │ │ └── test/ │ │ └── java/ │ │ └── cn/ │ │ └── iocoder/ │ │ └── springboot/ │ │ └── lab50/ │ │ └── maildemo/ │ │ └── ApplicationTests.java │ ├── pom.xml │ └── 计划中 ├── lab-51/ │ ├── lab-51-sentry-logback/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springboot/ │ │ │ └── lab51/ │ │ │ └── sentrydemo/ │ │ │ ├── DemoApplication.java │ │ │ ├── controller/ │ │ │ │ └── DemoController.java │ │ │ └── core/ │ │ │ ├── package-info.java │ │ │ └── web/ │ │ │ └── GlobalExceptionHandler.java │ │ └── resources/ │ │ ├── logback-spring.xml │ │ └── sentry.properties │ ├── lab-51-sentry-spring/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springboot/ │ │ │ └── lab51/ │ │ │ └── sentrydemo/ │ │ │ ├── DemoApplication.java │ │ │ └── controller/ │ │ │ └── DemoController.java │ │ └── resources/ │ │ └── application.yml │ ├── pom.xml │ └── 《芋道 Spring Boot 异常管理平台 Sentry 入门》.md ├── lab-52/ │ ├── lab-52-multiple-datasource/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springboot/ │ │ │ └── lab52/ │ │ │ └── seatademo/ │ │ │ ├── MultipleDatasourceApplication.java │ │ │ ├── controller/ │ │ │ │ └── OrderController.java │ │ │ ├── dao/ │ │ │ │ ├── AccountDao.java │ │ │ │ ├── OrderDao.java │ │ │ │ └── ProductDao.java │ │ │ ├── entity/ │ │ │ │ └── OrderDO.java │ │ │ └── service/ │ │ │ ├── AccountService.java │ │ │ ├── OrderService.java │ │ │ ├── ProductService.java │ │ │ └── impl/ │ │ │ ├── AccountServiceImpl.java │ │ │ ├── OrderServiceImpl.java │ │ │ └── ProductServiceImpl.java │ │ └── resources/ │ │ ├── application.yaml │ │ └── data.sql │ ├── lab-52-seata-at-httpclient-demo/ │ │ ├── lab-52-seata-at-httpclient-demo-account-service/ │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ └── main/ │ │ │ ├── java/ │ │ │ │ └── cn/ │ │ │ │ └── iocoder/ │ │ │ │ └── springboot/ │ │ │ │ └── lab52/ │ │ │ │ └── accountservice/ │ │ │ │ ├── AccountServiceApplication.java │ │ │ │ ├── controller/ │ │ │ │ │ └── AccountController.java │ │ │ │ ├── dao/ │ │ │ │ │ └── AccountDao.java │ │ │ │ ├── dto/ │ │ │ │ │ └── AccountReduceBalanceDTO.java │ │ │ │ └── service/ │ │ │ │ ├── AccountService.java │ │ │ │ └── AccountServiceImpl.java │ │ │ └── resources/ │ │ │ └── application.yaml │ │ ├── lab-52-seata-at-httpclient-demo-order-service/ │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ └── main/ │ │ │ ├── java/ │ │ │ │ └── cn/ │ │ │ │ └── iocoder/ │ │ │ │ └── springboot/ │ │ │ │ └── lab52/ │ │ │ │ └── orderservice/ │ │ │ │ ├── OrderServiceApplication.java │ │ │ │ ├── controller/ │ │ │ │ │ └── OrderController.java │ │ │ │ ├── dao/ │ │ │ │ │ └── OrderDao.java │ │ │ │ ├── entity/ │ │ │ │ │ └── OrderDO.java │ │ │ │ └── service/ │ │ │ │ ├── OrderService.java │ │ │ │ └── OrderServiceImpl.java │ │ │ └── resources/ │ │ │ └── application.yaml │ │ ├── lab-52-seata-at-httpclient-demo-product-service/ │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ └── main/ │ │ │ ├── java/ │ │ │ │ └── cn/ │ │ │ │ └── iocoder/ │ │ │ │ └── springboot/ │ │ │ │ └── lab52/ │ │ │ │ └── productservice/ │ │ │ │ ├── ProductServiceApplication.java │ │ │ │ ├── controller/ │ │ │ │ │ └── ProductController.java │ │ │ │ ├── dao/ │ │ │ │ │ └── ProductDao.java │ │ │ │ ├── dto/ │ │ │ │ │ └── ProductReduceStockDTO.java │ │ │ │ └── service/ │ │ │ │ ├── ProductService.java │ │ │ │ └── ProductServiceImpl.java │ │ │ └── resources/ │ │ │ └── application.yaml │ │ └── pom.xml │ ├── pom.xml │ └── 《芋道 Spring Boot 分布式事务 Seata 入门》.md ├── lab-53/ │ ├── lab-53-seata-at-dubbo-demo/ │ │ ├── data.sql │ │ ├── lab-53-seata-at-dubbo-demo-account-service/ │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ └── main/ │ │ │ ├── java/ │ │ │ │ └── cn/ │ │ │ │ └── iocoder/ │ │ │ │ └── springboot/ │ │ │ │ └── lab53/ │ │ │ │ └── accountservice/ │ │ │ │ ├── AccountServiceApplication.java │ │ │ │ ├── dao/ │ │ │ │ │ └── AccountDao.java │ │ │ │ └── service/ │ │ │ │ └── AccountServiceImpl.java │ │ │ └── resources/ │ │ │ ├── application-file.yaml │ │ │ └── application.yaml │ │ ├── lab-53-seata-at-dubbo-demo-account-service-api/ │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ └── main/ │ │ │ └── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springboot/ │ │ │ └── lab53/ │ │ │ └── accountservice/ │ │ │ └── api/ │ │ │ └── AccountService.java │ │ ├── lab-53-seata-at-dubbo-demo-order-service/ │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ └── main/ │ │ │ ├── java/ │ │ │ │ └── cn/ │ │ │ │ └── iocoder/ │ │ │ │ └── springboot/ │ │ │ │ └── lab53/ │ │ │ │ └── orderservice/ │ │ │ │ ├── OrderServiceApplication.java │ │ │ │ ├── controller/ │ │ │ │ │ └── OrderController.java │ │ │ │ ├── dao/ │ │ │ │ │ └── OrderDao.java │ │ │ │ ├── entity/ │ │ │ │ │ └── OrderDO.java │ │ │ │ └── service/ │ │ │ │ └── OrderServiceImpl.java │ │ │ └── resources/ │ │ │ ├── application-file.yaml │ │ │ └── application.yaml │ │ ├── lab-53-seata-at-dubbo-demo-order-service-api/ │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ └── main/ │ │ │ └── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springboot/ │ │ │ └── lab53/ │ │ │ └── orderservice/ │ │ │ └── api/ │ │ │ └── OrderService.java │ │ ├── lab-53-seata-at-dubbo-demo-product-service/ │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ └── main/ │ │ │ ├── java/ │ │ │ │ └── cn/ │ │ │ │ └── iocoder/ │ │ │ │ └── springboot/ │ │ │ │ └── lab53/ │ │ │ │ └── productservice/ │ │ │ │ ├── ProductServiceApplication.java │ │ │ │ ├── dao/ │ │ │ │ │ └── ProductDao.java │ │ │ │ └── service/ │ │ │ │ └── ProductServiceImpl.java │ │ │ └── resources/ │ │ │ ├── application-file.yaml │ │ │ └── application.yaml │ │ ├── lab-53-seata-at-dubbo-demo-product-service-api/ │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ └── main/ │ │ │ └── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springboot/ │ │ │ └── lab53/ │ │ │ └── productservice/ │ │ │ └── api/ │ │ │ └── ProductService.java │ │ └── pom.xml │ ├── pom.xml │ └── 《Dubbo 分布式事务 Seata 入门》.md ├── lab-54/ │ ├── lab-54-demo/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ └── java/ │ │ └── cn/ │ │ └── iocoder/ │ │ └── springboot/ │ │ └── lab54/ │ │ └── eventdemo/ │ │ ├── DemoApplication.java │ │ ├── controller/ │ │ │ └── DemoController.java │ │ ├── event/ │ │ │ └── UserRegisterEvent.java │ │ └── service/ │ │ ├── CouponService.java │ │ ├── EmailService.java │ │ └── UserService.java │ ├── pom.xml │ └── 《芋道 Spring Boot 事件机制 Event 入门》.md ├── lab-55/ │ ├── lab-55-mapstruct-demo/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ └── java/ │ │ └── cn/ │ │ └── iocoder/ │ │ └── springboot/ │ │ └── lab55/ │ │ └── mapstructdemo/ │ │ ├── UserBOTest.java │ │ ├── UserDetailBOTest.java │ │ ├── bo/ │ │ │ ├── UserBO.java │ │ │ └── UserDetailBO.java │ │ ├── convert/ │ │ │ └── UserConvert.java │ │ └── dataobject/ │ │ └── UserDO.java │ ├── lab-55-mapstruct-demo-lombok/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ └── java/ │ │ └── cn/ │ │ └── iocoder/ │ │ └── springboot/ │ │ └── lab55/ │ │ └── mapstructdemo/ │ │ ├── UserBOTest.java │ │ ├── bo/ │ │ │ └── UserBO.java │ │ ├── convert/ │ │ │ └── UserConvert.java │ │ └── dataobject/ │ │ └── UserDO.java │ ├── pom.xml │ └── 《芋道 Spring Boot 对象转换 MapStruct 入门》.md ├── lab-56/ │ ├── lab-56-demo01/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ └── java/ │ │ └── cn/ │ │ └── iocoder/ │ │ └── springboot/ │ │ └── lab56/ │ │ ├── Demo01Application.java │ │ ├── Demo02Application.java │ │ └── controller/ │ │ └── DemoController.java │ ├── pom.xml │ ├── 《芋道 APISIX 极简入门(国产微服务网关)》.md │ └── 《芋道 Kong 极简入门(微服务网关)》.md ├── lab-57/ │ ├── lab-57-hystrix-demo01/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ └── java/ │ │ └── cn/ │ │ └── iocoder/ │ │ └── springboot/ │ │ └── lab57/ │ │ └── hystrixdemo/ │ │ ├── DemoApplication.java │ │ ├── config/ │ │ │ └── HystrixConfig.java │ │ └── controller/ │ │ └── DemoController.java │ ├── lab-57-hystrix-dubbo-demo/ │ │ ├── lab-57-hystrix-dubbo-demo-application/ │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ └── main/ │ │ │ ├── java/ │ │ │ │ └── cn/ │ │ │ │ └── iocoder/ │ │ │ │ └── springcloud/ │ │ │ │ └── labx23/ │ │ │ │ └── demo/ │ │ │ │ ├── DemoApplication.java │ │ │ │ ├── config/ │ │ │ │ │ └── HystrixConfig.java │ │ │ │ └── controller/ │ │ │ │ └── DemoController.java │ │ │ └── resources/ │ │ │ └── application.yaml │ │ ├── lab-57-hystrix-dubbo-demo-user-service/ │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ └── main/ │ │ │ ├── java/ │ │ │ │ └── cn/ │ │ │ │ └── iocoder/ │ │ │ │ └── springboot/ │ │ │ │ └── lab57/ │ │ │ │ └── userservice/ │ │ │ │ ├── UserServiceApplication.java │ │ │ │ └── service/ │ │ │ │ └── UserServiceImpl.java │ │ │ └── resources/ │ │ │ └── application.yaml │ │ ├── lab-57-hystrix-dubbo-demo-user-service-api/ │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ └── main/ │ │ │ └── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springboot/ │ │ │ └── lab57/ │ │ │ └── userservice/ │ │ │ └── api/ │ │ │ └── UserService.java │ │ └── pom.xml │ ├── lab-57-user-service/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ └── java/ │ │ └── cn/ │ │ └── iocoder/ │ │ └── springboot/ │ │ └── lab57/ │ │ └── userservice/ │ │ └── UserServiceApplication.java │ ├── pom.xml │ └── 《芋道 Spring Boot 服务容错 Hystrix 入门》.md ├── lab-58/ │ ├── lab-58-feign-demo/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ └── java/ │ │ └── cn/ │ │ └── iocoder/ │ │ └── springboot/ │ │ └── lab58/ │ │ └── feigndemo/ │ │ ├── FeignDemoApplication.java │ │ ├── config/ │ │ │ └── FeignConfig.java │ │ ├── controller/ │ │ │ ├── DemoController.java │ │ │ └── DemoController02.java │ │ └── feign/ │ │ ├── UserServiceFeignClient.java │ │ ├── UserServiceFeignClient02.java │ │ ├── request/ │ │ │ └── UserAddRequest.java │ │ └── response/ │ │ └── UserResponse.java │ ├── lab-58-user-service/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ └── java/ │ │ └── cn/ │ │ └── iocoder/ │ │ └── springboot/ │ │ └── lab58/ │ │ └── userservice/ │ │ ├── UserServiceApplication.java │ │ ├── controller/ │ │ │ └── UserController.java │ │ ├── request/ │ │ │ └── UserAddRequest.java │ │ └── response/ │ │ └── UserResponse.java │ ├── pom.xml │ └── 《芋道 Spring Boot 声明式调用 Feign 入门》.md ├── lab-59/ │ ├── lab-59-resilience4j-actuator/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springboot/ │ │ │ └── lab59/ │ │ │ └── resillience4jdemo/ │ │ │ ├── DemoApplication.java │ │ │ └── controller/ │ │ │ ├── BulkheadDemoController.java │ │ │ ├── DemoController.java │ │ │ ├── RateLimiterDemoController.java │ │ │ ├── RetryDemoController.java │ │ │ ├── ThreadPoolBulkheadDemoController.java │ │ │ └── TimeLimiterDemoController.java │ │ └── resources/ │ │ └── application.yml │ ├── lab-59-resilience4j-demo01/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springboot/ │ │ │ └── lab59/ │ │ │ └── resillience4jdemo/ │ │ │ ├── DemoApplication.java │ │ │ └── controller/ │ │ │ ├── BulkheadDemoController.java │ │ │ ├── DemoController.java │ │ │ ├── RateLimiterDemoController.java │ │ │ ├── RetryDemoController.java │ │ │ ├── ThreadPoolBulkheadDemoController.java │ │ │ └── TimeLimiterDemoController.java │ │ └── resources/ │ │ └── application.yml │ ├── lab-59-user-service/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ └── java/ │ │ └── cn/ │ │ └── iocoder/ │ │ └── springboot/ │ │ └── lab59/ │ │ └── userservice/ │ │ └── UserServiceApplication.java │ ├── pom.xml │ └── 《芋道 Spring Boot 服务容错 Resilience4j 入门》.md ├── lab-60/ │ ├── lab-60-soul-dubbo-demo/ │ │ ├── lab-60-soul-dubbo-demo-user-service/ │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ └── main/ │ │ │ ├── java/ │ │ │ │ └── cn/ │ │ │ │ └── iocoder/ │ │ │ │ └── springboot/ │ │ │ │ └── lab60/ │ │ │ │ └── userservice/ │ │ │ │ ├── UserServiceApplication.java │ │ │ │ └── service/ │ │ │ │ └── UserServiceImpl.java │ │ │ └── resources/ │ │ │ └── application.yaml │ │ ├── lab-60-soul-dubbo-demo-user-service-api/ │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ └── main/ │ │ │ └── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springboot/ │ │ │ └── lab60/ │ │ │ └── userservice/ │ │ │ └── api/ │ │ │ ├── UserService.java │ │ │ └── dto/ │ │ │ └── UserCreateDTO.java │ │ └── pom.xml │ ├── lab-60-soul-spring-boot-demo/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springboot/ │ │ │ └── lab60/ │ │ │ ├── DemoApplication.java │ │ │ ├── controller/ │ │ │ │ └── UserController.java │ │ │ └── dto/ │ │ │ └── UserCreateDTO.java │ │ └── resources/ │ │ └── application.yaml │ ├── lab-60-soul-spring-cloud-demo/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springcloud/ │ │ │ └── lab60/ │ │ │ ├── DemoApplication.java │ │ │ ├── controller/ │ │ │ │ └── UserController.java │ │ │ └── dto/ │ │ │ └── UserCreateDTO.java │ │ └── resources/ │ │ └── application.yaml │ ├── pom.xml │ └── 《芋道 Soul 极简入门(国产微服务网关)》.md ├── lab-61/ │ ├── lab-61-cat-opentracing/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ └── java/ │ │ └── cn/ │ │ └── iocoder/ │ │ └── springboot/ │ │ └── lab61/ │ │ └── cat/ │ │ └── opentracing/ │ │ ├── CatSpan.java │ │ ├── CatSpanBuilder.java │ │ ├── CatTracer.java │ │ └── Tag.java │ ├── lab-61-cat-opentracing-demo/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── catdemo/ │ │ │ ├── Application.java │ │ │ ├── config/ │ │ │ │ └── ZipkinConfig.java │ │ │ └── controller/ │ │ │ └── DemoController.java │ │ └── resources/ │ │ └── META-INF/ │ │ └── app.properties │ ├── lab-61-demo/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springboot/ │ │ │ └── lab61/ │ │ │ └── catdemo/ │ │ │ ├── Application.java │ │ │ └── controller/ │ │ │ └── DemoController.java │ │ └── resources/ │ │ └── META-INF/ │ │ └── app.properties │ ├── lab-61-logback/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springboot/ │ │ │ └── lab61/ │ │ │ └── catdemo/ │ │ │ ├── Application.java │ │ │ └── controller/ │ │ │ └── LoggerController.java │ │ └── resources/ │ │ ├── META-INF/ │ │ │ └── app.properties │ │ └── logback-spring.xml │ ├── lab-61-springmvc/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springboot/ │ │ │ └── lab61/ │ │ │ └── catdemo/ │ │ │ ├── Application.java │ │ │ ├── config/ │ │ │ │ └── CatFilterConfigure.java │ │ │ └── controller/ │ │ │ └── DemoController.java │ │ └── resources/ │ │ └── META-INF/ │ │ └── app.properties │ ├── pom.xml │ └── 《芋道 Spring Boot 监控平台 CAT 入门》.md ├── lab-62/ │ ├── lab-62-sofarpc-annotations-demo/ │ │ ├── lab-62-sofarpc-annotations-demo-user-rpc-service-api/ │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ └── main/ │ │ │ └── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springboot/ │ │ │ └── lab62/ │ │ │ └── rpc/ │ │ │ ├── api/ │ │ │ │ └── UserRpcService.java │ │ │ └── dto/ │ │ │ ├── UserAddDTO.java │ │ │ └── UserDTO.java │ │ ├── lab-62-sofarpc-annotations-demo-user-rpc-service-consumer/ │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ └── main/ │ │ │ ├── java/ │ │ │ │ └── cn/ │ │ │ │ └── iocoder/ │ │ │ │ └── springboot/ │ │ │ │ └── lab62/ │ │ │ │ └── rpc/ │ │ │ │ ├── ConsumerApplication.java │ │ │ │ └── controller/ │ │ │ │ └── UserController.java │ │ │ └── resources/ │ │ │ └── application.yaml │ │ ├── lab-62-sofarpc-annotations-demo-user-rpc-service-provider/ │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ └── main/ │ │ │ ├── java/ │ │ │ │ └── cn/ │ │ │ │ └── iocoder/ │ │ │ │ └── springboot/ │ │ │ │ └── lab62/ │ │ │ │ └── rpc/ │ │ │ │ ├── ProviderApplication.java │ │ │ │ └── service/ │ │ │ │ └── UserRpcServiceImpl.java │ │ │ └── resources/ │ │ │ └── application.yaml │ │ └── pom.xml │ ├── lab-62-sofarpc-xml-demo/ │ │ ├── lab-62-sofarpc-xml-demo-user-rpc-service-api/ │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ └── main/ │ │ │ └── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springboot/ │ │ │ └── lab62/ │ │ │ └── rpc/ │ │ │ ├── api/ │ │ │ │ └── UserRpcService.java │ │ │ └── dto/ │ │ │ ├── UserAddDTO.java │ │ │ └── UserDTO.java │ │ ├── lab-62-sofarpc-xml-demo-user-rpc-service-consumer/ │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ └── main/ │ │ │ ├── java/ │ │ │ │ └── cn/ │ │ │ │ └── iocoder/ │ │ │ │ └── springboot/ │ │ │ │ └── lab62/ │ │ │ │ └── rpc/ │ │ │ │ ├── ConsumerApplication.java │ │ │ │ └── controller/ │ │ │ │ └── UserController.java │ │ │ └── resources/ │ │ │ ├── application.yaml │ │ │ └── sofarpc.xml │ │ ├── lab-62-sofarpc-xml-demo-user-rpc-service-provider/ │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ └── main/ │ │ │ ├── java/ │ │ │ │ └── cn/ │ │ │ │ └── iocoder/ │ │ │ │ └── springboot/ │ │ │ │ └── lab62/ │ │ │ │ └── rpc/ │ │ │ │ ├── ProviderApplication.java │ │ │ │ └── service/ │ │ │ │ └── UserRpcServiceImpl.java │ │ │ └── resources/ │ │ │ ├── application.yaml │ │ │ └── sofarpc.xml │ │ └── pom.xml │ ├── pom.xml │ └── 《芋道 Spring Boot SOFARPC 入门》.md ├── lab-63/ │ ├── lab-63-motan-annotations-demo/ │ │ ├── lab-63-motan-annotations-demo-user-rpc-service-api/ │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ └── main/ │ │ │ └── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springboot/ │ │ │ └── lab63/ │ │ │ └── rpc/ │ │ │ ├── api/ │ │ │ │ └── UserRpcService.java │ │ │ └── dto/ │ │ │ ├── UserAddDTO.java │ │ │ └── UserDTO.java │ │ ├── lab-63-motan-annotations-demo-user-rpc-service-consumer/ │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ └── main/ │ │ │ ├── java/ │ │ │ │ └── cn/ │ │ │ │ └── iocoder/ │ │ │ │ └── springboot/ │ │ │ │ └── lab63/ │ │ │ │ └── rpc/ │ │ │ │ ├── ConsumerApplication.java │ │ │ │ └── controller/ │ │ │ │ └── UserController.java │ │ │ └── resources/ │ │ │ └── motan.xml │ │ ├── lab-63-motan-annotations-demo-user-rpc-service-provider/ │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ └── main/ │ │ │ ├── java/ │ │ │ │ └── cn/ │ │ │ │ └── iocoder/ │ │ │ │ └── springboot/ │ │ │ │ └── lab63/ │ │ │ │ └── rpc/ │ │ │ │ ├── ProviderApplication.java │ │ │ │ └── service/ │ │ │ │ └── UserRpcServiceImpl.java │ │ │ └── resources/ │ │ │ └── motan.xml │ │ └── pom.xml │ ├── lab-63-motan-xml-demo/ │ │ ├── lab-63-motan-xml-demo-user-rpc-service-api/ │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ └── main/ │ │ │ └── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springboot/ │ │ │ └── lab63/ │ │ │ └── rpc/ │ │ │ ├── api/ │ │ │ │ └── UserRpcService.java │ │ │ └── dto/ │ │ │ ├── UserAddDTO.java │ │ │ └── UserDTO.java │ │ ├── lab-63-motan-xml-demo-user-rpc-service-consumer/ │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ └── main/ │ │ │ ├── java/ │ │ │ │ └── cn/ │ │ │ │ └── iocoder/ │ │ │ │ └── springboot/ │ │ │ │ └── lab63/ │ │ │ │ └── rpc/ │ │ │ │ ├── ConsumerApplication.java │ │ │ │ └── controller/ │ │ │ │ └── UserController.java │ │ │ └── resources/ │ │ │ └── motan.xml │ │ ├── lab-63-motan-xml-demo-user-rpc-service-provider/ │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ └── main/ │ │ │ ├── java/ │ │ │ │ └── cn/ │ │ │ │ └── iocoder/ │ │ │ │ └── springboot/ │ │ │ │ └── lab63/ │ │ │ │ └── rpc/ │ │ │ │ ├── ProviderApplication.java │ │ │ │ └── service/ │ │ │ │ └── UserRpcServiceImpl.java │ │ │ └── resources/ │ │ │ └── motan.xml │ │ └── pom.xml │ ├── pom.xml │ └── 《芋道 Spring Boot Motan 入门》.md ├── lab-64/ │ ├── lab-64-grpc-demo/ │ │ ├── lab-64-grpc-demo-application/ │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ └── main/ │ │ │ └── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springboot/ │ │ │ └── lab64/ │ │ │ └── demo/ │ │ │ ├── DemoApplication.java │ │ │ ├── config/ │ │ │ │ └── GrpcConfig.java │ │ │ └── controller/ │ │ │ └── DemoController.java │ │ ├── lab-64-grpc-demo-user-service/ │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ └── main/ │ │ │ └── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springboot/ │ │ │ └── lab64/ │ │ │ └── userservice/ │ │ │ ├── UserServiceApplication.java │ │ │ ├── config/ │ │ │ │ └── GrpcConfig.java │ │ │ └── rpc/ │ │ │ └── UserServiceGrpcImpl.java │ │ ├── lab-64-grpc-demo-user-service-api/ │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ └── main/ │ │ │ └── proto/ │ │ │ └── UserService.proto │ │ └── pom.xml │ ├── lab-64-grpc-starter/ │ │ ├── lab-64-grpc-starter-application/ │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ └── main/ │ │ │ ├── java/ │ │ │ │ └── cn/ │ │ │ │ └── iocoder/ │ │ │ │ └── springboot/ │ │ │ │ └── lab64/ │ │ │ │ └── demo/ │ │ │ │ ├── DemoApplication.java │ │ │ │ └── controller/ │ │ │ │ └── DemoController.java │ │ │ └── resources/ │ │ │ └── application.yml │ │ ├── lab-64-grpc-starter-user-service/ │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ └── main/ │ │ │ ├── java/ │ │ │ │ └── cn/ │ │ │ │ └── iocoder/ │ │ │ │ └── springboot/ │ │ │ │ └── lab64/ │ │ │ │ └── userservice/ │ │ │ │ ├── UserServiceApplication.java │ │ │ │ └── rpc/ │ │ │ │ └── UserServiceGrpcImpl.java │ │ │ └── resources/ │ │ │ └── application.yml │ │ ├── lab-64-grpc-starter-user-service-api/ │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ └── main/ │ │ │ └── proto/ │ │ │ └── UserService.proto │ │ └── pom.xml │ ├── pom.xml │ └── 《芋道 Spring Boot gRPC 入门》.md ├── lab-65/ │ ├── lab-65-cxf-ws-demo/ │ │ ├── lab-65-cxf-ws-demo-application/ │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ └── main/ │ │ │ ├── java/ │ │ │ │ └── cn/ │ │ │ │ └── iocoder/ │ │ │ │ └── springboot/ │ │ │ │ └── lab65/ │ │ │ │ └── demo/ │ │ │ │ ├── DemoApplication.java │ │ │ │ ├── config/ │ │ │ │ │ └── CXFConfig.java │ │ │ │ └── controller/ │ │ │ │ └── DemoController.java │ │ │ └── resources/ │ │ │ └── wsdl/ │ │ │ └── user.wsdl │ │ ├── lab-65-cxf-ws-demo-user-service/ │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ └── main/ │ │ │ ├── java/ │ │ │ │ └── cn/ │ │ │ │ └── iocoder/ │ │ │ │ └── springboot/ │ │ │ │ └── lab65/ │ │ │ │ └── userservice/ │ │ │ │ ├── UserServiceApplication.java │ │ │ │ ├── config/ │ │ │ │ │ └── CXFConfig.java │ │ │ │ ├── request/ │ │ │ │ │ ├── UserCreateRequest.java │ │ │ │ │ └── UserGetRequest.java │ │ │ │ ├── response/ │ │ │ │ │ ├── UserCreateResponse.java │ │ │ │ │ └── UserGetResponse.java │ │ │ │ └── service/ │ │ │ │ ├── UserService.java │ │ │ │ └── UserServiceImpl.java │ │ │ └── resources/ │ │ │ └── application.yml │ │ └── pom.xml │ ├── lab-65-spring-ws-demo/ │ │ ├── lab-65-spring-ws-demo-application/ │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ └── main/ │ │ │ ├── java/ │ │ │ │ └── cn/ │ │ │ │ └── iocoder/ │ │ │ │ └── springboot/ │ │ │ │ └── lab65/ │ │ │ │ └── demo/ │ │ │ │ ├── DemoApplication.java │ │ │ │ ├── client/ │ │ │ │ │ └── UserClient.java │ │ │ │ ├── config/ │ │ │ │ │ └── WebServicesConfig.java │ │ │ │ └── controller/ │ │ │ │ └── DemoController.java │ │ │ └── resources/ │ │ │ └── application.yml │ │ ├── lab-65-spring-ws-demo-user-service/ │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ └── main/ │ │ │ ├── java/ │ │ │ │ └── cn/ │ │ │ │ └── iocoder/ │ │ │ │ └── springboot/ │ │ │ │ └── lab65/ │ │ │ │ └── userservice/ │ │ │ │ ├── UserServiceApplication.java │ │ │ │ ├── config/ │ │ │ │ │ └── WebServicesConfig.java │ │ │ │ └── endpoint/ │ │ │ │ └── UserEndpoint.java │ │ │ └── resources/ │ │ │ └── users.xsd │ │ └── pom.xml │ ├── lab-65-ws-feign-client/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springboot/ │ │ │ └── lab65/ │ │ │ └── demo/ │ │ │ ├── FeignDemoApplication.java │ │ │ ├── config/ │ │ │ │ └── FeignConfig.java │ │ │ ├── controller/ │ │ │ │ └── DemoController.java │ │ │ └── feign/ │ │ │ └── UserServiceFeignClient.java │ │ └── resources/ │ │ └── application.yml │ ├── pom.xml │ └── 《芋道 Spring Boot Web Services 入门》.md ├── lab-66/ │ ├── lab-66-spring-data-solr/ │ │ ├── pom.xml │ │ └── src/ │ │ ├── main/ │ │ │ ├── java/ │ │ │ │ └── cn/ │ │ │ │ └── iocoder/ │ │ │ │ └── springboot/ │ │ │ │ └── lab15/ │ │ │ │ └── springdatasolr/ │ │ │ │ ├── Application.java │ │ │ │ ├── dataobject/ │ │ │ │ │ └── SolrProductDO.java │ │ │ │ └── repository/ │ │ │ │ ├── ProductRepository.java │ │ │ │ ├── ProductRepository02.java │ │ │ │ └── ProductRepository03.java │ │ │ └── resources/ │ │ │ └── application.yml │ │ └── test/ │ │ └── java/ │ │ └── cn/ │ │ └── iocoder/ │ │ └── springboot/ │ │ └── lab15/ │ │ └── springdatasolr/ │ │ └── repository/ │ │ ├── ProductRepository02Test.java │ │ ├── ProductRepository03Test.java │ │ └── ProductRepositoryTest.java │ ├── pom.xml │ └── 《芋道 Spring Boot Web Solr 入门》.md ├── lab-67/ │ ├── lab-67-netty-demo/ │ │ ├── lab-67-netty-demo-client/ │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ └── main/ │ │ │ ├── java/ │ │ │ │ └── cn/ │ │ │ │ └── iocoder/ │ │ │ │ └── springboot/ │ │ │ │ └── lab67/ │ │ │ │ └── nettyclientdemo/ │ │ │ │ ├── NettyClientApplication.java │ │ │ │ ├── client/ │ │ │ │ │ ├── NettyClient.java │ │ │ │ │ └── handler/ │ │ │ │ │ ├── NettyClientHandler.java │ │ │ │ │ └── NettyClientHandlerInitializer.java │ │ │ │ ├── config/ │ │ │ │ │ └── NettyClientConfig.java │ │ │ │ ├── controller/ │ │ │ │ │ └── TestController.java │ │ │ │ ├── message/ │ │ │ │ │ ├── auth/ │ │ │ │ │ │ ├── AuthRequest.java │ │ │ │ │ │ └── AuthResponse.java │ │ │ │ │ ├── chat/ │ │ │ │ │ │ ├── ChatRedirectToUserRequest.java │ │ │ │ │ │ ├── ChatSendResponse.java │ │ │ │ │ │ ├── ChatSendToAllRequest.java │ │ │ │ │ │ └── ChatSendToOneRequest.java │ │ │ │ │ └── heartbeat/ │ │ │ │ │ ├── HeartbeatRequest.java │ │ │ │ │ └── HeartbeatResponse.java │ │ │ │ └── messagehandler/ │ │ │ │ ├── auth/ │ │ │ │ │ └── AuthResponseHandler.java │ │ │ │ ├── chat/ │ │ │ │ │ ├── ChatRedirectToUserRequestHandler.java │ │ │ │ │ └── ChatSendResponseHandler.java │ │ │ │ └── heartbeat/ │ │ │ │ └── HeartbeatResponseHandler.java │ │ │ └── resources/ │ │ │ └── application.yml │ │ ├── lab-67-netty-demo-common/ │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ └── main/ │ │ │ └── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springboot/ │ │ │ └── lab67/ │ │ │ └── nettycommondemo/ │ │ │ ├── codec/ │ │ │ │ ├── Invocation.java │ │ │ │ ├── InvocationDecoder.java │ │ │ │ └── InvocationEncoder.java │ │ │ └── dispatcher/ │ │ │ ├── Message.java │ │ │ ├── MessageDispatcher.java │ │ │ ├── MessageHandler.java │ │ │ └── MessageHandlerContainer.java │ │ ├── lab-67-netty-demo-server/ │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ └── main/ │ │ │ ├── java/ │ │ │ │ └── cn/ │ │ │ │ └── iocoder/ │ │ │ │ └── springboot/ │ │ │ │ └── lab67/ │ │ │ │ └── nettyserverdemo/ │ │ │ │ ├── NettyServerApplication.java │ │ │ │ ├── config/ │ │ │ │ │ └── NettyServerConfig.java │ │ │ │ ├── message/ │ │ │ │ │ ├── auth/ │ │ │ │ │ │ ├── AuthRequest.java │ │ │ │ │ │ └── AuthResponse.java │ │ │ │ │ ├── chat/ │ │ │ │ │ │ ├── ChatRedirectToUserRequest.java │ │ │ │ │ │ ├── ChatSendResponse.java │ │ │ │ │ │ ├── ChatSendToAllRequest.java │ │ │ │ │ │ └── ChatSendToOneRequest.java │ │ │ │ │ └── heartbeat/ │ │ │ │ │ ├── HeartbeatRequest.java │ │ │ │ │ └── HeartbeatResponse.java │ │ │ │ ├── messagehandler/ │ │ │ │ │ ├── auth/ │ │ │ │ │ │ └── AuthRequestHandler.java │ │ │ │ │ ├── chat/ │ │ │ │ │ │ ├── ChatSendToAllHandler.java │ │ │ │ │ │ └── ChatSendToOneHandler.java │ │ │ │ │ └── heartbeat/ │ │ │ │ │ └── HeartbeatRequestHandler.java │ │ │ │ └── server/ │ │ │ │ ├── NettyChannelManager.java │ │ │ │ ├── NettyServer.java │ │ │ │ └── handler/ │ │ │ │ ├── NettyServerHandler.java │ │ │ │ └── NettyServerHandlerInitializer.java │ │ │ └── resources/ │ │ │ └── application.yml │ │ └── pom.xml │ ├── pom.xml │ └── 《芋道 Spring Boot Netty 入门》.md ├── lab-68-spring-security-oauth/ │ ├── lab-68-demo01-authorization-code-server/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ └── java/ │ │ └── cn/ │ │ └── iocoder/ │ │ └── springboot/ │ │ └── lab68/ │ │ └── resourceserverdemo/ │ │ ├── ResourceServerApplication.java │ │ ├── config/ │ │ │ ├── OAuth2AuthorizationServerConfig.java │ │ │ ├── OAuth2ResourceServerConfig.java │ │ │ └── SecurityConfig.java │ │ └── controller/ │ │ └── ExampleController.java │ ├── lab-68-demo01-client-credentials-server/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ └── java/ │ │ └── cn/ │ │ └── iocoder/ │ │ └── springboot/ │ │ └── lab68/ │ │ └── resourceserverdemo/ │ │ ├── ResourceServerApplication.java │ │ ├── config/ │ │ │ ├── OAuth2AuthorizationServerConfig.java │ │ │ └── OAuth2ResourceServerConfig.java │ │ └── controller/ │ │ └── ExampleController.java │ ├── lab-68-demo01-implicit-server/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ └── java/ │ │ └── cn/ │ │ └── iocoder/ │ │ └── springboot/ │ │ └── lab68/ │ │ └── resourceserverdemo/ │ │ ├── ResourceServerApplication.java │ │ ├── config/ │ │ │ ├── OAuth2AuthorizationServerConfig.java │ │ │ ├── OAuth2ResourceServerConfig.java │ │ │ └── SecurityConfig.java │ │ └── controller/ │ │ └── ExampleController.java │ ├── lab-68-demo01-resource-owner-password-credentials-server/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ └── java/ │ │ └── cn/ │ │ └── iocoder/ │ │ └── springboot/ │ │ └── lab68/ │ │ └── resourceserverdemo/ │ │ ├── ResourceServerApplication.java │ │ ├── config/ │ │ │ ├── OAuth2AuthorizationServerConfig.java │ │ │ ├── OAuth2ResourceServerConfig.java │ │ │ └── SecurityConfig.java │ │ └── controller/ │ │ └── ExampleController.java │ ├── lab-68-demo02-authorization-server-with-authorization-code/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ └── java/ │ │ └── cn/ │ │ └── iocoder/ │ │ └── springboot/ │ │ └── lab68/ │ │ └── authorizationserverdemo/ │ │ ├── AuthorizationServerApplication.java │ │ └── config/ │ │ ├── OAuth2AuthorizationServerConfig.java │ │ └── SecurityConfig.java │ ├── lab-68-demo02-authorization-server-with-client-credentials/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ └── java/ │ │ └── cn/ │ │ └── iocoder/ │ │ └── springboot/ │ │ └── lab68/ │ │ └── authorizationserverdemo/ │ │ ├── AuthorizationServerApplication.java │ │ └── config/ │ │ └── OAuth2AuthorizationServerConfig.java │ ├── lab-68-demo02-authorization-server-with-implicit/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ └── java/ │ │ └── cn/ │ │ └── iocoder/ │ │ └── springboot/ │ │ └── lab68/ │ │ └── authorizationserverdemo/ │ │ ├── AuthorizationServerApplication.java │ │ └── config/ │ │ ├── OAuth2AuthorizationServerConfig.java │ │ └── SecurityConfig.java │ ├── lab-68-demo02-authorization-server-with-resource-owner-password-credentials/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ └── java/ │ │ └── cn/ │ │ └── iocoder/ │ │ └── springboot/ │ │ └── lab68/ │ │ └── authorizationserverdemo/ │ │ ├── AuthorizationServerApplication.java │ │ └── config/ │ │ ├── OAuth2AuthorizationServerConfig.java │ │ └── SecurityConfig.java │ ├── lab-68-demo02-resource-server/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springboot/ │ │ │ └── lab68/ │ │ │ └── resourceserverdemo/ │ │ │ ├── ResourceServerApplication.java │ │ │ ├── config/ │ │ │ │ └── OAuth2ResourceServerConfig.java │ │ │ └── controller/ │ │ │ ├── Callback02Controller.java │ │ │ ├── CallbackController.java │ │ │ ├── ClientLoginController.java │ │ │ ├── ExampleController.java │ │ │ └── LoginController.java │ │ └── resources/ │ │ └── application.yml │ ├── lab-68-demo03-authorization-server-with-resource-owner-password-credentials/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ └── java/ │ │ └── cn/ │ │ └── iocoder/ │ │ └── springboot/ │ │ └── lab68/ │ │ └── authorizationserverdemo/ │ │ ├── AuthorizationServerApplication.java │ │ ├── config/ │ │ │ ├── OAuth2AuthorizationServerConfig.java │ │ │ └── SecurityConfig.java │ │ └── controller/ │ │ └── TokenDemoController.java │ ├── lab-68-demo11-authorization-server-by-jdbc-store/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springboot/ │ │ │ └── lab68/ │ │ │ └── authorizationserverdemo/ │ │ │ ├── AuthorizationServerApplication.java │ │ │ └── config/ │ │ │ ├── OAuth2AuthorizationServerConfig.java │ │ │ └── SecurityConfig.java │ │ └── resources/ │ │ ├── application.yaml │ │ └── db/ │ │ ├── data.sql │ │ └── schema.sql │ ├── lab-68-demo11-authorization-server-by-jwt-store/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ └── java/ │ │ └── cn/ │ │ └── iocoder/ │ │ └── springboot/ │ │ └── lab68/ │ │ └── authorizationserverdemo/ │ │ ├── AuthorizationServerApplication.java │ │ └── config/ │ │ ├── OAuth2AuthorizationServerConfig.java │ │ └── SecurityConfig.java │ ├── lab-68-demo11-authorization-server-by-redis-store/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springboot/ │ │ │ └── lab68/ │ │ │ └── authorizationserverdemo/ │ │ │ ├── AuthorizationServerApplication.java │ │ │ └── config/ │ │ │ ├── OAuth2AuthorizationServerConfig.java │ │ │ └── SecurityConfig.java │ │ └── resources/ │ │ └── application.yml │ ├── lab-68-demo21-authorization-server-on-sso/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springboot/ │ │ │ └── lab68/ │ │ │ └── authorizationserverdemo/ │ │ │ ├── AuthorizationServerApplication.java │ │ │ └── config/ │ │ │ ├── OAuth2AuthorizationServerConfig.java │ │ │ └── SecurityConfig.java │ │ └── resources/ │ │ ├── application.yaml │ │ └── db/ │ │ ├── oauth_data.sql │ │ ├── oauth_schema.sql │ │ ├── user_data.sql │ │ └── user_schema.sql │ ├── lab-68-demo21-resource-server-on-sso/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springboot/ │ │ │ └── lab68/ │ │ │ └── resourceserverdemo/ │ │ │ ├── ResourceServerApplication.java │ │ │ ├── config/ │ │ │ │ ├── OAuthSsoConfig.java │ │ │ │ └── SecurityConfig.java │ │ │ └── controller/ │ │ │ ├── DemoController.java │ │ │ └── UserController.java │ │ └── resources/ │ │ └── application.yml │ ├── pom.xml │ ├── 《芋道 Spring Security OAuth2 入门》.md │ ├── 《芋道 Spring Security OAuth2 单点登陆》.md │ └── 《芋道 Spring Security OAuth2 存储器》.md ├── lab-69-proxy/ │ ├── lab-69-proxy-cglib/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ └── java/ │ │ └── cn/ │ │ └── iocoder/ │ │ └── springboot/ │ │ └── labs/ │ │ └── lab69/ │ │ ├── TestProxyMain.java │ │ ├── intercept/ │ │ │ └── UserServiceMethodInterceptor.java │ │ └── service/ │ │ └── UserServiceImpl.java │ ├── lab-69-proxy-jdk/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ └── java/ │ │ └── cn/ │ │ └── iocoder/ │ │ └── springboot/ │ │ └── labs/ │ │ └── lab69/ │ │ ├── GenerateProxyMain.java │ │ ├── TestProxyMain.java │ │ ├── handler/ │ │ │ └── UserServiceHandler.java │ │ └── service/ │ │ ├── UserService.java │ │ └── UserServiceImpl.java │ └── pom.xml ├── lab-70-db-doc/ │ ├── lab-70-db-doc-screw-01/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ └── java/ │ │ └── ScrewMain.java │ ├── lab-70-db-doc-screw-02/ │ │ ├── doc/ │ │ │ └── 测试文档名称.html │ │ └── pom.xml │ ├── lab-70-db-doc-screw-03/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ └── java/ │ │ └── ScrewMain.java │ ├── pom.xml │ └── 《芋道 Spring Boot 数据表结构文档》.md ├── lab-71-http-debug/ │ ├── lab-71-idea-http-client/ │ │ ├── http-client.env.json │ │ ├── http-client.private.env.json │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ └── java/ │ │ └── cn/ │ │ └── iocoder/ │ │ └── springboot/ │ │ └── lab71/ │ │ ├── Application.java │ │ ├── controller/ │ │ │ ├── UserController.http │ │ │ ├── UserController.java │ │ │ ├── UserController2.http │ │ │ ├── UserController3.http │ │ │ └── UserController4.http │ │ └── vo/ │ │ └── UserUpdateVO.java │ ├── pom.xml │ └── 《芋道 Spring Boot API 接口调试 IDEA HTTP Client》.md ├── lab-72-minio/ │ ├── pom.xml │ ├── src/ │ │ └── main/ │ │ └── java/ │ │ └── cn/ │ │ └── iocoder/ │ │ └── springboot/ │ │ └── lab72/ │ │ ├── MinIOApplication.java │ │ ├── config/ │ │ │ └── MinIOConfiguration.java │ │ └── controller/ │ │ └── FileController.java │ └── 《芋道 Spring Boot 对象存储 MinIO 入门》.md ├── labx-01-spring-cloud-alibaba-nacos-discovery/ │ ├── labx-01-sca-nacos-discovery-demo01-consumer/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springcloudalibaba/ │ │ │ └── labx01/ │ │ │ └── nacosdemo/ │ │ │ └── consumer/ │ │ │ └── DemoConsumerApplication.java │ │ └── resources/ │ │ └── application.yaml │ ├── labx-01-sca-nacos-discovery-demo01-provider/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springcloudalibaba/ │ │ │ └── labx01/ │ │ │ └── nacosdemo/ │ │ │ └── provider/ │ │ │ └── DemoProviderApplication.java │ │ └── resources/ │ │ └── application.yaml │ ├── labx-01-sca-nacos-discovery-demo02-consumer/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springcloudalibaba/ │ │ │ └── labx01/ │ │ │ └── nacosdemo/ │ │ │ └── consumer/ │ │ │ └── DemoConsumerApplication.java │ │ └── resources/ │ │ ├── application-dev.yaml │ │ ├── application-uat.yaml │ │ └── application.yaml │ ├── labx-01-sca-nacos-discovery-demo02-provider/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springcloudalibaba/ │ │ │ └── labx01/ │ │ │ └── nacosdemo/ │ │ │ └── provider/ │ │ │ └── DemoProviderApplication.java │ │ └── resources/ │ │ ├── application-dev.yaml │ │ ├── application-uat.yaml │ │ └── application.yaml │ ├── labx-01-sca-nacos-discovery-demo03-consumer/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springcloudalibaba/ │ │ │ └── labx01/ │ │ │ └── nacosdemo/ │ │ │ └── consumer/ │ │ │ └── DemoConsumerApplication.java │ │ └── resources/ │ │ └── application.yaml │ ├── pom.xml │ └── 《芋道 Spring Cloud Alibaba 注册中心 Nacos 入门》.md ├── labx-02-spring-cloud-netflix-ribbon/ │ ├── labx-02-scn-ribbon-demo01-consumer/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springcloudnetflix/ │ │ │ └── labx02/ │ │ │ └── ribbondemo/ │ │ │ └── consumer/ │ │ │ └── DemoConsumerApplication.java │ │ └── resources/ │ │ └── application.yaml │ ├── labx-02-scn-ribbon-demo01-provider/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springcloudnetflix/ │ │ │ └── labx02/ │ │ │ └── ribbondemo/ │ │ │ └── provider/ │ │ │ └── DemoProviderApplication.java │ │ └── resources/ │ │ └── application.yaml │ ├── labx-02-scn-ribbon-demo02A-consumer/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springcloudnetflix/ │ │ │ └── labx02/ │ │ │ └── ribbondemo/ │ │ │ └── consumer/ │ │ │ └── DemoConsumerApplication.java │ │ └── resources/ │ │ └── application.yaml │ ├── labx-02-scn-ribbon-demo02B-consumer/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ ├── cn/ │ │ │ │ └── iocoder/ │ │ │ │ └── springcloudnetflix/ │ │ │ │ └── labx02/ │ │ │ │ └── ribbondemo/ │ │ │ │ └── consumer/ │ │ │ │ ├── DemoConsumerApplication.java │ │ │ │ └── config/ │ │ │ │ └── RibbonConfiguration.java │ │ │ └── ribbon/ │ │ │ ├── DefaultRibbonClientConfiguration.java │ │ │ └── UserProviderRibbonClientConfiguration.java │ │ └── resources/ │ │ └── application.yaml │ ├── labx-02-scn-ribbon-demo03-consumer/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springcloudnetflix/ │ │ │ └── labx02/ │ │ │ └── ribbondemo/ │ │ │ └── consumer/ │ │ │ └── DemoConsumerApplication.java │ │ └── resources/ │ │ └── application.yaml │ ├── labx-02-scn-ribbon-demo04-consumer/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springcloudnetflix/ │ │ │ └── labx02/ │ │ │ └── ribbondemo/ │ │ │ └── consumer/ │ │ │ └── DemoConsumerApplication.java │ │ └── resources/ │ │ └── application.yaml │ ├── labx-02-scn-ribbon-demo05-consumer/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springcloudnetflix/ │ │ │ └── labx02/ │ │ │ └── ribbondemo/ │ │ │ └── consumer/ │ │ │ └── DemoConsumerApplication.java │ │ └── resources/ │ │ └── application.yaml │ ├── labx-02-scn-ribbon-demo06-consumer/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springcloudnetflix/ │ │ │ └── labx02/ │ │ │ └── ribbondemo/ │ │ │ └── consumer/ │ │ │ └── DemoConsumerApplication.java │ │ └── resources/ │ │ └── application.yaml │ ├── pom.xml │ └── 《芋道 Spring Cloud Netflix 负载均衡 Ribbon 入门》.md ├── labx-03-spring-cloud-feign/ │ ├── labx-03-sc-feign-demo01-consumer/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springcloud/ │ │ │ └── labx03/ │ │ │ └── feigndemo/ │ │ │ └── consumer/ │ │ │ ├── DemoConsumerApplication.java │ │ │ ├── FeignDemo.java │ │ │ ├── controller/ │ │ │ │ └── ConsumerController.java │ │ │ └── feign/ │ │ │ └── DemoProviderFeignClient.java │ │ └── resources/ │ │ └── application.yaml │ ├── labx-03-sc-feign-demo01-provider/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springcloud/ │ │ │ └── labx03/ │ │ │ └── feigndemo/ │ │ │ └── provider/ │ │ │ ├── DemoProviderApplication.java │ │ │ └── controller/ │ │ │ └── ProviderController.java │ │ └── resources/ │ │ └── application.yaml │ ├── labx-03-sc-feign-demo02A-consumer/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springcloud/ │ │ │ └── labx03/ │ │ │ └── feigndemo/ │ │ │ └── consumer/ │ │ │ ├── DemoConsumerApplication.java │ │ │ ├── controller/ │ │ │ │ └── ConsumerController.java │ │ │ └── feign/ │ │ │ └── DemoProviderFeignClient.java │ │ └── resources/ │ │ └── application.yaml │ ├── labx-03-sc-feign-demo02B-consumer/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springcloud/ │ │ │ └── labx03/ │ │ │ └── feigndemo/ │ │ │ └── consumer/ │ │ │ ├── DemoConsumerApplication.java │ │ │ ├── config/ │ │ │ │ ├── DefaultFeignClientConfiguration.java │ │ │ │ └── DemoProviderFeignClientConfiguration.java │ │ │ ├── controller/ │ │ │ │ └── ConsumerController.java │ │ │ └── feign/ │ │ │ └── DemoProviderFeignClient.java │ │ └── resources/ │ │ └── application.yaml │ ├── labx-03-sc-feign-demo03-consumer/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springcloud/ │ │ │ └── labx03/ │ │ │ └── feigndemo/ │ │ │ └── consumer/ │ │ │ ├── DemoConsumerApplication.java │ │ │ ├── controller/ │ │ │ │ └── ConsumerController.java │ │ │ └── feign/ │ │ │ └── DemoProviderFeignClient.java │ │ └── resources/ │ │ └── application.yaml │ ├── labx-03-sc-feign-demo03-provider/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springcloud/ │ │ │ └── labx03/ │ │ │ └── feigndemo/ │ │ │ └── provider/ │ │ │ ├── DemoProviderApplication.java │ │ │ └── controller/ │ │ │ └── ProviderController.java │ │ └── resources/ │ │ └── application.yaml │ ├── labx-03-sc-feign-demo03-provider-api/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ └── java/ │ │ └── cn/ │ │ └── iocoder/ │ │ └── springcloud/ │ │ └── labx03/ │ │ └── feigndemo/ │ │ └── provider/ │ │ └── api/ │ │ └── ProviderService.java │ ├── labx-03-sc-feign-demo04-consumer/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springcloud/ │ │ │ └── labx03/ │ │ │ └── feigndemo/ │ │ │ └── consumer/ │ │ │ ├── DemoConsumerApplication.java │ │ │ ├── controller/ │ │ │ │ └── ConsumerController.java │ │ │ ├── dto/ │ │ │ │ └── DemoDTO.java │ │ │ └── feign/ │ │ │ └── DemoProviderFeignClient.java │ │ └── resources/ │ │ └── application.yaml │ ├── labx-03-sc-feign-demo04-provider/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springcloud/ │ │ │ └── labx03/ │ │ │ └── feigndemo/ │ │ │ └── provider/ │ │ │ ├── DemoProviderApplication.java │ │ │ ├── controller/ │ │ │ │ └── ProviderController.java │ │ │ └── dto/ │ │ │ └── DemoDTO.java │ │ └── resources/ │ │ └── application.yaml │ ├── labx-03-sc-feign-demo05-consumer/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springcloud/ │ │ │ └── labx03/ │ │ │ └── feigndemo/ │ │ │ └── consumer/ │ │ │ ├── DemoConsumerApplication.java │ │ │ ├── controller/ │ │ │ │ └── ConsumerController.java │ │ │ └── feign/ │ │ │ └── DemoProviderFeignClient.java │ │ └── resources/ │ │ └── application.yaml │ ├── labx-03-sc-feign-demo06A-consumer/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springcloud/ │ │ │ └── labx03/ │ │ │ └── feigndemo/ │ │ │ └── consumer/ │ │ │ ├── DemoConsumerApplication.java │ │ │ ├── controller/ │ │ │ │ └── ConsumerController.java │ │ │ └── feign/ │ │ │ └── DemoProviderFeignClient.java │ │ └── resources/ │ │ └── application.yaml │ ├── labx-03-sc-feign-demo06B-consumer/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springcloud/ │ │ │ └── labx03/ │ │ │ └── feigndemo/ │ │ │ └── consumer/ │ │ │ ├── DemoConsumerApplication.java │ │ │ ├── controller/ │ │ │ │ └── ConsumerController.java │ │ │ └── feign/ │ │ │ └── DemoProviderFeignClient.java │ │ └── resources/ │ │ └── application.yaml │ ├── labx-03-sc-feign-demo07-consumer/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springcloud/ │ │ │ └── labx03/ │ │ │ └── feigndemo/ │ │ │ └── consumer/ │ │ │ ├── DemoConsumerApplication.java │ │ │ ├── controller/ │ │ │ │ └── ConsumerController.java │ │ │ └── feign/ │ │ │ └── DemoProviderFeignClient.java │ │ └── resources/ │ │ └── application.yaml │ ├── pom.xml │ └── 《芋道 Spring Cloud 声明式调用 Feign 入门》.md ├── labx-04-spring-cloud-alibaba-sentinel/ │ ├── labx-04-sca-sentinel-actuator-provider/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springcloudalibaba/ │ │ │ └── labx04/ │ │ │ └── sentineldemo/ │ │ │ └── provider/ │ │ │ ├── DemoProviderApplication.java │ │ │ ├── controller/ │ │ │ │ └── DemoController.java │ │ │ └── web/ │ │ │ ├── CustomBlockExceptionHandler.java │ │ │ ├── CustomRequestOriginParser.java │ │ │ └── GlobalExceptionHandler.java │ │ └── resources/ │ │ └── application.yaml │ ├── labx-04-sca-sentinel-apollo-provider/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springcloudalibaba/ │ │ │ └── labx04/ │ │ │ └── sentineldemo/ │ │ │ └── provider/ │ │ │ ├── DemoProviderApplication.java │ │ │ ├── controller/ │ │ │ │ └── DemoController.java │ │ │ └── web/ │ │ │ ├── CustomBlockExceptionHandler.java │ │ │ ├── CustomRequestOriginParser.java │ │ │ └── GlobalExceptionHandler.java │ │ └── resources/ │ │ └── application.yaml │ ├── labx-04-sca-sentinel-demo01-provider/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springcloudalibaba/ │ │ │ └── labx04/ │ │ │ └── sentineldemo/ │ │ │ └── provider/ │ │ │ ├── DemoProviderApplication.java │ │ │ ├── controller/ │ │ │ │ └── DemoController.java │ │ │ └── web/ │ │ │ ├── CustomBlockExceptionHandler.java │ │ │ ├── CustomRequestOriginParser.java │ │ │ └── GlobalExceptionHandler.java │ │ └── resources/ │ │ └── application.yaml │ ├── labx-04-sca-sentinel-feign-consumer/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springcloudalibaba/ │ │ │ └── labx04/ │ │ │ └── sentineldemo/ │ │ │ └── provider/ │ │ │ ├── DemoConsumerApplication.java │ │ │ ├── controller/ │ │ │ │ └── ConsumerController.java │ │ │ ├── fallback/ │ │ │ │ ├── DemoProviderFeignClientFallback.java │ │ │ │ └── DemoProviderFeignClientFallbackFactory.java │ │ │ └── feign/ │ │ │ └── DemoProviderFeignClient.java │ │ └── resources/ │ │ └── application.yaml │ ├── labx-04-sca-sentinel-file-provider/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springcloudalibaba/ │ │ │ └── labx04/ │ │ │ └── sentineldemo/ │ │ │ └── provider/ │ │ │ ├── DemoProviderApplication.java │ │ │ ├── controller/ │ │ │ │ └── DemoController.java │ │ │ └── web/ │ │ │ ├── CustomBlockExceptionHandler.java │ │ │ ├── CustomRequestOriginParser.java │ │ │ └── GlobalExceptionHandler.java │ │ └── resources/ │ │ └── application.yaml │ ├── labx-04-sca-sentinel-nacos-provider/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springcloudalibaba/ │ │ │ └── labx04/ │ │ │ └── sentineldemo/ │ │ │ └── provider/ │ │ │ ├── DemoProviderApplication.java │ │ │ ├── controller/ │ │ │ │ └── DemoController.java │ │ │ └── web/ │ │ │ ├── CustomBlockExceptionHandler.java │ │ │ ├── CustomRequestOriginParser.java │ │ │ └── GlobalExceptionHandler.java │ │ └── resources/ │ │ └── application.yaml │ ├── labx-04-sca-sentinel-resttemplate-consumer/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springcloudalibaba/ │ │ │ └── labx04/ │ │ │ └── sentineldemo/ │ │ │ └── provider/ │ │ │ ├── DemoConsumerApplication.java │ │ │ ├── config/ │ │ │ │ └── RestTemplateConfiguration.java │ │ │ └── controller/ │ │ │ └── ConsumerController.java │ │ └── resources/ │ │ └── application.yaml │ ├── pom.xml │ └── 《芋道 Spring Cloud Alibaba 服务容错 Sentinel 入门》.md ├── labx-05-spring-cloud-alibaba-nacos-config/ │ ├── labx-05-sca-nacos-config-auto-refresh/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springcloudalibaba/ │ │ │ └── labx5/ │ │ │ └── nacosdemo/ │ │ │ ├── DemoApplication.java │ │ │ ├── config/ │ │ │ │ └── OrderProperties.java │ │ │ ├── controller/ │ │ │ │ └── DemoController.java │ │ │ └── listener/ │ │ │ └── DemoEnvironmentChangeListener.java │ │ └── resources/ │ │ └── bootstrap.yaml │ ├── labx-05-sca-nacos-config-demo/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springcloudalibaba/ │ │ │ └── labx5/ │ │ │ └── nacosdemo/ │ │ │ ├── DemoApplication.java │ │ │ ├── config/ │ │ │ │ └── OrderProperties.java │ │ │ └── controller/ │ │ │ └── DemoController.java │ │ └── resources/ │ │ └── bootstrap.yaml │ ├── labx-05-sca-nacos-config-demo-actuator/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springcloudalibaba/ │ │ │ └── labx5/ │ │ │ └── nacosdemo/ │ │ │ ├── DemoApplication.java │ │ │ ├── config/ │ │ │ │ └── OrderProperties.java │ │ │ └── controller/ │ │ │ └── DemoController.java │ │ └── resources/ │ │ ├── application.yaml │ │ └── bootstrap.yaml │ ├── labx-05-sca-nacos-config-demo-jasypt/ │ │ ├── pom.xml │ │ └── src/ │ │ ├── main/ │ │ │ ├── java/ │ │ │ │ └── cn/ │ │ │ │ └── iocoder/ │ │ │ │ └── springcloudalibaba/ │ │ │ │ └── labx5/ │ │ │ │ └── nacosdemo/ │ │ │ │ ├── DemoApplication.java │ │ │ │ ├── controller/ │ │ │ │ │ └── DemoController.java │ │ │ │ └── listener/ │ │ │ │ └── JasyptEnvironmentChangeListener.java │ │ │ └── resources/ │ │ │ └── bootstrap.yaml │ │ └── test/ │ │ └── java/ │ │ └── cn/ │ │ └── iocoder/ │ │ └── springcloudalibaba/ │ │ └── labx5/ │ │ └── nacosdemo/ │ │ └── JasyptTest.java │ ├── labx-05-sca-nacos-config-demo-multi/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springcloudalibaba/ │ │ │ └── labx5/ │ │ │ └── nacosdemo/ │ │ │ └── DemoApplication.java │ │ └── resources/ │ │ └── bootstrap.yaml │ ├── labx-05-sca-nacos-config-demo-profiles/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springcloudalibaba/ │ │ │ └── labx5/ │ │ │ └── nacosdemo/ │ │ │ └── ProfilesApplication.java │ │ └── resources/ │ │ ├── bootstrap-dev.yaml │ │ ├── bootstrap-prod.yaml │ │ └── bootstrap.yaml │ ├── pom.xml │ └── 《芋道 Spring Cloud Alibaba 配置中心 Nacos 入门》.md ├── labx-06-spring-cloud-stream-rocketmq/ │ ├── labx-06-sca-stream-rocketmq-consumer-actuator/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springcloudalibaba/ │ │ │ └── labx6/ │ │ │ └── rocketmqdemo/ │ │ │ └── consumerdemo/ │ │ │ ├── ConsumerApplication.java │ │ │ ├── listener/ │ │ │ │ ├── Demo01Consumer.java │ │ │ │ └── MySink.java │ │ │ └── message/ │ │ │ └── Demo01Message.java │ │ └── resources/ │ │ └── application.yml │ ├── labx-06-sca-stream-rocketmq-consumer-aliyun/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springcloudalibaba/ │ │ │ └── labx6/ │ │ │ └── rocketmqdemo/ │ │ │ └── consumerdemo/ │ │ │ ├── ConsumerApplication.java │ │ │ ├── listener/ │ │ │ │ ├── Demo01Consumer.java │ │ │ │ └── MySink.java │ │ │ └── message/ │ │ │ └── Demo01Message.java │ │ └── resources/ │ │ └── application.yml │ ├── labx-06-sca-stream-rocketmq-consumer-broadcasting/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springcloudalibaba/ │ │ │ └── labx6/ │ │ │ └── rocketmqdemo/ │ │ │ └── consumerdemo/ │ │ │ ├── ConsumerApplication.java │ │ │ ├── listener/ │ │ │ │ ├── Demo01Consumer.java │ │ │ │ └── MySink.java │ │ │ └── message/ │ │ │ └── Demo01Message.java │ │ └── resources/ │ │ └── application.yml │ ├── labx-06-sca-stream-rocketmq-consumer-demo/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springcloudalibaba/ │ │ │ └── labx6/ │ │ │ └── rocketmqdemo/ │ │ │ └── consumerdemo/ │ │ │ ├── ConsumerApplication.java │ │ │ ├── listener/ │ │ │ │ ├── Demo01Consumer.java │ │ │ │ └── MySink.java │ │ │ └── message/ │ │ │ └── Demo01Message.java │ │ └── resources/ │ │ └── application.yml │ ├── labx-06-sca-stream-rocketmq-consumer-error-handler/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springcloudalibaba/ │ │ │ └── labx6/ │ │ │ └── rocketmqdemo/ │ │ │ └── consumerdemo/ │ │ │ ├── ConsumerApplication.java │ │ │ ├── listener/ │ │ │ │ ├── Demo01Consumer.java │ │ │ │ └── MySink.java │ │ │ └── message/ │ │ │ └── Demo01Message.java │ │ └── resources/ │ │ └── application.yml │ ├── labx-06-sca-stream-rocketmq-consumer-filter/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springcloudalibaba/ │ │ │ └── labx6/ │ │ │ └── rocketmqdemo/ │ │ │ └── consumerdemo/ │ │ │ ├── ConsumerApplication.java │ │ │ ├── listener/ │ │ │ │ ├── Demo01Consumer.java │ │ │ │ └── MySink.java │ │ │ └── message/ │ │ │ └── Demo01Message.java │ │ └── resources/ │ │ └── application.yml │ ├── labx-06-sca-stream-rocketmq-consumer-orderly/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springcloudalibaba/ │ │ │ └── labx6/ │ │ │ └── rocketmqdemo/ │ │ │ └── consumerdemo/ │ │ │ ├── ConsumerApplication.java │ │ │ ├── listener/ │ │ │ │ ├── Demo01Consumer.java │ │ │ │ └── MySink.java │ │ │ └── message/ │ │ │ └── Demo01Message.java │ │ └── resources/ │ │ └── application.yml │ ├── labx-06-sca-stream-rocketmq-consumer-retry/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springcloudalibaba/ │ │ │ └── labx6/ │ │ │ └── rocketmqdemo/ │ │ │ └── consumerdemo/ │ │ │ ├── ConsumerApplication.java │ │ │ ├── listener/ │ │ │ │ ├── Demo01Consumer.java │ │ │ │ └── MySink.java │ │ │ └── message/ │ │ │ └── Demo01Message.java │ │ └── resources/ │ │ └── application.yml │ ├── labx-06-sca-stream-rocketmq-producer-actuator/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springcloudalibaba/ │ │ │ └── labx6/ │ │ │ └── rocketmqdemo/ │ │ │ └── producerdemo/ │ │ │ ├── ProducerApplication.java │ │ │ ├── controller/ │ │ │ │ └── Demo01Controller.java │ │ │ └── message/ │ │ │ ├── Demo01Message.java │ │ │ └── MySource.java │ │ └── resources/ │ │ └── application.yml │ ├── labx-06-sca-stream-rocketmq-producer-aliyun/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springcloudalibaba/ │ │ │ └── labx6/ │ │ │ └── rocketmqdemo/ │ │ │ └── producerdemo/ │ │ │ ├── ProducerApplication.java │ │ │ ├── controller/ │ │ │ │ └── Demo01Controller.java │ │ │ └── message/ │ │ │ ├── Demo01Message.java │ │ │ └── MySource.java │ │ └── resources/ │ │ └── application.yml │ ├── labx-06-sca-stream-rocketmq-producer-demo/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springcloudalibaba/ │ │ │ └── labx6/ │ │ │ └── rocketmqdemo/ │ │ │ └── producerdemo/ │ │ │ ├── ProducerApplication.java │ │ │ ├── controller/ │ │ │ │ └── Demo01Controller.java │ │ │ └── message/ │ │ │ ├── Demo01Message.java │ │ │ └── MySource.java │ │ └── resources/ │ │ └── application.yml │ ├── labx-06-sca-stream-rocketmq-producer-orderly/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springcloudalibaba/ │ │ │ └── labx6/ │ │ │ └── rocketmqdemo/ │ │ │ └── producerdemo/ │ │ │ ├── ProducerApplication.java │ │ │ ├── controller/ │ │ │ │ └── Demo01Controller.java │ │ │ └── message/ │ │ │ ├── Demo01Message.java │ │ │ └── MySource.java │ │ └── resources/ │ │ └── application.yml │ ├── labx-06-sca-stream-rocketmq-producer-transaction/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springcloudalibaba/ │ │ │ └── labx6/ │ │ │ └── rocketmqdemo/ │ │ │ └── producerdemo/ │ │ │ ├── ProducerApplication.java │ │ │ ├── controller/ │ │ │ │ └── Demo01Controller.java │ │ │ ├── listener/ │ │ │ │ └── TransactionListenerImpl.java │ │ │ └── message/ │ │ │ ├── Demo01Message.java │ │ │ └── MySource.java │ │ └── resources/ │ │ └── application.yml │ ├── pom.xml │ └── 《芋道 Spring Cloud Alibaba 消息队列 RocketMQ 入门》.md ├── labx-07-spring-cloud-alibaba-dubbo/ │ ├── labx-07-sca-dubbo-demo01/ │ │ ├── labx-07-sca-dubbo-demo01-api/ │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ └── main/ │ │ │ └── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springcloudalibaba/ │ │ │ └── labx7/ │ │ │ ├── api/ │ │ │ │ └── UserService.java │ │ │ └── dto/ │ │ │ ├── UserAddDTO.java │ │ │ └── UserDTO.java │ │ ├── labx-07-sca-dubbo-demo01-consumer/ │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ └── main/ │ │ │ ├── java/ │ │ │ │ └── cn/ │ │ │ │ └── iocoder/ │ │ │ │ └── springcloudalibaba/ │ │ │ │ └── labx7/ │ │ │ │ └── consumerdemo/ │ │ │ │ ├── ConsumerApplication.java │ │ │ │ └── controller/ │ │ │ │ └── UserController.java │ │ │ └── resources/ │ │ │ └── application.yaml │ │ ├── labx-07-sca-dubbo-demo01-provider/ │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ └── main/ │ │ │ ├── java/ │ │ │ │ └── cn/ │ │ │ │ └── iocoder/ │ │ │ │ └── springcloudalibaba/ │ │ │ │ └── labx7/ │ │ │ │ └── providerdemo/ │ │ │ │ ├── ProviderApplication.java │ │ │ │ └── service/ │ │ │ │ └── UserServiceImpl.java │ │ │ └── resources/ │ │ │ └── application.yaml │ │ └── pom.xml │ ├── labx-07-sca-dubbo-demo02/ │ │ ├── labx-07-sca-dubbo-demo02-api/ │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ └── main/ │ │ │ └── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springcloudalibaba/ │ │ │ └── labx7/ │ │ │ ├── api/ │ │ │ │ └── UserService.java │ │ │ └── dto/ │ │ │ ├── UserAddDTO.java │ │ │ └── UserDTO.java │ │ ├── labx-07-sca-dubbo-demo02-consumer/ │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ └── main/ │ │ │ ├── java/ │ │ │ │ └── cn/ │ │ │ │ └── iocoder/ │ │ │ │ └── springcloudalibaba/ │ │ │ │ └── labx7/ │ │ │ │ └── consumerdemo/ │ │ │ │ ├── FeignConsumerApplication.java │ │ │ │ ├── config/ │ │ │ │ │ └── RestTemplateConfig.java │ │ │ │ ├── controller/ │ │ │ │ │ ├── User01Controller.java │ │ │ │ │ ├── User02Controller.java │ │ │ │ │ ├── User03Controller.java │ │ │ │ │ └── User04Controller.java │ │ │ │ ├── dto/ │ │ │ │ │ ├── UserAddDTO.java │ │ │ │ │ └── UserDTO.java │ │ │ │ └── feign/ │ │ │ │ ├── UserFeignClient.java │ │ │ │ └── UserFeignClient02.java │ │ │ └── resources/ │ │ │ └── application.yaml │ │ ├── labx-07-sca-dubbo-demo02-provider-rest/ │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ └── main/ │ │ │ ├── java/ │ │ │ │ └── cn/ │ │ │ │ └── iocoder/ │ │ │ │ └── springcloudalibaba/ │ │ │ │ └── labx7/ │ │ │ │ └── providerdemo/ │ │ │ │ ├── RestProviderApplication.java │ │ │ │ └── service/ │ │ │ │ └── UserServiceImpl.java │ │ │ └── resources/ │ │ │ └── application.yaml │ │ ├── labx-07-sca-dubbo-demo02-provider-springmvc/ │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ └── main/ │ │ │ ├── java/ │ │ │ │ └── cn/ │ │ │ │ └── iocoder/ │ │ │ │ └── springcloudalibaba/ │ │ │ │ └── labx7/ │ │ │ │ └── providerdemo/ │ │ │ │ ├── SpringMVCProviderApplication.java │ │ │ │ └── service/ │ │ │ │ └── UserServiceImpl.java │ │ │ └── resources/ │ │ │ └── application.yaml │ │ └── pom.xml │ ├── labx-07-sca-dubbo-demo03-validation/ │ │ ├── labx-07-sca-dubbo-demo03-api/ │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ └── main/ │ │ │ └── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springcloudalibaba/ │ │ │ └── labx7/ │ │ │ ├── api/ │ │ │ │ └── UserService.java │ │ │ └── dto/ │ │ │ ├── UserAddDTO.java │ │ │ └── UserDTO.java │ │ ├── labx-07-sca-dubbo-demo03-consumer/ │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ └── main/ │ │ │ ├── java/ │ │ │ │ └── cn/ │ │ │ │ └── iocoder/ │ │ │ │ └── springcloudalibaba/ │ │ │ │ └── labx7/ │ │ │ │ └── consumerdemo/ │ │ │ │ ├── ConsumerApplication.java │ │ │ │ └── controller/ │ │ │ │ └── UserController.java │ │ │ └── resources/ │ │ │ └── application.yaml │ │ ├── labx-07-sca-dubbo-demo03-provider/ │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ └── main/ │ │ │ ├── java/ │ │ │ │ └── cn/ │ │ │ │ └── iocoder/ │ │ │ │ └── springcloudalibaba/ │ │ │ │ └── labx7/ │ │ │ │ └── providerdemo/ │ │ │ │ ├── ProviderApplication.java │ │ │ │ └── service/ │ │ │ │ └── UserServiceImpl.java │ │ │ └── resources/ │ │ │ └── application.yaml │ │ └── pom.xml │ ├── labx-07-sca-dubbo-demo04-filter/ │ │ ├── labx-07-sca-dubbo-demo04-api/ │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ └── main/ │ │ │ └── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springcloudalibaba/ │ │ │ └── labx7/ │ │ │ ├── api/ │ │ │ │ └── UserService.java │ │ │ ├── core/ │ │ │ │ ├── ServiceException.java │ │ │ │ └── ServiceExceptionEnum.java │ │ │ └── dto/ │ │ │ ├── UserAddDTO.java │ │ │ └── UserDTO.java │ │ ├── labx-07-sca-dubbo-demo04-consumer/ │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ └── main/ │ │ │ ├── java/ │ │ │ │ └── cn/ │ │ │ │ └── iocoder/ │ │ │ │ └── springcloudalibaba/ │ │ │ │ └── labx7/ │ │ │ │ └── consumerdemo/ │ │ │ │ ├── ConsumerApplication.java │ │ │ │ └── controller/ │ │ │ │ └── UserController.java │ │ │ └── resources/ │ │ │ └── application.yaml │ │ ├── labx-07-sca-dubbo-demo04-provider/ │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ └── main/ │ │ │ ├── java/ │ │ │ │ └── cn/ │ │ │ │ └── iocoder/ │ │ │ │ └── springcloudalibaba/ │ │ │ │ └── labx7/ │ │ │ │ └── providerdemo/ │ │ │ │ ├── ProviderApplication.java │ │ │ │ ├── filter/ │ │ │ │ │ └── DubboExceptionFilter.java │ │ │ │ └── service/ │ │ │ │ └── UserServiceImpl.java │ │ │ └── resources/ │ │ │ ├── META-INF/ │ │ │ │ └── dubbo/ │ │ │ │ └── org.apache.dubbo.rpc.Filter │ │ │ └── application.yaml │ │ └── pom.xml │ ├── labx-07-sca-dubbo-demo05-sentinel/ │ │ ├── labx-07-sca-dubbo-demo05-api/ │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ └── main/ │ │ │ └── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springcloudalibaba/ │ │ │ └── labx7/ │ │ │ ├── api/ │ │ │ │ └── UserService.java │ │ │ └── dto/ │ │ │ ├── UserAddDTO.java │ │ │ └── UserDTO.java │ │ ├── labx-07-sca-dubbo-demo05-consumer/ │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ └── main/ │ │ │ ├── java/ │ │ │ │ └── cn/ │ │ │ │ └── iocoder/ │ │ │ │ └── springcloudalibaba/ │ │ │ │ └── labx7/ │ │ │ │ └── consumerdemo/ │ │ │ │ ├── ConsumerApplication.java │ │ │ │ └── controller/ │ │ │ │ └── UserController.java │ │ │ └── resources/ │ │ │ └── application.yaml │ │ ├── labx-07-sca-dubbo-demo05-provider/ │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ └── main/ │ │ │ ├── java/ │ │ │ │ └── cn/ │ │ │ │ └── iocoder/ │ │ │ │ └── springcloudalibaba/ │ │ │ │ └── labx7/ │ │ │ │ └── providerdemo/ │ │ │ │ ├── ProviderApplication.java │ │ │ │ └── service/ │ │ │ │ └── UserServiceImpl.java │ │ │ └── resources/ │ │ │ └── application.yaml │ │ └── pom.xml │ ├── pom.xml │ └── 《芋道 Spring Cloud Alibaba 服务调用 Dubbo 入门》.md ├── labx-08-spring-cloud-gateway/ │ ├── labx-08-sc-gateway-demo01/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springcloud/ │ │ │ └── labx08/ │ │ │ └── gatewaydemo/ │ │ │ └── GatewayApplication.java │ │ └── resources/ │ │ └── application.yaml │ ├── labx-08-sc-gateway-demo01-test/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springcloud/ │ │ │ └── labx08/ │ │ │ └── gatewaydemo/ │ │ │ ├── GatewayApplication.java │ │ │ └── config/ │ │ │ └── GatewayConfig.java │ │ └── resources/ │ │ └── application.yaml │ ├── labx-08-sc-gateway-demo02-registry/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springcloud/ │ │ │ └── labx08/ │ │ │ └── gatewaydemo/ │ │ │ └── GatewayApplication.java │ │ └── resources/ │ │ └── application.yaml │ ├── labx-08-sc-gateway-demo03-config-apollo/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springcloud/ │ │ │ └── labx08/ │ │ │ └── gatewaydemo/ │ │ │ ├── GatewayApplication.java │ │ │ └── GatewayPropertiesRefresher.java │ │ └── resources/ │ │ └── application.yaml │ ├── labx-08-sc-gateway-demo03-config-nacos/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springcloud/ │ │ │ └── labx08/ │ │ │ └── gatewaydemo/ │ │ │ └── GatewayApplication.java │ │ └── resources/ │ │ ├── application.yaml │ │ └── bootstrap.yaml │ ├── labx-08-sc-gateway-demo04/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springcloud/ │ │ │ └── labx08/ │ │ │ └── gatewaydemo/ │ │ │ └── GatewayApplication.java │ │ └── resources/ │ │ └── application.yaml │ ├── labx-08-sc-gateway-demo05-custom-gateway-filter/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springcloud/ │ │ │ └── labx08/ │ │ │ └── gatewaydemo/ │ │ │ ├── GatewayApplication.java │ │ │ └── filter/ │ │ │ └── AuthGatewayFilterFactory.java │ │ └── resources/ │ │ └── application.yaml │ ├── labx-08-sc-gateway-demo06-rate-limiter/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springcloud/ │ │ │ └── labx08/ │ │ │ └── gatewaydemo/ │ │ │ ├── GatewayApplication.java │ │ │ └── config/ │ │ │ └── GatewayConfig.java │ │ └── resources/ │ │ └── application.yaml │ ├── labx-08-sc-gateway-demo07-hystrix/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springcloud/ │ │ │ └── labx08/ │ │ │ └── gatewaydemo/ │ │ │ ├── GatewayApplication.java │ │ │ └── controller/ │ │ │ └── FallbackController.java │ │ └── resources/ │ │ └── application.yaml │ ├── labx-08-sc-gateway-demo07-sentinel/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springcloud/ │ │ │ └── labx08/ │ │ │ └── gatewaydemo/ │ │ │ ├── CustomBlockRequestHandler.java │ │ │ └── GatewayApplication.java │ │ └── resources/ │ │ ├── application.yaml │ │ ├── sentinel-gw-api-group.json │ │ └── sentinel-gw-flow.json │ ├── labx-08-sc-gateway-demo08-custom-global-filter/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springcloud/ │ │ │ └── labx08/ │ │ │ └── gatewaydemo/ │ │ │ ├── GatewayApplication.java │ │ │ ├── User03Controller.java │ │ │ ├── config/ │ │ │ │ └── RestTemplateConfig.java │ │ │ └── filter/ │ │ │ └── DubboFilter.java │ │ └── resources/ │ │ └── application.yaml │ ├── labx-08-sc-gateway-demo09-actuator/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springcloud/ │ │ │ └── labx08/ │ │ │ └── gatewaydemo/ │ │ │ └── GatewayApplication.java │ │ └── resources/ │ │ └── application.yaml │ ├── labx-08-sc-gateway-demo10-troubleshooting/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springcloud/ │ │ │ └── labx08/ │ │ │ └── gatewaydemo/ │ │ │ └── GatewayApplication.java │ │ └── resources/ │ │ └── application.yaml │ ├── labx-08-sc-user-service/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springcloud/ │ │ │ └── labx08/ │ │ │ └── userservice/ │ │ │ ├── UserServiceApplication.java │ │ │ ├── controller/ │ │ │ │ └── UserController.java │ │ │ └── dto/ │ │ │ ├── UserAddDTO.java │ │ │ └── UserDTO.java │ │ └── resources/ │ │ └── application.yaml │ ├── pom.xml │ └── 《芋道 Spring Cloud 网关 Spring Cloud Gateway 入门》.md ├── labx-09-spring-cloud-apollo/ │ ├── labx-09-sc-apollo-demo/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springcloud/ │ │ │ └── labx09/ │ │ │ └── apollodemo/ │ │ │ ├── DemoApplication.java │ │ │ ├── config/ │ │ │ │ └── OrderProperties.java │ │ │ └── controller/ │ │ │ └── DemoController.java │ │ └── resources/ │ │ └── application.yaml │ ├── labx-09-sc-apollo-demo-auto-refresh/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springcloud/ │ │ │ └── labx09/ │ │ │ └── apollodemo/ │ │ │ ├── DemoApplication.java │ │ │ ├── config/ │ │ │ │ └── OrderProperties.java │ │ │ ├── controller/ │ │ │ │ └── DemoController.java │ │ │ └── listener/ │ │ │ └── ApolloPropertiesRefresher.java │ │ └── resources/ │ │ └── application.yaml │ ├── labx-09-sc-apollo-demo-jasypt/ │ │ ├── pom.xml │ │ └── src/ │ │ ├── main/ │ │ │ ├── java/ │ │ │ │ └── cn/ │ │ │ │ └── iocoder/ │ │ │ │ └── springcloud/ │ │ │ │ └── labx09/ │ │ │ │ └── apollodemo/ │ │ │ │ ├── DemoApplication.java │ │ │ │ └── controller/ │ │ │ │ └── DemoController.java │ │ │ └── resources/ │ │ │ └── application.yaml │ │ └── test/ │ │ └── java/ │ │ └── cn/ │ │ └── iocoder/ │ │ └── springcloud/ │ │ └── labx09/ │ │ └── apollodemo/ │ │ └── JasyptTest.java │ ├── labx-09-sc-apollo-demo-multi/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springcloud/ │ │ │ └── labx09/ │ │ │ └── apollodemo/ │ │ │ └── DemoApplication.java │ │ └── resources/ │ │ └── application.yaml │ ├── labx-09-sc-apollo-demo-profiles/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springcloud/ │ │ │ └── labx09/ │ │ │ └── apollodemo/ │ │ │ └── DemoApplication.java │ │ └── resources/ │ │ ├── application-dev.yaml │ │ ├── application-prod.yaml │ │ └── application.yaml │ ├── pom.xml │ └── 《芋道 Spring Cloud 配置中心 Apollo 入门》.md ├── labx-10-spring-cloud-stream-rabbitmq/ │ ├── labx-10-sc-stream-rabbitmq-consumer-ack/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springcloud/ │ │ │ └── labx10/ │ │ │ └── rabbitmqdemo/ │ │ │ └── consumerdemo/ │ │ │ ├── ConsumerApplication.java │ │ │ ├── listener/ │ │ │ │ ├── Demo01Consumer.java │ │ │ │ └── MySink.java │ │ │ └── message/ │ │ │ └── Demo01Message.java │ │ └── resources/ │ │ └── application.yml │ ├── labx-10-sc-stream-rabbitmq-consumer-actuator/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springcloud/ │ │ │ └── labx10/ │ │ │ └── rabbitmqdemo/ │ │ │ └── consumerdemo/ │ │ │ ├── ConsumerApplication.java │ │ │ ├── listener/ │ │ │ │ ├── Demo01Consumer.java │ │ │ │ └── MySink.java │ │ │ └── message/ │ │ │ └── Demo01Message.java │ │ └── resources/ │ │ └── application.yml │ ├── labx-10-sc-stream-rabbitmq-consumer-batch/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springcloud/ │ │ │ └── labx10/ │ │ │ └── rabbitmqdemo/ │ │ │ └── consumerdemo/ │ │ │ ├── ConsumerApplication.java │ │ │ ├── listener/ │ │ │ │ ├── Demo01Consumer.java │ │ │ │ └── MySink.java │ │ │ └── message/ │ │ │ └── Demo01Message.java │ │ └── resources/ │ │ └── application.yml │ ├── labx-10-sc-stream-rabbitmq-consumer-broadcasting/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springcloud/ │ │ │ └── labx10/ │ │ │ └── rabbitmqdemo/ │ │ │ └── consumerdemo/ │ │ │ ├── ConsumerApplication.java │ │ │ ├── listener/ │ │ │ │ ├── Demo01Consumer.java │ │ │ │ └── MySink.java │ │ │ └── message/ │ │ │ └── Demo01Message.java │ │ └── resources/ │ │ └── application.yml │ ├── labx-10-sc-stream-rabbitmq-consumer-concurrency/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springcloud/ │ │ │ └── labx10/ │ │ │ └── rabbitmqdemo/ │ │ │ └── consumerdemo/ │ │ │ ├── ConsumerApplication.java │ │ │ ├── listener/ │ │ │ │ ├── Demo01Consumer.java │ │ │ │ └── MySink.java │ │ │ └── message/ │ │ │ └── Demo01Message.java │ │ └── resources/ │ │ └── application.yml │ ├── labx-10-sc-stream-rabbitmq-consumer-delay/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springcloud/ │ │ │ └── labx10/ │ │ │ └── rabbitmqdemo/ │ │ │ └── consumerdemo/ │ │ │ ├── ConsumerApplication.java │ │ │ ├── listener/ │ │ │ │ ├── Demo01Consumer.java │ │ │ │ └── MySink.java │ │ │ └── message/ │ │ │ └── Demo01Message.java │ │ └── resources/ │ │ └── application.yml │ ├── labx-10-sc-stream-rabbitmq-consumer-demo/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springcloud/ │ │ │ └── labx10/ │ │ │ └── rabbitmqdemo/ │ │ │ └── consumerdemo/ │ │ │ ├── ConsumerApplication.java │ │ │ ├── listener/ │ │ │ │ ├── Demo01Consumer.java │ │ │ │ └── MySink.java │ │ │ └── message/ │ │ │ └── Demo01Message.java │ │ └── resources/ │ │ └── application.yml │ ├── labx-10-sc-stream-rabbitmq-consumer-error-handler/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springcloud/ │ │ │ └── labx10/ │ │ │ └── rabbitmqdemo/ │ │ │ └── consumerdemo/ │ │ │ ├── ConsumerApplication.java │ │ │ ├── listener/ │ │ │ │ ├── Demo01Consumer.java │ │ │ │ └── MySink.java │ │ │ └── message/ │ │ │ └── Demo01Message.java │ │ └── resources/ │ │ └── application.yml │ ├── labx-10-sc-stream-rabbitmq-consumer-filter/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springcloud/ │ │ │ └── labx10/ │ │ │ └── rabbitmqdemo/ │ │ │ └── consumerdemo/ │ │ │ ├── ConsumerApplication.java │ │ │ ├── listener/ │ │ │ │ ├── Demo01Consumer.java │ │ │ │ └── MySink.java │ │ │ └── message/ │ │ │ └── Demo01Message.java │ │ └── resources/ │ │ └── application.yml │ ├── labx-10-sc-stream-rabbitmq-consumer-partitioning/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springcloud/ │ │ │ └── labx10/ │ │ │ └── rabbitmqdemo/ │ │ │ └── consumerdemo/ │ │ │ ├── ConsumerApplication.java │ │ │ ├── listener/ │ │ │ │ ├── Demo01Consumer.java │ │ │ │ └── MySink.java │ │ │ └── message/ │ │ │ └── Demo01Message.java │ │ └── resources/ │ │ └── application.yml │ ├── labx-10-sc-stream-rabbitmq-consumer-retry/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springcloud/ │ │ │ └── labx10/ │ │ │ └── rabbitmqdemo/ │ │ │ └── consumerdemo/ │ │ │ ├── ConsumerApplication.java │ │ │ ├── listener/ │ │ │ │ ├── Demo01Consumer.java │ │ │ │ └── MySink.java │ │ │ └── message/ │ │ │ └── Demo01Message.java │ │ └── resources/ │ │ └── application.yml │ ├── labx-10-sc-stream-rabbitmq-producer-actuator/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springcloud/ │ │ │ └── labx10/ │ │ │ └── rabbitmqdemo/ │ │ │ └── producerdemo/ │ │ │ ├── ProducerApplication.java │ │ │ ├── controller/ │ │ │ │ └── Demo01Controller.java │ │ │ └── message/ │ │ │ ├── Demo01Message.java │ │ │ └── MySource.java │ │ └── resources/ │ │ └── application.yml │ ├── labx-10-sc-stream-rabbitmq-producer-batch/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springcloud/ │ │ │ └── labx10/ │ │ │ └── rabbitmqdemo/ │ │ │ └── producerdemo/ │ │ │ ├── ProducerApplication.java │ │ │ ├── controller/ │ │ │ │ └── Demo01Controller.java │ │ │ └── message/ │ │ │ ├── Demo01Message.java │ │ │ └── MySource.java │ │ └── resources/ │ │ └── application.yml │ ├── labx-10-sc-stream-rabbitmq-producer-confirm/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springcloud/ │ │ │ └── labx10/ │ │ │ └── rabbitmqdemo/ │ │ │ └── producerdemo/ │ │ │ ├── ProducerApplication.java │ │ │ ├── controller/ │ │ │ │ └── Demo01Controller.java │ │ │ └── message/ │ │ │ ├── Demo01Message.java │ │ │ ├── Demo01ProducerConfirmCallback.java │ │ │ ├── Demo01ProducerReturnCallback.java │ │ │ └── MySource.java │ │ └── resources/ │ │ └── application.yml │ ├── labx-10-sc-stream-rabbitmq-producer-delay/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springcloud/ │ │ │ └── labx10/ │ │ │ └── rabbitmqdemo/ │ │ │ └── producerdemo/ │ │ │ ├── ProducerApplication.java │ │ │ ├── controller/ │ │ │ │ └── Demo01Controller.java │ │ │ └── message/ │ │ │ ├── Demo01Message.java │ │ │ └── MySource.java │ │ └── resources/ │ │ └── application.yml │ ├── labx-10-sc-stream-rabbitmq-producer-demo/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springcloud/ │ │ │ └── labx10/ │ │ │ └── rabbitmqdemo/ │ │ │ └── producerdemo/ │ │ │ ├── ProducerApplication.java │ │ │ ├── controller/ │ │ │ │ └── Demo01Controller.java │ │ │ └── message/ │ │ │ ├── Demo01Message.java │ │ │ └── MySource.java │ │ └── resources/ │ │ └── application.yml │ ├── labx-10-sc-stream-rabbitmq-producer-partitioning/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springcloud/ │ │ │ └── labx10/ │ │ │ └── rabbitmqdemo/ │ │ │ └── producerdemo/ │ │ │ ├── ProducerApplication.java │ │ │ ├── controller/ │ │ │ │ └── Demo01Controller.java │ │ │ └── message/ │ │ │ ├── Demo01Message.java │ │ │ └── MySource.java │ │ └── resources/ │ │ └── application.yml │ ├── labx-10-sc-stream-rabbitmq-producer-transaction/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springcloud/ │ │ │ └── labx10/ │ │ │ └── rabbitmqdemo/ │ │ │ └── producerdemo/ │ │ │ ├── ProducerApplication.java │ │ │ ├── config/ │ │ │ │ └── TransactionConfig.java │ │ │ ├── controller/ │ │ │ │ └── Demo01Controller.java │ │ │ └── message/ │ │ │ ├── Demo01Message.java │ │ │ └── MySource.java │ │ └── resources/ │ │ └── application.yml │ ├── pom.xml │ └── 《芋道 Spring Cloud 消息队列 RabbitMQ 入门》.md ├── labx-11-spring-cloud-stream-kafka/ │ ├── labx-11-sc-stream-kafka-consumer-ack/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springcloud/ │ │ │ └── labx11/ │ │ │ └── kafkademo/ │ │ │ └── consumerdemo/ │ │ │ ├── ConsumerApplication.java │ │ │ ├── listener/ │ │ │ │ ├── Demo01Consumer.java │ │ │ │ └── MySink.java │ │ │ └── message/ │ │ │ └── Demo01Message.java │ │ └── resources/ │ │ └── application.yml │ ├── labx-11-sc-stream-kafka-consumer-actuator/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springcloud/ │ │ │ └── labx11/ │ │ │ └── kafkademo/ │ │ │ └── consumerdemo/ │ │ │ ├── ConsumerApplication.java │ │ │ ├── listener/ │ │ │ │ ├── Demo01Consumer.java │ │ │ │ └── MySink.java │ │ │ └── message/ │ │ │ └── Demo01Message.java │ │ └── resources/ │ │ └── application.yml │ ├── labx-11-sc-stream-kafka-consumer-batch/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springcloud/ │ │ │ └── labx11/ │ │ │ └── kafkademo/ │ │ │ └── consumerdemo/ │ │ │ ├── ConsumerApplication.java │ │ │ ├── listener/ │ │ │ │ ├── Demo01Consumer.java │ │ │ │ └── MySink.java │ │ │ └── message/ │ │ │ └── Demo01Message.java │ │ └── resources/ │ │ └── application.yml │ ├── labx-11-sc-stream-kafka-consumer-broadcasting/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springcloud/ │ │ │ └── labx11/ │ │ │ └── kafkademo/ │ │ │ └── consumerdemo/ │ │ │ ├── ConsumerApplication.java │ │ │ ├── listener/ │ │ │ │ ├── Demo01Consumer.java │ │ │ │ └── MySink.java │ │ │ └── message/ │ │ │ └── Demo01Message.java │ │ └── resources/ │ │ └── application.yml │ ├── labx-11-sc-stream-kafka-consumer-concurrency/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springcloud/ │ │ │ └── labx11/ │ │ │ └── kafkademo/ │ │ │ └── consumerdemo/ │ │ │ ├── ConsumerApplication.java │ │ │ ├── listener/ │ │ │ │ ├── Demo01Consumer.java │ │ │ │ └── MySink.java │ │ │ └── message/ │ │ │ └── Demo01Message.java │ │ └── resources/ │ │ └── application.yml │ ├── labx-11-sc-stream-kafka-consumer-demo/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springcloud/ │ │ │ └── labx11/ │ │ │ └── kafkademo/ │ │ │ └── consumerdemo/ │ │ │ ├── ConsumerApplication.java │ │ │ ├── listener/ │ │ │ │ ├── Demo01Consumer.java │ │ │ │ └── MySink.java │ │ │ └── message/ │ │ │ └── Demo01Message.java │ │ └── resources/ │ │ └── application.yml │ ├── labx-11-sc-stream-kafka-consumer-error-handler/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springcloud/ │ │ │ └── labx11/ │ │ │ └── kafkademo/ │ │ │ └── consumerdemo/ │ │ │ ├── ConsumerApplication.java │ │ │ ├── listener/ │ │ │ │ ├── Demo01Consumer.java │ │ │ │ └── MySink.java │ │ │ └── message/ │ │ │ └── Demo01Message.java │ │ └── resources/ │ │ └── application.yml │ ├── labx-11-sc-stream-kafka-consumer-filter/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springcloud/ │ │ │ └── labx11/ │ │ │ └── kafkademo/ │ │ │ └── consumerdemo/ │ │ │ ├── ConsumerApplication.java │ │ │ ├── listener/ │ │ │ │ ├── Demo01Consumer.java │ │ │ │ └── MySink.java │ │ │ └── message/ │ │ │ └── Demo01Message.java │ │ └── resources/ │ │ └── application.yml │ ├── labx-11-sc-stream-kafka-consumer-partitioning/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springcloud/ │ │ │ └── labx11/ │ │ │ └── kafkademo/ │ │ │ └── consumerdemo/ │ │ │ ├── ConsumerApplication.java │ │ │ ├── listener/ │ │ │ │ ├── Demo01Consumer.java │ │ │ │ └── MySink.java │ │ │ └── message/ │ │ │ └── Demo01Message.java │ │ └── resources/ │ │ └── application.yml │ ├── labx-11-sc-stream-kafka-consumer-retry/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springcloud/ │ │ │ └── labx11/ │ │ │ └── kafkademo/ │ │ │ └── consumerdemo/ │ │ │ ├── ConsumerApplication.java │ │ │ ├── listener/ │ │ │ │ ├── Demo01Consumer.java │ │ │ │ └── MySink.java │ │ │ └── message/ │ │ │ └── Demo01Message.java │ │ └── resources/ │ │ └── application.yml │ ├── labx-11-sc-stream-kafka-consumer-transaction/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springcloud/ │ │ │ └── labx11/ │ │ │ └── kafkademo/ │ │ │ └── consumerdemo/ │ │ │ ├── ConsumerApplication.java │ │ │ ├── listener/ │ │ │ │ ├── Demo01Consumer.java │ │ │ │ └── MySink.java │ │ │ └── message/ │ │ │ └── Demo01Message.java │ │ └── resources/ │ │ └── application.yml │ ├── labx-11-sc-stream-kafka-producer-actuator/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springcloud/ │ │ │ └── labx11/ │ │ │ └── kafkademo/ │ │ │ └── kafkademo/ │ │ │ ├── ProducerApplication.java │ │ │ ├── controller/ │ │ │ │ └── Demo01Controller.java │ │ │ └── message/ │ │ │ ├── Demo01Message.java │ │ │ └── MySource.java │ │ └── resources/ │ │ └── application.yml │ ├── labx-11-sc-stream-kafka-producer-batch/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springcloud/ │ │ │ └── labx11/ │ │ │ └── kafkademo/ │ │ │ └── kafkademo/ │ │ │ ├── ProducerApplication.java │ │ │ ├── controller/ │ │ │ │ └── Demo01Controller.java │ │ │ └── message/ │ │ │ ├── Demo01Message.java │ │ │ └── MySource.java │ │ └── resources/ │ │ └── application.yml │ ├── labx-11-sc-stream-kafka-producer-demo/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springcloud/ │ │ │ └── labx11/ │ │ │ └── kafkademo/ │ │ │ └── kafkademo/ │ │ │ ├── ProducerApplication.java │ │ │ ├── controller/ │ │ │ │ └── Demo01Controller.java │ │ │ └── message/ │ │ │ ├── Demo01Message.java │ │ │ └── MySource.java │ │ └── resources/ │ │ └── application.yml │ ├── labx-11-sc-stream-kafka-producer-partitioning/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springcloud/ │ │ │ └── labx11/ │ │ │ └── kafkademo/ │ │ │ └── kafkademo/ │ │ │ ├── ProducerApplication.java │ │ │ ├── controller/ │ │ │ │ └── Demo01Controller.java │ │ │ └── message/ │ │ │ ├── Demo01Message.java │ │ │ └── MySource.java │ │ └── resources/ │ │ └── application.yml │ ├── labx-11-sc-stream-kafka-producer-transaction/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springcloud/ │ │ │ └── labx11/ │ │ │ └── kafkademo/ │ │ │ └── kafkademo/ │ │ │ ├── ProducerApplication.java │ │ │ ├── config/ │ │ │ │ └── TransactionConfig.java │ │ │ ├── controller/ │ │ │ │ └── Demo01Controller.java │ │ │ └── message/ │ │ │ ├── Demo01Message.java │ │ │ └── MySource.java │ │ └── resources/ │ │ └── application.yml │ ├── pom.xml │ └── 《芋道 Spring Cloud 消息队列 Kafka 入门》.md ├── labx-12-spring-cloud-config/ │ ├── labx-12-sc-config-server-demo/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springcloud/ │ │ │ └── labx12/ │ │ │ └── configserverdemo/ │ │ │ └── ConfigServerApplication.java │ │ └── resources/ │ │ ├── application.yml │ │ └── shared/ │ │ └── user-application.yml │ ├── labx-12-sc-config-server-git/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springcloud/ │ │ │ └── labx12/ │ │ │ └── configserverdemo/ │ │ │ └── ConfigServerApplication.java │ │ └── resources/ │ │ ├── application.yml │ │ ├── bootstrap.yml │ │ └── configserver.jks │ ├── labx-12-sc-config-server-git-auto-refresh-by-bus/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springcloud/ │ │ │ └── labx12/ │ │ │ └── configserverdemo/ │ │ │ └── ConfigServerApplication.java │ │ └── resources/ │ │ └── application.yml │ ├── labx-12-sc-config-server-git-nacos/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springcloud/ │ │ │ └── labx12/ │ │ │ └── configserverdemo/ │ │ │ └── ConfigServerApplication.java │ │ └── resources/ │ │ └── application.yml │ ├── labx-12-sc-config-user-application/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springcloud/ │ │ │ └── labx12/ │ │ │ └── userapplication/ │ │ │ ├── UserApplication.java │ │ │ ├── config/ │ │ │ │ └── OrderProperties.java │ │ │ └── controller/ │ │ │ └── DemoController.java │ │ └── resources/ │ │ └── bootstrap.yml │ ├── labx-12-sc-config-user-application-auto-refresh-by-actuator/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springcloud/ │ │ │ └── labx12/ │ │ │ └── userapplication/ │ │ │ ├── UserApplication.java │ │ │ ├── config/ │ │ │ │ └── OrderProperties.java │ │ │ ├── controller/ │ │ │ │ └── DemoController.java │ │ │ └── listener/ │ │ │ └── DemoEnvironmentChangeListener.java │ │ └── resources/ │ │ ├── application.yml │ │ └── bootstrap.yml │ ├── labx-12-sc-config-user-application-auto-refresh-by-bus/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springcloud/ │ │ │ └── labx12/ │ │ │ └── userapplication/ │ │ │ ├── UserApplication.java │ │ │ ├── config/ │ │ │ │ └── OrderProperties.java │ │ │ └── controller/ │ │ │ └── DemoController.java │ │ └── resources/ │ │ ├── application.yml │ │ └── bootstrap.yml │ ├── labx-12-sc-config-user-application-nacos/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springcloud/ │ │ │ └── labx12/ │ │ │ └── userapplication/ │ │ │ ├── UserApplication.java │ │ │ ├── config/ │ │ │ │ └── OrderProperties.java │ │ │ └── controller/ │ │ │ └── DemoController.java │ │ └── resources/ │ │ └── bootstrap.yml │ ├── pom.xml │ └── 《芋道 Spring Cloud 配置中心 Spring Cloud Config 入门》.md ├── labx-13/ │ ├── labx-13-sc-sleuth-db-elasticsearch/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springcloud/ │ │ │ └── labx13/ │ │ │ └── springmvcdemo/ │ │ │ ├── UserServiceApplication.java │ │ │ ├── config/ │ │ │ │ └── SleuthConfiguration.java │ │ │ ├── controller/ │ │ │ │ └── UserController.java │ │ │ ├── dataobject/ │ │ │ │ └── ESUserDO.java │ │ │ ├── repository/ │ │ │ │ └── ESUserRepository.java │ │ │ └── spring/ │ │ │ ├── ClusterNodes.java │ │ │ └── TracingTransportClientFactoryBean.java │ │ └── resources/ │ │ └── application.yml │ ├── labx-13-sc-sleuth-db-mongodb/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springcloud/ │ │ │ └── labx13/ │ │ │ └── springmvcdemo/ │ │ │ ├── UserServiceApplication.java │ │ │ ├── config/ │ │ │ │ └── SleuthConfiguration.java │ │ │ ├── controller/ │ │ │ │ └── UserController.java │ │ │ └── dataobject/ │ │ │ └── UserDO.java │ │ └── resources/ │ │ └── application.yml │ ├── labx-13-sc-sleuth-db-mysql/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springcloud/ │ │ │ └── labx13/ │ │ │ └── springmvcdemo/ │ │ │ ├── UserServiceApplication.java │ │ │ └── controller/ │ │ │ └── UserController.java │ │ └── resources/ │ │ └── application.yml │ ├── labx-13-sc-sleuth-db-redis/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springcloud/ │ │ │ └── labx13/ │ │ │ └── springmvcdemo/ │ │ │ ├── UserServiceApplication.java │ │ │ ├── config/ │ │ │ │ └── SleuthConfiguration.java │ │ │ └── controller/ │ │ │ └── UserController.java │ │ └── resources/ │ │ └── application.yml │ ├── labx-13-sc-sleuth-dubbo/ │ │ ├── labx-13-sc-sleuth-dubbo-api/ │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ └── main/ │ │ │ └── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springcloud/ │ │ │ └── labx13/ │ │ │ ├── api/ │ │ │ │ └── UserService.java │ │ │ └── package-info.java │ │ ├── labx-13-sc-sleuth-dubbo-consumer/ │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ └── main/ │ │ │ ├── java/ │ │ │ │ └── cn/ │ │ │ │ └── iocoder/ │ │ │ │ └── springcloud/ │ │ │ │ └── labx13/ │ │ │ │ └── consumerdemo/ │ │ │ │ ├── ConsumerApplication.java │ │ │ │ └── controller/ │ │ │ │ └── UserController.java │ │ │ └── resources/ │ │ │ └── application.yaml │ │ ├── labx-13-sc-sleuth-dubbo-provider/ │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ └── main/ │ │ │ ├── java/ │ │ │ │ └── cn/ │ │ │ │ └── iocoder/ │ │ │ │ └── springcloud/ │ │ │ │ └── labx13/ │ │ │ │ └── providerdemo/ │ │ │ │ ├── ProviderApplication.java │ │ │ │ └── service/ │ │ │ │ └── UserServiceImpl.java │ │ │ └── resources/ │ │ │ └── application.yaml │ │ └── pom.xml │ ├── labx-13-sc-sleuth-feign/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springcloud/ │ │ │ └── labx13/ │ │ │ └── springmvcdemo/ │ │ │ ├── FeignApplication.java │ │ │ ├── controller/ │ │ │ │ └── FeignController.java │ │ │ └── feign/ │ │ │ └── UserServiceFeignClient.java │ │ └── resources/ │ │ └── application.yml │ ├── labx-13-sc-sleuth-logback/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springcloud/ │ │ │ └── labx13/ │ │ │ └── springmvcdemo/ │ │ │ ├── UserServiceApplication.java │ │ │ └── controller/ │ │ │ └── UserController.java │ │ └── resources/ │ │ └── application.yml │ ├── labx-13-sc-sleuth-mq-activemq/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springboot/ │ │ │ └── labx13/ │ │ │ └── activemqdemo/ │ │ │ ├── ActiveMQApplication.java │ │ │ ├── consumer/ │ │ │ │ └── DemoConsumer.java │ │ │ ├── controller/ │ │ │ │ └── DemoController.java │ │ │ ├── message/ │ │ │ │ └── DemoMessage.java │ │ │ └── producer/ │ │ │ └── DemoProducer.java │ │ └── resources/ │ │ └── application.yaml │ ├── labx-13-sc-sleuth-mq-kafka/ │ │ ├── labx-13-sc-sleuth-mq-kafka-producer/ │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ └── main/ │ │ │ ├── java/ │ │ │ │ └── cn/ │ │ │ │ └── iocoder/ │ │ │ │ └── springcloud/ │ │ │ │ └── labx13/ │ │ │ │ └── kafkademo/ │ │ │ │ └── producerdemo/ │ │ │ │ ├── ProducerApplication.java │ │ │ │ ├── controller/ │ │ │ │ │ └── Demo01Controller.java │ │ │ │ └── message/ │ │ │ │ ├── Demo01Message.java │ │ │ │ └── MySource.java │ │ │ └── resources/ │ │ │ └── application.yml │ │ ├── labx-13-sc-stream-mq-kafka-consumer/ │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ └── main/ │ │ │ ├── java/ │ │ │ │ └── cn/ │ │ │ │ └── iocoder/ │ │ │ │ └── springcloud/ │ │ │ │ └── labx13/ │ │ │ │ └── kafkademo/ │ │ │ │ └── consumerdemo/ │ │ │ │ ├── ConsumerApplication.java │ │ │ │ ├── listener/ │ │ │ │ │ ├── Demo01Consumer.java │ │ │ │ │ └── MySink.java │ │ │ │ └── message/ │ │ │ │ └── Demo01Message.java │ │ │ └── resources/ │ │ │ └── application.yml │ │ └── pom.xml │ ├── labx-13-sc-sleuth-mq-rabbitmq/ │ │ ├── labx-13-sc-sleuth-mq-rabbitmq-producer/ │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ └── main/ │ │ │ ├── java/ │ │ │ │ └── cn/ │ │ │ │ └── iocoder/ │ │ │ │ └── springcloud/ │ │ │ │ └── labx13/ │ │ │ │ └── rabbitmqdemo/ │ │ │ │ └── producerdemo/ │ │ │ │ ├── ProducerApplication.java │ │ │ │ ├── controller/ │ │ │ │ │ └── Demo01Controller.java │ │ │ │ └── message/ │ │ │ │ ├── Demo01Message.java │ │ │ │ └── MySource.java │ │ │ └── resources/ │ │ │ └── application.yml │ │ ├── labx-13-sc-stream-mq-rabbitmq-consumer/ │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ └── main/ │ │ │ ├── java/ │ │ │ │ └── cn/ │ │ │ │ └── iocoder/ │ │ │ │ └── springcloud/ │ │ │ │ └── labx13/ │ │ │ │ └── rabbitmqdemo/ │ │ │ │ └── consumerdemo/ │ │ │ │ ├── ConsumerApplication.java │ │ │ │ ├── listener/ │ │ │ │ │ ├── Demo01Consumer.java │ │ │ │ │ └── MySink.java │ │ │ │ └── message/ │ │ │ │ └── Demo01Message.java │ │ │ └── resources/ │ │ │ └── application.yml │ │ └── pom.xml │ ├── labx-13-sc-sleuth-opentracing/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springcloud/ │ │ │ └── labx13/ │ │ │ └── springmvcdemo/ │ │ │ ├── UserServiceApplication.java │ │ │ └── controller/ │ │ │ └── UserController.java │ │ └── resources/ │ │ └── application.yml │ ├── labx-13-sc-sleuth-sampler/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springcloud/ │ │ │ └── labx13/ │ │ │ └── springmvcdemo/ │ │ │ ├── UserServiceApplication.java │ │ │ └── controller/ │ │ │ └── UserController.java │ │ └── resources/ │ │ └── application.yml │ ├── labx-13-sc-sleuth-springcloudgateway/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springcloud/ │ │ │ └── labx13/ │ │ │ └── gatewaydemo/ │ │ │ └── GatewayApplication.java │ │ └── resources/ │ │ └── application.yaml │ ├── labx-13-sc-sleuth-springmvc/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springcloud/ │ │ │ └── labx13/ │ │ │ └── springmvcdemo/ │ │ │ ├── UserServiceApplication.java │ │ │ └── controller/ │ │ │ └── UserController.java │ │ └── resources/ │ │ └── application.yml │ ├── labx-13-sc-sleuth-zipkin-server-demo-in-memory/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springcloud/ │ │ │ └── labx13/ │ │ │ └── sleuthzipkinserverdemo/ │ │ │ └── SleuthZipkinServerApplication.java │ │ └── resources/ │ │ └── application.yml │ ├── pom.xml │ └── 《芋道 Spring Cloud 链路追踪 Spring Cloud Sleuth》.md ├── labx-14/ │ ├── labx-14-sc-skywalking-dubbo/ │ │ ├── labx-14-sc-skywalking-dubbo-api/ │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ └── main/ │ │ │ └── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springcloud/ │ │ │ └── labx14/ │ │ │ ├── api/ │ │ │ │ └── UserService.java │ │ │ └── package-info.java │ │ ├── labx-14-sc-skywalking-dubbo-consumer/ │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ └── main/ │ │ │ ├── java/ │ │ │ │ └── cn/ │ │ │ │ └── iocoder/ │ │ │ │ └── springcloud/ │ │ │ │ └── labx14/ │ │ │ │ └── consumerdemo/ │ │ │ │ ├── ConsumerApplication.java │ │ │ │ └── controller/ │ │ │ │ └── UserController.java │ │ │ └── resources/ │ │ │ └── application.yaml │ │ ├── labx-14-sc-skywalking-dubbo-provider/ │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ └── main/ │ │ │ ├── java/ │ │ │ │ └── cn/ │ │ │ │ └── iocoder/ │ │ │ │ └── springcloud/ │ │ │ │ └── labx14/ │ │ │ │ └── providerdemo/ │ │ │ │ ├── ProviderApplication.java │ │ │ │ └── service/ │ │ │ │ └── UserServiceImpl.java │ │ │ └── resources/ │ │ │ └── application.yaml │ │ └── pom.xml │ ├── labx-14-sc-skywalking-feign/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springcloud/ │ │ │ └── labx14/ │ │ │ └── springmvcdemo/ │ │ │ ├── FeignApplication.java │ │ │ ├── controller/ │ │ │ │ └── FeignController.java │ │ │ └── feign/ │ │ │ └── UserServiceFeignClient.java │ │ └── resources/ │ │ └── application.yml │ ├── labx-14-sc-skywalking-mq-kafka/ │ │ ├── labx-14-sc-skywalking-mq-kafka-consumer/ │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ └── main/ │ │ │ ├── java/ │ │ │ │ └── cn/ │ │ │ │ └── iocoder/ │ │ │ │ └── springcloud/ │ │ │ │ └── labx14/ │ │ │ │ └── kafkademo/ │ │ │ │ └── consumerdemo/ │ │ │ │ ├── ConsumerApplication.java │ │ │ │ ├── listener/ │ │ │ │ │ ├── Demo01Consumer.java │ │ │ │ │ └── MySink.java │ │ │ │ └── message/ │ │ │ │ └── Demo01Message.java │ │ │ └── resources/ │ │ │ └── application.yml │ │ ├── labx-14-sc-skywalking-mq-kafka-producer/ │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ └── main/ │ │ │ ├── java/ │ │ │ │ └── cn/ │ │ │ │ └── iocoder/ │ │ │ │ └── springcloud/ │ │ │ │ └── labx14/ │ │ │ │ └── kafkademo/ │ │ │ │ └── producerdemo/ │ │ │ │ ├── ProducerApplication.java │ │ │ │ ├── controller/ │ │ │ │ │ └── Demo01Controller.java │ │ │ │ └── message/ │ │ │ │ ├── Demo01Message.java │ │ │ │ └── MySource.java │ │ │ └── resources/ │ │ │ └── application.yml │ │ └── pom.xml │ ├── labx-14-sc-skywalking-mq-rabbitmq/ │ │ ├── labx-14-sc-skywalking-mq-rabbitmq-consumer/ │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ └── main/ │ │ │ ├── java/ │ │ │ │ └── cn/ │ │ │ │ └── iocoder/ │ │ │ │ └── springcloud/ │ │ │ │ └── labx14/ │ │ │ │ └── rabbitmqdemo/ │ │ │ │ └── consumerdemo/ │ │ │ │ ├── ConsumerApplication.java │ │ │ │ ├── listener/ │ │ │ │ │ ├── Demo01Consumer.java │ │ │ │ │ └── MySink.java │ │ │ │ └── message/ │ │ │ │ └── Demo01Message.java │ │ │ └── resources/ │ │ │ └── application.yml │ │ ├── labx-14-sc-skywalking-mq-rabbitmq-producer/ │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ └── main/ │ │ │ ├── java/ │ │ │ │ └── cn/ │ │ │ │ └── iocoder/ │ │ │ │ └── springcloud/ │ │ │ │ └── labx14/ │ │ │ │ └── rabbitmqdemo/ │ │ │ │ └── producerdemo/ │ │ │ │ ├── ProducerApplication.java │ │ │ │ ├── controller/ │ │ │ │ │ └── Demo01Controller.java │ │ │ │ └── message/ │ │ │ │ ├── Demo01Message.java │ │ │ │ └── MySource.java │ │ │ └── resources/ │ │ │ └── application.yml │ │ └── pom.xml │ ├── labx-14-sc-skywalking-mq-rocketmq/ │ │ ├── labx-14-sc-skywalking-mq-rocketmq-consumer/ │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ └── main/ │ │ │ ├── java/ │ │ │ │ └── cn/ │ │ │ │ └── iocoder/ │ │ │ │ └── springcloud/ │ │ │ │ └── labx14/ │ │ │ │ └── rocketmqdemo/ │ │ │ │ └── consumerdemo/ │ │ │ │ ├── ConsumerApplication.java │ │ │ │ ├── listener/ │ │ │ │ │ ├── Demo01Consumer.java │ │ │ │ │ └── MySink.java │ │ │ │ └── message/ │ │ │ │ └── Demo01Message.java │ │ │ └── resources/ │ │ │ └── application.yml │ │ ├── labx-14-sc-skywalking-mq-rocketmq-producer/ │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ └── main/ │ │ │ ├── java/ │ │ │ │ └── cn/ │ │ │ │ └── iocoder/ │ │ │ │ └── springcloud/ │ │ │ │ └── labx14/ │ │ │ │ └── rocketmqdemo/ │ │ │ │ └── producerdemo/ │ │ │ │ ├── ProducerApplication.java │ │ │ │ ├── controller/ │ │ │ │ │ └── Demo01Controller.java │ │ │ │ └── message/ │ │ │ │ ├── Demo01Message.java │ │ │ │ └── MySource.java │ │ │ └── resources/ │ │ │ └── application.yml │ │ └── pom.xml │ ├── labx-14-sc-skywalking-springcloudgateway/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springcloud/ │ │ │ └── labx14/ │ │ │ └── gatewaydemo/ │ │ │ └── GatewayApplication.java │ │ └── resources/ │ │ └── application.yaml │ ├── labx-14-sc-skywalking-springmvc/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springcloud/ │ │ │ └── labx14/ │ │ │ └── springmvcdemo/ │ │ │ ├── UserServiceApplication.java │ │ │ └── controller/ │ │ │ └── UserController.java │ │ └── resources/ │ │ └── application.yml │ ├── pom.xml │ └── 《芋道 Spring Cloud 链路追踪 SkyWalking》.md ├── labx-15/ │ ├── labx-15-admin-02-adminserver/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springcloud/ │ │ │ └── labx15/ │ │ │ └── adminserver/ │ │ │ └── AdminServerApplication.java │ │ └── resources/ │ │ └── application.yaml │ ├── labx-15-admin-02-demo-application/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springcloud/ │ │ │ └── labx15/ │ │ │ └── demo/ │ │ │ ├── Demo01Application.java │ │ │ ├── Demo02Application.java │ │ │ └── Demo03Application.java │ │ └── resources/ │ │ └── application.yaml │ ├── labx-15-admin-03-adminserver/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springcloud/ │ │ │ └── labx15/ │ │ │ └── adminserver/ │ │ │ ├── AdminServerApplication.java │ │ │ └── config/ │ │ │ └── SecurityConfig.java │ │ └── resources/ │ │ └── application.yaml │ ├── labx-15-admin-03-demo-application/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springcloud/ │ │ │ └── labx15/ │ │ │ └── demo/ │ │ │ ├── Demo01Application.java │ │ │ └── Demo02Application.java │ │ └── resources/ │ │ └── application.yaml │ ├── labx-15-admin-04-adminserver-custom/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springcloud/ │ │ │ └── labx15/ │ │ │ └── adminserver/ │ │ │ ├── AdminServerApplication.java │ │ │ └── notify/ │ │ │ └── LoggerNotifier.java │ │ └── resources/ │ │ └── application.yaml │ ├── labx-15-admin-04-adminserver-mail/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springcloud/ │ │ │ └── labx15/ │ │ │ └── adminserver/ │ │ │ └── AdminServerApplication.java │ │ └── resources/ │ │ └── application.yaml │ ├── pom.xml │ └── 《芋道 Spring Cloud 监控工具 Admin 入门》.md ├── labx-16/ │ ├── deploy.sh │ ├── labx-16-demo-01/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springcloud/ │ │ │ └── lab16/ │ │ │ └── jenkinsdemo/ │ │ │ ├── Application.java │ │ │ └── controller/ │ │ │ └── DemoController.java │ │ └── resources/ │ │ ├── application-dev.yaml │ │ ├── application-local.yaml │ │ ├── application-pre.yaml │ │ ├── application-prod.yaml │ │ └── application-uat.yaml │ ├── pom.xml │ └── 《芋道 Spring Cloud 持续交付 Jenkins 入门》.md ├── labx-17/ │ ├── labx-17-sc-seata-at-feign-demo/ │ │ ├── data.sql │ │ ├── labx-17-sc-seata-at-feign-demo-account-service/ │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ └── main/ │ │ │ ├── java/ │ │ │ │ └── cn/ │ │ │ │ └── iocoder/ │ │ │ │ └── springcloud/ │ │ │ │ └── labx17/ │ │ │ │ └── accountservice/ │ │ │ │ ├── AccountServiceApplication.java │ │ │ │ ├── controller/ │ │ │ │ │ └── AccountController.java │ │ │ │ ├── dao/ │ │ │ │ │ └── AccountDao.java │ │ │ │ ├── dto/ │ │ │ │ │ └── AccountReduceBalanceDTO.java │ │ │ │ └── service/ │ │ │ │ ├── AccountService.java │ │ │ │ └── impl/ │ │ │ │ └── AccountServiceImpl.java │ │ │ └── resources/ │ │ │ ├── application-file.yaml │ │ │ └── application.yaml │ │ ├── labx-17-sc-seata-at-feign-demo-order-service/ │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ └── main/ │ │ │ ├── java/ │ │ │ │ └── cn/ │ │ │ │ └── iocoder/ │ │ │ │ └── springcloud/ │ │ │ │ └── labx17/ │ │ │ │ └── orderservice/ │ │ │ │ ├── OrderServiceApplication.java │ │ │ │ ├── controller/ │ │ │ │ │ └── OrderController.java │ │ │ │ ├── dao/ │ │ │ │ │ └── OrderDao.java │ │ │ │ ├── entity/ │ │ │ │ │ └── OrderDO.java │ │ │ │ ├── feign/ │ │ │ │ │ ├── AccountServiceFeignClient.java │ │ │ │ │ ├── ProductServiceFeignClient.java │ │ │ │ │ └── dto/ │ │ │ │ │ ├── AccountReduceBalanceDTO.java │ │ │ │ │ └── ProductReduceStockDTO.java │ │ │ │ └── service/ │ │ │ │ ├── OrderService.java │ │ │ │ └── impl/ │ │ │ │ └── OrderServiceImpl.java │ │ │ └── resources/ │ │ │ ├── application-file.yaml │ │ │ └── application.yaml │ │ ├── labx-17-sc-seata-at-feign-demo-product-service/ │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ └── main/ │ │ │ ├── java/ │ │ │ │ └── cn/ │ │ │ │ └── iocoder/ │ │ │ │ └── springcloud/ │ │ │ │ └── labx17/ │ │ │ │ └── productservice/ │ │ │ │ ├── ProductServiceApplication.java │ │ │ │ ├── controller/ │ │ │ │ │ └── ProductController.java │ │ │ │ ├── dao/ │ │ │ │ │ └── ProductDao.java │ │ │ │ ├── dto/ │ │ │ │ │ └── ProductReduceStockDTO.java │ │ │ │ └── service/ │ │ │ │ ├── ProductService.java │ │ │ │ └── impl/ │ │ │ │ └── ProductServiceImpl.java │ │ │ └── resources/ │ │ │ ├── application-file.yaml │ │ │ └── application.yaml │ │ └── pom.xml │ ├── labx-17-sca-seata-at-dubbo-demo/ │ │ ├── data.sql │ │ ├── labx-17-sca-seata-at-dubbo-demo-account-service/ │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ └── main/ │ │ │ ├── java/ │ │ │ │ └── cn/ │ │ │ │ └── iocoder/ │ │ │ │ └── springcloudalibaba/ │ │ │ │ └── labx17/ │ │ │ │ └── accountservice/ │ │ │ │ ├── AccountServiceApplication.java │ │ │ │ ├── dao/ │ │ │ │ │ └── AccountDao.java │ │ │ │ └── service/ │ │ │ │ └── AccountServiceImpl.java │ │ │ └── resources/ │ │ │ ├── application-file.yaml │ │ │ └── application.yaml │ │ ├── labx-17-sca-seata-at-dubbo-demo-account-service-api/ │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ └── main/ │ │ │ └── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springcloudalibaba/ │ │ │ └── labx17/ │ │ │ └── accountservice/ │ │ │ └── api/ │ │ │ └── AccountService.java │ │ ├── labx-17-sca-seata-at-dubbo-demo-order-service/ │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ └── main/ │ │ │ ├── java/ │ │ │ │ └── cn/ │ │ │ │ └── iocoder/ │ │ │ │ └── springcloudalibaba/ │ │ │ │ └── labx17/ │ │ │ │ └── orderservice/ │ │ │ │ ├── OrderServiceApplication.java │ │ │ │ ├── controller/ │ │ │ │ │ └── OrderController.java │ │ │ │ ├── dao/ │ │ │ │ │ └── OrderDao.java │ │ │ │ ├── entity/ │ │ │ │ │ └── OrderDO.java │ │ │ │ └── service/ │ │ │ │ └── OrderServiceImpl.java │ │ │ └── resources/ │ │ │ ├── application-file.yaml │ │ │ └── application.yaml │ │ ├── labx-17-sca-seata-at-dubbo-demo-order-service-api/ │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ └── main/ │ │ │ └── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springcloudalibaba/ │ │ │ └── labx17/ │ │ │ └── orderservice/ │ │ │ └── api/ │ │ │ └── OrderService.java │ │ ├── labx-17-sca-seata-at-dubbo-demo-product-service/ │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ └── main/ │ │ │ ├── java/ │ │ │ │ └── cn/ │ │ │ │ └── iocoder/ │ │ │ │ └── springcloudalibaba/ │ │ │ │ └── labx17/ │ │ │ │ └── productservice/ │ │ │ │ ├── ProductServiceApplication.java │ │ │ │ ├── dao/ │ │ │ │ │ └── ProductDao.java │ │ │ │ └── service/ │ │ │ │ └── ProductServiceImpl.java │ │ │ └── resources/ │ │ │ ├── application-file.yaml │ │ │ └── application.yaml │ │ ├── labx-17-sca-seata-at-dubbo-demo-product-service-api/ │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ └── main/ │ │ │ └── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springcloudalibaba/ │ │ │ └── labx17/ │ │ │ └── producctservice/ │ │ │ └── api/ │ │ │ └── ProductService.java │ │ └── pom.xml │ ├── pom.xml │ └── 《芋道 Spring Cloud Alibaba 分布式事务 Seata 入门》.md ├── labx-18/ │ ├── labx-18-sc-bus-rabbitmq-demo-listener/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springcloud/ │ │ │ └── labx18/ │ │ │ └── listenerdemo/ │ │ │ ├── ListenerDemoApplication.java │ │ │ ├── event/ │ │ │ │ └── UserRegisterEvent.java │ │ │ └── listener/ │ │ │ └── UserRegisterListener.java │ │ └── resources/ │ │ └── application.yml │ ├── labx-18-sc-bus-rabbitmq-demo-listener-actuator/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springcloud/ │ │ │ └── labx18/ │ │ │ └── listenerdemo/ │ │ │ ├── ListenerDemoApplication.java │ │ │ ├── event/ │ │ │ │ └── UserRegisterEvent.java │ │ │ └── listener/ │ │ │ └── UserRegisterListener.java │ │ └── resources/ │ │ └── application.yml │ ├── labx-18-sc-bus-rabbitmq-demo-publisher/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springcloud/ │ │ │ └── labx18/ │ │ │ └── publisherdemo/ │ │ │ ├── PublisherDemoApplication.java │ │ │ ├── controller/ │ │ │ │ └── DemoController.java │ │ │ └── event/ │ │ │ └── UserRegisterEvent.java │ │ └── resources/ │ │ └── application.yml │ ├── labx-18-sc-bus-rabbitmq-demo-publisher-actuator/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springcloud/ │ │ │ └── labx18/ │ │ │ └── publisherdemo/ │ │ │ ├── PublisherDemoApplication.java │ │ │ ├── controller/ │ │ │ │ └── DemoController.java │ │ │ └── event/ │ │ │ └── UserRegisterEvent.java │ │ └── resources/ │ │ └── application.yml │ ├── pom.xml │ └── 《芋道 Spring Cloud 事件总线 RabbitMQ 入门》.md ├── labx-19/ │ ├── labx-19-sc-bus-kafka-demo-listener/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springcloud/ │ │ │ └── labx19/ │ │ │ └── listenerdemo/ │ │ │ ├── ListenerDemoApplication.java │ │ │ ├── event/ │ │ │ │ └── UserRegisterEvent.java │ │ │ └── listener/ │ │ │ └── UserRegisterListener.java │ │ └── resources/ │ │ └── application.yml │ ├── labx-19-sc-bus-kafka-demo-listener-actuator/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springcloud/ │ │ │ └── labx19/ │ │ │ └── listenerdemo/ │ │ │ ├── ListenerDemoApplication.java │ │ │ ├── event/ │ │ │ │ └── UserRegisterEvent.java │ │ │ └── listener/ │ │ │ └── UserRegisterListener.java │ │ └── resources/ │ │ └── application.yml │ ├── labx-19-sc-bus-kafka-demo-publisher/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springcloud/ │ │ │ └── labx19/ │ │ │ └── publisherdemo/ │ │ │ ├── PublisherDemoApplication.java │ │ │ ├── controller/ │ │ │ │ └── DemoController.java │ │ │ └── event/ │ │ │ └── UserRegisterEvent.java │ │ └── resources/ │ │ └── application.yml │ ├── labx-19-sc-bus-kafka-demo-publisher-actuator/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springcloud/ │ │ │ └── labx19/ │ │ │ └── publisherdemo/ │ │ │ ├── PublisherDemoApplication.java │ │ │ ├── controller/ │ │ │ │ └── DemoController.java │ │ │ └── event/ │ │ │ └── UserRegisterEvent.java │ │ └── resources/ │ │ └── application.yml │ ├── labx-19-sc-config-server-git-auto-refresh-by-bus/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springcloud/ │ │ │ └── labx19/ │ │ │ └── configserverdemo/ │ │ │ └── ConfigServerApplication.java │ │ └── resources/ │ │ └── application.yml │ ├── labx-19-sc-config-user-application-auto-refresh-by-bus/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springcloud/ │ │ │ └── labx19/ │ │ │ └── userapplication/ │ │ │ ├── UserApplication.java │ │ │ ├── config/ │ │ │ │ └── OrderProperties.java │ │ │ └── controller/ │ │ │ └── DemoController.java │ │ └── resources/ │ │ ├── application.yml │ │ └── bootstrap.yml │ ├── pom.xml │ └── 《芋道 Spring Cloud 事件总线 Kafka 入门》.md ├── labx-20/ │ ├── labx-20-sc-config-server-git-auto-refresh-by-bus/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springcloud/ │ │ │ └── labx20/ │ │ │ └── configserverdemo/ │ │ │ └── ConfigServerApplication.java │ │ └── resources/ │ │ └── application.yml │ ├── labx-20-sc-config-user-application-auto-refresh-by-bus/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springcloud/ │ │ │ └── labx20/ │ │ │ └── userapplication/ │ │ │ ├── UserApplication.java │ │ │ ├── config/ │ │ │ │ └── OrderProperties.java │ │ │ └── controller/ │ │ │ └── DemoController.java │ │ └── resources/ │ │ ├── application.yml │ │ └── bootstrap.yml │ ├── labx-20-sca-bus-rocketmq-demo-listener/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springcloudalibaba/ │ │ │ └── labx20/ │ │ │ └── listenerdemo/ │ │ │ ├── ListenerDemoApplication.java │ │ │ ├── event/ │ │ │ │ └── UserRegisterEvent.java │ │ │ └── listener/ │ │ │ └── UserRegisterListener.java │ │ └── resources/ │ │ └── application.yml │ ├── labx-20-sca-bus-rocketmq-demo-listener-actuator/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springcloudalibaba/ │ │ │ └── labx20/ │ │ │ └── listenerdemo/ │ │ │ ├── ListenerDemoApplication.java │ │ │ ├── event/ │ │ │ │ └── UserRegisterEvent.java │ │ │ └── listener/ │ │ │ └── UserRegisterListener.java │ │ └── resources/ │ │ └── application.yml │ ├── labx-20-sca-bus-rocketmq-demo-publisher/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springcloudalibaba/ │ │ │ └── labx20/ │ │ │ └── publisherdemo/ │ │ │ ├── PublisherDemoApplication.java │ │ │ ├── controller/ │ │ │ │ └── DemoController.java │ │ │ └── event/ │ │ │ └── UserRegisterEvent.java │ │ └── resources/ │ │ └── application.yml │ ├── labx-20-sca-bus-rocketmq-demo-publisher-actuator/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springcloudalibaba/ │ │ │ └── labx20/ │ │ │ └── publisherdemo/ │ │ │ ├── PublisherDemoApplication.java │ │ │ ├── controller/ │ │ │ │ └── DemoController.java │ │ │ └── event/ │ │ │ └── UserRegisterEvent.java │ │ └── resources/ │ │ └── application.yml │ ├── pom.xml │ └── 《芋道 Spring Cloud Alibaba 事件总线 Bus RocketMQ 入门》.md ├── labx-21/ │ ├── labx-21-sc-user-service/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springcloud/ │ │ │ └── labx21/ │ │ │ └── userservice/ │ │ │ ├── UserServiceApplication.java │ │ │ ├── controller/ │ │ │ │ └── UserController.java │ │ │ └── dto/ │ │ │ ├── UserAddDTO.java │ │ │ └── UserDTO.java │ │ └── resources/ │ │ └── application.yaml │ ├── labx-21-sc-zuul-demo01/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springcloud/ │ │ │ └── labx21/ │ │ │ └── zuuldemo/ │ │ │ └── ZuulApplication.java │ │ └── resources/ │ │ └── application.yaml │ ├── labx-21-sc-zuul-demo02-registry/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springcloud/ │ │ │ └── labx21/ │ │ │ └── zuuldemo/ │ │ │ └── ZuulApplication.java │ │ └── resources/ │ │ └── application.yaml │ ├── labx-21-sc-zuul-demo03-config-apollo/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springcloud/ │ │ │ └── labx21/ │ │ │ └── zuuldemo/ │ │ │ ├── ZuulApplication.java │ │ │ └── ZuulPropertiesRefresher.java │ │ └── resources/ │ │ └── application.yaml │ ├── labx-21-sc-zuul-demo03-config-nacos/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springcloud/ │ │ │ └── labx21/ │ │ │ └── zuuldemo/ │ │ │ ├── ZuulApplication.java │ │ │ └── ZuulRouteRefreshListener.java │ │ └── resources/ │ │ ├── application.yaml │ │ └── bootstrap.yaml │ ├── labx-21-sc-zuul-demo05-custom-zuul-filter/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springcloud/ │ │ │ └── labx21/ │ │ │ └── zuuldemo/ │ │ │ ├── ZuulApplication.java │ │ │ └── filter/ │ │ │ └── AuthZuulFilter.java │ │ └── resources/ │ │ └── application.yaml │ ├── labx-21-sc-zuul-demo07-hystrix/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springcloud/ │ │ │ └── labx21/ │ │ │ └── zuuldemo/ │ │ │ ├── ZuulApplication.java │ │ │ └── fallback/ │ │ │ └── ApiFallbackProvider.java │ │ └── resources/ │ │ └── application.yaml │ ├── labx-21-sc-zuul-demo07-sentinel/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springcloud/ │ │ │ └── labx21/ │ │ │ └── zuuldemo/ │ │ │ ├── CustomBlockFallbackProvider.java │ │ │ └── ZuulApplication.java │ │ └── resources/ │ │ ├── application.yaml │ │ ├── sentinel-gw-api-group.json │ │ └── sentinel-gw-flow.json │ ├── labx-21-sc-zuul-demo09-actuator/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springcloud/ │ │ │ └── labx21/ │ │ │ └── zuuldemo/ │ │ │ └── ZuulApplication.java │ │ └── resources/ │ │ └── application.yaml │ ├── pom.xml │ └── 《芋道 Spring Cloud 网关 Zuul 入门》.md ├── labx-22/ │ ├── labx-22-scn-eureka-demo01-consumer/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springcloudalibaba/ │ │ │ └── labx22/ │ │ │ └── consumerdemo/ │ │ │ └── DemoConsumerApplication.java │ │ └── resources/ │ │ └── application.yaml │ ├── labx-22-scn-eureka-demo01-provider/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springcloudalibaba/ │ │ │ └── labx22/ │ │ │ └── providerdemo/ │ │ │ └── DemoProviderApplication.java │ │ └── resources/ │ │ └── application.yaml │ ├── labx-22-scn-eureka-demo02-consumer/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springcloudalibaba/ │ │ │ └── labx22/ │ │ │ └── consumerdemo/ │ │ │ └── DemoConsumerApplication.java │ │ └── resources/ │ │ └── application.yaml │ ├── labx-22-scn-eureka-demo02-provider/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springcloudalibaba/ │ │ │ └── labx22/ │ │ │ └── providerdemo/ │ │ │ └── DemoProviderApplication.java │ │ └── resources/ │ │ └── application.yaml │ ├── labx-22-scn-eureka-demo03-consumer/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springcloudalibaba/ │ │ │ └── labx22/ │ │ │ └── consumerdemo/ │ │ │ └── DemoConsumerApplication.java │ │ └── resources/ │ │ └── application.yaml │ ├── labx-22-scn-eureka-demo03-provider/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springcloudalibaba/ │ │ │ └── labx22/ │ │ │ └── providerdemo/ │ │ │ └── DemoProviderApplication.java │ │ └── resources/ │ │ └── application.yaml │ ├── labx-22-scn-eureka-server-cluster/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springcloudalibaba/ │ │ │ └── labx22/ │ │ │ └── eurekaserverdemo/ │ │ │ └── EurekaServerApplication.java │ │ └── resources/ │ │ ├── application-node01.yaml │ │ └── application-node02.yaml │ ├── labx-22-scn-eureka-server-security/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springcloudalibaba/ │ │ │ └── labx22/ │ │ │ └── eurekaserverdemo/ │ │ │ ├── EurekaServerApplication.java │ │ │ └── config/ │ │ │ └── WebSecurityConfig.java │ │ └── resources/ │ │ └── application.yaml │ ├── labx-22-scn-eureka-server-standalone/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springcloudalibaba/ │ │ │ └── labx22/ │ │ │ └── eurekaserverdemo/ │ │ │ └── EurekaServerApplication.java │ │ └── resources/ │ │ └── application.yaml │ ├── pom.xml │ └── 《芋道 Spring Cloud Netflix 注册中心 Eureka 入门》.md ├── labx-23/ │ ├── labx-23-scn-hystrix-actuator/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springcloud/ │ │ │ └── labx23/ │ │ │ └── hystrixdemo/ │ │ │ ├── DemoApplication.java │ │ │ ├── controller/ │ │ │ │ ├── CacheDemoController.java │ │ │ │ ├── CollapserDemoController.java │ │ │ │ └── DemoController.java │ │ │ ├── filter/ │ │ │ │ └── HystrixRequestContextFilter.java │ │ │ └── service/ │ │ │ ├── CacheDemoService.java │ │ │ └── CollapserDemoService.java │ │ └── resources/ │ │ └── application.yml │ ├── labx-23-scn-hystrix-dashboard/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springcloud/ │ │ │ └── labx23/ │ │ │ └── hystrixdemo/ │ │ │ └── HystrixDashboardApplication.java │ │ └── resources/ │ │ └── application.yml │ ├── labx-23-scn-hystrix-dashboard-turbine/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springcloud/ │ │ │ └── labx23/ │ │ │ └── hystrixdemo/ │ │ │ └── HystrixDashboardApplication.java │ │ └── resources/ │ │ └── application.yml │ ├── labx-23-scn-hystrix-demo01/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ └── java/ │ │ └── cn/ │ │ └── iocoder/ │ │ └── springcloud/ │ │ └── labx23/ │ │ └── hystrixdemo/ │ │ ├── DemoApplication.java │ │ ├── controller/ │ │ │ ├── CacheDemoController.java │ │ │ ├── CollapserDemoController.java │ │ │ └── DemoController.java │ │ ├── filter/ │ │ │ └── HystrixRequestContextFilter.java │ │ └── service/ │ │ ├── CacheDemoService.java │ │ └── CollapserDemoService.java │ ├── labx-23-scn-hystrix-demo01-cluster/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springcloud/ │ │ │ └── labx23/ │ │ │ └── hystrixdemo/ │ │ │ ├── DemoApplication.java │ │ │ ├── controller/ │ │ │ │ ├── CacheDemoController.java │ │ │ │ ├── CollapserDemoController.java │ │ │ │ └── DemoController.java │ │ │ ├── filter/ │ │ │ │ └── HystrixRequestContextFilter.java │ │ │ └── service/ │ │ │ ├── CacheDemoService.java │ │ │ └── CollapserDemoService.java │ │ └── resources/ │ │ └── application.yml │ ├── labx-23-scn-hystrix-dubbo-demo/ │ │ ├── labx-23-scn-hystrix-dubbo-demo-application/ │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ └── main/ │ │ │ ├── java/ │ │ │ │ └── cn/ │ │ │ │ └── iocoder/ │ │ │ │ └── springcloud/ │ │ │ │ └── labx23/ │ │ │ │ └── demo/ │ │ │ │ ├── DemoApplication.java │ │ │ │ └── controller/ │ │ │ │ └── DemoController.java │ │ │ └── resources/ │ │ │ └── application.yaml │ │ ├── labx-23-scn-hystrix-dubbo-demo-user-service/ │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ └── main/ │ │ │ ├── java/ │ │ │ │ └── cn/ │ │ │ │ └── iocoder/ │ │ │ │ └── springcloud/ │ │ │ │ └── labx23/ │ │ │ │ └── userservice/ │ │ │ │ ├── UserServiceApplication.java │ │ │ │ └── service/ │ │ │ │ └── UserServiceImpl.java │ │ │ └── resources/ │ │ │ └── application.yaml │ │ ├── labx-23-scn-hystrix-dubbo-demo-user-service-api/ │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ └── main/ │ │ │ └── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springcloud/ │ │ │ └── labx23/ │ │ │ └── userservice/ │ │ │ └── api/ │ │ │ └── UserService.java │ │ └── pom.xml │ ├── labx-23-scn-hystrix-feign/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springcloud/ │ │ │ └── labx23/ │ │ │ └── hystrixdemo/ │ │ │ ├── DemoApplication.java │ │ │ ├── controller/ │ │ │ │ └── FeignDemoController.java │ │ │ ├── fallback/ │ │ │ │ └── UserServiceFeignClientFallbackFactory.java │ │ │ └── feign/ │ │ │ └── UserServiceFeignClient.java │ │ └── resources/ │ │ └── application.yaml │ ├── labx-23-user-service/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ └── java/ │ │ └── cn/ │ │ └── iocoder/ │ │ └── springcloud/ │ │ └── labx23/ │ │ └── userservice/ │ │ └── UserServiceApplication.java │ ├── pom.xml │ └── 《芋道 Spring Cloud Netflix 服务容错 Hystrix 入门》.md ├── labx-24/ │ ├── labx-24-resilience4j-demo01/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springcloud/ │ │ │ └── labx24/ │ │ │ └── resilience4jdemo/ │ │ │ ├── DemoApplication.java │ │ │ └── controller/ │ │ │ ├── BulkheadDemoController.java │ │ │ ├── DemoController.java │ │ │ ├── RateLimiterDemoController.java │ │ │ ├── RetryDemoController.java │ │ │ ├── ThreadPoolBulkheadDemoController.java │ │ │ └── TimeLimiterDemoController.java │ │ └── resources/ │ │ └── application.yml │ ├── labx-24-resilience4j-demo02/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ └── java/ │ │ └── cn/ │ │ └── iocoder/ │ │ └── springcloud/ │ │ └── labx24/ │ │ └── resilience4jdemo/ │ │ ├── DemoApplication.java │ │ ├── config/ │ │ │ └── Resilience4jConfig.java │ │ └── controller/ │ │ └── DemoController.java │ ├── labx-24-user-service/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ └── java/ │ │ └── cn/ │ │ └── iocoder/ │ │ └── springcloud/ │ │ └── labx24/ │ │ └── userservice/ │ │ └── UserServiceApplication.java │ ├── pom.xml │ └── 《芋道 Spring Cloud 服务容错 Resilience4j 入门》.md ├── labx-25/ │ ├── labx-25-sc-zookeeper-discovery-demo01-consumer/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springcloud/ │ │ │ └── labx25/ │ │ │ └── zookeeperdemo/ │ │ │ └── consumer/ │ │ │ └── DemoConsumerApplication.java │ │ └── resources/ │ │ └── application.yaml │ ├── labx-25-sc-zookeeper-discovery-demo01-provider/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springcloud/ │ │ │ └── labx25/ │ │ │ └── zookeeperdemo/ │ │ │ └── provider/ │ │ │ └── DemoProviderApplication.java │ │ └── resources/ │ │ └── application.yaml │ ├── pom.xml │ └── 《芋道 Spring Cloud 注册中心 ZooKeeper 入门》.md ├── labx-26/ │ ├── labx-26-sc-zookeeper-config-auto-refresh/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springcloud/ │ │ │ └── labx26/ │ │ │ └── zookeeperdemo/ │ │ │ ├── DemoApplication.java │ │ │ ├── config/ │ │ │ │ └── OrderProperties.java │ │ │ ├── controller/ │ │ │ │ └── DemoController.java │ │ │ └── listener/ │ │ │ └── DemoEnvironmentChangeListener.java │ │ └── resources/ │ │ └── bootstrap.yaml │ ├── labx-26-sc-zookeeper-config-demo/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springcloud/ │ │ │ └── labx26/ │ │ │ └── zookeeperdemo/ │ │ │ ├── DemoApplication.java │ │ │ ├── config/ │ │ │ │ └── OrderProperties.java │ │ │ └── controller/ │ │ │ └── DemoController.java │ │ └── resources/ │ │ └── bootstrap.yaml │ ├── pom.xml │ └── 《芋道 Spring Cloud 配置中心 ZooKeeper 入门》.md ├── labx-27/ │ ├── labx-27-sc-consul-discovery-demo01-consumer/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springcloud/ │ │ │ └── labx27/ │ │ │ └── consuldemo/ │ │ │ └── consumer/ │ │ │ └── DemoConsumerApplication.java │ │ └── resources/ │ │ └── application.yaml │ ├── labx-27-sc-consul-discovery-demo01-provider/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springcloud/ │ │ │ └── labx27/ │ │ │ └── consuldemo/ │ │ │ └── provider/ │ │ │ └── DemoProviderApplication.java │ │ └── resources/ │ │ └── application.yaml │ ├── pom.xml │ └── 《芋道 Spring Cloud 注册中心 Consul 入门》.md ├── labx-28/ │ ├── labx-28-sc-consul-config-auto-refresh/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springcloud/ │ │ │ └── labx28/ │ │ │ └── consuldemo/ │ │ │ ├── DemoApplication.java │ │ │ ├── config/ │ │ │ │ └── OrderProperties.java │ │ │ ├── controller/ │ │ │ │ └── DemoController.java │ │ │ └── listener/ │ │ │ └── DemoEnvironmentChangeListener.java │ │ └── resources/ │ │ └── bootstrap.yaml │ ├── labx-28-sc-consul-config-demo/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springcloud/ │ │ │ └── labx28/ │ │ │ └── consuldemo/ │ │ │ ├── DemoApplication.java │ │ │ ├── config/ │ │ │ │ └── OrderProperties.java │ │ │ └── controller/ │ │ │ └── DemoController.java │ │ └── resources/ │ │ └── bootstrap.yaml │ ├── pom.xml │ └── 《芋道 Spring Cloud 配置中心 Consul 入门》.md ├── labx-29-spring-cloud-consul-bus/ │ ├── labx-29-sc-bus-consul-demo-listener/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springcloud/ │ │ │ └── labx29/ │ │ │ └── listenerdemo/ │ │ │ ├── ListenerDemoApplication.java │ │ │ ├── event/ │ │ │ │ └── UserRegisterEvent.java │ │ │ └── listener/ │ │ │ └── UserRegisterListener.java │ │ └── resources/ │ │ └── application.yml │ ├── labx-29-sc-bus-consul-demo-listener-actuator/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ ├── cn/ │ │ │ │ └── iocoder/ │ │ │ │ └── springcloud/ │ │ │ │ └── labx29/ │ │ │ │ └── listenerdemo/ │ │ │ │ ├── ListenerDemoApplication.java │ │ │ │ ├── event/ │ │ │ │ │ └── UserRegisterEvent.java │ │ │ │ └── listener/ │ │ │ │ └── UserRegisterListener.java │ │ │ └── org/ │ │ │ └── springframework/ │ │ │ └── cloud/ │ │ │ └── consul/ │ │ │ └── binder/ │ │ │ └── ConsulSendingHandler.java │ │ └── resources/ │ │ └── application.yml │ ├── labx-29-sc-bus-consul-demo-publisher/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ ├── cn/ │ │ │ │ └── iocoder/ │ │ │ │ └── springcloud/ │ │ │ │ └── labx29/ │ │ │ │ └── publisherdemo/ │ │ │ │ ├── PublisherDemoApplication.java │ │ │ │ ├── controller/ │ │ │ │ │ └── DemoController.java │ │ │ │ └── event/ │ │ │ │ └── UserRegisterEvent.java │ │ │ └── org/ │ │ │ └── springframework/ │ │ │ └── cloud/ │ │ │ └── consul/ │ │ │ └── binder/ │ │ │ └── ConsulSendingHandler.java │ │ └── resources/ │ │ └── application.yml │ ├── labx-29-sc-config-server-git-auto-refresh-by-bus/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springcloud/ │ │ │ └── labx29/ │ │ │ └── configserverdemo/ │ │ │ └── ConfigServerApplication.java │ │ └── resources/ │ │ └── application.yml │ ├── labx-29-sc-config-user-application-auto-refresh-by-bus/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── springcloud/ │ │ │ └── labx29/ │ │ │ └── userapplication/ │ │ │ ├── UserApplication.java │ │ │ ├── config/ │ │ │ │ └── OrderProperties.java │ │ │ └── controller/ │ │ │ └── DemoController.java │ │ └── resources/ │ │ ├── application.yml │ │ └── bootstrap.yml │ ├── pom.xml │ └── 《芋道 Spring Cloud 消息总线 Bus Consul 入门》.md ├── labx-30-spring-cloud-grpc/ │ ├── labx-30-grpc-cloud/ │ │ ├── labx-30-grpc-cloud-application/ │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ └── main/ │ │ │ ├── java/ │ │ │ │ └── cn/ │ │ │ │ └── iocoder/ │ │ │ │ └── springcloud/ │ │ │ │ └── labx30/ │ │ │ │ └── demo/ │ │ │ │ ├── DemoApplication.java │ │ │ │ └── controller/ │ │ │ │ └── DemoController.java │ │ │ └── resources/ │ │ │ └── application.yml │ │ ├── labx-30-grpc-cloud-user-service/ │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ └── main/ │ │ │ ├── java/ │ │ │ │ └── cn/ │ │ │ │ └── iocoder/ │ │ │ │ └── springcloud/ │ │ │ │ └── labx30/ │ │ │ │ └── userservice/ │ │ │ │ ├── UserServiceApplication.java │ │ │ │ └── rpc/ │ │ │ │ └── UserServiceGrpcImpl.java │ │ │ └── resources/ │ │ │ └── application.yml │ │ ├── labx-30-grpc-cloud-user-service-api/ │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ └── main/ │ │ │ └── proto/ │ │ │ └── UserService.proto │ │ └── pom.xml │ ├── pom.xml │ └── 《芋道 Spring Cloud gRPC 入门》.md └── pom.xml