gitextract_8i_wvbh2/ ├── .gitignore ├── 2-x-spring-boot-groovy/ │ ├── pom.xml │ └── src/ │ └── main/ │ ├── java/ │ │ └── org/ │ │ └── spring/ │ │ └── springboot/ │ │ ├── Application.java │ │ ├── filter/ │ │ │ └── RouteRuleFilter.java │ │ └── web/ │ │ └── GroovyScriptController.java │ └── resources/ │ └── application.properties ├── 2-x-spring-boot-webflux-handling-errors/ │ ├── pom.xml │ └── src/ │ └── main/ │ ├── java/ │ │ └── org/ │ │ └── spring/ │ │ └── springboot/ │ │ ├── Application.java │ │ ├── error/ │ │ │ ├── GlobalErrorAttributes.java │ │ │ ├── GlobalErrorWebExceptionHandler.java │ │ │ └── GlobalException.java │ │ ├── handler/ │ │ │ └── CityHandler.java │ │ └── router/ │ │ └── CityRouter.java │ └── resources/ │ └── application.properties ├── LICENSE ├── README.md ├── chapter-1-spring-boot-quickstart/ │ ├── pom.xml │ └── src/ │ ├── main/ │ │ ├── java/ │ │ │ └── demo/ │ │ │ └── springboot/ │ │ │ ├── QuickStartApplication.java │ │ │ └── web/ │ │ │ ├── HelloBookController.java │ │ │ └── HelloController.java │ │ └── resources/ │ │ └── application.properties │ └── test/ │ ├── java/ │ │ └── demo/ │ │ └── springboot/ │ │ └── QuickStartApplicationTests.java │ └── resources/ │ └── application.properties ├── chapter-2-spring-boot-config/ │ ├── pom.xml │ └── src/ │ ├── main/ │ │ ├── java/ │ │ │ └── demo/ │ │ │ └── springboot/ │ │ │ ├── ConfigApplication.java │ │ │ ├── config/ │ │ │ │ ├── BookComponent.java │ │ │ │ └── BookProperties.java │ │ │ └── web/ │ │ │ └── HelloBookController.java │ │ └── resources/ │ │ ├── application-dev.properties │ │ ├── application-prod.properties │ │ ├── application.properties │ │ └── application.yml │ └── test/ │ └── java/ │ └── demo/ │ └── springboot/ │ └── ConfigApplicationTests.java ├── chapter-3-spring-boot-web/ │ ├── pom.xml │ └── src/ │ ├── main/ │ │ ├── java/ │ │ │ └── demo/ │ │ │ └── springboot/ │ │ │ ├── WebApplication.java │ │ │ ├── domain/ │ │ │ │ └── Book.java │ │ │ ├── service/ │ │ │ │ ├── BookService.java │ │ │ │ └── impl/ │ │ │ │ └── BookServiceImpl.java │ │ │ └── web/ │ │ │ └── BookController.java │ │ └── resources/ │ │ └── application.properties │ └── test/ │ ├── java/ │ │ └── demo/ │ │ └── springboot/ │ │ ├── WebApplicationTests.java │ │ └── web/ │ │ └── BookControllerTest.java │ └── resources/ │ └── application.properties ├── chapter-4-spring-boot-validating-form-input/ │ ├── pom.xml │ └── src/ │ ├── main/ │ │ ├── java/ │ │ │ └── spring/ │ │ │ └── boot/ │ │ │ └── core/ │ │ │ ├── ValidatingFormInputApplication.java │ │ │ ├── domain/ │ │ │ │ ├── User.java │ │ │ │ └── UserRepository.java │ │ │ ├── service/ │ │ │ │ ├── UserService.java │ │ │ │ └── impl/ │ │ │ │ └── UserServiceImpl.java │ │ │ └── web/ │ │ │ └── UserController.java │ │ └── resources/ │ │ ├── application.properties │ │ ├── static/ │ │ │ └── css/ │ │ │ └── default.css │ │ └── templates/ │ │ ├── userForm.html │ │ └── userList.html │ └── test/ │ ├── java/ │ │ └── spring/ │ │ └── boot/ │ │ └── core/ │ │ ├── ValidatingFormInputApplicationTests.java │ │ └── web/ │ │ └── UserControllerTest.java │ └── resources/ │ ├── application.properties │ ├── static/ │ │ └── css/ │ │ └── default.css │ └── templates/ │ ├── userForm.html │ └── userList.html ├── chapter-4-spring-boot-web-thymeleaf/ │ ├── pom.xml │ └── src/ │ ├── main/ │ │ ├── java/ │ │ │ └── demo/ │ │ │ └── springboot/ │ │ │ ├── WebApplication.java │ │ │ ├── domain/ │ │ │ │ └── Book.java │ │ │ ├── service/ │ │ │ │ ├── BookService.java │ │ │ │ └── impl/ │ │ │ │ └── BookServiceImpl.java │ │ │ └── web/ │ │ │ └── BookController.java │ │ └── resources/ │ │ ├── application.properties │ │ ├── static/ │ │ │ └── css/ │ │ │ └── default.css │ │ └── templates/ │ │ ├── bookForm.html │ │ └── bookList.html │ └── test/ │ └── java/ │ └── demo/ │ └── springboot/ │ └── WebApplicationTests.java ├── chapter-5-spring-boot-data-jpa/ │ ├── pom.xml │ └── src/ │ ├── main/ │ │ ├── java/ │ │ │ └── demo/ │ │ │ └── springboot/ │ │ │ ├── WebApplication.java │ │ │ ├── domain/ │ │ │ │ ├── Book.java │ │ │ │ └── BookRepository.java │ │ │ ├── service/ │ │ │ │ ├── BookService.java │ │ │ │ └── impl/ │ │ │ │ └── BookServiceImpl.java │ │ │ └── web/ │ │ │ └── BookController.java │ │ └── resources/ │ │ ├── application.properties │ │ ├── static/ │ │ │ └── css/ │ │ │ └── default.css │ │ └── templates/ │ │ ├── bookForm.html │ │ └── bookList.html │ └── test/ │ └── java/ │ └── demo/ │ └── springboot/ │ └── WebApplicationTests.java ├── chapter-5-spring-boot-paging-sorting/ │ ├── pom.xml │ └── src/ │ ├── main/ │ │ ├── java/ │ │ │ └── spring/ │ │ │ └── boot/ │ │ │ └── core/ │ │ │ ├── PagingSortingApplication.java │ │ │ ├── domain/ │ │ │ │ ├── User.java │ │ │ │ └── UserRepository.java │ │ │ ├── service/ │ │ │ │ ├── UserService.java │ │ │ │ └── impl/ │ │ │ │ └── UserServiceImpl.java │ │ │ └── web/ │ │ │ └── UserController.java │ │ └── resources/ │ │ └── application.properties │ └── test/ │ └── java/ │ └── spring/ │ └── boot/ │ └── core/ │ └── PagingSortingApplicationTests.java ├── pom.xml ├── spring-data-elasticsearch-crud/ │ ├── pom.xml │ └── src/ │ └── main/ │ ├── java/ │ │ └── org/ │ │ └── spring/ │ │ └── springboot/ │ │ ├── Application.java │ │ ├── controller/ │ │ │ └── CityRestController.java │ │ ├── domain/ │ │ │ └── City.java │ │ ├── repository/ │ │ │ └── CityRepository.java │ │ └── service/ │ │ ├── CityService.java │ │ └── impl/ │ │ └── CityESServiceImpl.java │ └── resources/ │ └── application.properties ├── spring-data-elasticsearch-query/ │ ├── pom.xml │ └── src/ │ └── main/ │ ├── java/ │ │ └── org/ │ │ └── spring/ │ │ └── springboot/ │ │ ├── Application.java │ │ ├── controller/ │ │ │ └── CityRestController.java │ │ ├── domain/ │ │ │ └── City.java │ │ ├── repository/ │ │ │ └── CityRepository.java │ │ └── service/ │ │ ├── CityService.java │ │ └── impl/ │ │ └── CityESServiceImpl.java │ └── resources/ │ └── application.properties ├── springboot-configuration/ │ ├── pom.xml │ └── src/ │ ├── main/ │ │ └── java/ │ │ └── org/ │ │ └── spring/ │ │ └── springboot/ │ │ ├── Application.java │ │ └── config/ │ │ └── MessageConfiguration.java │ └── test/ │ └── java/ │ └── org/ │ └── spring/ │ └── springboot/ │ └── config/ │ └── MessageConfigurationTest.java ├── springboot-dubbo-client/ │ ├── pom.xml │ └── src/ │ └── main/ │ ├── java/ │ │ └── org/ │ │ └── spring/ │ │ └── springboot/ │ │ ├── ClientApplication.java │ │ ├── domain/ │ │ │ └── City.java │ │ └── dubbo/ │ │ ├── CityDubboConsumerService.java │ │ └── CityDubboService.java │ └── resources/ │ └── application.properties ├── springboot-dubbo-server/ │ ├── DubboProperties.md │ ├── pom.xml │ └── src/ │ └── main/ │ ├── java/ │ │ └── org/ │ │ └── spring/ │ │ └── springboot/ │ │ ├── ServerApplication.java │ │ ├── domain/ │ │ │ └── City.java │ │ └── dubbo/ │ │ ├── CityDubboService.java │ │ └── impl/ │ │ └── CityDubboServiceImpl.java │ └── resources/ │ └── application.properties ├── springboot-elasticsearch/ │ ├── pom.xml │ └── src/ │ └── main/ │ ├── java/ │ │ └── org/ │ │ └── spring/ │ │ └── springboot/ │ │ ├── Application.java │ │ ├── controller/ │ │ │ └── CityRestController.java │ │ ├── domain/ │ │ │ └── City.java │ │ ├── repository/ │ │ │ └── CityRepository.java │ │ └── service/ │ │ ├── CityService.java │ │ └── impl/ │ │ └── CityESServiceImpl.java │ └── resources/ │ └── application.properties ├── springboot-freemarker/ │ ├── pom.xml │ └── src/ │ └── main/ │ ├── java/ │ │ └── org/ │ │ └── spring/ │ │ └── springboot/ │ │ ├── Application.java │ │ ├── controller/ │ │ │ └── CityController.java │ │ ├── dao/ │ │ │ └── CityDao.java │ │ ├── domain/ │ │ │ └── City.java │ │ └── service/ │ │ ├── CityService.java │ │ └── impl/ │ │ └── CityServiceImpl.java │ └── resources/ │ ├── application.properties │ ├── mapper/ │ │ └── CityMapper.xml │ └── web/ │ ├── city.ftl │ └── cityList.ftl ├── springboot-hbase/ │ ├── pom.xml │ └── src/ │ └── main/ │ ├── java/ │ │ └── org/ │ │ └── spring/ │ │ └── springboot/ │ │ ├── Application.java │ │ ├── controller/ │ │ │ └── CityRestController.java │ │ ├── dao/ │ │ │ └── CityRowMapper.java │ │ ├── domain/ │ │ │ └── City.java │ │ └── service/ │ │ ├── CityService.java │ │ └── impl/ │ │ └── CityServiceImpl.java │ └── resources/ │ └── application.properties ├── springboot-helloworld/ │ ├── pom.xml │ └── src/ │ ├── main/ │ │ └── java/ │ │ └── org/ │ │ └── spring/ │ │ └── springboot/ │ │ ├── Application.java │ │ └── web/ │ │ └── HelloWorldController.java │ └── test/ │ └── java/ │ └── org/ │ └── spring/ │ └── springboot/ │ └── web/ │ └── HelloWorldControllerTest.java ├── springboot-mybatis/ │ ├── pom.xml │ └── src/ │ └── main/ │ ├── java/ │ │ └── org/ │ │ └── spring/ │ │ └── springboot/ │ │ ├── Application.java │ │ ├── controller/ │ │ │ └── CityRestController.java │ │ ├── dao/ │ │ │ └── CityDao.java │ │ ├── domain/ │ │ │ └── City.java │ │ └── service/ │ │ ├── CityService.java │ │ └── impl/ │ │ └── CityServiceImpl.java │ └── resources/ │ ├── application.properties │ └── mapper/ │ └── CityMapper.xml ├── springboot-mybatis-annotation/ │ ├── pom.xml │ └── src/ │ └── main/ │ ├── java/ │ │ └── org/ │ │ └── spring/ │ │ └── springboot/ │ │ ├── Application.java │ │ ├── controller/ │ │ │ └── CityRestController.java │ │ ├── dao/ │ │ │ └── CityDao.java │ │ ├── domain/ │ │ │ └── City.java │ │ └── service/ │ │ ├── CityService.java │ │ └── impl/ │ │ └── CityServiceImpl.java │ └── resources/ │ └── application.properties ├── springboot-mybatis-mutil-datasource/ │ ├── pom.xml │ └── src/ │ └── main/ │ ├── java/ │ │ └── org/ │ │ └── spring/ │ │ └── springboot/ │ │ ├── Application.java │ │ ├── config/ │ │ │ └── ds/ │ │ │ ├── ClusterDataSourceConfig.java │ │ │ └── MasterDataSourceConfig.java │ │ ├── controller/ │ │ │ └── UserRestController.java │ │ ├── dao/ │ │ │ ├── cluster/ │ │ │ │ └── CityDao.java │ │ │ └── master/ │ │ │ └── UserDao.java │ │ ├── domain/ │ │ │ ├── City.java │ │ │ └── User.java │ │ └── service/ │ │ ├── UserService.java │ │ └── impl/ │ │ └── UserServiceImpl.java │ └── resources/ │ ├── application.properties │ └── mapper/ │ ├── cluster/ │ │ └── CityMapper.xml │ └── master/ │ └── UserMapper.xml ├── springboot-mybatis-redis/ │ ├── pom.xml │ └── src/ │ └── main/ │ ├── java/ │ │ └── org/ │ │ └── spring/ │ │ └── springboot/ │ │ ├── Application.java │ │ ├── controller/ │ │ │ └── CityRestController.java │ │ ├── dao/ │ │ │ └── CityDao.java │ │ ├── domain/ │ │ │ └── City.java │ │ └── service/ │ │ ├── CityService.java │ │ └── impl/ │ │ └── CityServiceImpl.java │ └── resources/ │ ├── application.properties │ └── mapper/ │ └── CityMapper.xml ├── springboot-mybatis-redis-annotation/ │ ├── pom.xml │ └── src/ │ ├── main/ │ │ ├── java/ │ │ │ └── org/ │ │ │ └── spring/ │ │ │ └── springboot/ │ │ │ ├── Application.java │ │ │ ├── domain/ │ │ │ │ └── City.java │ │ │ └── service/ │ │ │ ├── CityService.java │ │ │ └── impl/ │ │ │ └── CityServiceImpl.java │ │ └── resources/ │ │ └── application.properties │ └── test/ │ └── org/ │ └── spring/ │ └── springboot/ │ └── ApplicationTests.java ├── springboot-properties/ │ ├── pom.xml │ └── src/ │ ├── main/ │ │ ├── java/ │ │ │ └── org/ │ │ │ └── spring/ │ │ │ └── springboot/ │ │ │ ├── Application.java │ │ │ ├── property/ │ │ │ │ ├── HomeProperties.java │ │ │ │ └── UserProperties.java │ │ │ └── web/ │ │ │ └── HelloWorldController.java │ │ └── resources/ │ │ ├── application-dev.properties │ │ ├── application-prod.properties │ │ └── application.properties │ └── test/ │ ├── java/ │ │ └── org/ │ │ └── spring/ │ │ └── springboot/ │ │ ├── property/ │ │ │ ├── HomeProperties1.java │ │ │ └── PropertiesTest.java │ │ └── web/ │ │ └── HelloWorldControllerTest.java │ └── resouorces/ │ └── application.yml ├── springboot-restful/ │ ├── pom.xml │ └── src/ │ └── main/ │ ├── java/ │ │ └── org/ │ │ └── spring/ │ │ └── springboot/ │ │ ├── Application.java │ │ ├── controller/ │ │ │ └── CityRestController.java │ │ ├── dao/ │ │ │ └── CityDao.java │ │ ├── domain/ │ │ │ └── City.java │ │ └── service/ │ │ ├── CityService.java │ │ └── impl/ │ │ └── CityServiceImpl.java │ └── resources/ │ ├── application.properties │ └── mapper/ │ └── CityMapper.xml ├── springboot-validation-over-json/ │ ├── pom.xml │ └── src/ │ ├── main/ │ │ └── java/ │ │ └── org/ │ │ └── spring/ │ │ └── springboot/ │ │ ├── Application.java │ │ ├── constant/ │ │ │ └── CityErrorInfoEnum.java │ │ ├── result/ │ │ │ ├── ErrorInfoInterface.java │ │ │ ├── GlobalErrorInfoEnum.java │ │ │ ├── GlobalErrorInfoException.java │ │ │ ├── GlobalErrorInfoHandler.java │ │ │ └── ResultBody.java │ │ └── web/ │ │ ├── City.java │ │ └── ErrorJsonController.java │ └── test/ │ └── java/ │ └── org/ │ └── spring/ │ └── springboot/ │ └── web/ │ └── ErrorJsonControllerTest.java ├── springboot-webflux-1-quickstart/ │ ├── pom.xml │ └── src/ │ └── main/ │ ├── java/ │ │ └── org/ │ │ └── spring/ │ │ └── springboot/ │ │ ├── Application.java │ │ ├── handler/ │ │ │ └── CityHandler.java │ │ └── router/ │ │ └── CityRouter.java │ └── resources/ │ └── application.properties ├── springboot-webflux-10-book-manage-sys/ │ ├── pom.xml │ └── src/ │ └── main/ │ ├── java/ │ │ └── demo/ │ │ └── springboot/ │ │ ├── WebApplication.java │ │ ├── dao/ │ │ │ └── CityRepository.java │ │ ├── domain/ │ │ │ └── City.java │ │ ├── service/ │ │ │ ├── CityService.java │ │ │ └── impl/ │ │ │ └── CityServiceImpl.java │ │ └── web/ │ │ └── CityController.java │ └── resources/ │ ├── application.properties │ ├── static/ │ │ └── css/ │ │ └── default.css │ └── templates/ │ ├── cityForm.html │ └── cityList.html ├── springboot-webflux-2-restful/ │ ├── pom.xml │ └── src/ │ └── main/ │ ├── java/ │ │ └── org/ │ │ └── spring/ │ │ └── springboot/ │ │ ├── Application.java │ │ ├── dao/ │ │ │ └── CityRepository.java │ │ ├── domain/ │ │ │ └── City.java │ │ ├── handler/ │ │ │ └── CityHandler.java │ │ └── webflux/ │ │ └── controller/ │ │ └── CityWebFluxController.java │ └── resources/ │ └── application.properties ├── springboot-webflux-3-mongodb/ │ ├── pom.xml │ └── src/ │ └── main/ │ ├── java/ │ │ └── org/ │ │ └── spring/ │ │ └── springboot/ │ │ ├── Application.java │ │ ├── dao/ │ │ │ └── CityRepository.java │ │ ├── domain/ │ │ │ └── City.java │ │ ├── handler/ │ │ │ └── CityHandler.java │ │ └── webflux/ │ │ └── controller/ │ │ └── CityWebFluxController.java │ └── resources/ │ └── application.properties ├── springboot-webflux-4-thymeleaf/ │ ├── pom.xml │ └── src/ │ └── main/ │ ├── java/ │ │ └── org/ │ │ └── spring/ │ │ └── springboot/ │ │ ├── Application.java │ │ ├── dao/ │ │ │ └── CityRepository.java │ │ ├── domain/ │ │ │ └── City.java │ │ ├── handler/ │ │ │ └── CityHandler.java │ │ └── webflux/ │ │ └── controller/ │ │ └── CityWebFluxController.java │ └── resources/ │ ├── application.properties │ └── templates/ │ ├── cityList.html │ └── hello.html ├── springboot-webflux-5-thymeleaf-mongodb/ │ ├── pom.xml │ └── src/ │ └── main/ │ ├── java/ │ │ └── org/ │ │ └── spring/ │ │ └── springboot/ │ │ ├── Application.java │ │ ├── dao/ │ │ │ └── CityRepository.java │ │ ├── domain/ │ │ │ └── City.java │ │ ├── handler/ │ │ │ └── CityHandler.java │ │ └── webflux/ │ │ └── controller/ │ │ └── CityWebFluxController.java │ └── resources/ │ ├── application.properties │ └── templates/ │ ├── city.html │ └── cityList.html ├── springboot-webflux-6-redis/ │ ├── pom.xml │ └── src/ │ └── main/ │ ├── java/ │ │ └── org/ │ │ └── spring/ │ │ └── springboot/ │ │ ├── Application.java │ │ ├── domain/ │ │ │ └── City.java │ │ └── webflux/ │ │ └── controller/ │ │ ├── CityWebFluxController.java │ │ └── CityWebFluxReactiveController.java │ └── resources/ │ └── application.properties ├── springboot-webflux-7-redis-cache/ │ ├── pom.xml │ └── src/ │ └── main/ │ ├── java/ │ │ └── org/ │ │ └── spring/ │ │ └── springboot/ │ │ ├── Application.java │ │ ├── dao/ │ │ │ └── CityRepository.java │ │ ├── domain/ │ │ │ └── City.java │ │ ├── handler/ │ │ │ └── CityHandler.java │ │ └── webflux/ │ │ └── controller/ │ │ └── CityWebFluxController.java │ └── resources/ │ └── application.properties ├── springboot-webflux-8-websocket/ │ ├── pom.xml │ └── src/ │ ├── main/ │ │ ├── java/ │ │ │ └── org/ │ │ │ └── spring/ │ │ │ └── springboot/ │ │ │ ├── Application.java │ │ │ ├── config/ │ │ │ │ └── WebSocketConfiguration.java │ │ │ └── handler/ │ │ │ └── EchoHandler.java │ │ └── resources/ │ │ ├── application.properties │ │ └── websocket-client.html │ └── test/ │ └── java/ │ └── WSClient.java └── springboot-webflux-9-test/ ├── pom.xml └── src/ ├── main/ │ ├── java/ │ │ └── org/ │ │ └── spring/ │ │ └── springboot/ │ │ ├── Application.java │ │ ├── dao/ │ │ │ └── CityRepository.java │ │ ├── domain/ │ │ │ └── City.java │ │ ├── handler/ │ │ │ └── CityHandler.java │ │ └── webflux/ │ │ └── controller/ │ │ └── CityWebFluxController.java │ └── resources/ │ └── application.properties └── test/ └── java/ └── org/ └── spring/ └── springboot/ └── handler/ └── CityHandlerTest.java