├── .gitattributes
├── .gitignore
├── .nojekyll
├── 404.md
├── LICENSE
├── README.md
├── _coverpage.md
├── docs
├── MyBatisPlus.md
├── PowerMockRunnerAndMockito.md
├── advanced
│ ├── Apache-BeanUtils-VS-SpringBean-Utils.md
│ ├── Performance-of-Java-Mapping-Frameworks.md
│ ├── SpringBoot-ScheduleTasks.md
│ ├── springboot-async.md
│ ├── springboot-dubbo.md
│ ├── springboot-handle-exception-plus.md
│ ├── springboot-handle-exception.md
│ └── springboot-oss.md
├── basis
│ ├── @PostConstruct与@PreDestroy.md
│ ├── RestControllerVSController.md
│ ├── read-config-properties.md
│ ├── springboot-filter.md
│ ├── springboot-interceptor.md
│ ├── springboot-jpa-lianbiao.md
│ ├── springboot-jpa.md
│ ├── springboot-mybatis-mutipledatasource.md
│ ├── springboot-mybatis.md
│ ├── sringboot-restful-web-service.md
│ └── swagger.md
├── projects
│ ├── SpringCloud刷题系统.md
│ ├── kkFileView-SpringBoot在线文件预览系统.md
│ └── 一个基于SpringBoot的在线考试系统.md
├── spring-bean-validation.md
└── start
│ ├── springboot-hello-world.md
│ └── springboot-introduction.md
├── index.html
├── media
└── zhao-chen-hvuLPoMM19I-unsplash.jpg
└── source-code
├── advanced
├── async-method-springboot
│ ├── .gitignore
│ ├── .mvn
│ │ └── wrapper
│ │ │ ├── MavenWrapperDownloader.java
│ │ │ ├── maven-wrapper.jar
│ │ │ └── maven-wrapper.properties
│ ├── mvnw
│ ├── mvnw.cmd
│ ├── pom.xml
│ └── src
│ │ ├── main
│ │ ├── java
│ │ │ └── github
│ │ │ │ └── javaguide
│ │ │ │ └── asyncmethodspringboot
│ │ │ │ ├── AsyncMethodSpringbootApplication.java
│ │ │ │ ├── config
│ │ │ │ └── AsyncConfig.java
│ │ │ │ ├── controller
│ │ │ │ └── AsyncController.java
│ │ │ │ └── service
│ │ │ │ └── AsyncService.java
│ │ └── resources
│ │ │ └── application.properties
│ │ └── test
│ │ └── java
│ │ └── github
│ │ └── javaguide
│ │ └── asyncmethodspringboot
│ │ └── service
│ │ └── AsyncServiceTest.java
├── bean-validation-demo
│ ├── .gitignore
│ ├── .mvn
│ │ └── wrapper
│ │ │ ├── MavenWrapperDownloader.java
│ │ │ ├── maven-wrapper.jar
│ │ │ └── maven-wrapper.properties
│ ├── mvnw
│ ├── mvnw.cmd
│ ├── pom.xml
│ └── src
│ │ ├── main
│ │ ├── java
│ │ │ └── com
│ │ │ │ └── example
│ │ │ │ └── beanvalidationdemo
│ │ │ │ ├── BeanValidationDemoApplication.java
│ │ │ │ ├── constants
│ │ │ │ └── Constants.java
│ │ │ │ ├── controller
│ │ │ │ ├── HelloWorldController.java
│ │ │ │ └── PersonController.java
│ │ │ │ ├── entity
│ │ │ │ ├── Person.java
│ │ │ │ └── PersonRequest.java
│ │ │ │ ├── exception
│ │ │ │ └── GlobalExceptionHandler.java
│ │ │ │ ├── service
│ │ │ │ ├── AddPersonGroup.java
│ │ │ │ ├── DeletePersonGroup.java
│ │ │ │ └── PersonService.java
│ │ │ │ └── validation
│ │ │ │ ├── PhoneNumber.java
│ │ │ │ ├── PhoneNumberValidator.java
│ │ │ │ ├── Region.java
│ │ │ │ └── RegionValidator.java
│ │ └── resources
│ │ │ └── application.properties
│ │ └── test
│ │ └── java
│ │ └── com
│ │ └── example
│ │ └── beanvalidationdemo
│ │ ├── PersonControllerTest.java
│ │ └── PersonServiceTest.java
├── springboot-dubbo
│ ├── .idea
│ │ ├── compiler.xml
│ │ ├── encodings.xml
│ │ ├── libraries
│ │ │ ├── Maven__ch_qos_logback_logback_classic_1_2_3.xml
│ │ │ ├── Maven__ch_qos_logback_logback_core_1_2_3.xml
│ │ │ ├── Maven__com_101tec_zkclient_0_10.xml
│ │ │ ├── Maven__com_alibaba_dubbo_2_6_0.xml
│ │ │ ├── Maven__com_alibaba_spring_boot_dubbo_spring_boot_starter_2_0_0.xml
│ │ │ ├── Maven__com_fasterxml_classmate_1_4_0.xml
│ │ │ ├── Maven__com_fasterxml_jackson_core_jackson_annotations_2_9_0.xml
│ │ │ ├── Maven__com_fasterxml_jackson_core_jackson_core_2_9_7.xml
│ │ │ ├── Maven__com_fasterxml_jackson_core_jackson_databind_2_9_7.xml
│ │ │ ├── Maven__com_fasterxml_jackson_datatype_jackson_datatype_jdk8_2_9_7.xml
│ │ │ ├── Maven__com_fasterxml_jackson_datatype_jackson_datatype_jsr310_2_9_7.xml
│ │ │ ├── Maven__com_fasterxml_jackson_module_jackson_module_parameter_names_2_9_7.xml
│ │ │ ├── Maven__com_jayway_jsonpath_json_path_2_4_0.xml
│ │ │ ├── Maven__com_vaadin_external_google_android_json_0_0_20131108_vaadin1.xml
│ │ │ ├── Maven__io_micrometer_micrometer_core_1_1_0.xml
│ │ │ ├── Maven__io_netty_netty_3_7_0_Final.xml
│ │ │ ├── Maven__javax_annotation_javax_annotation_api_1_3_2.xml
│ │ │ ├── Maven__javax_validation_validation_api_2_0_1_Final.xml
│ │ │ ├── Maven__jline_jline_0_9_94.xml
│ │ │ ├── Maven__junit_junit_4_12.xml
│ │ │ ├── Maven__log4j_log4j_1_2_16.xml
│ │ │ ├── Maven__net_bytebuddy_byte_buddy_1_9_3.xml
│ │ │ ├── Maven__net_bytebuddy_byte_buddy_agent_1_9_3.xml
│ │ │ ├── Maven__net_minidev_accessors_smart_1_2.xml
│ │ │ ├── Maven__net_minidev_json_smart_2_3.xml
│ │ │ ├── Maven__org_apache_logging_log4j_log4j_api_2_11_1.xml
│ │ │ ├── Maven__org_apache_logging_log4j_log4j_to_slf4j_2_11_1.xml
│ │ │ ├── Maven__org_apache_tomcat_embed_tomcat_embed_core_9_0_12.xml
│ │ │ ├── Maven__org_apache_tomcat_embed_tomcat_embed_el_9_0_12.xml
│ │ │ ├── Maven__org_apache_tomcat_embed_tomcat_embed_websocket_9_0_12.xml
│ │ │ ├── Maven__org_apache_zookeeper_zookeeper_3_4_8.xml
│ │ │ ├── Maven__org_assertj_assertj_core_3_11_1.xml
│ │ │ ├── Maven__org_hamcrest_hamcrest_core_1_3.xml
│ │ │ ├── Maven__org_hamcrest_hamcrest_library_1_3.xml
│ │ │ ├── Maven__org_hdrhistogram_HdrHistogram_2_1_9.xml
│ │ │ ├── Maven__org_hibernate_validator_hibernate_validator_6_0_13_Final.xml
│ │ │ ├── Maven__org_javassist_javassist_3_20_0_GA.xml
│ │ │ ├── Maven__org_jboss_logging_jboss_logging_3_3_2_Final.xml
│ │ │ ├── Maven__org_jboss_netty_netty_3_2_5_Final.xml
│ │ │ ├── Maven__org_latencyutils_LatencyUtils_2_0_3.xml
│ │ │ ├── Maven__org_mockito_mockito_core_2_23_0.xml
│ │ │ ├── Maven__org_objenesis_objenesis_2_6.xml
│ │ │ ├── Maven__org_ow2_asm_asm_5_0_4.xml
│ │ │ ├── Maven__org_skyscreamer_jsonassert_1_5_0.xml
│ │ │ ├── Maven__org_slf4j_jul_to_slf4j_1_7_25.xml
│ │ │ ├── Maven__org_slf4j_slf4j_api_1_7_25.xml
│ │ │ ├── Maven__org_slf4j_slf4j_log4j12_1_7_25.xml
│ │ │ ├── Maven__org_springframework_boot_spring_boot_2_1_0_RELEASE.xml
│ │ │ ├── Maven__org_springframework_boot_spring_boot_actuator_2_1_0_RELEASE.xml
│ │ │ ├── Maven__org_springframework_boot_spring_boot_actuator_autoconfigure_2_1_0_RELEASE.xml
│ │ │ ├── Maven__org_springframework_boot_spring_boot_autoconfigure_2_1_0_RELEASE.xml
│ │ │ ├── Maven__org_springframework_boot_spring_boot_starter_2_1_0_RELEASE.xml
│ │ │ ├── Maven__org_springframework_boot_spring_boot_starter_actuator_2_1_0_RELEASE.xml
│ │ │ ├── Maven__org_springframework_boot_spring_boot_starter_json_2_1_0_RELEASE.xml
│ │ │ ├── Maven__org_springframework_boot_spring_boot_starter_logging_2_1_0_RELEASE.xml
│ │ │ ├── Maven__org_springframework_boot_spring_boot_starter_test_2_1_0_RELEASE.xml
│ │ │ ├── Maven__org_springframework_boot_spring_boot_starter_tomcat_2_1_0_RELEASE.xml
│ │ │ ├── Maven__org_springframework_boot_spring_boot_starter_web_2_1_0_RELEASE.xml
│ │ │ ├── Maven__org_springframework_boot_spring_boot_test_2_1_0_RELEASE.xml
│ │ │ ├── Maven__org_springframework_boot_spring_boot_test_autoconfigure_2_1_0_RELEASE.xml
│ │ │ ├── Maven__org_springframework_spring_aop_5_1_2_RELEASE.xml
│ │ │ ├── Maven__org_springframework_spring_beans_5_1_2_RELEASE.xml
│ │ │ ├── Maven__org_springframework_spring_context_5_1_2_RELEASE.xml
│ │ │ ├── Maven__org_springframework_spring_core_5_1_2_RELEASE.xml
│ │ │ ├── Maven__org_springframework_spring_expression_5_1_2_RELEASE.xml
│ │ │ ├── Maven__org_springframework_spring_jcl_5_1_2_RELEASE.xml
│ │ │ ├── Maven__org_springframework_spring_test_5_1_2_RELEASE.xml
│ │ │ ├── Maven__org_springframework_spring_web_5_1_2_RELEASE.xml
│ │ │ ├── Maven__org_springframework_spring_webmvc_5_1_2_RELEASE.xml
│ │ │ ├── Maven__org_xmlunit_xmlunit_core_2_6_2.xml
│ │ │ └── Maven__org_yaml_snakeyaml_1_23.xml
│ │ ├── misc.xml
│ │ ├── modules.xml
│ │ ├── vcs.xml
│ │ └── workspace.xml
│ ├── dubbo-consumer
│ │ ├── .gitignore
│ │ ├── .mvn
│ │ │ └── wrapper
│ │ │ │ ├── maven-wrapper.jar
│ │ │ │ └── maven-wrapper.properties
│ │ ├── mvnw
│ │ ├── mvnw.cmd
│ │ ├── pom.xml
│ │ └── src
│ │ │ ├── main
│ │ │ ├── java
│ │ │ │ └── top
│ │ │ │ │ └── snailclimb
│ │ │ │ │ └── dubboconsumer
│ │ │ │ │ ├── DubboConsumerApplication.java
│ │ │ │ │ └── HelloController.java
│ │ │ └── resources
│ │ │ │ └── application.properties
│ │ │ └── test
│ │ │ └── java
│ │ │ └── top
│ │ │ └── snailclimb
│ │ │ └── dubboconsumer
│ │ │ └── DubboConsumerApplicationTests.java
│ ├── dubbo-interface
│ │ ├── dubbo-interface.iml
│ │ ├── pom.xml
│ │ ├── src
│ │ │ └── main
│ │ │ │ └── java
│ │ │ │ └── top
│ │ │ │ └── snailclimb
│ │ │ │ └── service
│ │ │ │ └── HelloService.java
│ │ └── target
│ │ │ ├── maven-archiver
│ │ │ └── pom.properties
│ │ │ └── maven-status
│ │ │ └── maven-compiler-plugin
│ │ │ ├── compile
│ │ │ └── default-compile
│ │ │ │ ├── createdFiles.lst
│ │ │ │ └── inputFiles.lst
│ │ │ └── testCompile
│ │ │ └── default-testCompile
│ │ │ └── inputFiles.lst
│ └── dubbo-provider
│ │ ├── .gitignore
│ │ ├── .mvn
│ │ └── wrapper
│ │ │ ├── maven-wrapper.jar
│ │ │ └── maven-wrapper.properties
│ │ ├── mvnw
│ │ ├── mvnw.cmd
│ │ ├── pom.xml
│ │ └── src
│ │ ├── main
│ │ ├── java
│ │ │ └── top
│ │ │ │ └── snailclimb
│ │ │ │ ├── DubboProviderApplication.java
│ │ │ │ └── service
│ │ │ │ └── impl
│ │ │ │ └── HelloServiceImpl.java
│ │ └── resources
│ │ │ └── application.properties
│ │ └── test
│ │ └── java
│ │ └── top
│ │ └── snailclimb
│ │ └── dubboprovider
│ │ └── DubboProviderApplicationTests.java
├── springboot-rabbitmq
│ ├── .idea
│ │ ├── compiler.xml
│ │ ├── encodings.xml
│ │ ├── libraries
│ │ │ ├── Maven__ch_qos_logback_logback_classic_1_2_3.xml
│ │ │ ├── Maven__ch_qos_logback_logback_core_1_2_3.xml
│ │ │ ├── Maven__com_fasterxml_classmate_1_4_0.xml
│ │ │ ├── Maven__com_fasterxml_jackson_core_jackson_annotations_2_9_0.xml
│ │ │ ├── Maven__com_fasterxml_jackson_core_jackson_core_2_9_7.xml
│ │ │ ├── Maven__com_fasterxml_jackson_core_jackson_databind_2_9_7.xml
│ │ │ ├── Maven__com_fasterxml_jackson_datatype_jackson_datatype_jdk8_2_9_7.xml
│ │ │ ├── Maven__com_fasterxml_jackson_datatype_jackson_datatype_jsr310_2_9_7.xml
│ │ │ ├── Maven__com_fasterxml_jackson_module_jackson_module_parameter_names_2_9_7.xml
│ │ │ ├── Maven__com_jayway_jsonpath_json_path_2_4_0.xml
│ │ │ ├── Maven__com_rabbitmq_amqp_client_5_4_3.xml
│ │ │ ├── Maven__com_vaadin_external_google_android_json_0_0_20131108_vaadin1.xml
│ │ │ ├── Maven__javax_annotation_javax_annotation_api_1_3_2.xml
│ │ │ ├── Maven__javax_validation_validation_api_2_0_1_Final.xml
│ │ │ ├── Maven__junit_junit_4_12.xml
│ │ │ ├── Maven__net_bytebuddy_byte_buddy_1_9_5.xml
│ │ │ ├── Maven__net_bytebuddy_byte_buddy_agent_1_9_5.xml
│ │ │ ├── Maven__net_minidev_accessors_smart_1_2.xml
│ │ │ ├── Maven__net_minidev_json_smart_2_3.xml
│ │ │ ├── Maven__org_apache_logging_log4j_log4j_api_2_11_1.xml
│ │ │ ├── Maven__org_apache_logging_log4j_log4j_to_slf4j_2_11_1.xml
│ │ │ ├── Maven__org_apache_tomcat_embed_tomcat_embed_core_9_0_13.xml
│ │ │ ├── Maven__org_apache_tomcat_embed_tomcat_embed_el_9_0_13.xml
│ │ │ ├── Maven__org_apache_tomcat_embed_tomcat_embed_websocket_9_0_13.xml
│ │ │ ├── Maven__org_assertj_assertj_core_3_11_1.xml
│ │ │ ├── Maven__org_hamcrest_hamcrest_core_1_3.xml
│ │ │ ├── Maven__org_hamcrest_hamcrest_library_1_3.xml
│ │ │ ├── Maven__org_hibernate_validator_hibernate_validator_6_0_13_Final.xml
│ │ │ ├── Maven__org_jboss_logging_jboss_logging_3_3_2_Final.xml
│ │ │ ├── Maven__org_mockito_mockito_core_2_23_4.xml
│ │ │ ├── Maven__org_objenesis_objenesis_2_6.xml
│ │ │ ├── Maven__org_ow2_asm_asm_5_0_4.xml
│ │ │ ├── Maven__org_skyscreamer_jsonassert_1_5_0.xml
│ │ │ ├── Maven__org_slf4j_jul_to_slf4j_1_7_25.xml
│ │ │ ├── Maven__org_slf4j_slf4j_api_1_7_25.xml
│ │ │ ├── Maven__org_springframework_amqp_spring_amqp_2_1_2_RELEASE.xml
│ │ │ ├── Maven__org_springframework_amqp_spring_rabbit_2_1_2_RELEASE.xml
│ │ │ ├── Maven__org_springframework_boot_spring_boot_2_1_1_RELEASE.xml
│ │ │ ├── Maven__org_springframework_boot_spring_boot_autoconfigure_2_1_1_RELEASE.xml
│ │ │ ├── Maven__org_springframework_boot_spring_boot_starter_2_1_1_RELEASE.xml
│ │ │ ├── Maven__org_springframework_boot_spring_boot_starter_amqp_2_1_1_RELEASE.xml
│ │ │ ├── Maven__org_springframework_boot_spring_boot_starter_json_2_1_1_RELEASE.xml
│ │ │ ├── Maven__org_springframework_boot_spring_boot_starter_logging_2_1_1_RELEASE.xml
│ │ │ ├── Maven__org_springframework_boot_spring_boot_starter_test_2_1_1_RELEASE.xml
│ │ │ ├── Maven__org_springframework_boot_spring_boot_starter_tomcat_2_1_1_RELEASE.xml
│ │ │ ├── Maven__org_springframework_boot_spring_boot_starter_web_2_1_1_RELEASE.xml
│ │ │ ├── Maven__org_springframework_boot_spring_boot_test_2_1_1_RELEASE.xml
│ │ │ ├── Maven__org_springframework_boot_spring_boot_test_autoconfigure_2_1_1_RELEASE.xml
│ │ │ ├── Maven__org_springframework_retry_spring_retry_1_2_2_RELEASE.xml
│ │ │ ├── Maven__org_springframework_spring_aop_5_1_3_RELEASE.xml
│ │ │ ├── Maven__org_springframework_spring_beans_5_1_3_RELEASE.xml
│ │ │ ├── Maven__org_springframework_spring_context_5_1_3_RELEASE.xml
│ │ │ ├── Maven__org_springframework_spring_core_5_1_3_RELEASE.xml
│ │ │ ├── Maven__org_springframework_spring_expression_5_1_3_RELEASE.xml
│ │ │ ├── Maven__org_springframework_spring_jcl_5_1_3_RELEASE.xml
│ │ │ ├── Maven__org_springframework_spring_messaging_5_1_3_RELEASE.xml
│ │ │ ├── Maven__org_springframework_spring_test_5_1_3_RELEASE.xml
│ │ │ ├── Maven__org_springframework_spring_tx_5_1_3_RELEASE.xml
│ │ │ ├── Maven__org_springframework_spring_web_5_1_3_RELEASE.xml
│ │ │ ├── Maven__org_springframework_spring_webmvc_5_1_3_RELEASE.xml
│ │ │ ├── Maven__org_xmlunit_xmlunit_core_2_6_2.xml
│ │ │ └── Maven__org_yaml_snakeyaml_1_23.xml
│ │ ├── misc.xml
│ │ ├── modules.xml
│ │ ├── vcs.xml
│ │ └── workspace.xml
│ └── producer
│ │ ├── .gitignore
│ │ ├── .mvn
│ │ └── wrapper
│ │ │ ├── maven-wrapper.jar
│ │ │ └── maven-wrapper.properties
│ │ ├── mvnw
│ │ ├── mvnw.cmd
│ │ ├── pom.xml
│ │ └── src
│ │ ├── main
│ │ ├── java
│ │ │ └── top
│ │ │ │ └── snailclimb
│ │ │ │ └── producer
│ │ │ │ └── ProducerApplication.java
│ │ └── resources
│ │ │ └── application.properties
│ │ └── test
│ │ └── java
│ │ └── top
│ │ └── snailclimb
│ │ └── producer
│ │ └── ProducerApplicationTests.java
└── springboot-schedule-task
│ ├── .gitignore
│ ├── .mvn
│ └── wrapper
│ │ ├── MavenWrapperDownloader.java
│ │ ├── maven-wrapper.jar
│ │ └── maven-wrapper.properties
│ ├── mvnw
│ ├── mvnw.cmd
│ ├── pom.xml
│ └── src
│ ├── main
│ ├── java
│ │ └── github
│ │ │ └── javaguide
│ │ │ └── springbootscheduletask
│ │ │ ├── AsyncScheduledTasks.java
│ │ │ ├── SpringbootScheduleTaskApplication.java
│ │ │ └── config
│ │ │ └── SchedulerConfig.java
│ └── resources
│ │ ├── application.properties
│ │ └── templates
│ │ └── hello
│ │ └── hello.html
│ └── test
│ └── java
│ └── github
│ └── javaguide
│ └── springbootscheduletask
│ └── SpringbootScheduleTaskApplicationTests.java
├── basis
├── jpa-demo
│ ├── .gitignore
│ ├── .mvn
│ │ └── wrapper
│ │ │ ├── MavenWrapperDownloader.java
│ │ │ ├── maven-wrapper.jar
│ │ │ └── maven-wrapper.properties
│ ├── mvnw
│ ├── mvnw.cmd
│ ├── pom.xml
│ └── src
│ │ ├── main
│ │ ├── java
│ │ │ └── github
│ │ │ │ └── snailclimb
│ │ │ │ └── jpademo
│ │ │ │ ├── JpaDemoApplication.java
│ │ │ │ ├── model
│ │ │ │ ├── dto
│ │ │ │ │ └── UserDTO.java
│ │ │ │ └── po
│ │ │ │ │ ├── Company.java
│ │ │ │ │ ├── Person.java
│ │ │ │ │ └── School.java
│ │ │ │ └── repository
│ │ │ │ └── PersonRepository.java
│ │ └── resources
│ │ │ └── application.properties
│ │ └── test
│ │ ├── java
│ │ └── github
│ │ │ └── snailclimb
│ │ │ └── jpademo
│ │ │ └── repository
│ │ │ ├── PersonRepositoryTest.java
│ │ │ └── PersonRepositoryTest2.java
│ │ └── resources
│ │ └── init.sql
├── life-cycle-annotation
│ ├── .gitignore
│ ├── .mvn
│ │ └── wrapper
│ │ │ ├── MavenWrapperDownloader.java
│ │ │ ├── maven-wrapper.jar
│ │ │ └── maven-wrapper.properties
│ ├── mvnw
│ ├── mvnw.cmd
│ ├── pom.xml
│ └── src
│ │ ├── main
│ │ ├── java
│ │ │ └── cn
│ │ │ │ └── javaguide
│ │ │ │ ├── LifeCycleAnnotationApplication.java
│ │ │ │ └── config
│ │ │ │ ├── MyConfiguration.java
│ │ │ │ └── MyConfiguration2.java
│ │ └── resources
│ │ │ └── application.properties
│ │ └── test
│ │ └── java
│ │ └── cn
│ │ └── javaguide
│ │ └── lifecycleannotation
│ │ └── LifeCycleAnnotationApplicationTests.java
├── read-config-properties
│ ├── .gitignore
│ ├── .mvn
│ │ └── wrapper
│ │ │ ├── MavenWrapperDownloader.java
│ │ │ ├── maven-wrapper.jar
│ │ │ └── maven-wrapper.properties
│ ├── config
│ │ └── application.yml
│ ├── mvnw
│ ├── mvnw.cmd
│ ├── pom.xml
│ └── src
│ │ ├── main
│ │ ├── java
│ │ │ └── cn
│ │ │ │ └── javaguide
│ │ │ │ └── readconfigproperties
│ │ │ │ ├── LibraryProperties.java
│ │ │ │ ├── ProfileProperties.java
│ │ │ │ ├── ReadConfigPropertiesApplication.java
│ │ │ │ └── WebSite.java
│ │ └── resources
│ │ │ ├── application.yml
│ │ │ ├── config
│ │ │ └── application.yml
│ │ │ └── website.properties
│ │ └── test
│ │ └── java
│ │ └── cn
│ │ └── javaguide
│ │ └── readconfigproperties
│ │ └── ReadConfigPropertiesApplicationTests.java
├── springboot-filter-interceptor
│ ├── .gitignore
│ ├── .mvn
│ │ └── wrapper
│ │ │ ├── MavenWrapperDownloader.java
│ │ │ ├── maven-wrapper.jar
│ │ │ └── maven-wrapper.properties
│ ├── mvnw
│ ├── mvnw.cmd
│ ├── pom.xml
│ └── src
│ │ ├── main
│ │ ├── java
│ │ │ └── github
│ │ │ │ └── javaguide
│ │ │ │ └── springbootfilter
│ │ │ │ ├── SpringbootFilterApplication.java
│ │ │ │ ├── config
│ │ │ │ ├── MyFilterConfig.java
│ │ │ │ └── WebConfig.java
│ │ │ │ ├── filter
│ │ │ │ ├── MyFilter.java
│ │ │ │ ├── MyFilter2.java
│ │ │ │ └── MyFilterWithAnnotation.java
│ │ │ │ ├── interceptor
│ │ │ │ ├── AdminInterceptor.java
│ │ │ │ ├── LogInterceptor.java
│ │ │ │ └── OldLoginInterceptor.java
│ │ │ │ └── web
│ │ │ │ ├── InterceptorTestController.java
│ │ │ │ └── MyController.java
│ │ └── resources
│ │ │ ├── application.properties
│ │ │ └── templates
│ │ │ ├── login.html
│ │ │ └── test.html
│ │ └── test
│ │ └── java
│ │ └── github
│ │ └── javaguide
│ │ └── springbootfilter
│ │ └── SpringbootFilterApplicationTests.java
├── springboot-handle-exception-improved
│ ├── .gitignore
│ ├── .idea
│ │ ├── .name
│ │ ├── checkstyle-idea.xml
│ │ ├── inspectionProfiles
│ │ │ └── Project_Default.xml
│ │ ├── misc.xml
│ │ ├── modules
│ │ │ └── webApp.main.iml
│ │ └── vcs.xml
│ ├── build.gradle
│ ├── gradle
│ │ └── wrapper
│ │ │ ├── gradle-wrapper.jar
│ │ │ └── gradle-wrapper.properties
│ ├── gradlew
│ ├── gradlew.bat
│ ├── settings.gradle
│ └── src
│ │ ├── main
│ │ ├── java
│ │ │ └── com
│ │ │ │ └── twuc
│ │ │ │ └── webApp
│ │ │ │ ├── WebAppApplication.java
│ │ │ │ ├── entity
│ │ │ │ └── Person.java
│ │ │ │ ├── exception
│ │ │ │ ├── BaseException.java
│ │ │ │ ├── ErrorCode.java
│ │ │ │ ├── ErrorReponse.java
│ │ │ │ ├── GlobalExceptionHandler.java
│ │ │ │ └── ResourceNotFoundException.java
│ │ │ │ └── web
│ │ │ │ └── ExceptionController.java
│ │ └── resources
│ │ │ └── application.properties
│ │ └── test
│ │ └── java
│ │ └── com
│ │ └── twuc
│ │ └── webApp
│ │ └── web
│ │ └── ExceptionTest.java
├── springboot-handle-exception
│ ├── .gitignore
│ ├── .idea
│ │ ├── .name
│ │ ├── checkstyle-idea.xml
│ │ ├── inspectionProfiles
│ │ │ └── Project_Default.xml
│ │ ├── misc.xml
│ │ └── vcs.xml
│ ├── build.gradle
│ ├── gradle
│ │ └── wrapper
│ │ │ ├── gradle-wrapper.jar
│ │ │ └── gradle-wrapper.properties
│ ├── gradlew
│ ├── gradlew.bat
│ ├── settings.gradle
│ └── src
│ │ ├── main
│ │ ├── java
│ │ │ └── com
│ │ │ │ └── twuc
│ │ │ │ └── webApp
│ │ │ │ ├── WebAppApplication.java
│ │ │ │ ├── exception
│ │ │ │ ├── ErrorResponse.java
│ │ │ │ ├── GlobalExceptionHandler.java
│ │ │ │ ├── ResourceNotFoundException.java
│ │ │ │ └── ResourseNotFoundException2.java
│ │ │ │ └── web
│ │ │ │ ├── ExceptionController.java
│ │ │ │ └── ResponseStatusExceptionController.java
│ │ └── resources
│ │ │ └── application.properties
│ │ └── test
│ │ └── java
│ │ └── com
│ │ └── twuc
│ │ └── webApp
│ │ └── web
│ │ └── ExceptionTest.java
└── springboot-mybatis
│ ├── springboot-mybatis-annotation
│ ├── .gitignore
│ ├── .mvn
│ │ └── wrapper
│ │ │ ├── maven-wrapper.jar
│ │ │ └── maven-wrapper.properties
│ ├── mvnw
│ ├── mvnw.cmd
│ ├── pom.xml
│ └── src
│ │ ├── main
│ │ ├── java
│ │ │ └── top
│ │ │ │ └── snailclimb
│ │ │ │ ├── MainApplication.java
│ │ │ │ ├── bean
│ │ │ │ └── User.java
│ │ │ │ ├── controller
│ │ │ │ └── UserController.java
│ │ │ │ ├── dao
│ │ │ │ └── UserDao.java
│ │ │ │ └── service
│ │ │ │ └── UserService.java
│ │ └── resources
│ │ │ └── application.properties
│ │ └── test
│ │ └── java
│ │ └── top
│ │ └── snailclimb
│ │ └── snailclimb
│ │ └── springbootmybatis
│ │ └── SpringbootMybatisApplicationTests.java
│ ├── springboot-mybatis-mutipleDatasource
│ ├── .gitignore
│ ├── .mvn
│ │ └── wrapper
│ │ │ ├── maven-wrapper.jar
│ │ │ └── maven-wrapper.properties
│ ├── mvnw
│ ├── mvnw.cmd
│ ├── pom.xml
│ └── src
│ │ ├── main
│ │ ├── java
│ │ │ └── top
│ │ │ │ └── snailclimb
│ │ │ │ ├── MainApplication.java
│ │ │ │ ├── bean
│ │ │ │ ├── Money.java
│ │ │ │ └── User.java
│ │ │ │ ├── config
│ │ │ │ ├── DataSource1Config.java
│ │ │ │ └── DataSource2Config.java
│ │ │ │ ├── controller
│ │ │ │ ├── MoneyController.java
│ │ │ │ └── UserController.java
│ │ │ │ ├── db1
│ │ │ │ ├── dao
│ │ │ │ │ └── UserDao.java
│ │ │ │ └── service
│ │ │ │ │ └── UserService.java
│ │ │ │ └── db2
│ │ │ │ ├── dao
│ │ │ │ └── MoneyDao.java
│ │ │ │ └── service
│ │ │ │ └── MoneyService.java
│ │ └── resources
│ │ │ └── application.properties
│ │ └── test
│ │ └── java
│ │ └── top
│ │ └── snailclimb
│ │ └── snailclimb
│ │ └── springbootmybatis
│ │ └── SpringbootMybatisApplicationTests.java
│ └── springboot-mybatis-xml
│ ├── .gitignore
│ ├── .mvn
│ └── wrapper
│ │ ├── maven-wrapper.jar
│ │ └── maven-wrapper.properties
│ ├── mvnw
│ ├── mvnw.cmd
│ ├── pom.xml
│ └── src
│ ├── main
│ ├── java
│ │ └── top
│ │ │ └── snailclimb
│ │ │ ├── MainApplication.java
│ │ │ ├── bean
│ │ │ └── User.java
│ │ │ ├── controller
│ │ │ └── UserController.java
│ │ │ ├── dao
│ │ │ └── UserDao.java
│ │ │ └── service
│ │ │ └── UserService.java
│ └── resources
│ │ ├── application.properties
│ │ └── mapper
│ │ └── UserMapper.xml
│ └── test
│ └── java
│ └── top
│ └── snailclimb
│ └── snailclimb
│ └── springbootmybatis
│ └── SpringbootMybatisApplicationTests.java
├── bean-validation-demo
├── .gitignore
├── .mvn
│ └── wrapper
│ │ ├── MavenWrapperDownloader.java
│ │ ├── maven-wrapper.jar
│ │ └── maven-wrapper.properties
├── mvnw
├── mvnw.cmd
├── pom.xml
└── src
│ ├── main
│ ├── java
│ │ └── com
│ │ │ └── example
│ │ │ └── beanvalidationdemo
│ │ │ ├── BeanValidationDemoApplication.java
│ │ │ ├── constants
│ │ │ └── Constants.java
│ │ │ ├── controller
│ │ │ ├── HelloWorldController.java
│ │ │ └── PersonController.java
│ │ │ ├── entity
│ │ │ ├── Person.java
│ │ │ └── PersonRequest.java
│ │ │ ├── exception
│ │ │ └── GlobalExceptionHandler.java
│ │ │ ├── service
│ │ │ ├── AddPersonGroup.java
│ │ │ ├── DeletePersonGroup.java
│ │ │ └── PersonService.java
│ │ │ └── validation
│ │ │ ├── PhoneNumber.java
│ │ │ ├── PhoneNumberValidator.java
│ │ │ ├── Region.java
│ │ │ └── RegionValidator.java
│ └── resources
│ │ └── application.properties
│ └── test
│ └── java
│ └── com
│ └── example
│ └── beanvalidationdemo
│ ├── PersonControllerTest.java
│ └── PersonServiceTest.java
├── hello-world
├── .gitignore
├── .mvn
│ └── wrapper
│ │ ├── MavenWrapperDownloader.java
│ │ ├── maven-wrapper.jar
│ │ └── maven-wrapper.properties
├── mvnw
├── mvnw.cmd
├── pom.xml
└── src
│ ├── main
│ ├── java
│ │ └── com
│ │ │ └── example
│ │ │ └── helloworld
│ │ │ ├── HelloWorldApplication.java
│ │ │ ├── controller
│ │ │ └── UserController.java
│ │ │ ├── dto
│ │ │ └── UserDto.java
│ │ │ └── entity
│ │ │ └── User.java
│ └── resources
│ │ └── application.properties
│ └── test
│ └── java
│ └── com
│ └── example
│ ├── dto2entity
│ └── BeanUtilsTest.java
│ └── helloworld
│ └── HelloWorldApplicationTests.java
└── springboot-data-desensitization
├── .gitignore
├── .mvn
└── wrapper
│ ├── MavenWrapperDownloader.java
│ ├── maven-wrapper.jar
│ └── maven-wrapper.properties
├── mvnw
├── mvnw.cmd
├── pom.xml
└── src
├── main
├── java
│ └── com
│ │ └── github
│ │ └── springbootdatadesensitization
│ │ ├── SpringbootDataDesensitizationApplication.java
│ │ ├── desensitize
│ │ ├── JsonDesensitizationSerializer.java
│ │ ├── annotation
│ │ │ └── JsonDesensitization.java
│ │ ├── desensitizer
│ │ │ ├── AbstractDesensitizer.java
│ │ │ ├── Desensitizer.java
│ │ │ ├── DesensitizerFactory.java
│ │ │ └── impl
│ │ │ │ ├── AddressDesensitizer.java
│ │ │ │ ├── BankCardDesensitizer.java
│ │ │ │ ├── BirthdayDesensitizer.java
│ │ │ │ ├── DefaultDesensitizer.java
│ │ │ │ ├── EmailDesensitizer.java
│ │ │ │ ├── IdCardDesensitizer.java
│ │ │ │ ├── LandlineDesensitizer.java
│ │ │ │ ├── MobileDesensitizer.java
│ │ │ │ └── PasswordDesensitizer.java
│ │ ├── enums
│ │ │ └── DesensitizationType.java
│ │ └── exception
│ │ │ └── DesensitizationException.java
│ │ └── entity
│ │ └── User.java
└── resources
│ └── application.properties
└── test
└── java
└── com
└── github
└── springbootdatadesensitization
└── desensitize
└── JsonDesensitizationSerializerTest.java
/.gitattributes:
--------------------------------------------------------------------------------
1 | # Auto detect text files and perform LF normalization
2 | * text=auto
3 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # Compiled class file
2 | *.class
3 |
4 | # Log file
5 | *.log
6 |
7 | # BlueJ files
8 | *.ctxt
9 |
10 | # Mobile Tools for Java (J2ME)
11 | .mtj.tmp/
12 |
13 | # Package Files #
14 | *.jar
15 | *.war
16 | *.nar
17 | *.ear
18 | *.zip
19 | *.tar.gz
20 | *.rar
21 |
22 | # virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml
23 | hs_err_pid*
24 |
--------------------------------------------------------------------------------
/.nojekyll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodingDocs/springboot-guide/76c018d7d898d61d9ce07a975c0056a36a5f9358/.nojekyll
--------------------------------------------------------------------------------
/404.md:
--------------------------------------------------------------------------------
1 | ### 联系我
2 |
3 | 添加我的微信备注“Github”,回复关键字 **“加群”** 即可入群。
4 |
5 | 
6 |
7 | ### 公众号
8 |
9 | 如果大家想要实时关注我更新的文章以及分享的干货的话,可以关注我的公众号。
10 |
11 | **《Java面试突击》:** 由本文档衍生的专为面试而生的《Java面试突击》V2.0 PDF 版本[公众号](#公众号)后台回复 **"Java面试突击"** 即可免费领取!
12 |
13 | **Java工程师必备学习资源:** 一些Java工程师常用学习资源公众号后台回复关键字 **“1”** 即可免费无套路获取。
14 |
15 | 
--------------------------------------------------------------------------------
/_coverpage.md:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | Spring Boot 学习/面试指南
8 |
9 | [常用资源](https://shimo.im/docs/MuiACIg1HlYfVxrj/)
10 | [GitHub](https://github.com/Snailclimb/springboot-guide)
11 | [开始阅读](#重要知识点)
12 |
13 | 
--------------------------------------------------------------------------------
/media/zhao-chen-hvuLPoMM19I-unsplash.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodingDocs/springboot-guide/76c018d7d898d61d9ce07a975c0056a36a5f9358/media/zhao-chen-hvuLPoMM19I-unsplash.jpg
--------------------------------------------------------------------------------
/source-code/advanced/async-method-springboot/.gitignore:
--------------------------------------------------------------------------------
1 | HELP.md
2 | target/
3 | !.mvn/wrapper/maven-wrapper.jar
4 | !**/src/main/**
5 | !**/src/test/**
6 |
7 | ### STS ###
8 | .apt_generated
9 | .classpath
10 | .factorypath
11 | .project
12 | .settings
13 | .springBeans
14 | .sts4-cache
15 |
16 | ### IntelliJ IDEA ###
17 | .idea
18 | *.iws
19 | *.iml
20 | *.ipr
21 |
22 | ### NetBeans ###
23 | /nbproject/private/
24 | /nbbuild/
25 | /dist/
26 | /nbdist/
27 | /.nb-gradle/
28 | build/
29 |
30 | ### VS Code ###
31 | .vscode/
32 |
--------------------------------------------------------------------------------
/source-code/advanced/async-method-springboot/.mvn/wrapper/maven-wrapper.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodingDocs/springboot-guide/76c018d7d898d61d9ce07a975c0056a36a5f9358/source-code/advanced/async-method-springboot/.mvn/wrapper/maven-wrapper.jar
--------------------------------------------------------------------------------
/source-code/advanced/async-method-springboot/.mvn/wrapper/maven-wrapper.properties:
--------------------------------------------------------------------------------
1 | distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.6.0/apache-maven-3.6.0-bin.zip
2 |
--------------------------------------------------------------------------------
/source-code/advanced/async-method-springboot/src/main/java/github/javaguide/asyncmethodspringboot/AsyncMethodSpringbootApplication.java:
--------------------------------------------------------------------------------
1 | package github.javaguide.asyncmethodspringboot;
2 |
3 | import org.springframework.boot.SpringApplication;
4 | import org.springframework.boot.autoconfigure.SpringBootApplication;
5 |
6 | @SpringBootApplication
7 | public class AsyncMethodSpringbootApplication {
8 |
9 | public static void main(String[] args) {
10 | SpringApplication.run(AsyncMethodSpringbootApplication.class, args);
11 | }
12 |
13 | }
14 |
--------------------------------------------------------------------------------
/source-code/advanced/async-method-springboot/src/main/resources/application.properties:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/source-code/advanced/bean-validation-demo/.gitignore:
--------------------------------------------------------------------------------
1 | HELP.md
2 | target/
3 | !.mvn/wrapper/maven-wrapper.jar
4 | !**/src/main/**
5 | !**/src/test/**
6 |
7 | ### STS ###
8 | .apt_generated
9 | .classpath
10 | .factorypath
11 | .project
12 | .settings
13 | .springBeans
14 | .sts4-cache
15 |
16 | ### IntelliJ IDEA ###
17 | .idea
18 | *.iws
19 | *.iml
20 | *.ipr
21 |
22 | ### NetBeans ###
23 | /nbproject/private/
24 | /nbbuild/
25 | /dist/
26 | /nbdist/
27 | /.nb-gradle/
28 | build/
29 |
30 | ### VS Code ###
31 | .vscode/
32 |
--------------------------------------------------------------------------------
/source-code/advanced/bean-validation-demo/.mvn/wrapper/maven-wrapper.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodingDocs/springboot-guide/76c018d7d898d61d9ce07a975c0056a36a5f9358/source-code/advanced/bean-validation-demo/.mvn/wrapper/maven-wrapper.jar
--------------------------------------------------------------------------------
/source-code/advanced/bean-validation-demo/.mvn/wrapper/maven-wrapper.properties:
--------------------------------------------------------------------------------
1 | distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.6.0/apache-maven-3.6.0-bin.zip
2 |
--------------------------------------------------------------------------------
/source-code/advanced/bean-validation-demo/src/main/java/com/example/beanvalidationdemo/BeanValidationDemoApplication.java:
--------------------------------------------------------------------------------
1 | package com.example.beanvalidationdemo;
2 |
3 | import org.springframework.boot.SpringApplication;
4 | import org.springframework.boot.autoconfigure.SpringBootApplication;
5 |
6 | @SpringBootApplication
7 | public class BeanValidationDemoApplication {
8 |
9 | public static void main(String[] args) {
10 | SpringApplication.run(BeanValidationDemoApplication.class, args);
11 | }
12 |
13 | }
14 |
--------------------------------------------------------------------------------
/source-code/advanced/bean-validation-demo/src/main/java/com/example/beanvalidationdemo/constants/Constants.java:
--------------------------------------------------------------------------------
1 | package com.example.beanvalidationdemo.constants;
2 |
3 | public final class Constants {
4 | public static final String sexs = "((^Man$|^Woman$|^UGM$))";
5 | }
6 |
--------------------------------------------------------------------------------
/source-code/advanced/bean-validation-demo/src/main/java/com/example/beanvalidationdemo/controller/HelloWorldController.java:
--------------------------------------------------------------------------------
1 | package com.example.beanvalidationdemo.controller;
2 |
3 | import org.springframework.web.bind.annotation.GetMapping;
4 | import org.springframework.web.bind.annotation.RequestMapping;
5 | import org.springframework.web.bind.annotation.RestController;
6 |
7 | /**
8 | * @author shuang.kou
9 | * 验证基本环境搭建是否正确
10 | */
11 | @RestController
12 | @RequestMapping("/api")
13 | public class HelloWorldController {
14 |
15 | @GetMapping("/hello")
16 | public String hello() {
17 | return "Hello";
18 | }
19 | }
20 |
--------------------------------------------------------------------------------
/source-code/advanced/bean-validation-demo/src/main/java/com/example/beanvalidationdemo/entity/Person.java:
--------------------------------------------------------------------------------
1 | package com.example.beanvalidationdemo.entity;
2 |
3 | import com.example.beanvalidationdemo.service.AddPersonGroup;
4 | import com.example.beanvalidationdemo.service.DeletePersonGroup;
5 | import lombok.Data;
6 |
7 | import javax.validation.constraints.NotNull;
8 | import javax.validation.constraints.Null;
9 |
10 | @Data
11 | public class Person {
12 |
13 | // 当验证组为 DeletePersonGroup 的时候 group 字段不能为空
14 | @NotNull(groups = DeletePersonGroup.class)
15 | // 当验证组为 AddPersonGroup 的时候 group 字段需要为空
16 | @Null(groups = AddPersonGroup.class)
17 | private String group;
18 | }
19 |
--------------------------------------------------------------------------------
/source-code/advanced/bean-validation-demo/src/main/java/com/example/beanvalidationdemo/service/AddPersonGroup.java:
--------------------------------------------------------------------------------
1 | package com.example.beanvalidationdemo.service;
2 |
3 | public interface AddPersonGroup {
4 | }
5 |
--------------------------------------------------------------------------------
/source-code/advanced/bean-validation-demo/src/main/java/com/example/beanvalidationdemo/service/DeletePersonGroup.java:
--------------------------------------------------------------------------------
1 | package com.example.beanvalidationdemo.service;
2 |
3 | public interface DeletePersonGroup {
4 | }
5 |
--------------------------------------------------------------------------------
/source-code/advanced/bean-validation-demo/src/main/java/com/example/beanvalidationdemo/validation/PhoneNumber.java:
--------------------------------------------------------------------------------
1 | package com.example.beanvalidationdemo.validation;
2 |
3 | import javax.validation.Constraint;
4 | import java.lang.annotation.Documented;
5 | import java.lang.annotation.Retention;
6 | import java.lang.annotation.Target;
7 |
8 | import static java.lang.annotation.ElementType.FIELD;
9 | import static java.lang.annotation.ElementType.PARAMETER;
10 | import static java.lang.annotation.RetentionPolicy.RUNTIME;
11 |
12 | @Documented
13 | @Constraint(validatedBy = PhoneNumberValidator.class)
14 | @Target({FIELD, PARAMETER})
15 | @Retention(RUNTIME)
16 | public @interface PhoneNumber {
17 | String message() default "Invalid phone number";
18 |
19 | Class[] groups() default {};
20 |
21 | Class[] payload() default {};
22 | }
23 |
--------------------------------------------------------------------------------
/source-code/advanced/bean-validation-demo/src/main/java/com/example/beanvalidationdemo/validation/Region.java:
--------------------------------------------------------------------------------
1 | package com.example.beanvalidationdemo.validation;
2 |
3 | import javax.validation.Constraint;
4 | import javax.validation.Payload;
5 | import java.lang.annotation.Documented;
6 | import java.lang.annotation.Retention;
7 | import java.lang.annotation.Target;
8 |
9 | import static java.lang.annotation.ElementType.FIELD;
10 | import static java.lang.annotation.RetentionPolicy.RUNTIME;
11 |
12 | /**
13 | * @author shuang.kou
14 | */
15 | @Target({FIELD})
16 | @Retention(RUNTIME)
17 | @Constraint(validatedBy = RegionValidator.class)
18 | @Documented
19 | public @interface Region {
20 |
21 | String message() default "Region 值不在可选范围内";
22 |
23 | Class>[] groups() default {};
24 |
25 | Class extends Payload>[] payload() default {};
26 | }
27 |
--------------------------------------------------------------------------------
/source-code/advanced/bean-validation-demo/src/main/java/com/example/beanvalidationdemo/validation/RegionValidator.java:
--------------------------------------------------------------------------------
1 | package com.example.beanvalidationdemo.validation;
2 |
3 | import javax.validation.ConstraintValidator;
4 | import javax.validation.ConstraintValidatorContext;
5 | import java.util.HashSet;
6 |
7 | public class RegionValidator implements ConstraintValidator {
8 |
9 | @Override
10 | public boolean isValid(String value, ConstraintValidatorContext context) {
11 | HashSet