├── .gitignore ├── README.md ├── actuator-demo ├── actuator-different-port-client │ ├── pom.xml │ └── src │ │ └── main │ │ ├── java │ │ └── com │ │ │ └── github │ │ │ └── xjs │ │ │ └── client │ │ │ └── ClientCloudApplication.java │ │ └── resources │ │ └── bootstrap.yml ├── actuator-different-port-starter │ ├── pom.xml │ └── src │ │ └── main │ │ ├── java │ │ └── com │ │ │ └── github │ │ │ └── xjs │ │ │ └── actuator │ │ │ └── ManagementPortApplicationContextInitializer.java │ │ └── resources │ │ └── META-INF │ │ └── spring.factories ├── actuator-starter │ ├── pom.xml │ └── src │ │ └── main │ │ ├── java │ │ └── com │ │ │ └── github │ │ │ └── xjs │ │ │ └── actuator │ │ │ ├── ActuatorConfiguration.java │ │ │ ├── ActuatorProperties.java │ │ │ ├── ActuatorUtil.java │ │ │ ├── ActuatorWebController.java │ │ │ └── ActuatorWebfluxController.java │ │ └── resources │ │ └── META-INF │ │ └── spring.factories ├── actuator-web │ ├── pom.xml │ └── src │ │ └── main │ │ ├── java │ │ └── com │ │ │ └── github │ │ │ └── xjs │ │ │ └── controller │ │ │ └── ServletApplication.java │ │ └── resources │ │ └── application.yml ├── actuator-webflux │ ├── pom.xml │ └── src │ │ └── main │ │ ├── java │ │ └── com │ │ │ └── github │ │ │ └── xjs │ │ │ └── controller │ │ │ └── WebfluxApplication.java │ │ └── resources │ │ └── application.yml └── pom.xml ├── aop-demo ├── pom.xml └── src │ ├── main │ └── java │ │ └── com │ │ └── github │ │ └── xjs │ │ └── aopdemo │ │ ├── AopDemoApplication.java │ │ ├── beantype │ │ ├── Client.java │ │ ├── DemoApp.java │ │ ├── IService.java │ │ ├── Service1.java │ │ ├── Service2.java │ │ ├── ServiceFactory.java │ │ └── beans.xml │ │ ├── demo1 │ │ ├── cglibdemo │ │ │ ├── CostTimeProxy.java │ │ │ ├── DispatcherDemo.java │ │ │ ├── LazyDemo.java │ │ │ ├── ObjenesisDemo.java │ │ │ ├── Service1.java │ │ │ ├── Service2.java │ │ │ ├── Service3.java │ │ │ ├── Service4.java │ │ │ ├── Test1.java │ │ │ ├── Test2.java │ │ │ ├── Test3.java │ │ │ ├── Test3_1.java │ │ │ └── Test4.java │ │ ├── from │ │ └── jdkdemo │ │ │ ├── CostTimeInvocationHandler.java │ │ │ ├── IService.java │ │ │ ├── IServiceTest.java │ │ │ ├── IServiceTest2.java │ │ │ ├── ServiceA.java │ │ │ └── ServiceB.java │ │ ├── demo2 │ │ ├── test1 │ │ │ ├── Test1.java │ │ │ ├── Test2.java │ │ │ ├── Test3.java │ │ │ └── UserService.java │ │ └── test2 │ │ │ ├── FundsService.java │ │ │ ├── Test1Username.java │ │ │ ├── Test2Exception.java │ │ │ └── Test3.java │ │ ├── service │ │ ├── IService.java │ │ ├── Service1.java │ │ └── Service2.java │ │ ├── springdemo │ │ ├── Client.java │ │ ├── DemoAdvice.java │ │ └── DemoApp.java │ │ └── targetwithin │ │ ├── Client.java │ │ ├── DemoAdvice.java │ │ ├── DemoApp.java │ │ └── DemoController.java │ └── test │ └── java │ └── com │ └── github │ └── xjs │ └── aopdemo │ └── SpringBootDemoTest.java ├── async-demo ├── pom.xml └── src │ └── main │ ├── java │ └── com │ │ └── github │ │ └── xjs │ │ └── async │ │ ├── AsyncApp.java │ │ ├── AsyncBean.java │ │ └── AsyncMain.java │ └── resources │ └── application.yml ├── at-target ├── pom.xml └── src │ └── main │ └── java │ └── com │ └── github │ └── xjs │ └── attarget │ ├── AtTargetApplication.java │ ├── aop │ └── DemoAdvice.java │ ├── config │ └── DemoConfig.java │ ├── controller │ └── DemoController.java │ ├── demo2 │ ├── Advice2.java │ ├── Client.java │ ├── Config2.java │ ├── MyAnno.java │ ├── Service2.java │ └── Service3.java │ ├── demo3 │ ├── Advice3.java │ ├── AnnoFather.java │ ├── AnnoSon.java │ ├── Client.java │ ├── Config3.java │ ├── Father.java │ └── Son.java │ └── service │ └── Service1.java ├── bloomfilter ├── .gitignore ├── mvnw ├── mvnw.cmd ├── pom.xml └── src │ └── main │ ├── java │ └── com │ │ └── github │ │ └── xjs │ │ └── bloomfilter │ │ ├── BloomfilterApplication.java │ │ └── redis │ │ ├── RedisConfig.java │ │ ├── RedisProperties.java │ │ └── RedisService.java │ ├── resources │ └── application.properties │ └── test │ └── com │ └── github │ └── xjs │ └── bloomfilter │ ├── guava │ └── GuavaTest.java │ └── redis │ └── BloomFilterTest.java ├── circuitbreaker-demo ├── order-service │ ├── pom.xml │ └── src │ │ └── main │ │ ├── java │ │ └── com │ │ │ └── github │ │ │ └── xjs │ │ │ ├── OrderApplication.java │ │ │ ├── feign │ │ │ ├── FeignConfig.java │ │ │ ├── UserClient.java │ │ │ └── fallback │ │ │ │ └── UserFallbackFactory.java │ │ │ ├── pojo │ │ │ ├── Order.java │ │ │ └── User.java │ │ │ └── web │ │ │ └── OrderController.java │ │ └── resources │ │ └── application.yml ├── pom.xml └── user-service │ ├── pom.xml │ └── src │ └── main │ ├── java │ └── com │ │ └── github │ │ └── xjs │ │ ├── UserApplication.java │ │ ├── pojo │ │ └── User.java │ │ ├── service │ │ └── UserService.java │ │ └── web │ │ └── UserController.java │ └── resources │ └── application.yml ├── condition-demo ├── pom.xml └── src │ └── main │ └── java │ └── com │ └── github │ └── xjs │ └── conditiondemo │ ├── ConditionDemoApplication.java │ ├── demo1 │ ├── Condition1.java │ ├── Config1.java │ ├── Config2.java │ └── Main.java │ ├── demo2 │ ├── Condition1.java │ ├── Config1.java │ └── Main.java │ ├── demo3 │ ├── Env.java │ ├── EnvConfig.java │ ├── EvnCondition.java │ └── Main.java │ ├── demo4 │ ├── Config1.java │ ├── IService.java │ ├── Main.java │ ├── OnMissingBean.java │ ├── OnMissingBeanCondition.java │ ├── Service1.java │ └── Service2.java │ └── demo5 │ ├── Config1.java │ ├── Config2.java │ ├── Main.java │ ├── OnBean.java │ ├── OnBeanCondition.java │ └── Service1.java ├── config-demo ├── config-refresh-demo │ ├── pom.xml │ └── src │ │ └── main │ │ ├── java │ │ └── com │ │ │ └── demo │ │ │ ├── ConfigRefreshDemoApplication.java │ │ │ ├── UserController.java │ │ │ └── UserProperties.java │ │ └── resources │ │ ├── application-dev.yml │ │ ├── application-pro.yml │ │ └── application.yml ├── config-refresh-starter │ ├── pom.xml │ └── src │ │ └── main │ │ ├── java │ │ └── com │ │ │ └── github │ │ │ └── xjs │ │ │ └── config │ │ │ ├── ConfigRefreshAutoConfiguration.java │ │ │ ├── RefreshEvent.java │ │ │ ├── RefreshScope.java │ │ │ └── anno │ │ │ └── RefreshScope.java │ │ └── resources │ │ └── META-INF │ │ └── spring.factories └── pom.xml ├── configuration-demo ├── pom.xml └── src │ └── main │ └── java │ └── com │ └── github │ └── xjs │ └── configdemo │ ├── demo1 │ ├── Client.java │ ├── ConfigDemoApplication.java │ ├── DefaultService.java │ ├── DemoApp.java │ ├── IService.java │ └── ServiceImpl.java │ ├── demo2 │ ├── Client.java │ ├── DemoComponent.java │ ├── DemoConfiguration.java │ ├── Service1.java │ ├── Service2.java │ ├── Service3.java │ ├── Service4.java │ └── Service5.java │ └── demo3 │ ├── Client.java │ ├── DemoBeanFactoryPostProcessor.java │ └── DemoConfiguration.java ├── controller-demo ├── pom.xml └── src │ └── main │ ├── java │ └── com │ │ └── github │ │ └── xjs │ │ └── controller │ │ ├── ControllerApplication.java │ │ ├── servlet │ │ ├── AtController.java │ │ ├── HttpRequestHandlerController.java │ │ ├── InterfaceController.java │ │ └── RouterFunctionConfiguration.java │ │ └── webflux │ │ └── RouterFunctionConfiguration.java │ └── resources │ └── application.yml ├── crosdemo ├── ajaxclient │ ├── pom.xml │ └── src │ │ ├── main │ │ ├── java │ │ │ └── com │ │ │ │ └── github │ │ │ │ └── xjs │ │ │ │ └── ajaxclient │ │ │ │ └── AjaxclientApplication.java │ │ └── resources │ │ │ ├── application.yml │ │ │ └── static │ │ │ ├── index.html │ │ │ └── jquery-3.4.1.js │ │ └── test │ │ └── java │ │ └── com │ │ └── github │ │ └── xjs │ │ └── ajaxclient │ │ └── AjaxclientApplicationTests.java ├── ajaxserver │ ├── pom.xml │ └── src │ │ ├── main │ │ ├── java │ │ │ └── com │ │ │ │ └── github │ │ │ │ └── xjs │ │ │ │ └── ajaxserver │ │ │ │ ├── AjaxserverApplication.java │ │ │ │ ├── advice │ │ │ │ └── JsonpAdvice.java │ │ │ │ ├── controller │ │ │ │ ├── ResultBean.java │ │ │ │ ├── TestController.java │ │ │ │ └── User.java │ │ │ │ └── filter │ │ │ │ └── CorsFilter.java │ │ └── resources │ │ │ └── application.yml │ │ └── test │ │ └── java │ │ └── com │ │ └── github │ │ └── xjs │ │ └── ajaxserver │ │ └── AjaxserverApplicationTests.java └── pom.xml ├── dameng-demo ├── pom.xml └── src │ ├── main │ ├── java │ │ └── com │ │ │ └── github │ │ │ └── xjs │ │ │ └── dameng │ │ │ ├── DaMengApplication.java │ │ │ ├── config │ │ │ ├── DataSourceConfig.java │ │ │ └── HikariDataSource.java │ │ │ ├── domain │ │ │ ├── Department.java │ │ │ └── Employee.java │ │ │ └── mapper │ │ │ ├── DepartmentMapper.java │ │ │ └── EmployeeMapper.java │ └── resources │ │ ├── application.yml │ │ ├── db.sql │ │ └── mapper │ │ ├── DepartmentMapper.xml │ │ └── EmployeeMapper.xml │ └── test │ └── java │ └── com │ └── github │ └── xjs │ └── dameng │ └── DaMengApplicationTest.java ├── easyexcel-upload-demo ├── pom.xml └── src │ └── main │ ├── java │ └── com │ │ └── github │ │ └── xjs │ │ ├── DemoApplication.java │ │ ├── controller │ │ └── UploadController.java │ │ └── pojos │ │ ├── DetailDTO.java │ │ └── User.java │ └── resources │ ├── application.yml │ ├── static │ └── index.html │ ├── 使用模板导出.xlsx │ └── 用户信息.xlsx ├── error ├── pom.xml └── src │ ├── main │ ├── java │ │ └── com │ │ │ └── github │ │ │ └── xjs │ │ │ └── error │ │ │ ├── ErrorApplication.java │ │ │ ├── controller │ │ │ ├── DemoController.java │ │ │ └── MyErrorController.java │ │ │ └── util │ │ │ └── HttpUtil.java │ └── resources │ │ └── application.yml │ └── test │ └── java │ └── com │ └── github │ └── xjs │ └── error │ └── ErrorApplicationTests.java ├── event-demo ├── pom.xml └── src │ └── main │ ├── java │ └── com │ │ └── github │ │ └── xjs │ │ └── eventdemo │ │ ├── AppConfig.java │ │ ├── AsyncMain.java │ │ ├── AsyncUserRegisterListener.java │ │ ├── CouponUserRegisterListener.java │ │ ├── MailUserRegisterListener.java │ │ ├── UserRegisterEvent.java │ │ └── UserRegisterService.java │ └── resources │ └── application.yml ├── feign-compress-demo ├── order-service │ ├── pom.xml │ └── src │ │ └── main │ │ ├── java │ │ └── com │ │ │ └── github │ │ │ └── xjs │ │ │ ├── OrderApplication.java │ │ │ ├── feign │ │ │ └── UserClient.java │ │ │ ├── pojo │ │ │ ├── Order.java │ │ │ └── User.java │ │ │ └── web │ │ │ └── OrderController.java │ │ └── resources │ │ ├── application.yml │ │ └── bootstrap.yml ├── pom.xml └── user-service │ ├── pom.xml │ └── src │ └── main │ ├── java │ └── com │ │ └── github │ │ └── xjs │ │ ├── UserApplication.java │ │ ├── pojo │ │ └── User.java │ │ ├── service │ │ └── UserService.java │ │ └── web │ │ └── UserController.java │ └── resources │ ├── application.yml │ └── bootstrap.yml ├── feign-decoder-demo ├── order-service │ ├── pom.xml │ └── src │ │ └── main │ │ ├── java │ │ └── com │ │ │ └── github │ │ │ └── xjs │ │ │ ├── OrderApplication.java │ │ │ ├── feign │ │ │ ├── FeignConfig.java │ │ │ ├── FeignDecode.java │ │ │ ├── UserClient.java │ │ │ └── UserContext.java │ │ │ ├── pojo │ │ │ ├── Order.java │ │ │ ├── R.java │ │ │ └── User.java │ │ │ └── web │ │ │ └── OrderController.java │ │ └── resources │ │ └── application.yml ├── pom.xml └── user-service │ ├── pom.xml │ └── src │ └── main │ ├── java │ └── com │ │ └── github │ │ └── xjs │ │ ├── UserApplication.java │ │ ├── exception │ │ └── GlobalExceptionHandler.java │ │ ├── pojo │ │ ├── R.java │ │ └── User.java │ │ ├── service │ │ └── UserService.java │ │ └── web │ │ └── UserController.java │ └── resources │ └── application.yml ├── feign-fallback-demo ├── order-service │ ├── pom.xml │ └── src │ │ └── main │ │ ├── java │ │ └── com │ │ │ └── github │ │ │ └── xjs │ │ │ ├── OrderApplication.java │ │ │ ├── feign │ │ │ ├── FeignConfig.java │ │ │ ├── UserClient.java │ │ │ └── fallback │ │ │ │ └── UserFallbackFactory.java │ │ │ ├── pojo │ │ │ ├── Order.java │ │ │ └── User.java │ │ │ └── web │ │ │ └── OrderController.java │ │ └── resources │ │ └── application.yml ├── pom.xml └── user-service │ ├── pom.xml │ └── src │ └── main │ ├── java │ └── com │ │ └── github │ │ └── xjs │ │ ├── UserApplication.java │ │ ├── pojo │ │ └── User.java │ │ ├── service │ │ └── UserService.java │ │ └── web │ │ └── UserController.java │ └── resources │ └── application.yml ├── feign-interceptor-demo ├── order-service │ ├── pom.xml │ └── src │ │ └── main │ │ ├── java │ │ └── com │ │ │ └── github │ │ │ └── xjs │ │ │ ├── OrderApplication.java │ │ │ ├── feign │ │ │ ├── FeignConfig.java │ │ │ ├── FeignRelayUserInterceptor.java │ │ │ ├── UserClient.java │ │ │ └── UserContext.java │ │ │ ├── pojo │ │ │ ├── Order.java │ │ │ └── User.java │ │ │ └── web │ │ │ └── OrderController.java │ │ └── resources │ │ └── application.yml ├── pom.xml └── user-service │ ├── pom.xml │ └── src │ └── main │ ├── java │ └── com │ │ └── github │ │ └── xjs │ │ ├── UserApplication.java │ │ ├── pojo │ │ └── User.java │ │ ├── service │ │ └── UserService.java │ │ └── web │ │ └── UserController.java │ └── resources │ └── application.yml ├── filter-demo ├── pom.xml └── src │ ├── main │ ├── java │ │ └── com │ │ │ └── github │ │ │ └── xjs │ │ │ └── filterdemo │ │ │ ├── FilterdemoApplication.java │ │ │ ├── controller │ │ │ └── DemoController.java │ │ │ └── filter │ │ │ ├── component │ │ │ ├── Filter1.java │ │ │ └── Filter2.java │ │ │ ├── filterregister │ │ │ ├── Filter5.java │ │ │ ├── Filter6.java │ │ │ └── FilterConfig.java │ │ │ └── servletscan │ │ │ ├── Filter3.java │ │ │ └── Filter4.java │ └── resources │ │ └── application.properties │ └── test │ └── java │ └── com │ └── github │ └── xjs │ └── filterdemo │ └── FilterdemoApplicationTests.java ├── gateway-demo ├── gateway-server │ ├── pom.xml │ └── src │ │ └── main │ │ ├── java │ │ └── com │ │ │ └── github │ │ │ └── xjs │ │ │ └── GatewayApplication.java │ │ └── resources │ │ └── application.yml ├── goods-servicde │ ├── pom.xml │ └── src │ │ └── main │ │ ├── java │ │ └── com │ │ │ └── github │ │ │ └── xjs │ │ │ ├── GoodsApplication.java │ │ │ └── web │ │ │ └── GoodsController.java │ │ └── resources │ │ ├── application.yml │ │ └── bootstrap.yml ├── pom.xml └── user-service │ ├── pom.xml │ └── src │ └── main │ ├── java │ └── com │ │ └── github │ │ └── xjs │ │ ├── UserApplication.java │ │ ├── config │ │ └── PatternProperties.java │ │ ├── feign │ │ ├── FeignConfig.java │ │ ├── GoodsClient.java │ │ └── fallback │ │ │ └── GoodsFallbackFactory.java │ │ ├── pojo │ │ └── User.java │ │ ├── service │ │ └── UserService.java │ │ └── web │ │ └── UserController.java │ └── resources │ ├── application.yml │ └── bootstrap.yml ├── gateway-filter-demo ├── gateway │ ├── pom.xml │ └── src │ │ └── main │ │ ├── java │ │ └── com │ │ │ └── github │ │ │ └── xjs │ │ │ └── gateway │ │ │ ├── GatewayApplication.java │ │ │ └── filter │ │ │ └── QueryToHeaderGatewayFilterFactory.java │ │ └── resources │ │ └── application.yml ├── pom.xml └── user-service │ ├── pom.xml │ └── src │ └── main │ ├── java │ └── com │ │ └── github │ │ └── xjs │ │ └── user │ │ ├── UserApplication.java │ │ └── UserController.java │ └── resources │ └── application.yml ├── gateway-filter-order ├── gateway │ ├── pom.xml │ └── src │ │ └── main │ │ ├── java │ │ ├── com │ │ │ └── github │ │ │ │ └── xjs │ │ │ │ └── gateway │ │ │ │ ├── GatewayApplication.java │ │ │ │ └── filter │ │ │ │ ├── GlobalFilter1.java │ │ │ │ └── GlobalFilter2.java │ │ └── org │ │ │ └── springframework │ │ │ └── cloud │ │ │ └── gateway │ │ │ └── filter │ │ │ └── factory │ │ │ └── AddRequestHeaderGatewayFilterFactory.java │ │ └── resources │ │ └── application.yml ├── pom.xml └── user-service │ ├── pom.xml │ └── src │ └── main │ ├── java │ └── com │ │ └── github │ │ └── xjs │ │ └── user │ │ ├── UserApplication.java │ │ └── controller │ │ └── UserController.java │ └── resources │ └── application.yml ├── gateway-knife4j ├── .gitignore ├── doc-service │ ├── pom.xml │ └── src │ │ └── main │ │ ├── java │ │ └── com │ │ │ └── github │ │ │ └── xjs │ │ │ └── DocApplication.java │ │ └── resources │ │ └── application.yml ├── gateway │ ├── pom.xml │ └── src │ │ └── main │ │ ├── java │ │ └── com │ │ │ └── github │ │ │ └── xjs │ │ │ ├── GatewayApplication.java │ │ │ ├── config │ │ │ └── SwaggerResourceConfig.java │ │ │ └── handler │ │ │ └── SwaggerHandler.java │ │ └── resources │ │ └── application.yml ├── order-service │ ├── pom.xml │ └── src │ │ └── main │ │ ├── java │ │ └── com │ │ │ └── github │ │ │ └── xjs │ │ │ ├── OrderApplication.java │ │ │ ├── config │ │ │ └── Swagger2Config.java │ │ │ ├── controller │ │ │ └── OrderController.java │ │ │ ├── domain │ │ │ ├── CommonResult.java │ │ │ └── Order.java │ │ │ └── service │ │ │ ├── OrderService.java │ │ │ └── impl │ │ │ └── OrderServiceImpl.java │ │ └── resources │ │ └── application.yml ├── pom.xml └── user-service │ ├── pom.xml │ └── src │ └── main │ ├── java │ └── com │ │ └── github │ │ └── xjs │ │ ├── UserApplication.java │ │ ├── config │ │ └── Swagger2Config.java │ │ ├── controller │ │ └── UserController.java │ │ ├── domain │ │ ├── CommonResult.java │ │ └── User.java │ │ └── service │ │ ├── UserService.java │ │ └── impl │ │ └── UserServiceImpl.java │ └── resources │ └── application.yml ├── gateway-predicate-demo ├── gateway │ ├── pom.xml │ └── src │ │ └── main │ │ ├── java │ │ └── com │ │ │ └── github │ │ │ └── demo │ │ │ └── gateway │ │ │ ├── GatewayApplication.java │ │ │ └── HourRoutePredicateFactory.java │ │ └── resources │ │ └── application.yml ├── pom.xml └── user-service │ ├── pom.xml │ └── src │ └── main │ ├── java │ └── com │ │ └── github │ │ └── demo │ │ └── user │ │ ├── UserApplication.java │ │ └── UserController.java │ └── resources │ └── application.yml ├── gateway-sentinel-demo ├── gateway │ ├── pom.xml │ └── src │ │ └── main │ │ ├── java │ │ └── com │ │ │ └── github │ │ │ └── xjs │ │ │ └── gateway │ │ │ └── GatewayApplication.java │ │ └── resources │ │ └── application.yml ├── pom.xml └── user-service │ ├── pom.xml │ └── src │ └── main │ ├── java │ └── com │ │ └── github │ │ └── xjs │ │ └── user │ │ ├── UserApplication.java │ │ └── UserController.java │ └── resources │ └── application.yml ├── grpc-demo ├── bidirectional-streaming │ ├── grpc-api │ │ ├── pom.xml │ │ └── src │ │ │ └── main │ │ │ └── proto │ │ │ └── product.proto │ ├── grpc-client │ │ ├── pom.xml │ │ └── src │ │ │ └── main │ │ │ └── java │ │ │ └── com │ │ │ └── github │ │ │ └── xjs │ │ │ └── grpcdemo │ │ │ └── GrpcClient.java │ ├── grpc-server │ │ ├── pom.xml │ │ └── src │ │ │ └── main │ │ │ └── java │ │ │ └── com │ │ │ └── github │ │ │ └── xjs │ │ │ └── grpcdemo │ │ │ ├── ProductInfoServer.java │ │ │ └── service │ │ │ └── ProductInfoImpl.java │ └── pom.xml ├── client-side-streaming │ ├── grpc-api │ │ ├── pom.xml │ │ └── src │ │ │ └── main │ │ │ └── proto │ │ │ └── product.proto │ ├── grpc-client │ │ ├── pom.xml │ │ └── src │ │ │ └── main │ │ │ └── java │ │ │ └── com │ │ │ └── github │ │ │ └── xjs │ │ │ └── grpcdemo │ │ │ └── GrpcClient.java │ ├── grpc-server │ │ ├── pom.xml │ │ └── src │ │ │ └── main │ │ │ └── java │ │ │ └── com │ │ │ └── github │ │ │ └── xjs │ │ │ └── grpcdemo │ │ │ ├── ProductInfoServer.java │ │ │ └── service │ │ │ └── ProductInfoImpl.java │ └── pom.xml ├── interceptor-streaming │ ├── grpc-api │ │ ├── pom.xml │ │ └── src │ │ │ └── main │ │ │ └── proto │ │ │ └── product.proto │ ├── grpc-client │ │ ├── pom.xml │ │ └── src │ │ │ └── main │ │ │ └── java │ │ │ └── com │ │ │ └── github │ │ │ └── xjs │ │ │ └── grpcdemo │ │ │ └── GrpcClient.java │ ├── grpc-server │ │ ├── pom.xml │ │ └── src │ │ │ └── main │ │ │ └── java │ │ │ └── com │ │ │ └── github │ │ │ └── xjs │ │ │ └── grpcdemo │ │ │ ├── ProductInfoServer.java │ │ │ └── service │ │ │ └── ProductInfoImpl.java │ └── pom.xml ├── interceptor-unary │ ├── grpc-api │ │ ├── pom.xml │ │ └── src │ │ │ └── main │ │ │ └── proto │ │ │ └── product.proto │ ├── grpc-client │ │ ├── pom.xml │ │ └── src │ │ │ └── main │ │ │ └── java │ │ │ └── com │ │ │ └── github │ │ │ └── xjs │ │ │ └── grpcdemo │ │ │ └── GrpcClient.java │ ├── grpc-server │ │ ├── pom.xml │ │ └── src │ │ │ └── main │ │ │ └── java │ │ │ └── com │ │ │ └── github │ │ │ └── xjs │ │ │ └── grpcdemo │ │ │ ├── ProductInfoServer.java │ │ │ └── service │ │ │ └── ProductInfoImpl.java │ └── pom.xml ├── server-side-streaming │ ├── grpc-api │ │ ├── pom.xml │ │ └── src │ │ │ └── main │ │ │ └── proto │ │ │ └── product.proto │ ├── grpc-client │ │ ├── pom.xml │ │ └── src │ │ │ └── main │ │ │ └── java │ │ │ └── com │ │ │ └── github │ │ │ └── xjs │ │ │ └── grpcdemo │ │ │ └── GrpcClient.java │ ├── grpc-server │ │ ├── pom.xml │ │ └── src │ │ │ └── main │ │ │ └── java │ │ │ └── com │ │ │ └── github │ │ │ └── xjs │ │ │ └── grpcdemo │ │ │ ├── ProductInfoServer.java │ │ │ └── service │ │ │ └── ProductInfoImpl.java │ └── pom.xml ├── simple │ ├── grpc-api │ │ ├── pom.xml │ │ └── src │ │ │ └── main │ │ │ └── proto │ │ │ └── product.proto │ ├── grpc-client │ │ ├── pom.xml │ │ └── src │ │ │ └── main │ │ │ └── java │ │ │ └── com │ │ │ └── github │ │ │ └── xjs │ │ │ └── grpcdemo │ │ │ └── GrpcClient.java │ ├── grpc-server │ │ ├── pom.xml │ │ └── src │ │ │ └── main │ │ │ └── java │ │ │ └── com │ │ │ └── github │ │ │ └── xjs │ │ │ └── grpcdemo │ │ │ ├── ProductInfoServer.java │ │ │ └── service │ │ │ └── ProductInfoImpl.java │ └── pom.xml ├── spring-boot-chat-room │ ├── grpc-api │ │ ├── pom.xml │ │ └── src │ │ │ └── main │ │ │ └── proto │ │ │ └── chatroom.proto │ ├── grpc-client │ │ ├── pom.xml │ │ └── src │ │ │ └── main │ │ │ └── java │ │ │ └── com │ │ │ └── github │ │ │ └── xjs │ │ │ └── grpcdemo │ │ │ ├── ChatRoomClient1.java │ │ │ └── ChatRoomClient2.java │ ├── grpc-server │ │ ├── pom.xml │ │ └── src │ │ │ └── main │ │ │ ├── java │ │ │ └── com │ │ │ │ └── github │ │ │ │ └── xjs │ │ │ │ └── grpcdemo │ │ │ │ ├── ChatRoomApplication.java │ │ │ │ ├── controller │ │ │ │ └── ChatController.java │ │ │ │ └── service │ │ │ │ └── ChatRoomService.java │ │ │ └── resources │ │ │ └── application.yml │ └── pom.xml └── spring-boot-demo │ ├── grpc-api │ ├── pom.xml │ └── src │ │ └── main │ │ └── proto │ │ └── product.proto │ ├── grpc-client │ ├── pom.xml │ └── src │ │ └── main │ │ ├── java │ │ └── com │ │ │ └── github │ │ │ └── xjs │ │ │ └── grpcdemo │ │ │ ├── GrpcClientApplication.java │ │ │ ├── ProductDTO.java │ │ │ └── controller │ │ │ └── ProductController.java │ │ └── resources │ │ └── application.yml │ ├── grpc-server │ ├── pom.xml │ └── src │ │ └── main │ │ ├── java │ │ └── com │ │ │ └── github │ │ │ └── xjs │ │ │ └── grpcdemo │ │ │ ├── GrpcServerApplication.java │ │ │ └── service │ │ │ └── ProductInfoImpl.java │ │ └── resources │ │ └── application.yml │ └── pom.xml ├── h2-demo ├── pom.xml └── src │ └── main │ ├── java │ └── com │ │ └── github │ │ └── xjs │ │ ├── H2Application.java │ │ └── config │ │ └── H2DataSourceConfig.java │ └── resources │ ├── application.yml │ └── db │ └── schema-h2.sql ├── hystrix-demo ├── hystrix-boot │ ├── pom.xml │ └── src │ │ ├── main │ │ ├── java │ │ │ └── com │ │ │ │ └── github │ │ │ │ └── xjs │ │ │ │ └── hystrix │ │ │ │ └── boot │ │ │ │ ├── HystrixBootApplication.java │ │ │ │ ├── controller │ │ │ │ ├── CircuitBreakerController.java │ │ │ │ ├── DemoController.java │ │ │ │ ├── IsolationController.java │ │ │ │ └── PropagateController.java │ │ │ │ └── service │ │ │ │ ├── IsolateConfig.java │ │ │ │ └── IsolateService.java │ │ └── resources │ │ │ └── application.yml │ │ └── test │ │ └── java │ │ └── com │ │ └── github │ │ └── xjs │ │ └── hystrix │ │ └── boot │ │ └── HystrixBootApplicationTests.java ├── hystrix-demo │ ├── activity-api │ │ ├── pom.xml │ │ └── src │ │ │ └── main │ │ │ ├── java │ │ │ └── com │ │ │ │ └── github │ │ │ │ └── xjs │ │ │ │ └── hystrix │ │ │ │ └── activity │ │ │ │ ├── ActivityApiConfig.java │ │ │ │ ├── constants │ │ │ │ └── Constant.java │ │ │ │ ├── feign │ │ │ │ └── IFeignActivitService.java │ │ │ │ └── service │ │ │ │ ├── ActivityApiService.java │ │ │ │ └── IActivityApiService.java │ │ │ └── resources │ │ │ └── META-INF │ │ │ └── spring.factories │ ├── activity-service │ │ ├── pom.xml │ │ └── src │ │ │ └── main │ │ │ ├── java │ │ │ └── com │ │ │ │ └── github │ │ │ │ └── xjs │ │ │ │ └── hystrix │ │ │ │ └── activity │ │ │ │ ├── ActivityApplication.java │ │ │ │ └── controller │ │ │ │ ├── ActivityController.java │ │ │ │ └── FeignActivityController.java │ │ │ └── resources │ │ │ └── application.yml │ ├── dashboard │ │ ├── pom.xml │ │ └── src │ │ │ └── main │ │ │ ├── java │ │ │ └── com │ │ │ │ └── github │ │ │ │ └── xjs │ │ │ │ └── hystrix │ │ │ │ └── dashboard │ │ │ │ └── DashboardApplication.java │ │ │ └── resources │ │ │ └── application.yml │ ├── pom.xml │ ├── registry │ │ ├── pom.xml │ │ └── src │ │ │ └── main │ │ │ ├── java │ │ │ └── com │ │ │ │ └── github │ │ │ │ └── xjs │ │ │ │ └── hystrix │ │ │ │ └── registry │ │ │ │ └── RegistryApplication.java │ │ │ └── resources │ │ │ └── application.yml │ ├── turbine │ │ ├── pom.xml │ │ └── src │ │ │ └── main │ │ │ ├── java │ │ │ └── com │ │ │ │ └── github │ │ │ │ └── xjs │ │ │ │ └── hystrix │ │ │ │ └── dashboard │ │ │ │ └── TurbineApplication.java │ │ │ └── resources │ │ │ └── application.yml │ └── user-service │ │ ├── pom.xml │ │ ├── readme1.txt │ │ ├── readme2.txt │ │ ├── readme3.txt │ │ ├── readme4.txt │ │ ├── readme5.txt │ │ └── src │ │ └── main │ │ ├── java │ │ └── com │ │ │ └── github │ │ │ └── xjs │ │ │ └── hystrix │ │ │ └── user │ │ │ ├── UserApplication.java │ │ │ ├── controller │ │ │ ├── FeignRegisterController.java │ │ │ └── RegisterController.java │ │ │ ├── service │ │ │ ├── ActivityService.java │ │ │ ├── FeignActivitServiceClient.java │ │ │ ├── FeignUserService.java │ │ │ ├── IFeignActivitServiceFallback.java │ │ │ ├── IFeignActivitServiceFallbackFactory.java │ │ │ └── UserService.java │ │ │ └── vo │ │ │ └── User.java │ │ └── resources │ │ └── application.yml ├── hystrix-javanica │ ├── pom.xml │ └── src │ │ └── main │ │ ├── java │ │ └── com │ │ │ └── github │ │ │ └── xjs │ │ │ └── hystrix │ │ │ ├── Profile.java │ │ │ ├── User.java │ │ │ ├── demo1 │ │ │ ├── AppConfig.java │ │ │ ├── Client.java │ │ │ └── UserService.java │ │ │ ├── demo2 │ │ │ ├── AppConfig.java │ │ │ ├── Client.java │ │ │ └── UserService.java │ │ │ ├── demo3 │ │ │ ├── AppConfig.java │ │ │ ├── Client.java │ │ │ ├── UserService.java │ │ │ └── UserService2.java │ │ │ ├── demo4 │ │ │ ├── AppConfig.java │ │ │ ├── BizException.java │ │ │ ├── Client.java │ │ │ └── UserService.java │ │ │ ├── demo5 │ │ │ ├── AppConfig.java │ │ │ ├── Client.java │ │ │ └── UserService.java │ │ │ ├── demo6 │ │ │ ├── AppConfig.java │ │ │ ├── Client.java │ │ │ └── UserService.java │ │ │ └── demo7 │ │ │ ├── AppConfig.java │ │ │ ├── Client.java │ │ │ └── UserService.java │ │ └── resources │ │ └── readme.txt └── hystrix │ ├── pom.xml │ └── src │ └── main │ ├── java │ └── com │ │ └── github │ │ └── xjs │ │ └── hystrix │ │ ├── demo1 │ │ └── CommandHelloWorld.java │ │ ├── demo2 │ │ └── CommandHelloWorld.java │ │ ├── demo3fallback │ │ ├── CommandHelloErrorPropagation.java │ │ └── CommandHelloFailure.java │ │ ├── demo4cache │ │ └── CommandUsingRequestCache.java │ │ ├── demo5Collapsing │ │ └── CollapsingBatchCommand.java │ │ ├── demo6 │ │ └── CommandWithFallbackViaNetwork.java │ │ └── demo7 │ │ └── CommandFacadeWithPrimarySecondary.java │ └── resources │ └── readme.txt ├── import-demo ├── pom.xml └── src │ ├── main │ └── java │ │ └── com │ │ └── github │ │ └── xjs │ │ └── importdemo │ │ ├── ImportDemoApplication.java │ │ ├── config │ │ ├── DemoConfig.java │ │ ├── DemoImportSelector.java │ │ ├── DemoRegistrar.java │ │ └── DemoScan.java │ │ └── service │ │ ├── Service1.java │ │ ├── Service2.java │ │ ├── Service3.java │ │ └── Service4.java │ └── test │ └── java │ └── com │ └── github │ └── xjs │ └── importdemo │ └── ImportDemoApplicationTests.java ├── ioc-demo ├── Spring IOC.txt ├── pom.xml └── src │ ├── main │ └── java │ │ └── com │ │ └── github │ │ └── xjs │ │ └── iocdemo │ │ ├── IocDemoApplication.java │ │ ├── inject1 │ │ ├── DemoApp.java │ │ ├── IService.java │ │ ├── Main.java │ │ ├── Service1.java │ │ ├── Service2.java │ │ ├── Service3.java │ │ ├── Service4.java │ │ └── Service5.java │ │ ├── inject2 │ │ ├── DemoApp.java │ │ ├── IService.java │ │ ├── Main.java │ │ ├── MyQualifier.java │ │ ├── Service1.java │ │ ├── Service2.java │ │ └── Service3.java │ │ ├── inject3 │ │ ├── DemoApp.java │ │ ├── IService.java │ │ ├── IntegerService.java │ │ ├── Main.java │ │ ├── Service6.java │ │ └── StringService.java │ │ ├── instantiating │ │ ├── DemoApp.java │ │ ├── IService.java │ │ ├── Main.java │ │ ├── Service1.java │ │ ├── Service2.java │ │ ├── ServiceFactory.java │ │ └── beans.xml │ │ ├── lifecycle │ │ ├── DemoApp.java │ │ ├── Main.java │ │ └── Service1.java │ │ ├── methodinjection │ │ ├── coupled │ │ │ ├── Command.java │ │ │ ├── CommandManager.java │ │ │ ├── CoupleApp.java │ │ │ └── Main.java │ │ └── lookupmethod │ │ │ ├── Command.java │ │ │ ├── Command3.java │ │ │ ├── CommandManager.java │ │ │ ├── CommandManager2.java │ │ │ ├── CommandManager3.java │ │ │ ├── Lookup2App.java │ │ │ ├── Lookup3App.java │ │ │ ├── LookupApp.java │ │ │ ├── Main1.java │ │ │ ├── Main2.java │ │ │ ├── Main3.java │ │ │ └── beans.xml │ │ ├── other │ │ └── Service6.java │ │ └── scopedemo │ │ ├── DemoApp.java │ │ ├── Main.java │ │ ├── Service1.java │ │ └── ThreadLocalScope.java │ └── test │ └── java │ └── com │ └── github │ └── xjs │ └── redis │ └── SpringBootDemoTest.java ├── jpa-demo ├── jpa │ ├── pom.xml │ └── src │ │ ├── main │ │ ├── java │ │ │ └── com │ │ │ │ └── github │ │ │ │ └── xjs │ │ │ │ └── entity │ │ │ │ ├── compositepk │ │ │ │ ├── Airline.java │ │ │ │ └── AirlinePK.java │ │ │ │ ├── many2many │ │ │ │ ├── Student.java │ │ │ │ └── Teacher.java │ │ │ │ ├── one2many │ │ │ │ ├── Order.java │ │ │ │ └── OrderItem.java │ │ │ │ ├── one2one │ │ │ │ ├── IDCard.java │ │ │ │ └── People.java │ │ │ │ └── singletable │ │ │ │ ├── Gender.java │ │ │ │ └── Person.java │ │ └── resources │ │ │ └── META-INF │ │ │ └── persistence.xml │ │ └── test │ │ └── java │ │ └── com │ │ └── github │ │ └── xjs │ │ ├── CompositePKTest.java │ │ ├── Many2ManyTest.java │ │ ├── One2ManyTest.java │ │ ├── One2OneTest.java │ │ └── SingleTableTest.java └── spring-data-jpa │ ├── pom.xml │ └── src │ ├── main │ ├── java │ │ └── com │ │ │ └── github │ │ │ └── xjs │ │ │ ├── JpaApplication.java │ │ │ ├── dao │ │ │ ├── BlogDao.java │ │ │ ├── PersonDao.java │ │ │ └── UserDao.java │ │ │ └── entity │ │ │ ├── Blog.java │ │ │ ├── Gender.java │ │ │ ├── Person.java │ │ │ └── User.java │ └── resources │ │ └── application.yml │ └── test │ └── java │ └── com │ └── github │ └── xjs │ └── dao │ ├── PersonDaoTest.java │ └── UserDaoTest.java ├── jsonp-demo ├── pom.xml └── src │ └── main │ ├── java │ └── com │ │ └── github │ │ └── xjs │ │ ├── JsonpApplication.java │ │ ├── config │ │ ├── AppConfig.java │ │ ├── JsonpControllerAdvice.java │ │ └── JsonpMappingJacksonValue.java │ │ └── controller │ │ └── DemoController.java │ └── resources │ └── static │ └── jsonp.html ├── knife4j-demo ├── pom.xml └── src │ └── main │ ├── java │ └── com │ │ └── github │ │ └── xjs │ │ ├── Knife4jApplication.java │ │ ├── config │ │ └── Knife4jConfig.java │ │ └── controller │ │ └── DemoController.java │ └── resources │ ├── application.yml │ └── static │ └── index.html ├── lettuce-prometheus-demo ├── pom.xml └── src │ └── main │ ├── java │ └── com │ │ └── github │ │ └── xjs1919 │ │ ├── DemoApplication.java │ │ ├── DemoController.java │ │ └── LettuceMetricsConfig.java │ └── resources │ └── application.yml ├── logback-demo ├── pom.xml └── src │ └── main │ ├── java │ └── com │ │ └── example │ │ └── demo │ │ ├── DemoApplication.java │ │ ├── WebConfig.java │ │ ├── controller │ │ └── DemoController.java │ │ ├── log │ │ ├── LogbackUserPatternConverter.java │ │ └── UserLogbackLayout.java │ │ └── user │ │ ├── UserHolder.java │ │ └── UserInterceptor.java │ └── resources │ ├── application.yml │ └── logback-spring.xml ├── logstash-demo ├── pom.xml └── src │ └── main │ ├── java │ └── com │ │ └── example │ │ └── demo │ │ ├── DemoApplication.java │ │ └── controller │ │ └── DemoController.java │ └── resources │ ├── application.yml │ ├── logback-spring.xml │ └── logstash-logback.conf ├── mockbatis-demo ├── mockbatis-spring-boot-starter-demo │ ├── pom.xml │ └── src │ │ ├── main │ │ └── java │ │ │ └── com │ │ │ └── test │ │ │ └── demo │ │ │ ├── DemoApplication.java │ │ │ ├── domain │ │ │ └── User.java │ │ │ └── mapper │ │ │ └── UserMapper.java │ │ └── test │ │ └── java │ │ └── com │ │ └── test │ │ └── demo │ │ ├── DemoApplicationTest.java │ │ └── mapper │ │ └── UserMapperTest.java ├── mockbatis-spring-boot-starter │ ├── pom.xml │ └── src │ │ └── main │ │ ├── java │ │ └── com │ │ │ └── github │ │ │ └── xjs │ │ │ └── mockbatis │ │ │ └── config │ │ │ ├── MockMapper.java │ │ │ ├── MockMapperFactoryBean.java │ │ │ ├── MockScan.java │ │ │ ├── MockScannerRegistrar.java │ │ │ ├── MockbatisAutoConfiguration.java │ │ │ └── Select.java │ │ └── resources │ │ └── META-INF │ │ └── spring.factories └── pom.xml ├── mockspringboot ├── pom.xml └── src │ └── main │ └── java │ └── com │ └── github │ └── xjs │ └── attarget │ ├── MockSpringBootApplication.java │ ├── config │ ├── DemoConfig.java │ └── DemoWebApplicationInitializer.java │ └── controller │ └── DemoController.java ├── mvcdemo ├── WebContent │ ├── WEB-INF │ │ └── views │ │ │ └── home.jsp │ └── index.html ├── pom.xml └── src │ └── main │ └── java │ └── com │ └── github │ └── xjs │ └── mvcdemo │ ├── config │ ├── MyWebApplicationInitializer.java │ ├── SpringContextConfig.java │ └── SpringMvcConfig.java │ └── controller │ └── DemoController.java ├── mybatis-from-novice-to-expert ├── mybatis-code-generator │ ├── pom.xml │ └── src │ │ └── main │ │ └── resources │ │ └── generatorConfig.xml ├── mybatis-multi-datasource │ ├── README │ ├── multi-data-source.sql │ ├── pom.xml │ └── src │ │ ├── main │ │ ├── java │ │ │ └── com │ │ │ │ └── xjs1919 │ │ │ │ └── mybatis │ │ │ │ ├── MultiDataSourceApplication.java │ │ │ │ ├── config │ │ │ │ ├── DataSourceProperties.java │ │ │ │ └── MultiDataSourceConfig.java │ │ │ │ ├── controller │ │ │ │ └── DemoController.java │ │ │ │ ├── dao │ │ │ │ ├── ds1 │ │ │ │ │ ├── UserMapper.java │ │ │ │ │ └── UserMapper.xml │ │ │ │ └── ds2 │ │ │ │ │ ├── GoodsMapper.java │ │ │ │ │ └── GoodsMapper.xml │ │ │ │ ├── domain │ │ │ │ ├── Goods.java │ │ │ │ └── User.java │ │ │ │ └── service │ │ │ │ ├── GoodsService.java │ │ │ │ └── UserService.java │ │ └── resources │ │ │ └── application.yml │ │ └── test │ │ └── java │ │ └── com │ │ └── xjs1919 │ │ └── mybatis │ │ └── MultiDataSourceApplicationTests.java ├── mybatis-only │ ├── README.txt │ ├── pom.xml │ └── src │ │ ├── main │ │ ├── java │ │ │ └── com │ │ │ │ └── xjs1919 │ │ │ │ └── mybatis │ │ │ │ ├── entity │ │ │ │ ├── Article.java │ │ │ │ ├── Blog.java │ │ │ │ ├── User.java │ │ │ │ └── chapter_2_6 │ │ │ │ │ ├── DruidDataSourceFactory.java │ │ │ │ │ ├── EnumAble.java │ │ │ │ │ ├── EnumAbleTypeHandler.java │ │ │ │ │ ├── Gender.java │ │ │ │ │ └── User.java │ │ │ │ ├── mapper │ │ │ │ ├── chapter_2_2 │ │ │ │ │ └── UserMapper.java │ │ │ │ ├── chapter_2_3 │ │ │ │ │ ├── ArticleMapper.java │ │ │ │ │ ├── BlogMapper.java │ │ │ │ │ └── UserMapper.java │ │ │ │ ├── chapter_2_4 │ │ │ │ │ └── UserMapper.java │ │ │ │ ├── chapter_2_5 │ │ │ │ │ └── UserMapper.java │ │ │ │ ├── chapter_2_6 │ │ │ │ │ ├── User2Mapper.java │ │ │ │ │ └── User2Mapper.xml │ │ │ │ ├── chapter_2_7 │ │ │ │ │ ├── ForEachInLanguageDriver.java │ │ │ │ │ └── UserMapper.java │ │ │ │ ├── chapter_2_8 │ │ │ │ │ └── UserMapper.java │ │ │ │ ├── chapter_3_1 │ │ │ │ │ └── UserMapper.java │ │ │ │ ├── chapter_3_2 │ │ │ │ │ ├── UserMapper.java │ │ │ │ │ └── UserMapper.xml │ │ │ │ ├── chapter_3_3 │ │ │ │ │ └── UserMapper.java │ │ │ │ └── chapter_3_6 │ │ │ │ │ └── UserMapper.java │ │ │ │ └── plugin │ │ │ │ ├── EnableInjectTenantId.java │ │ │ │ ├── EnableLogSql.java │ │ │ │ ├── LogSqlInterceptor.java │ │ │ │ ├── README.txt │ │ │ │ └── TenantInterceptor.java │ │ └── resources │ │ │ ├── chapter_2_6 │ │ │ ├── db.properties │ │ │ └── mybatis-config.xml │ │ │ ├── chapter_2_7 │ │ │ ├── db.properties │ │ │ └── mybatis-config.xml │ │ │ ├── chapter_3_1 │ │ │ └── mybatis-config.xml │ │ │ ├── chapter_3_2 │ │ │ └── mybatis-config.xml │ │ │ ├── chapter_3_3 │ │ │ └── mybatis-config.xml │ │ │ ├── chapter_3_4 │ │ │ └── mybatis-config.xml │ │ │ ├── chapter_3_5 │ │ │ └── mybatis-config.xml │ │ │ ├── chapter_3_6 │ │ │ └── mybatis-config.xml │ │ │ ├── db.properties │ │ │ ├── init.sql │ │ │ ├── log4j2.xml │ │ │ ├── mapper │ │ │ ├── chapter_2_1 │ │ │ │ ├── UserMapper.xml │ │ │ │ └── mybatis_from_novice_to_expert.sql │ │ │ ├── chapter_2_2 │ │ │ │ ├── UserMapper.xml │ │ │ │ ├── UserMapper2.xml │ │ │ │ └── mybatis_from_novice_to_expert.sql │ │ │ ├── chapter_2_3 │ │ │ │ ├── ArticleMapper.xml │ │ │ │ ├── BlogMapper.xml │ │ │ │ ├── ER图.drawio │ │ │ │ ├── ER图.jpg │ │ │ │ ├── UserMapper.xml │ │ │ │ ├── doc │ │ │ │ │ ├── ER图.drawio │ │ │ │ │ ├── ER图.jpg │ │ │ │ │ ├── mybatis_from_novice_to_expert.sql │ │ │ │ │ ├── 类图.drawio │ │ │ │ │ └── 类图.jpg │ │ │ │ ├── mybatis_from_novice_to_expert.sql │ │ │ │ ├── 类图.drawio │ │ │ │ ├── 类图.jpg │ │ │ │ └── 类图.puml │ │ │ ├── chapter_2_4 │ │ │ │ └── UserMapper.xml │ │ │ ├── chapter_2_5 │ │ │ │ └── UserMapper.xml │ │ │ ├── chapter_2_6 │ │ │ │ └── UserMapper.xml │ │ │ ├── chapter_3_1 │ │ │ │ └── UserMapper.xml │ │ │ ├── chapter_3_2 │ │ │ │ └── UserMapper.xml │ │ │ ├── chapter_3_3 │ │ │ │ └── UserMapper.xml │ │ │ ├── chapter_3_4 │ │ │ │ └── UserMapper.xml │ │ │ ├── chapter_3_5 │ │ │ │ ├── UserMapper.xml │ │ │ │ └── XxxMapper.xml │ │ │ └── chapter_3_6 │ │ │ │ └── UserMapper.xml │ │ │ └── mybatis-config.xml │ │ └── test │ │ └── java │ │ └── com │ │ └── xjs1919 │ │ └── mybatis │ │ ├── chapter_2_1 │ │ ├── JdbcTest.java │ │ └── MybatisTest.java │ │ ├── chapter_2_2 │ │ └── MybatisTest.java │ │ ├── chapter_2_3 │ │ └── MybatisTest.java │ │ ├── chapter_2_4 │ │ └── MybatisTest.java │ │ ├── chapter_2_5 │ │ └── MybatisTest.java │ │ ├── chapter_2_6 │ │ └── MybatisTest.java │ │ ├── chapter_2_7 │ │ └── MybatisTest.java │ │ ├── chapter_2_8 │ │ └── MybatisTest.java │ │ ├── chapter_3_1 │ │ └── MybatisTest.java │ │ ├── chapter_3_2 │ │ └── MybatisTest.java │ │ ├── chapter_3_3 │ │ ├── Mapper动态代理.puml │ │ └── MybatisTest.java │ │ ├── chapter_3_4 │ │ ├── MybatisTest.java │ │ └── Select执行流程.puml │ │ ├── chapter_3_5 │ │ ├── MybatisTest.java │ │ ├── 一级缓存序列图.puml │ │ ├── 一级缓存类图.puml │ │ └── 二级缓存.puml │ │ └── chapter_3_6 │ │ └── MybatisTest.java ├── mybatis-shard-datasource-v1 │ ├── README.txt │ ├── pom.xml │ └── src │ │ └── main │ │ ├── java │ │ └── com │ │ │ └── xjs1919 │ │ │ └── mybatis │ │ │ ├── ShardDataSourceApplication.java │ │ │ ├── config │ │ │ └── AppConfig.java │ │ │ ├── controller │ │ │ └── EmployeeController.java │ │ │ ├── dao │ │ │ ├── EmployeeMapper.java │ │ │ └── EmployeeMapper.xml │ │ │ ├── domain │ │ │ ├── BaseEntity.java │ │ │ └── Employee.java │ │ │ ├── service │ │ │ └── EmployeeService.java │ │ │ └── shard │ │ │ ├── DataSourceConfig.java │ │ │ ├── DataSourceEnum.java │ │ │ ├── DataSourceProperties.java │ │ │ ├── DynamicDataSource.java │ │ │ ├── TenantFilter.java │ │ │ └── TenantHolder.java │ │ └── resources │ │ └── application.yml ├── mybatis-shard-datasource-v2 │ ├── README.txt │ ├── pom.xml │ └── src │ │ └── main │ │ ├── java │ │ └── com │ │ │ └── xjs1919 │ │ │ └── mybatis │ │ │ ├── ShardDataSourceApplication.java │ │ │ ├── controller │ │ │ └── EmployeeController.java │ │ │ ├── dao │ │ │ ├── EmployeeMapper.java │ │ │ └── EmployeeMapper.xml │ │ │ ├── domain │ │ │ ├── BaseEntity.java │ │ │ └── Employee.java │ │ │ └── service │ │ │ └── EmployeeService.java │ │ └── resources │ │ └── application.yml ├── mybatis-shard-starter │ ├── pom.xml │ └── src │ │ └── main │ │ ├── java │ │ └── com │ │ │ └── xjs1919 │ │ │ └── mybatis │ │ │ ├── ShardConfiguration.java │ │ │ ├── config │ │ │ └── AppConfig.java │ │ │ └── shard │ │ │ ├── DataSourceConfig.java │ │ │ ├── DataSourceEnum.java │ │ │ ├── DataSourceProperties.java │ │ │ ├── DynamicDataSource.java │ │ │ ├── TenantFilter.java │ │ │ └── TenantHolder.java │ │ └── resources │ │ └── META-INF │ │ └── spring.factories ├── mybatis-springboot │ ├── pom.xml │ └── src │ │ └── main │ │ ├── java │ │ └── com │ │ │ └── xjs1919 │ │ │ └── mybatis │ │ │ ├── MybatisApplication.java │ │ │ ├── config │ │ │ └── MybatisConfig.java │ │ │ ├── controller │ │ │ ├── DemoController.java │ │ │ └── UserController.java │ │ │ ├── dao │ │ │ ├── UserMapper.java │ │ │ └── UserMapper.xml │ │ │ ├── domain │ │ │ └── User.java │ │ │ └── service │ │ │ └── UserService.java │ │ └── resources │ │ └── application.yml ├── mybatis-springmvc │ ├── README.txt │ ├── pom.xml │ └── src │ │ ├── main │ │ ├── java │ │ │ └── com │ │ │ │ └── xjs1919 │ │ │ │ └── mybatis │ │ │ │ ├── MyWebApplicationInitializer.java │ │ │ │ ├── SpringContextConfig.java │ │ │ │ ├── SpringMvcConfig.java │ │ │ │ ├── config │ │ │ │ ├── DataSourceConfig.java │ │ │ │ └── MyBatisConfig.java │ │ │ │ ├── controller │ │ │ │ ├── DemoController.java │ │ │ │ └── UserController.java │ │ │ │ ├── dao │ │ │ │ └── UserMapper.java │ │ │ │ ├── domain │ │ │ │ └── User.java │ │ │ │ └── service │ │ │ │ └── UserService.java │ │ └── resources │ │ │ ├── Mapper扫描流程.puml │ │ │ ├── Mapper注入流程.puml │ │ │ ├── SqlSessionTemplate动态代理.puml │ │ │ ├── TransactionFactory获取连接.puml │ │ │ ├── db.properties │ │ │ ├── log4j2.xml │ │ │ └── mapper │ │ │ └── UserMapper.xml │ │ └── test │ │ └── java │ │ └── com │ │ └── xjs1919 │ │ └── mybatis │ │ └── UserServiceTest.java └── pom.xml ├── mybatis-param ├── pom.xml └── src │ ├── main │ ├── java │ │ └── com │ │ │ └── github │ │ │ └── xjs │ │ │ └── mybatisparam │ │ │ ├── MybatisParamApplication.java │ │ │ ├── entity │ │ │ └── Dept.java │ │ │ └── mapper │ │ │ └── DeptMapper.java │ └── resources │ │ ├── application.yml │ │ └── data.sql │ └── test │ └── java │ └── com │ └── github │ └── xjs │ └── mybatisparam │ ├── MybatisParamApplicationTests.java │ └── mapper │ └── DeptMapperTest.java ├── openfeign ├── feign-boot │ ├── feign-api │ │ ├── pom.xml │ │ └── src │ │ │ └── main │ │ │ └── java │ │ │ └── com │ │ │ └── github │ │ │ └── xjs │ │ │ └── openfeign │ │ │ └── boot │ │ │ └── api │ │ │ ├── DemoApi.java │ │ │ ├── HystrixApi.java │ │ │ ├── User.java │ │ │ └── UserApi.java │ ├── feign-client │ │ ├── pom.xml │ │ └── src │ │ │ ├── main │ │ │ ├── java │ │ │ │ └── com │ │ │ │ │ └── github │ │ │ │ │ └── xjs │ │ │ │ │ └── openfeign │ │ │ │ │ └── boot │ │ │ │ │ └── client │ │ │ │ │ ├── FeignClientApplication.java │ │ │ │ │ └── controller │ │ │ │ │ ├── ClientDemoController.java │ │ │ │ │ ├── ServerDemoFeignClient.java │ │ │ │ │ ├── ServerDemoFeignClient2.java │ │ │ │ │ ├── ServerUserFeignClient.java │ │ │ │ │ └── hystrix │ │ │ │ │ ├── ClientHystrixController.java │ │ │ │ │ ├── PrototypeConfiguration.java │ │ │ │ │ ├── ServerHystrixFeignClient.java │ │ │ │ │ ├── ServerHystrixFeignClientFallback.java │ │ │ │ │ ├── ServerHystrixFeignClientFallbackFactory.java │ │ │ │ │ ├── ServerHystrixPrototypeClient.java │ │ │ │ │ ├── ServerHystrixPrototypeClientFallback.java │ │ │ │ │ ├── error │ │ │ │ │ ├── ErrorClient.java │ │ │ │ │ ├── ErrorClientFactory.java │ │ │ │ │ ├── ErrorConfig.java │ │ │ │ │ └── ErrorController.java │ │ │ │ │ └── isolate │ │ │ │ │ ├── ClientIsolateController.java │ │ │ │ │ ├── InterceptorConfigure.java │ │ │ │ │ ├── IsolateConfig.java │ │ │ │ │ └── ServerIsolateClient.java │ │ │ └── resources │ │ │ │ └── application.yml │ │ │ └── test │ │ │ └── java │ │ │ └── com │ │ │ └── github │ │ │ └── xjs │ │ │ └── openfeign │ │ │ └── boot │ │ │ └── server │ │ │ └── FeignBootApplicationTests.java │ ├── feign-server │ │ ├── pom.xml │ │ └── src │ │ │ └── main │ │ │ ├── java │ │ │ └── com │ │ │ │ └── github │ │ │ │ └── xjs │ │ │ │ └── openfeign │ │ │ │ └── boot │ │ │ │ └── server │ │ │ │ ├── FeignServerApplication.java │ │ │ │ └── controller │ │ │ │ ├── ServerDemoController.java │ │ │ │ ├── ServerDemoController2.java │ │ │ │ ├── ServerHystrixController.java │ │ │ │ └── ServerUserController.java │ │ │ └── resources │ │ │ └── application.properties │ ├── pom.xml │ └── readme.txt └── feign │ ├── pom.xml │ ├── readme.txt │ └── src │ └── main │ └── java │ └── com │ └── github │ └── xjs │ └── openfeign │ ├── OpenFeignApplication.java │ ├── controller │ ├── AsyncController.java │ ├── DemoController.java │ ├── EncoderController.java │ ├── ErrorController.java │ ├── ExtendsController.java │ ├── HystrixController.java │ └── ItcptController.java │ ├── demo1 │ ├── Client.java │ ├── Demo.java │ └── User.java │ ├── demo2encoder │ ├── Client.java │ ├── Encoder.java │ └── User.java │ ├── demo3interceptor │ ├── Client.java │ ├── Itcpt.java │ ├── TokenInterceptor.java │ └── User.java │ ├── demo4extend │ ├── BaseApi.java │ ├── Client.java │ ├── User.java │ └── UserApi.java │ ├── demo5errordecoder │ ├── BizException.java │ ├── Client.java │ ├── Demo.java │ └── User.java │ ├── demo6async │ ├── Client.java │ ├── Demo.java │ └── User.java │ └── demo7hystrix │ ├── BizException.java │ ├── Client.java │ ├── Client2.java │ ├── Client3.java │ ├── Demo.java │ └── User.java ├── order_auto_confirm ├── .classpath ├── .gitignore ├── .project ├── .settings │ ├── org.eclipse.core.resources.prefs │ ├── org.eclipse.jdt.core.prefs │ └── org.eclipse.m2e.core.prefs ├── pom.xml └── src │ └── main │ ├── java │ └── com │ │ └── github │ │ └── xjs │ │ └── order_auto_confirm │ │ ├── MainApplication.java │ │ ├── controller │ │ └── OrderController.java │ │ ├── delay │ │ ├── BaseDelayed.java │ │ ├── DelayedService.java │ │ └── OnDelayedListener.java │ │ ├── entity │ │ └── OrderEntity.java │ │ ├── service │ │ ├── DelayedOrder.java │ │ ├── OrderService.java │ │ ├── RedisConfig.java │ │ └── RedisService.java │ │ └── util │ │ └── ThreadPoolUtil.java │ └── resources │ └── application.properties ├── profile-demo ├── pom.xml └── src │ ├── main │ ├── java │ │ └── com │ │ │ └── github │ │ │ └── xjs │ │ │ └── profiledemo │ │ │ ├── MyProperties.java │ │ │ ├── ProfileController.java │ │ │ └── ProfileDemoApplication.java │ └── resources │ │ ├── application-dev.yml │ │ ├── application-pro.yml │ │ ├── application-test.yml │ │ └── application.yml │ └── test │ └── java │ └── com │ └── github │ └── xjs │ └── profiledemo │ └── ProfileDemoApplicationTests.java ├── properties-demo ├── pom.xml └── src │ ├── main │ ├── java │ │ └── com │ │ │ └── github │ │ │ └── xjs │ │ │ └── CityCodeUtils.java │ └── resources │ │ ├── citycodes.properties │ │ └── citycodes2.properties │ └── test │ └── java │ └── com │ └── github │ └── xjs │ └── PropertiesTest.java ├── protobuff-demo ├── pom.xml └── src │ ├── main │ ├── java │ │ └── com │ │ │ └── github │ │ │ └── xjs │ │ │ └── protobuffdemo │ │ │ ├── ProtobuffDemoApplication.java │ │ │ ├── bean │ │ │ └── Person.java │ │ │ ├── nano │ │ │ └── PersonProto.java │ │ │ └── util │ │ │ └── ProtobuffUtil.java │ ├── proto │ │ └── Person.proto │ └── resources │ │ └── application.properties │ └── test │ └── java │ └── com │ └── github │ └── xjs │ └── protobuffdemo │ ├── PersonTest.java │ └── ProtobuffDemoApplicationTests.java ├── ribbon-boot ├── pom.xml └── src │ ├── main │ ├── java │ │ └── com │ │ │ └── github │ │ │ └── xjs │ │ │ └── ribbonboot │ │ │ ├── RibbonBootApplication.java │ │ │ └── controller │ │ │ ├── FeignController.java │ │ │ ├── FeignUserClient.java │ │ │ ├── LoadBalancerClientController.java │ │ │ ├── RestTemplateController.java │ │ │ └── UserController.java │ └── resources │ │ └── application.yml │ └── test │ └── java │ └── com │ └── github │ └── xjs │ └── ribbonboot │ └── RibbonBootApplicationTests.java ├── schedule-demo ├── pom.xml └── src │ └── main │ ├── java │ └── com │ │ └── github │ │ └── xjs │ │ └── schedule │ │ ├── ScheduleApp.java │ │ ├── ScheduleBean.java │ │ └── ScheduleMain.java │ └── resources │ └── application.yml ├── simple-apollo ├── pom.xml ├── simple-apollo-client │ ├── pom.xml │ └── src │ │ └── main │ │ └── java │ │ └── com │ │ └── github │ │ └── xjs │ │ └── simple │ │ └── apollo │ │ ├── ApolloConfigRegistrar.java │ │ ├── BeanRegistrationUtil.java │ │ ├── EnableApolloConfig.java │ │ ├── config │ │ ├── ConfigChange.java │ │ ├── ConfigChangeEvent.java │ │ ├── ConfigChangeListener.java │ │ ├── ConfigPropertySource.java │ │ ├── DefaultConfig.java │ │ └── PropertySourcesProcessor.java │ │ ├── repository │ │ ├── ApolloConfig.java │ │ ├── RemoteConfigRepository.java │ │ └── RepositoryChangeListener.java │ │ ├── spring │ │ ├── SpringValue.java │ │ ├── SpringValueProcessor.java │ │ └── SpringValueRegistry.java │ │ └── util │ │ ├── DefaultApplicationProvider.java │ │ ├── HttpRequest.java │ │ ├── HttpResponse.java │ │ ├── HttpUtil.java │ │ ├── PlaceholderHelper.java │ │ └── PropertyChangeType.java ├── simple-apollo-demo │ ├── pom.xml │ └── src │ │ └── main │ │ ├── java │ │ └── com │ │ │ └── github │ │ │ └── xjs │ │ │ ├── ApolloApplication.java │ │ │ └── controller │ │ │ ├── DemoController.java │ │ │ └── DemoProperties.java │ │ └── resources │ │ ├── META-INF │ │ └── app.properties │ │ └── application.yml └── simple-apollo-server │ ├── pom.xml │ └── src │ └── main │ ├── java │ └── com │ │ └── github │ │ └── xjs │ │ ├── ApolloServerApplication.java │ │ └── controller │ │ ├── ApolloConfig.java │ │ └── ConfigController.java │ └── resources │ └── application.yml ├── spi-demo ├── jdk │ ├── pom.xml │ └── src │ │ └── main │ │ ├── java │ │ └── com │ │ │ └── github │ │ │ └── xjs │ │ │ └── spi │ │ │ └── sql │ │ │ ├── Connection.java │ │ │ ├── DriverManager.java │ │ │ └── JdbcDriver.java │ │ └── resources │ │ └── application.yml ├── mysql │ ├── pom.xml │ └── src │ │ └── main │ │ ├── java │ │ └── com │ │ │ └── github │ │ │ └── xjs │ │ │ └── spi │ │ │ └── mysql │ │ │ └── MySQLDriver.java │ │ └── resources │ │ ├── META-INF │ │ └── services │ │ │ └── com.github.xjs.spi.sql.JdbcDriver │ │ └── application.yml ├── pom.xml └── userapp │ ├── pom.xml │ └── src │ └── main │ ├── java │ └── com │ │ └── github │ │ └── xjs │ │ └── demo │ │ ├── ClassLoaderTest.java │ │ └── UserMain.java │ └── resources │ └── application.yml ├── spring-bean-lifecycle ├── pom.xml └── src │ └── main │ ├── java │ └── com │ │ └── github │ │ └── xjs │ │ ├── BeanLifecycleTest.java │ │ └── bean │ │ └── lifecycle │ │ ├── InjectedService.java │ │ ├── MyBeanFactoryPostProcessor.java │ │ ├── MyBeanPostProcessor.java │ │ └── UserService.java │ └── resources │ ├── application.yml │ └── com │ └── github │ └── xjs │ └── bean │ └── lifecycle │ └── beans.xml ├── spring-data-jpa-demo ├── pom.xml └── src │ ├── main │ └── java │ │ └── com │ │ └── example │ │ └── demo │ │ ├── JpaConfiguration.java │ │ ├── MockJpaConfiguration.java │ │ ├── dao │ │ └── CustomerRepository.java │ │ ├── entity │ │ └── Customer.java │ │ └── mock │ │ ├── MockRepository.java │ │ ├── RepositoryBeanDefinitionPostProcessor.java │ │ ├── RepositoryFactoryBean.java │ │ ├── RepositoryProxy.java │ │ └── RepositoryScanner.java │ └── test │ └── java │ └── com │ └── example │ └── demo │ ├── JpaConfigurationTest.java │ └── MockJpaConfigurationTest.java ├── springboot-config-demo ├── pom.xml └── src │ └── main │ ├── java │ └── com │ │ └── github │ │ └── xjs │ │ ├── ConfigApplication.java │ │ ├── config │ │ ├── CustomConfigurationProperties.java │ │ ├── CustomPropertySource.java │ │ └── CustomYmlConfig.java │ │ └── controller │ │ └── DemoController.java │ └── resources │ ├── application.yml │ ├── custom.properties │ └── custom.yml ├── springboot-jsp-demo ├── pom.xml └── src │ └── main │ ├── java │ └── com │ │ └── github │ │ └── xjs │ │ ├── JspApplication.java │ │ └── controller │ │ └── DemoController.java │ ├── resources │ └── application.yml │ └── webapp │ └── WEB-INF │ ├── pages │ └── index.jsp │ └── web.xml ├── springboot-kafka-avro ├── pom.xml └── src │ └── main │ ├── avro │ └── User.avsc │ ├── java │ └── com │ │ └── github │ │ └── xjs │ │ ├── KafkaSchemaApplication.java │ │ ├── consumer │ │ └── Consumer.java │ │ ├── controller │ │ └── DemoController.java │ │ ├── producer │ │ └── Producer.java │ │ └── protocol │ │ └── UserRecord.java │ └── resources │ └── application.yml ├── springboot-webservice ├── pom.xml └── src │ ├── main │ ├── java │ │ └── com │ │ │ └── github │ │ │ └── xjs │ │ │ ├── WebServiceApplication.java │ │ │ ├── config │ │ │ └── WebServiceConfig.java │ │ │ ├── dto │ │ │ └── UserDTO.java │ │ │ └── service │ │ │ ├── UserService.java │ │ │ └── impl │ │ │ └── UserServiceImpl.java │ └── resources │ │ └── application.yml │ └── test │ └── java │ └── com │ └── github │ └── xjs │ └── service │ └── UserServiceTest.java ├── springbootdemo ├── pom.xml └── src │ └── main │ ├── java │ └── com │ │ └── github │ │ └── xjs │ │ └── sbdemo │ │ ├── MainApplication.java │ │ ├── controller │ │ ├── DBController.java │ │ └── DemoController.java │ │ ├── dao │ │ ├── Employee.java │ │ ├── EmployeeDao.java │ │ ├── EmployeeDao.xml │ │ ├── EnumHandler.java │ │ ├── EnumSqlSessionFactory.java │ │ └── EnumSqlSessionFactoryConfig.java │ │ ├── dto │ │ └── DayDto.java │ │ └── enums │ │ ├── BaseEnum.java │ │ ├── EnumAble.java │ │ ├── EnumComponentScan.java │ │ ├── EnumConverterFactory.java │ │ ├── EnumFactory.java │ │ ├── EnumObjectMapperConfig.java │ │ ├── EnumRegistrar.java │ │ ├── EnumScanConfig.java │ │ ├── Gender.java │ │ ├── MvcConfig.java │ │ └── WeekDay.java │ └── resources │ └── application.properties ├── springmvcdemo ├── pom.xml └── src │ └── main │ ├── java │ └── com │ │ └── github │ │ └── xjs │ │ └── spdemo │ │ ├── controller │ │ ├── DBController.java │ │ └── DemoController.java │ │ ├── dao │ │ ├── Employee.java │ │ ├── EmployeeDao.java │ │ ├── EmployeeDao.xml │ │ ├── EnumHandler.java │ │ └── EnumSqlSessionFactory.java │ │ ├── dto │ │ └── DayDto.java │ │ └── enums │ │ ├── BaseEnum.java │ │ ├── EnumAble.java │ │ ├── EnumComponentScan.java │ │ ├── EnumConverterFactory.java │ │ ├── EnumFactory.java │ │ ├── EnumObjectMapper.java │ │ ├── EnumRegistrar.java │ │ ├── EnumScanConfig.java │ │ ├── Gender.java │ │ └── WeekDay.java │ ├── resources │ ├── conf.properties │ ├── log4j.properties │ ├── mybatis-config.xml │ ├── spring-context-jdbc.xml │ ├── spring-context.xml │ └── spring-mvc.xml │ └── webapp │ ├── WEB-INF │ └── web.xml │ └── index.html ├── sse-demo ├── pom.xml └── src │ └── main │ ├── java │ └── com │ │ └── github │ │ └── xjs │ │ └── sbdemo │ │ ├── SseApplication.java │ │ └── controller │ │ └── SseController.java │ └── resources │ ├── application.properties │ └── static │ └── index.html ├── sso-static ├── hosts ├── nginx.conf ├── pom.xml ├── sso-site1 │ ├── pom.xml │ └── src │ │ └── main │ │ ├── java │ │ └── com │ │ │ └── github │ │ │ └── xjs │ │ │ └── sso │ │ │ └── site1 │ │ │ ├── Site1Application.java │ │ │ ├── controller │ │ │ └── Site1Controller.java │ │ │ └── vo │ │ │ └── ResultVo.java │ │ └── resources │ │ ├── application.properties │ │ └── static │ │ ├── index.html │ │ ├── js │ │ └── jquery-3.4.1.min.js │ │ ├── main.html │ │ └── proxy.html ├── sso-site2 │ ├── pom.xml │ └── src │ │ └── main │ │ ├── java │ │ └── com │ │ │ └── github │ │ │ └── xjs │ │ │ └── sso │ │ │ └── site2 │ │ │ ├── Site2Application.java │ │ │ ├── controller │ │ │ └── Site2Controller.java │ │ │ └── vo │ │ │ └── ResultVo.java │ │ └── resources │ │ ├── application.properties │ │ └── static │ │ ├── index.html │ │ ├── js │ │ └── jquery-3.4.1.min.js │ │ ├── main.html │ │ └── proxy.html ├── sso-user-center │ ├── pom.xml │ └── src │ │ └── main │ │ ├── java │ │ └── com │ │ │ └── github │ │ │ └── xjs │ │ │ └── sso │ │ │ └── user_center │ │ │ ├── UserCenterApplication.java │ │ │ ├── controller │ │ │ └── UserCenterController.java │ │ │ └── dto │ │ │ └── LoginUser.java │ │ └── resources │ │ ├── application.properties │ │ ├── static │ │ ├── index.html │ │ └── jquery.min.js │ │ └── templates │ │ ├── login.htm │ │ └── proxy.htm └── sso.puml ├── sso ├── hosts ├── nginx.conf ├── pom.xml ├── sso-site1 │ ├── pom.xml │ └── src │ │ └── main │ │ ├── java │ │ └── com │ │ │ └── github │ │ │ └── xjs │ │ │ └── sso │ │ │ └── site1 │ │ │ ├── MainApplication.java │ │ │ └── controller │ │ │ └── MainController.java │ │ └── resources │ │ ├── application.properties │ │ ├── static │ │ └── index.html │ │ └── templates │ │ └── main.htm ├── sso-site2 │ ├── pom.xml │ └── src │ │ └── main │ │ ├── java │ │ └── com │ │ │ └── github │ │ │ └── xjs │ │ │ └── sso │ │ │ └── site2 │ │ │ ├── MainApplication.java │ │ │ └── controller │ │ │ └── MainController.java │ │ └── resources │ │ ├── application.properties │ │ ├── static │ │ └── index.html │ │ └── templates │ │ └── main.htm └── sso-user-center │ ├── pom.xml │ └── src │ └── main │ ├── java │ └── com │ │ └── github │ │ └── xjs │ │ └── sso │ │ └── user_center │ │ ├── MainApplication.java │ │ ├── controller │ │ └── UserController.java │ │ └── dto │ │ └── LoginUser.java │ └── resources │ ├── application.properties │ ├── static │ └── jquery.min.js │ └── templates │ └── login.htm ├── trace-id-demo ├── common-service │ ├── pom.xml │ └── src │ │ └── main │ │ ├── java │ │ └── com │ │ │ └── github │ │ │ └── xjs │ │ │ ├── config │ │ │ ├── FeignConfig.java │ │ │ ├── HystrixConfig.java │ │ │ ├── MvcConfig.java │ │ │ ├── RestConfig.java │ │ │ └── ThreadPoolConfig.java │ │ │ └── util │ │ │ ├── TraceIdCallable.java │ │ │ └── TraceIdRunnable.java │ │ └── resources │ │ └── META-INF │ │ └── spring.factories ├── common │ ├── pom.xml │ └── src │ │ └── main │ │ └── java │ │ └── com │ │ └── github │ │ └── xjs │ │ └── Constants.java ├── gateway-server │ ├── pom.xml │ └── src │ │ └── main │ │ ├── java │ │ └── com │ │ │ └── github │ │ │ └── xjs │ │ │ ├── GatewayApplication.java │ │ │ └── filter │ │ │ └── TraceIdRelayFilter.java │ │ └── resources │ │ └── application.yml ├── order-service │ ├── pom.xml │ └── src │ │ └── main │ │ ├── java │ │ └── com │ │ │ └── github │ │ │ └── xjs │ │ │ ├── OrderApplication.java │ │ │ ├── feign │ │ │ ├── FeignConfig.java │ │ │ ├── UserClient.java │ │ │ └── fallback │ │ │ │ └── UserClientFallbackFactory.java │ │ │ ├── pojo │ │ │ ├── Order.java │ │ │ └── User.java │ │ │ ├── service │ │ │ └── OrderService.java │ │ │ └── web │ │ │ └── OrderController.java │ │ └── resources │ │ ├── application.yml │ │ └── logback.xml ├── pom.xml └── user-service │ ├── pom.xml │ └── src │ └── main │ ├── java │ └── com │ │ └── github │ │ └── xjs │ │ ├── UserApplication.java │ │ ├── pojo │ │ └── User.java │ │ ├── service │ │ └── UserService.java │ │ └── web │ │ └── UserController.java │ └── resources │ ├── application.yml │ └── logback.xml ├── transaction-demo ├── employees.db ├── pom.xml └── src │ └── main │ ├── java │ └── com │ │ └── github │ │ └── xjs │ │ └── sbdemo │ │ ├── MainApplication.java │ │ ├── controller │ │ └── UserController.java │ │ ├── entity │ │ └── User.java │ │ ├── event │ │ └── UserRegisterEvent.java │ │ ├── mapper │ │ └── UserMapper.java │ │ └── service │ │ ├── EmailService.java │ │ └── UserService.java │ └── resources │ ├── application.properties │ └── mapper │ └── UserMapper.xml ├── upload-starter-demo ├── pom.xml ├── upload-starter-client │ ├── pom.xml │ └── src │ │ ├── main │ │ ├── java │ │ │ └── com │ │ │ │ └── github │ │ │ │ └── xjs │ │ │ │ └── upload │ │ │ │ └── UploadClientApplication.java │ │ └── resources │ │ │ └── application.yml │ │ └── test │ │ └── java │ │ └── com │ │ └── github │ │ └── xjs │ │ └── upload │ │ └── UploadServiceTest.java └── upload-starter │ ├── pom.xml │ └── src │ └── main │ ├── java │ └── com │ │ └── github │ │ └── xjs │ │ └── upload │ │ ├── AbstractUploadService.java │ │ ├── UploadService.java │ │ ├── minio │ │ ├── MinioAutoConfiguration.java │ │ ├── MinioProperties.java │ │ └── MinioService.java │ │ └── oss │ │ ├── OssAutoConfiguration.java │ │ ├── OssProperties.java │ │ └── OssService.java │ └── resources │ └── META-INF │ └── spring.factories ├── websocket-demo ├── pom.xml └── src │ └── main │ ├── java │ └── com │ │ └── github │ │ └── xjs │ │ ├── WebsocketApplication.java │ │ ├── controller │ │ └── DemoController.java │ │ ├── service │ │ └── DemoService.java │ │ └── websocket │ │ ├── CustomSpringConfigurator.java │ │ ├── WebsocketServer.java │ │ └── WebsoketConfig.java │ └── resources │ └── static │ └── websocket.html └── word-demo ├── pom.xml └── src └── main ├── java └── com │ └── github │ └── xjs │ ├── WordApplication.java │ └── controller │ └── DemoController.java └── resources └── template └── demo.docx /.gitignore: -------------------------------------------------------------------------------- 1 | /springbootdemo/.project 2 | /springbootdemo/.settings 3 | /springbootdemo/target 4 | /springbootdemo/.classpath 5 | /springbootdemo/.gitignore 6 | /springmvcdemo/.project 7 | /springmvcdemo/.settings 8 | /springmvcdemo/target 9 | /springmvcdemo/.classpath 10 | /springmvcdemo/.gitignore 11 | /sso/*.project 12 | /sso/* 13 | /bloomfilter/.mvn 14 | /sso-static/sso-site1/target 15 | /sso-static/sso-site2/target 16 | /sso-static/sso-user-center/target 17 | /sso-static/*.iml 18 | *.iml 19 | target 20 | .idea/ 21 | -------------------------------------------------------------------------------- /actuator-demo/actuator-different-port-client/src/main/java/com/github/xjs/client/ClientCloudApplication.java: -------------------------------------------------------------------------------- 1 | package com.github.xjs.client; 2 | 3 | import org.springframework.boot.SpringApplication; 4 | import org.springframework.boot.autoconfigure.SpringBootApplication; 5 | 6 | @SpringBootApplication 7 | public class ClientCloudApplication { 8 | public static void main(String[] args) { 9 | SpringApplication.run(ClientCloudApplication.class, args); 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /actuator-demo/actuator-different-port-client/src/main/resources/bootstrap.yml: -------------------------------------------------------------------------------- 1 | spring: 2 | application: 3 | name: clientapp 4 | cloud: 5 | nacos: 6 | config: 7 | server-addr: localhost:8848 8 | file-extension: yml -------------------------------------------------------------------------------- /actuator-demo/actuator-different-port-starter/src/main/resources/META-INF/spring.factories: -------------------------------------------------------------------------------- 1 | org.springframework.context.ApplicationContextInitializer=\ 2 | com.github.xjs.actuator.ManagementPortApplicationContextInitializer -------------------------------------------------------------------------------- /actuator-demo/actuator-starter/src/main/resources/META-INF/spring.factories: -------------------------------------------------------------------------------- 1 | # AutoConfiguration 2 | org.springframework.boot.autoconfigure.EnableAutoConfiguration=com.github.xjs.actuator.ActuatorConfiguration 3 | -------------------------------------------------------------------------------- /actuator-demo/actuator-web/src/main/java/com/github/xjs/controller/ServletApplication.java: -------------------------------------------------------------------------------- 1 | package com.github.xjs.controller; 2 | 3 | import org.springframework.boot.SpringApplication; 4 | import org.springframework.boot.autoconfigure.SpringBootApplication; 5 | 6 | @SpringBootApplication 7 | public class ServletApplication { 8 | public static void main(String[] args) { 9 | SpringApplication.run(ServletApplication.class, args); 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /actuator-demo/actuator-web/src/main/resources/application.yml: -------------------------------------------------------------------------------- 1 | 2 | management: 3 | prometheus: 4 | username: xjs 5 | password: 123456 6 | enable: true 7 | server: 8 | port: 8081 9 | 10 | -------------------------------------------------------------------------------- /actuator-demo/actuator-webflux/src/main/java/com/github/xjs/controller/WebfluxApplication.java: -------------------------------------------------------------------------------- 1 | package com.github.xjs.controller; 2 | 3 | import org.springframework.boot.SpringApplication; 4 | import org.springframework.boot.autoconfigure.SpringBootApplication; 5 | 6 | @SpringBootApplication 7 | public class WebfluxApplication { 8 | public static void main(String[] args) { 9 | SpringApplication.run(WebfluxApplication.class, args); 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /actuator-demo/actuator-webflux/src/main/resources/application.yml: -------------------------------------------------------------------------------- 1 | management: 2 | prometheus: 3 | username: xjs 4 | password: 123456 5 | enable: true 6 | server: 7 | port: 8082 8 | 9 | -------------------------------------------------------------------------------- /aop-demo/src/main/java/com/github/xjs/aopdemo/AopDemoApplication.java: -------------------------------------------------------------------------------- 1 | package com.github.xjs.aopdemo; 2 | 3 | import org.springframework.boot.SpringApplication; 4 | import org.springframework.boot.autoconfigure.SpringBootApplication; 5 | 6 | @SpringBootApplication 7 | public class AopDemoApplication { 8 | public static void main(String[] args) { 9 | SpringApplication.run(AopDemoApplication.class, args); 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /aop-demo/src/main/java/com/github/xjs/aopdemo/beantype/Client.java: -------------------------------------------------------------------------------- 1 | package com.github.xjs.aopdemo.beantype; 2 | 3 | import org.springframework.context.annotation.AnnotationConfigApplicationContext; 4 | 5 | public class Client { 6 | public static void main(String[] args) { 7 | AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext(DemoApp.class); 8 | System.out.println(ctx.getType("serviceFactory")); 9 | System.out.println(ctx.getType("randomService")); 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /aop-demo/src/main/java/com/github/xjs/aopdemo/beantype/IService.java: -------------------------------------------------------------------------------- 1 | package com.github.xjs.aopdemo.beantype; 2 | 3 | public interface IService { 4 | } 5 | -------------------------------------------------------------------------------- /aop-demo/src/main/java/com/github/xjs/aopdemo/beantype/Service1.java: -------------------------------------------------------------------------------- 1 | package com.github.xjs.aopdemo.beantype; 2 | 3 | public class Service1 implements IService { 4 | } 5 | -------------------------------------------------------------------------------- /aop-demo/src/main/java/com/github/xjs/aopdemo/beantype/Service2.java: -------------------------------------------------------------------------------- 1 | package com.github.xjs.aopdemo.beantype; 2 | 3 | public class Service2 implements IService { 4 | } 5 | -------------------------------------------------------------------------------- /aop-demo/src/main/java/com/github/xjs/aopdemo/beantype/ServiceFactory.java: -------------------------------------------------------------------------------- 1 | package com.github.xjs.aopdemo.beantype; 2 | 3 | public class ServiceFactory { 4 | 5 | private static int i = 0; 6 | 7 | private ServiceFactory() {} 8 | 9 | public static IService createInstance() { 10 | return new Service1(); 11 | } 12 | 13 | public IService createService() { 14 | return new Service2(); 15 | } 16 | 17 | } 18 | -------------------------------------------------------------------------------- /aop-demo/src/main/java/com/github/xjs/aopdemo/demo1/cglibdemo/Service1.java: -------------------------------------------------------------------------------- 1 | package com.github.xjs.aopdemo.demo1.cglibdemo; 2 | 3 | 4 | public class Service1 { 5 | 6 | public void m1() { 7 | System.out.println("我是m1方法"); 8 | } 9 | 10 | public void m2() { 11 | System.out.println("我是m2方法"); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /aop-demo/src/main/java/com/github/xjs/aopdemo/demo1/cglibdemo/Service2.java: -------------------------------------------------------------------------------- 1 | package com.github.xjs.aopdemo.demo1.cglibdemo; 2 | 3 | public class Service2 { 4 | 5 | public void m1() { 6 | System.out.println("我是m1方法"); 7 | this.m2(); //@1 8 | } 9 | 10 | public void m2() { 11 | System.out.println("我是m2方法"); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /aop-demo/src/main/java/com/github/xjs/aopdemo/demo1/cglibdemo/Service3.java: -------------------------------------------------------------------------------- 1 | package com.github.xjs.aopdemo.demo1.cglibdemo; 2 | 3 | public class Service3 { 4 | 5 | public String m1() { 6 | System.out.println("我是m1方法"); 7 | return "hello:m1"; 8 | } 9 | 10 | public String m2() { 11 | System.out.println("我是m2方法"); 12 | return "hello:m2"; 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /aop-demo/src/main/java/com/github/xjs/aopdemo/demo1/from: -------------------------------------------------------------------------------- 1 | https://mp.weixin.qq.com/s?__biz=MzA5MTkxMDQ4MQ%3D%3D&chksm=88621efcbf1597eab943b064147b8fb8fd3dfbac0dc03f41d15d477ef94b60d4e8f78c66b262&idx=1&lang=zh_CN&mid=2648934082&scene=21&sn=c919886400135a0152da23eaa1f276c7&token=1042984313#wechat_redirect -------------------------------------------------------------------------------- /aop-demo/src/main/java/com/github/xjs/aopdemo/demo1/jdkdemo/IService.java: -------------------------------------------------------------------------------- 1 | package com.github.xjs.aopdemo.demo1.jdkdemo; 2 | 3 | public interface IService { 4 | void m1(); 5 | void m2(); 6 | void m3(); 7 | } 8 | -------------------------------------------------------------------------------- /aop-demo/src/main/java/com/github/xjs/aopdemo/demo1/jdkdemo/ServiceA.java: -------------------------------------------------------------------------------- 1 | package com.github.xjs.aopdemo.demo1.jdkdemo; 2 | 3 | public class ServiceA implements IService { 4 | @Override 5 | public void m1() { 6 | System.out.println("ServiceA m1()"); 7 | } 8 | 9 | @Override 10 | public void m2() { 11 | System.out.println("ServiceA m2()"); 12 | } 13 | 14 | @Override 15 | public void m3() { 16 | System.out.println("ServiceA m3()"); 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /aop-demo/src/main/java/com/github/xjs/aopdemo/demo1/jdkdemo/ServiceB.java: -------------------------------------------------------------------------------- 1 | package com.github.xjs.aopdemo.demo1.jdkdemo; 2 | 3 | public class ServiceB implements IService { 4 | @Override 5 | public void m1() { 6 | System.out.println("ServiceB m1()"); 7 | } 8 | 9 | @Override 10 | public void m2() { 11 | System.out.println("ServiceB m2()"); 12 | } 13 | 14 | @Override 15 | public void m3() { 16 | System.out.println("ServiceB m3()"); 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /aop-demo/src/main/java/com/github/xjs/aopdemo/demo2/test1/UserService.java: -------------------------------------------------------------------------------- 1 | package com.github.xjs.aopdemo.demo2.test1; 2 | 3 | public class UserService { 4 | public void work(String userName) { 5 | System.out.println("userService work:" + userName); 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /aop-demo/src/main/java/com/github/xjs/aopdemo/service/IService.java: -------------------------------------------------------------------------------- 1 | package com.github.xjs.aopdemo.service; 2 | 3 | public interface IService { 4 | void print(String msg); 5 | } -------------------------------------------------------------------------------- /aop-demo/src/main/java/com/github/xjs/aopdemo/service/Service1.java: -------------------------------------------------------------------------------- 1 | package com.github.xjs.aopdemo.service; 2 | 3 | import lombok.extern.slf4j.Slf4j; 4 | 5 | @Slf4j 6 | public class Service1 implements IService { 7 | @Override 8 | public void print(String msg){ 9 | log.info("Service1 print:{}", msg); 10 | } 11 | } -------------------------------------------------------------------------------- /aop-demo/src/main/java/com/github/xjs/aopdemo/service/Service2.java: -------------------------------------------------------------------------------- 1 | package com.github.xjs.aopdemo.service; 2 | 3 | import lombok.extern.slf4j.Slf4j; 4 | 5 | @Slf4j 6 | public class Service2 {//它并没有实现IService接口 7 | public void print(String msg){ 8 | log.info("Service2 print:{}", msg); 9 | } 10 | } -------------------------------------------------------------------------------- /aop-demo/src/main/java/com/github/xjs/aopdemo/targetwithin/DemoController.java: -------------------------------------------------------------------------------- 1 | package com.github.xjs.aopdemo.targetwithin; 2 | 3 | import org.springframework.stereotype.Controller; 4 | 5 | @Controller 6 | public class DemoController { 7 | 8 | public String hello(){ 9 | System.out.println("hello"); 10 | return "world"; 11 | } 12 | 13 | } 14 | -------------------------------------------------------------------------------- /async-demo/src/main/resources/application.yml: -------------------------------------------------------------------------------- 1 | logging: 2 | level: 3 | ROOT: INFO -------------------------------------------------------------------------------- /at-target/src/main/java/com/github/xjs/attarget/AtTargetApplication.java: -------------------------------------------------------------------------------- 1 | package com.github.xjs.attarget; 2 | 3 | import org.springframework.boot.SpringApplication; 4 | import org.springframework.boot.autoconfigure.SpringBootApplication; 5 | 6 | @SpringBootApplication 7 | public class AtTargetApplication { 8 | public static void main(String[] args) { 9 | SpringApplication.run(AtTargetApplication.class, args); 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /at-target/src/main/java/com/github/xjs/attarget/demo2/MyAnno.java: -------------------------------------------------------------------------------- 1 | package com.github.xjs.attarget.demo2; 2 | 3 | import java.lang.annotation.*; 4 | 5 | @Target({ElementType.TYPE, ElementType.METHOD}) 6 | @Retention(RetentionPolicy.RUNTIME) 7 | @Documented 8 | public @interface MyAnno { 9 | 10 | } 11 | -------------------------------------------------------------------------------- /at-target/src/main/java/com/github/xjs/attarget/demo2/Service2.java: -------------------------------------------------------------------------------- 1 | package com.github.xjs.attarget.demo2; 2 | 3 | @MyAnno 4 | public class Service2 { 5 | public void hello() { 6 | System.out.println("s2 hello"); 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /at-target/src/main/java/com/github/xjs/attarget/demo2/Service3.java: -------------------------------------------------------------------------------- 1 | package com.github.xjs.attarget.demo2; 2 | 3 | public class Service3 { 4 | public void hello() { 5 | System.out.println("s3 hello"); 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /at-target/src/main/java/com/github/xjs/attarget/demo3/AnnoFather.java: -------------------------------------------------------------------------------- 1 | package com.github.xjs.attarget.demo3; 2 | 3 | import java.lang.annotation.*; 4 | 5 | @Target({ElementType.TYPE, ElementType.METHOD}) 6 | @Retention(RetentionPolicy.RUNTIME) 7 | @Documented 8 | public @interface AnnoFather { 9 | 10 | } 11 | -------------------------------------------------------------------------------- /at-target/src/main/java/com/github/xjs/attarget/demo3/AnnoSon.java: -------------------------------------------------------------------------------- 1 | package com.github.xjs.attarget.demo3; 2 | 3 | import java.lang.annotation.*; 4 | 5 | @Target({ElementType.TYPE, ElementType.METHOD}) 6 | @Retention(RetentionPolicy.RUNTIME) 7 | @Documented 8 | public @interface AnnoSon { 9 | 10 | } 11 | -------------------------------------------------------------------------------- /at-target/src/main/java/com/github/xjs/attarget/demo3/Father.java: -------------------------------------------------------------------------------- 1 | package com.github.xjs.attarget.demo3; 2 | 3 | @AnnoFather 4 | public class Father { 5 | 6 | public void fun1(){ 7 | System.out.println("father fun1"); 8 | } 9 | 10 | public void fun2(){ 11 | System.out.println("father fun2"); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /at-target/src/main/java/com/github/xjs/attarget/demo3/Son.java: -------------------------------------------------------------------------------- 1 | package com.github.xjs.attarget.demo3; 2 | 3 | @AnnoSon 4 | public class Son extends Father { 5 | 6 | @Override 7 | public void fun1(){ 8 | System.out.println("son fun1"); 9 | } 10 | 11 | } 12 | -------------------------------------------------------------------------------- /at-target/src/main/java/com/github/xjs/attarget/service/Service1.java: -------------------------------------------------------------------------------- 1 | package com.github.xjs.attarget.service; 2 | 3 | public class Service1 { 4 | } 5 | -------------------------------------------------------------------------------- /bloomfilter/.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 | -------------------------------------------------------------------------------- /bloomfilter/src/main/java/com/github/xjs/bloomfilter/BloomfilterApplication.java: -------------------------------------------------------------------------------- 1 | package com.github.xjs.bloomfilter; 2 | 3 | import org.springframework.boot.SpringApplication; 4 | import org.springframework.boot.autoconfigure.SpringBootApplication; 5 | 6 | @SpringBootApplication 7 | public class BloomfilterApplication { 8 | 9 | public static void main(String[] args) { 10 | SpringApplication.run(BloomfilterApplication.class, args); 11 | } 12 | 13 | } 14 | -------------------------------------------------------------------------------- /bloomfilter/src/main/resources/application.properties: -------------------------------------------------------------------------------- 1 | redis.host=192.168.220.130 2 | redis.port=6379 3 | redis.timeout=10 4 | redis.password=123456 5 | redis.poolMaxTotal=1 6 | redis.poolMaxIdle=1 7 | -------------------------------------------------------------------------------- /circuitbreaker-demo/order-service/src/main/java/com/github/xjs/OrderApplication.java: -------------------------------------------------------------------------------- 1 | package com.github.xjs; 2 | 3 | import org.springframework.boot.SpringApplication; 4 | import org.springframework.boot.autoconfigure.SpringBootApplication; 5 | import org.springframework.cloud.openfeign.EnableFeignClients; 6 | 7 | @EnableFeignClients 8 | @SpringBootApplication 9 | public class OrderApplication { 10 | public static void main(String[] args) { 11 | SpringApplication.run(OrderApplication.class, args); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /circuitbreaker-demo/order-service/src/main/java/com/github/xjs/feign/FeignConfig.java: -------------------------------------------------------------------------------- 1 | package com.github.xjs.feign; 2 | 3 | import com.github.xjs.feign.fallback.UserFallbackFactory; 4 | import org.springframework.context.annotation.Bean; 5 | 6 | public class FeignConfig { 7 | @Bean 8 | public UserFallbackFactory userFallbackFactory(){ 9 | return new UserFallbackFactory(); 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /circuitbreaker-demo/order-service/src/main/java/com/github/xjs/pojo/Order.java: -------------------------------------------------------------------------------- 1 | package com.github.xjs.pojo; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Data; 5 | import lombok.NoArgsConstructor; 6 | 7 | @NoArgsConstructor 8 | @AllArgsConstructor 9 | @Data 10 | public class Order { 11 | 12 | private Long id; 13 | private String goodsName; 14 | private String price; 15 | private Long userId; 16 | private User user; 17 | 18 | } 19 | -------------------------------------------------------------------------------- /circuitbreaker-demo/order-service/src/main/java/com/github/xjs/pojo/User.java: -------------------------------------------------------------------------------- 1 | package com.github.xjs.pojo; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Data; 5 | import lombok.NoArgsConstructor; 6 | 7 | @Data 8 | @AllArgsConstructor 9 | @NoArgsConstructor 10 | public class User { 11 | private Long id; 12 | private String username; 13 | private String address; 14 | } -------------------------------------------------------------------------------- /circuitbreaker-demo/user-service/src/main/java/com/github/xjs/UserApplication.java: -------------------------------------------------------------------------------- 1 | package com.github.xjs; 2 | 3 | import org.springframework.boot.SpringApplication; 4 | import org.springframework.boot.autoconfigure.SpringBootApplication; 5 | 6 | @SpringBootApplication 7 | public class UserApplication { 8 | public static void main(String[] args) { 9 | SpringApplication.run(UserApplication.class, args); 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /circuitbreaker-demo/user-service/src/main/java/com/github/xjs/pojo/User.java: -------------------------------------------------------------------------------- 1 | package com.github.xjs.pojo; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Data; 5 | import lombok.NoArgsConstructor; 6 | 7 | @Data 8 | @AllArgsConstructor 9 | @NoArgsConstructor 10 | public class User { 11 | private Long id; 12 | private String username; 13 | private String address; 14 | } -------------------------------------------------------------------------------- /circuitbreaker-demo/user-service/src/main/java/com/github/xjs/service/UserService.java: -------------------------------------------------------------------------------- 1 | package com.github.xjs.service; 2 | 3 | import com.github.xjs.pojo.User; 4 | import lombok.extern.slf4j.Slf4j; 5 | import org.springframework.stereotype.Service; 6 | 7 | @Slf4j 8 | @Service 9 | public class UserService { 10 | 11 | public User queryById(Long id) { 12 | log.info("===========查询id={}的用户", id); 13 | return new User(id, "hello", "bj"); 14 | } 15 | } -------------------------------------------------------------------------------- /circuitbreaker-demo/user-service/src/main/resources/application.yml: -------------------------------------------------------------------------------- 1 | server: 2 | port: 8081 3 | spring: 4 | application: 5 | name: userservice 6 | profiles: 7 | active: dev 8 | cloud: 9 | nacos: 10 | discovery: 11 | server-addr: localhost:8848 12 | config: 13 | server-addr: localhost:8848 14 | file-extension: yaml 15 | -------------------------------------------------------------------------------- /condition-demo/src/main/java/com/github/xjs/conditiondemo/ConditionDemoApplication.java: -------------------------------------------------------------------------------- 1 | package com.github.xjs.conditiondemo; 2 | 3 | import org.springframework.boot.SpringApplication; 4 | import org.springframework.boot.autoconfigure.SpringBootApplication; 5 | 6 | @SpringBootApplication 7 | public class ConditionDemoApplication { 8 | public static void main(String[] args) { 9 | SpringApplication.run(ConditionDemoApplication.class, args); 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /condition-demo/src/main/java/com/github/xjs/conditiondemo/demo1/Condition1.java: -------------------------------------------------------------------------------- 1 | package com.github.xjs.conditiondemo.demo1; 2 | 3 | 4 | import org.springframework.context.annotation.Condition; 5 | import org.springframework.context.annotation.ConditionContext; 6 | import org.springframework.core.type.AnnotatedTypeMetadata; 7 | 8 | public class Condition1 implements Condition { 9 | @Override 10 | public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) { 11 | return false; 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /condition-demo/src/main/java/com/github/xjs/conditiondemo/demo1/Config1.java: -------------------------------------------------------------------------------- 1 | package com.github.xjs.conditiondemo.demo1; 2 | 3 | import org.springframework.context.annotation.Bean; 4 | import org.springframework.context.annotation.Configuration; 5 | 6 | @Configuration 7 | public class Config1 { 8 | @Bean 9 | public String name(){ 10 | return "爪哇优太儿"; 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /condition-demo/src/main/java/com/github/xjs/conditiondemo/demo1/Config2.java: -------------------------------------------------------------------------------- 1 | package com.github.xjs.conditiondemo.demo1; 2 | 3 | import org.springframework.context.annotation.Bean; 4 | import org.springframework.context.annotation.Conditional; 5 | import org.springframework.context.annotation.Configuration; 6 | 7 | @Configuration 8 | @Conditional(Condition1.class) 9 | public class Config2 { 10 | 11 | @Bean 12 | public String username(){ 13 | return "Joshua"; 14 | } 15 | 16 | } 17 | -------------------------------------------------------------------------------- /condition-demo/src/main/java/com/github/xjs/conditiondemo/demo2/Condition1.java: -------------------------------------------------------------------------------- 1 | package com.github.xjs.conditiondemo.demo2; 2 | 3 | 4 | import org.springframework.context.annotation.Condition; 5 | import org.springframework.context.annotation.ConditionContext; 6 | import org.springframework.core.type.AnnotatedTypeMetadata; 7 | 8 | public class Condition1 implements Condition { 9 | @Override 10 | public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) { 11 | return false; 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /condition-demo/src/main/java/com/github/xjs/conditiondemo/demo3/EnvConfig.java: -------------------------------------------------------------------------------- 1 | package com.github.xjs.conditiondemo.demo3; 2 | 3 | import org.springframework.context.annotation.Bean; 4 | import org.springframework.context.annotation.Configuration; 5 | 6 | @Configuration 7 | public class EnvConfig { 8 | 9 | @Bean 10 | @Env(profile = "dev") 11 | public String name(){ 12 | return "开发环境"; 13 | } 14 | 15 | @Bean 16 | @Env(profile = "product") 17 | public String username(){ 18 | return "生产环境"; 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /condition-demo/src/main/java/com/github/xjs/conditiondemo/demo4/IService.java: -------------------------------------------------------------------------------- 1 | package com.github.xjs.conditiondemo.demo4; 2 | 3 | public interface IService { 4 | } 5 | -------------------------------------------------------------------------------- /condition-demo/src/main/java/com/github/xjs/conditiondemo/demo4/Service1.java: -------------------------------------------------------------------------------- 1 | package com.github.xjs.conditiondemo.demo4; 2 | 3 | public class Service1 implements IService { 4 | } 5 | -------------------------------------------------------------------------------- /condition-demo/src/main/java/com/github/xjs/conditiondemo/demo4/Service2.java: -------------------------------------------------------------------------------- 1 | package com.github.xjs.conditiondemo.demo4; 2 | 3 | public class Service2 implements IService { 4 | } 5 | -------------------------------------------------------------------------------- /condition-demo/src/main/java/com/github/xjs/conditiondemo/demo5/Config1.java: -------------------------------------------------------------------------------- 1 | package com.github.xjs.conditiondemo.demo5; 2 | 3 | import org.springframework.context.annotation.Bean; 4 | import org.springframework.context.annotation.Configuration; 5 | import org.springframework.core.annotation.Order; 6 | 7 | @Configuration 8 | @Order(Integer.MAX_VALUE-1) 9 | public class Config1 { 10 | 11 | @Bean 12 | public Service1 service1(){ 13 | return new Service1(); 14 | } 15 | 16 | } 17 | -------------------------------------------------------------------------------- /condition-demo/src/main/java/com/github/xjs/conditiondemo/demo5/Config2.java: -------------------------------------------------------------------------------- 1 | package com.github.xjs.conditiondemo.demo5; 2 | 3 | import org.springframework.context.annotation.Bean; 4 | import org.springframework.context.annotation.Configuration; 5 | import org.springframework.core.annotation.Order; 6 | 7 | @Configuration 8 | @Order(Integer.MAX_VALUE) 9 | @OnBean(beanType= Service1.class) 10 | public class Config2 { 11 | @Bean 12 | public String name() { 13 | return "爪哇优太儿"; 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /condition-demo/src/main/java/com/github/xjs/conditiondemo/demo5/Service1.java: -------------------------------------------------------------------------------- 1 | package com.github.xjs.conditiondemo.demo5; 2 | 3 | public class Service1 { 4 | } 5 | -------------------------------------------------------------------------------- /config-demo/config-refresh-demo/src/main/java/com/demo/ConfigRefreshDemoApplication.java: -------------------------------------------------------------------------------- 1 | package com.demo; 2 | 3 | import org.springframework.boot.SpringApplication; 4 | import org.springframework.boot.autoconfigure.SpringBootApplication; 5 | 6 | @SpringBootApplication 7 | public class ConfigRefreshDemoApplication { 8 | 9 | public static void main(String[] args) { 10 | SpringApplication.run(ConfigRefreshDemoApplication.class, args); 11 | } 12 | 13 | } 14 | -------------------------------------------------------------------------------- /config-demo/config-refresh-demo/src/main/resources/application-dev.yml: -------------------------------------------------------------------------------- 1 | user: 2 | username: xjs-dev 3 | password: 123456-dev -------------------------------------------------------------------------------- /config-demo/config-refresh-demo/src/main/resources/application-pro.yml: -------------------------------------------------------------------------------- 1 | user: 2 | username: xjs-pro 3 | password: 123456-pro -------------------------------------------------------------------------------- /config-demo/config-refresh-demo/src/main/resources/application.yml: -------------------------------------------------------------------------------- 1 | spring: 2 | profiles: 3 | active: dev 4 | user: 5 | share: share -------------------------------------------------------------------------------- /config-demo/config-refresh-starter/src/main/java/com/github/xjs/config/RefreshEvent.java: -------------------------------------------------------------------------------- 1 | package com.github.xjs.config; 2 | 3 | import org.springframework.context.ApplicationEvent; 4 | 5 | public class RefreshEvent extends ApplicationEvent { 6 | 7 | public RefreshEvent(Object source) { 8 | super(source); 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /config-demo/config-refresh-starter/src/main/java/com/github/xjs/config/anno/RefreshScope.java: -------------------------------------------------------------------------------- 1 | package com.github.xjs.config.anno; 2 | 3 | import org.springframework.context.annotation.Scope; 4 | 5 | import java.lang.annotation.*; 6 | 7 | @Scope("RefreshScope") 8 | @Target({ElementType.TYPE}) 9 | @Retention(RetentionPolicy.RUNTIME) 10 | public @interface RefreshScope { 11 | } 12 | -------------------------------------------------------------------------------- /config-demo/config-refresh-starter/src/main/resources/META-INF/spring.factories: -------------------------------------------------------------------------------- 1 | org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ 2 | com.github.xjs.config.ConfigRefreshAutoConfiguration -------------------------------------------------------------------------------- /configuration-demo/src/main/java/com/github/xjs/configdemo/demo1/ConfigDemoApplication.java: -------------------------------------------------------------------------------- 1 | package com.github.xjs.configdemo.demo1; 2 | 3 | import org.springframework.boot.SpringApplication; 4 | import org.springframework.boot.autoconfigure.SpringBootApplication; 5 | 6 | @SpringBootApplication 7 | public class ConfigDemoApplication { 8 | public static void main(String[] args) { 9 | SpringApplication.run(ConfigDemoApplication.class, args); 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /configuration-demo/src/main/java/com/github/xjs/configdemo/demo1/DefaultService.java: -------------------------------------------------------------------------------- 1 | package com.github.xjs.configdemo.demo1; 2 | 3 | //这是DefaultService 4 | public class DefaultService implements IService{ 5 | } -------------------------------------------------------------------------------- /configuration-demo/src/main/java/com/github/xjs/configdemo/demo1/DemoApp.java: -------------------------------------------------------------------------------- 1 | package com.github.xjs.configdemo.demo1; 2 | 3 | import org.springframework.context.annotation.ComponentScan; 4 | import org.springframework.context.annotation.Configuration; 5 | 6 | @Configuration 7 | @ComponentScan//启用了组件扫描 8 | public class DemoApp { 9 | 10 | } -------------------------------------------------------------------------------- /configuration-demo/src/main/java/com/github/xjs/configdemo/demo1/IService.java: -------------------------------------------------------------------------------- 1 | package com.github.xjs.configdemo.demo1; 2 | 3 | import org.springframework.context.annotation.Bean; 4 | 5 | public interface IService { 6 | /**接口里面定义了@Bean*/ 7 | @Bean 8 | default IService defaultService(){ 9 | return new DefaultService(); 10 | } 11 | } -------------------------------------------------------------------------------- /configuration-demo/src/main/java/com/github/xjs/configdemo/demo1/ServiceImpl.java: -------------------------------------------------------------------------------- 1 | package com.github.xjs.configdemo.demo1; 2 | 3 | import org.springframework.stereotype.Component; 4 | 5 | //这是一个具体的实现类,被@Component修饰 6 | @Component 7 | public class ServiceImpl implements IService { 8 | } -------------------------------------------------------------------------------- /configuration-demo/src/main/java/com/github/xjs/configdemo/demo2/Service1.java: -------------------------------------------------------------------------------- 1 | package com.github.xjs.configdemo.demo2; 2 | 3 | public class Service1 { 4 | public Service1(){ 5 | System.out.println("construct s1:" + this); 6 | } 7 | } -------------------------------------------------------------------------------- /configuration-demo/src/main/java/com/github/xjs/configdemo/demo2/Service2.java: -------------------------------------------------------------------------------- 1 | package com.github.xjs.configdemo.demo2; 2 | 3 | //这是Service2, 构造函数注入了Service1 4 | public class Service2 { 5 | private Service1 s1; 6 | public Service2(Service1 s1){ 7 | this.s1 = s1; 8 | System.out.println("construct s2:"+this); 9 | } 10 | } -------------------------------------------------------------------------------- /configuration-demo/src/main/java/com/github/xjs/configdemo/demo2/Service3.java: -------------------------------------------------------------------------------- 1 | package com.github.xjs.configdemo.demo2; 2 | 3 | //Service3跟Service1一模一样 4 | public class Service3 { 5 | public Service3(){ 6 | System.out.println("construct s3:" + this); 7 | } 8 | } -------------------------------------------------------------------------------- /configuration-demo/src/main/java/com/github/xjs/configdemo/demo2/Service4.java: -------------------------------------------------------------------------------- 1 | package com.github.xjs.configdemo.demo2; 2 | //Service4跟Service2一模一样 3 | public class Service4 { 4 | private Service3 s3; 5 | public Service4(Service3 s3){ 6 | this.s3 = s3; 7 | System.out.println("construct s4:"+this); 8 | } 9 | } -------------------------------------------------------------------------------- /configuration-demo/src/main/java/com/github/xjs/configdemo/demo2/Service5.java: -------------------------------------------------------------------------------- 1 | package com.github.xjs.configdemo.demo2; 2 | 3 | public class Service5 { 4 | } 5 | -------------------------------------------------------------------------------- /configuration-demo/src/main/java/com/github/xjs/configdemo/demo3/Client.java: -------------------------------------------------------------------------------- 1 | package com.github.xjs.configdemo.demo3; 2 | 3 | import org.springframework.context.annotation.AnnotationConfigApplicationContext; 4 | 5 | public class Client { 6 | public static void main(String[] args) { 7 | AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext(DemoConfiguration.class); 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /controller-demo/src/main/java/com/github/xjs/controller/ControllerApplication.java: -------------------------------------------------------------------------------- 1 | package com.github.xjs.controller; 2 | 3 | import org.springframework.boot.SpringApplication; 4 | import org.springframework.boot.autoconfigure.SpringBootApplication; 5 | 6 | @SpringBootApplication 7 | public class ControllerApplication { 8 | public static void main(String[] args) { 9 | SpringApplication.run(ControllerApplication.class, args); 10 | } 11 | 12 | 13 | } 14 | -------------------------------------------------------------------------------- /controller-demo/src/main/java/com/github/xjs/controller/servlet/AtController.java: -------------------------------------------------------------------------------- 1 | package com.github.xjs.controller.servlet; 2 | 3 | import org.springframework.web.bind.annotation.GetMapping; 4 | import org.springframework.web.bind.annotation.RestController; 5 | 6 | /** 7 | * 方式1:@Controller 8 | * */ 9 | @RestController 10 | public class AtController { 11 | @GetMapping("/at") 12 | public String at() { 13 | return "@Controller"; 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /controller-demo/src/main/resources/application.yml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xjs1919/learning-demo/422a6e01331330db5623e98c0b2d2224b78186c6/controller-demo/src/main/resources/application.yml -------------------------------------------------------------------------------- /crosdemo/ajaxclient/src/main/java/com/github/xjs/ajaxclient/AjaxclientApplication.java: -------------------------------------------------------------------------------- 1 | package com.github.xjs.ajaxclient; 2 | 3 | import org.springframework.boot.SpringApplication; 4 | import org.springframework.boot.autoconfigure.SpringBootApplication; 5 | 6 | @SpringBootApplication 7 | public class AjaxclientApplication { 8 | 9 | public static void main(String[] args) { 10 | SpringApplication.run(AjaxclientApplication.class, args); 11 | } 12 | 13 | } 14 | -------------------------------------------------------------------------------- /crosdemo/ajaxclient/src/main/resources/application.yml: -------------------------------------------------------------------------------- 1 | server: 2 | port: 8081 3 | 4 | spring: 5 | application: 6 | name: ajax-client -------------------------------------------------------------------------------- /crosdemo/ajaxclient/src/test/java/com/github/xjs/ajaxclient/AjaxclientApplicationTests.java: -------------------------------------------------------------------------------- 1 | package com.github.xjs.ajaxclient; 2 | 3 | import org.junit.Test; 4 | import org.junit.runner.RunWith; 5 | import org.springframework.boot.test.context.SpringBootTest; 6 | import org.springframework.test.context.junit4.SpringRunner; 7 | 8 | @RunWith(SpringRunner.class) 9 | @SpringBootTest 10 | public class AjaxclientApplicationTests { 11 | 12 | @Test 13 | public void contextLoads() { 14 | } 15 | 16 | } 17 | -------------------------------------------------------------------------------- /crosdemo/ajaxserver/src/main/java/com/github/xjs/ajaxserver/controller/ResultBean.java: -------------------------------------------------------------------------------- 1 | package com.github.xjs.ajaxserver.controller; 2 | 3 | public class ResultBean { 4 | 5 | private final Object data; 6 | 7 | public ResultBean(Object data) { 8 | this.data = data; 9 | } 10 | 11 | public Object getData() { 12 | return data; 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /crosdemo/ajaxserver/src/main/java/com/github/xjs/ajaxserver/controller/User.java: -------------------------------------------------------------------------------- 1 | package com.github.xjs.ajaxserver.controller; 2 | 3 | public class User { 4 | private String name; 5 | 6 | public String getName() { 7 | return name; 8 | } 9 | 10 | public void setName(String name) { 11 | this.name = name; 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /crosdemo/ajaxserver/src/main/resources/application.yml: -------------------------------------------------------------------------------- 1 | server: 2 | port: 8080 3 | 4 | spring: 5 | application: 6 | name: ajax-server -------------------------------------------------------------------------------- /crosdemo/ajaxserver/src/test/java/com/github/xjs/ajaxserver/AjaxserverApplicationTests.java: -------------------------------------------------------------------------------- 1 | package com.github.xjs.ajaxserver; 2 | 3 | import org.junit.Test; 4 | import org.junit.runner.RunWith; 5 | import org.springframework.boot.test.context.SpringBootTest; 6 | import org.springframework.test.context.junit4.SpringRunner; 7 | 8 | @RunWith(SpringRunner.class) 9 | @SpringBootTest 10 | public class AjaxserverApplicationTests { 11 | 12 | @Test 13 | public void contextLoads() { 14 | } 15 | 16 | } 17 | -------------------------------------------------------------------------------- /dameng-demo/src/main/java/com/github/xjs/dameng/DaMengApplication.java: -------------------------------------------------------------------------------- 1 | package com.github.xjs.dameng; 2 | 3 | import org.springframework.boot.SpringApplication; 4 | import org.springframework.boot.autoconfigure.SpringBootApplication; 5 | @SpringBootApplication 6 | public class DaMengApplication { 7 | public static void main(String[] args) { 8 | SpringApplication.run(DaMengApplication.class, args); 9 | } 10 | } -------------------------------------------------------------------------------- /dameng-demo/src/main/java/com/github/xjs/dameng/domain/Department.java: -------------------------------------------------------------------------------- 1 | package com.github.xjs.dameng.domain; 2 | 3 | import lombok.Data; 4 | 5 | import java.io.Serializable; 6 | 7 | /** 8 | *

9 | * 10 | *

11 | * 12 | * @author xjs 13 | * @since 2023-07-02 14 | */ 15 | @Data 16 | public class Department implements Serializable { 17 | 18 | private static final long serialVersionUID = 1L; 19 | 20 | private Integer departmentId; 21 | 22 | private String departmentName; 23 | 24 | 25 | } 26 | -------------------------------------------------------------------------------- /dameng-demo/src/main/java/com/github/xjs/dameng/mapper/DepartmentMapper.java: -------------------------------------------------------------------------------- 1 | package com.github.xjs.dameng.mapper; 2 | 3 | import com.github.xjs.dameng.domain.Department; 4 | import org.apache.ibatis.annotations.Mapper; 5 | 6 | import java.util.List; 7 | 8 | /** 9 | *

10 | * Mapper 接口 11 | *

12 | * 13 | * @author xjs 14 | * @since 2023-07-02 15 | */ 16 | @Mapper 17 | public interface DepartmentMapper { 18 | 19 | List selectAll(); 20 | } 21 | -------------------------------------------------------------------------------- /dameng-demo/src/main/java/com/github/xjs/dameng/mapper/EmployeeMapper.java: -------------------------------------------------------------------------------- 1 | package com.github.xjs.dameng.mapper; 2 | 3 | import com.github.xjs.dameng.domain.Employee; 4 | import org.apache.ibatis.annotations.Mapper; 5 | 6 | import java.util.List; 7 | 8 | /** 9 | *

10 | * Mapper 接口 11 | *

12 | * 13 | * @author xjs 14 | * @since 2023-07-02 15 | */ 16 | @Mapper 17 | public interface EmployeeMapper { 18 | List selectAll(); 19 | } 20 | -------------------------------------------------------------------------------- /dameng-demo/src/main/resources/application.yml: -------------------------------------------------------------------------------- 1 | spring: 2 | datasource: 3 | driver-class-name: dm.jdbc.driver.DmDriver 4 | url: jdbc:dm://192.168.137.138:5236 5 | username: DM 6 | password: dameng123 7 | mybatis: 8 | mapper-locations: classpath:mapper/*.xml 9 | -------------------------------------------------------------------------------- /dameng-demo/src/main/resources/db.sql: -------------------------------------------------------------------------------- 1 | CREATE TABLE employee 2 | ( 3 | employee_id INTEGER, 4 | employee_name VARCHAR2(20) NOT NULL, 5 | hire_date DATE, 6 | salary INTEGER, 7 | department_id INTEGER NOT NULL 8 | ); 9 | INSERT INTO employee VALUES (9999, '王达梦','2008-05-30 00:00:00', 30000, 666); 10 | 11 | CREATE TABLE department 12 | ( 13 | department_id INTEGER PRIMARY KEY, 14 | department_name VARCHAR(30) NOT NULL 15 | ); 16 | INSERT INTO department VALUES(666, '数据库产品中心'); -------------------------------------------------------------------------------- /easyexcel-upload-demo/src/main/java/com/github/xjs/DemoApplication.java: -------------------------------------------------------------------------------- 1 | package com.github.xjs; 2 | 3 | import org.springframework.boot.SpringApplication; 4 | import org.springframework.boot.autoconfigure.SpringBootApplication; 5 | 6 | /** 7 | * 启动类 8 | * */ 9 | @SpringBootApplication 10 | public class DemoApplication { 11 | 12 | /** 13 | * main方法 14 | * @param args 参数 15 | * */ 16 | public static void main(String[] args) { 17 | SpringApplication.run(DemoApplication.class, args); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /easyexcel-upload-demo/src/main/resources/application.yml: -------------------------------------------------------------------------------- 1 | server: 2 | port: 8080 -------------------------------------------------------------------------------- /easyexcel-upload-demo/src/main/resources/使用模板导出.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xjs1919/learning-demo/422a6e01331330db5623e98c0b2d2224b78186c6/easyexcel-upload-demo/src/main/resources/使用模板导出.xlsx -------------------------------------------------------------------------------- /easyexcel-upload-demo/src/main/resources/用户信息.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xjs1919/learning-demo/422a6e01331330db5623e98c0b2d2224b78186c6/easyexcel-upload-demo/src/main/resources/用户信息.xlsx -------------------------------------------------------------------------------- /error/src/main/java/com/github/xjs/error/ErrorApplication.java: -------------------------------------------------------------------------------- 1 | package com.github.xjs.error; 2 | 3 | import org.springframework.boot.SpringApplication; 4 | import org.springframework.boot.autoconfigure.SpringBootApplication; 5 | 6 | @SpringBootApplication 7 | public class ErrorApplication { 8 | 9 | public static void main(String[] args) { 10 | SpringApplication.run(ErrorApplication.class, args); 11 | } 12 | 13 | } 14 | -------------------------------------------------------------------------------- /error/src/main/java/com/github/xjs/error/controller/DemoController.java: -------------------------------------------------------------------------------- 1 | package com.github.xjs.error.controller; 2 | 3 | import org.springframework.web.bind.annotation.GetMapping; 4 | import org.springframework.web.bind.annotation.RestController; 5 | 6 | @RestController 7 | public class DemoController { 8 | @GetMapping("/hello") 9 | public String hello(){ 10 | throw new RuntimeException("服务端异常,请稍后再试!"); 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /error/src/main/resources/application.yml: -------------------------------------------------------------------------------- 1 | server: 2 | error: 3 | includeException: true 4 | includeStacktrace: ALWAYS 5 | includeMessage: ALWAYS 6 | -------------------------------------------------------------------------------- /error/src/test/java/com/github/xjs/error/ErrorApplicationTests.java: -------------------------------------------------------------------------------- 1 | package com.github.xjs.error; 2 | 3 | import org.junit.jupiter.api.Test; 4 | import org.springframework.boot.test.context.SpringBootTest; 5 | 6 | @SpringBootTest 7 | class ErrorApplicationTests { 8 | 9 | @Test 10 | void contextLoads() { 11 | } 12 | 13 | } 14 | -------------------------------------------------------------------------------- /event-demo/src/main/java/com/github/xjs/eventdemo/UserRegisterEvent.java: -------------------------------------------------------------------------------- 1 | package com.github.xjs.eventdemo; 2 | 3 | import org.springframework.context.ApplicationEvent; 4 | 5 | public class UserRegisterEvent extends ApplicationEvent { 6 | 7 | private String username; 8 | 9 | public UserRegisterEvent(Object source, String username) { 10 | super(source); 11 | this.username = username; 12 | } 13 | 14 | public String getUsername() { 15 | return username; 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /event-demo/src/main/resources/application.yml: -------------------------------------------------------------------------------- 1 | logging: 2 | level: 3 | ROOT: INFO 4 | org.springframework: INFO -------------------------------------------------------------------------------- /feign-compress-demo/order-service/src/main/java/com/github/xjs/OrderApplication.java: -------------------------------------------------------------------------------- 1 | package com.github.xjs; 2 | 3 | import org.springframework.boot.SpringApplication; 4 | import org.springframework.boot.autoconfigure.SpringBootApplication; 5 | import org.springframework.cloud.openfeign.EnableFeignClients; 6 | 7 | @EnableFeignClients 8 | @SpringBootApplication 9 | public class OrderApplication { 10 | public static void main(String[] args) { 11 | SpringApplication.run(OrderApplication.class, args); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /feign-compress-demo/order-service/src/main/java/com/github/xjs/feign/UserClient.java: -------------------------------------------------------------------------------- 1 | package com.github.xjs.feign; 2 | 3 | import com.github.xjs.pojo.User; 4 | import org.springframework.cloud.openfeign.FeignClient; 5 | import org.springframework.web.bind.annotation.GetMapping; 6 | import org.springframework.web.bind.annotation.PathVariable; 7 | 8 | @FeignClient(value = "user-service", url = "http://localhost:8081") 9 | public interface UserClient { 10 | @GetMapping("/user/{id}") 11 | public User queryById(@PathVariable("id") Long id); 12 | } 13 | -------------------------------------------------------------------------------- /feign-compress-demo/order-service/src/main/java/com/github/xjs/pojo/Order.java: -------------------------------------------------------------------------------- 1 | package com.github.xjs.pojo; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Data; 5 | import lombok.NoArgsConstructor; 6 | 7 | @NoArgsConstructor 8 | @AllArgsConstructor 9 | @Data 10 | public class Order { 11 | 12 | private Long id; 13 | private String goodsName; 14 | private String price; 15 | private Long userId; 16 | private User user; 17 | 18 | } 19 | -------------------------------------------------------------------------------- /feign-compress-demo/order-service/src/main/java/com/github/xjs/pojo/User.java: -------------------------------------------------------------------------------- 1 | package com.github.xjs.pojo; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Data; 5 | import lombok.NoArgsConstructor; 6 | 7 | @Data 8 | @AllArgsConstructor 9 | @NoArgsConstructor 10 | public class User { 11 | private Long id; 12 | private String username; 13 | private String address; 14 | } -------------------------------------------------------------------------------- /feign-compress-demo/order-service/src/main/resources/bootstrap.yml: -------------------------------------------------------------------------------- 1 | spring: 2 | application: 3 | name: order-service 4 | 5 | -------------------------------------------------------------------------------- /feign-compress-demo/user-service/src/main/java/com/github/xjs/UserApplication.java: -------------------------------------------------------------------------------- 1 | package com.github.xjs; 2 | 3 | import org.springframework.boot.SpringApplication; 4 | import org.springframework.boot.autoconfigure.SpringBootApplication; 5 | import org.springframework.cloud.openfeign.EnableFeignClients; 6 | 7 | @EnableFeignClients 8 | @SpringBootApplication 9 | public class UserApplication { 10 | public static void main(String[] args) { 11 | SpringApplication.run(UserApplication.class, args); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /feign-compress-demo/user-service/src/main/java/com/github/xjs/pojo/User.java: -------------------------------------------------------------------------------- 1 | package com.github.xjs.pojo; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Data; 5 | import lombok.NoArgsConstructor; 6 | 7 | @Data 8 | @AllArgsConstructor 9 | @NoArgsConstructor 10 | public class User { 11 | private Long id; 12 | private String username; 13 | private String address; 14 | } -------------------------------------------------------------------------------- /feign-compress-demo/user-service/src/main/java/com/github/xjs/service/UserService.java: -------------------------------------------------------------------------------- 1 | package com.github.xjs.service; 2 | 3 | import com.github.xjs.pojo.User; 4 | import lombok.extern.slf4j.Slf4j; 5 | import org.springframework.stereotype.Service; 6 | 7 | @Slf4j 8 | @Service 9 | public class UserService { 10 | 11 | public User queryById(Long id) { 12 | log.info("===========查询id={}的用户", id); 13 | return new User(id, "hello", "bj"); 14 | } 15 | } -------------------------------------------------------------------------------- /feign-compress-demo/user-service/src/main/resources/application.yml: -------------------------------------------------------------------------------- 1 | server: 2 | port: 8081 3 | compression: 4 | enabled: true 5 | min-response-size: 1B 6 | mime-types: 7 | - "application/json" 8 | - "application/xml" -------------------------------------------------------------------------------- /feign-compress-demo/user-service/src/main/resources/bootstrap.yml: -------------------------------------------------------------------------------- 1 | spring: 2 | application: 3 | name: user-service 4 | 5 | -------------------------------------------------------------------------------- /feign-decoder-demo/order-service/src/main/java/com/github/xjs/OrderApplication.java: -------------------------------------------------------------------------------- 1 | package com.github.xjs; 2 | 3 | import org.springframework.boot.SpringApplication; 4 | import org.springframework.boot.autoconfigure.SpringBootApplication; 5 | import org.springframework.cloud.openfeign.EnableFeignClients; 6 | 7 | @EnableFeignClients 8 | @SpringBootApplication 9 | public class OrderApplication { 10 | public static void main(String[] args) { 11 | SpringApplication.run(OrderApplication.class, args); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /feign-decoder-demo/order-service/src/main/java/com/github/xjs/feign/FeignConfig.java: -------------------------------------------------------------------------------- 1 | package com.github.xjs.feign; 2 | 3 | import org.springframework.context.annotation.Bean; 4 | 5 | public class FeignConfig { 6 | 7 | @Bean 8 | public FeignDecode feignDecode(){ 9 | return new FeignDecode(); 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /feign-decoder-demo/order-service/src/main/java/com/github/xjs/feign/UserContext.java: -------------------------------------------------------------------------------- 1 | package com.github.xjs.feign; 2 | 3 | public class UserContext { 4 | 5 | private static final ThreadLocal TL = new ThreadLocal<>(); 6 | 7 | public static void setUserId(Long userId){ 8 | TL.set(userId); 9 | } 10 | 11 | public static Long getUserId(){ 12 | return TL.get(); 13 | } 14 | 15 | public static void removeUserId(){ 16 | TL.remove(); 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /feign-decoder-demo/order-service/src/main/java/com/github/xjs/pojo/Order.java: -------------------------------------------------------------------------------- 1 | package com.github.xjs.pojo; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Data; 5 | import lombok.NoArgsConstructor; 6 | 7 | @NoArgsConstructor 8 | @AllArgsConstructor 9 | @Data 10 | public class Order { 11 | 12 | private Long id; 13 | private String goodsName; 14 | private String price; 15 | private Long userId; 16 | private User user; 17 | 18 | } 19 | -------------------------------------------------------------------------------- /feign-decoder-demo/order-service/src/main/java/com/github/xjs/pojo/User.java: -------------------------------------------------------------------------------- 1 | package com.github.xjs.pojo; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Data; 5 | import lombok.NoArgsConstructor; 6 | 7 | @Data 8 | @AllArgsConstructor 9 | @NoArgsConstructor 10 | public class User { 11 | private Long id; 12 | private String username; 13 | private String address; 14 | } -------------------------------------------------------------------------------- /feign-decoder-demo/order-service/src/main/resources/application.yml: -------------------------------------------------------------------------------- 1 | server: 2 | port: 8080 3 | spring: 4 | application: 5 | name: order-service 6 | logging: 7 | level: 8 | root: info 9 | com.github.xjs: debug 10 | feign: 11 | client: 12 | config: 13 | default: 14 | logger-level: full -------------------------------------------------------------------------------- /feign-decoder-demo/user-service/src/main/java/com/github/xjs/UserApplication.java: -------------------------------------------------------------------------------- 1 | package com.github.xjs; 2 | 3 | import org.springframework.boot.SpringApplication; 4 | import org.springframework.boot.autoconfigure.SpringBootApplication; 5 | import org.springframework.cloud.openfeign.EnableFeignClients; 6 | 7 | @EnableFeignClients 8 | @SpringBootApplication 9 | public class UserApplication { 10 | public static void main(String[] args) { 11 | SpringApplication.run(UserApplication.class, args); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /feign-decoder-demo/user-service/src/main/java/com/github/xjs/pojo/User.java: -------------------------------------------------------------------------------- 1 | package com.github.xjs.pojo; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Data; 5 | import lombok.NoArgsConstructor; 6 | 7 | @Data 8 | @AllArgsConstructor 9 | @NoArgsConstructor 10 | public class User { 11 | private Long id; 12 | private String username; 13 | private String address; 14 | } -------------------------------------------------------------------------------- /feign-decoder-demo/user-service/src/main/java/com/github/xjs/service/UserService.java: -------------------------------------------------------------------------------- 1 | package com.github.xjs.service; 2 | 3 | import com.github.xjs.pojo.User; 4 | import lombok.extern.slf4j.Slf4j; 5 | import org.springframework.stereotype.Service; 6 | 7 | @Slf4j 8 | @Service 9 | public class UserService { 10 | 11 | public User queryById(Long id) { 12 | log.info("==========查询id={}的用户", id); 13 | return new User(id, "hello", "bj"); 14 | } 15 | } -------------------------------------------------------------------------------- /feign-decoder-demo/user-service/src/main/resources/application.yml: -------------------------------------------------------------------------------- 1 | server: 2 | port: 8081 3 | spring: 4 | application: 5 | name: user-service -------------------------------------------------------------------------------- /feign-fallback-demo/order-service/src/main/java/com/github/xjs/OrderApplication.java: -------------------------------------------------------------------------------- 1 | package com.github.xjs; 2 | 3 | import org.springframework.boot.SpringApplication; 4 | import org.springframework.boot.autoconfigure.SpringBootApplication; 5 | import org.springframework.cloud.openfeign.EnableFeignClients; 6 | 7 | @EnableFeignClients 8 | @SpringBootApplication 9 | public class OrderApplication { 10 | public static void main(String[] args) { 11 | SpringApplication.run(OrderApplication.class, args); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /feign-fallback-demo/order-service/src/main/java/com/github/xjs/feign/FeignConfig.java: -------------------------------------------------------------------------------- 1 | package com.github.xjs.feign; 2 | 3 | import com.github.xjs.feign.fallback.UserFallbackFactory; 4 | import org.springframework.context.annotation.Bean; 5 | 6 | public class FeignConfig { 7 | @Bean 8 | public UserFallbackFactory userFallbackFactory(){ 9 | return new UserFallbackFactory(); 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /feign-fallback-demo/order-service/src/main/java/com/github/xjs/pojo/Order.java: -------------------------------------------------------------------------------- 1 | package com.github.xjs.pojo; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Data; 5 | import lombok.NoArgsConstructor; 6 | 7 | @NoArgsConstructor 8 | @AllArgsConstructor 9 | @Data 10 | public class Order { 11 | 12 | private Long id; 13 | private String goodsName; 14 | private String price; 15 | private Long userId; 16 | private User user; 17 | 18 | } 19 | -------------------------------------------------------------------------------- /feign-fallback-demo/order-service/src/main/java/com/github/xjs/pojo/User.java: -------------------------------------------------------------------------------- 1 | package com.github.xjs.pojo; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Data; 5 | import lombok.NoArgsConstructor; 6 | 7 | @Data 8 | @AllArgsConstructor 9 | @NoArgsConstructor 10 | public class User { 11 | private Long id; 12 | private String username; 13 | private String address; 14 | } -------------------------------------------------------------------------------- /feign-fallback-demo/user-service/src/main/java/com/github/xjs/UserApplication.java: -------------------------------------------------------------------------------- 1 | package com.github.xjs; 2 | 3 | import org.springframework.boot.SpringApplication; 4 | import org.springframework.boot.autoconfigure.SpringBootApplication; 5 | 6 | @SpringBootApplication 7 | public class UserApplication { 8 | public static void main(String[] args) { 9 | SpringApplication.run(UserApplication.class, args); 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /feign-fallback-demo/user-service/src/main/java/com/github/xjs/pojo/User.java: -------------------------------------------------------------------------------- 1 | package com.github.xjs.pojo; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Data; 5 | import lombok.NoArgsConstructor; 6 | 7 | @Data 8 | @AllArgsConstructor 9 | @NoArgsConstructor 10 | public class User { 11 | private Long id; 12 | private String username; 13 | private String address; 14 | } -------------------------------------------------------------------------------- /feign-fallback-demo/user-service/src/main/java/com/github/xjs/service/UserService.java: -------------------------------------------------------------------------------- 1 | package com.github.xjs.service; 2 | 3 | import com.github.xjs.pojo.User; 4 | import lombok.extern.slf4j.Slf4j; 5 | import org.springframework.stereotype.Service; 6 | 7 | @Slf4j 8 | @Service 9 | public class UserService { 10 | 11 | public User queryById(Long id) { 12 | log.info("===========查询id={}的用户", id); 13 | return new User(id, "hello", "bj"); 14 | } 15 | } -------------------------------------------------------------------------------- /feign-fallback-demo/user-service/src/main/resources/application.yml: -------------------------------------------------------------------------------- 1 | spring: 2 | application: 3 | name: userservice 4 | server: 5 | port: 8081 6 | -------------------------------------------------------------------------------- /feign-interceptor-demo/order-service/src/main/java/com/github/xjs/OrderApplication.java: -------------------------------------------------------------------------------- 1 | package com.github.xjs; 2 | 3 | import org.springframework.boot.SpringApplication; 4 | import org.springframework.boot.autoconfigure.SpringBootApplication; 5 | import org.springframework.cloud.openfeign.EnableFeignClients; 6 | 7 | @EnableFeignClients 8 | @SpringBootApplication 9 | public class OrderApplication { 10 | public static void main(String[] args) { 11 | SpringApplication.run(OrderApplication.class, args); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /feign-interceptor-demo/order-service/src/main/java/com/github/xjs/feign/FeignConfig.java: -------------------------------------------------------------------------------- 1 | package com.github.xjs.feign; 2 | 3 | import org.springframework.context.annotation.Bean; 4 | 5 | public class FeignConfig { 6 | @Bean 7 | public FeignRelayUserInterceptor feignRelayUserInterceptor(){ 8 | return new FeignRelayUserInterceptor(); 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /feign-interceptor-demo/order-service/src/main/java/com/github/xjs/feign/FeignRelayUserInterceptor.java: -------------------------------------------------------------------------------- 1 | package com.github.xjs.feign; 2 | 3 | import feign.RequestInterceptor; 4 | import feign.RequestTemplate; 5 | 6 | public class FeignRelayUserInterceptor implements RequestInterceptor { 7 | @Override 8 | public void apply(RequestTemplate template) { 9 | Long userId = UserContext.getUserId(); 10 | if (userId == null) { 11 | return; 12 | } 13 | template.header("userId", userId.toString()); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /feign-interceptor-demo/order-service/src/main/java/com/github/xjs/feign/UserContext.java: -------------------------------------------------------------------------------- 1 | package com.github.xjs.feign; 2 | 3 | public class UserContext { 4 | 5 | private static final ThreadLocal TL = new ThreadLocal<>(); 6 | 7 | public static void setUserId(Long userId){ 8 | TL.set(userId); 9 | } 10 | 11 | public static Long getUserId(){ 12 | return TL.get(); 13 | } 14 | 15 | public static void removeUserId(){ 16 | TL.remove(); 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /feign-interceptor-demo/order-service/src/main/java/com/github/xjs/pojo/Order.java: -------------------------------------------------------------------------------- 1 | package com.github.xjs.pojo; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Data; 5 | import lombok.NoArgsConstructor; 6 | 7 | @NoArgsConstructor 8 | @AllArgsConstructor 9 | @Data 10 | public class Order { 11 | 12 | private Long id; 13 | private String goodsName; 14 | private String price; 15 | private Long userId; 16 | private User user; 17 | 18 | } 19 | -------------------------------------------------------------------------------- /feign-interceptor-demo/order-service/src/main/java/com/github/xjs/pojo/User.java: -------------------------------------------------------------------------------- 1 | package com.github.xjs.pojo; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Data; 5 | import lombok.NoArgsConstructor; 6 | 7 | @Data 8 | @AllArgsConstructor 9 | @NoArgsConstructor 10 | public class User { 11 | private Long id; 12 | private String username; 13 | private String address; 14 | } -------------------------------------------------------------------------------- /feign-interceptor-demo/order-service/src/main/resources/application.yml: -------------------------------------------------------------------------------- 1 | server: 2 | port: 8080 3 | spring: 4 | application: 5 | name: order-service 6 | logging: 7 | level: 8 | root: info 9 | com.github.xjs: debug 10 | feign: 11 | client: 12 | config: 13 | default: 14 | logger-level: full -------------------------------------------------------------------------------- /feign-interceptor-demo/user-service/src/main/java/com/github/xjs/UserApplication.java: -------------------------------------------------------------------------------- 1 | package com.github.xjs; 2 | 3 | import org.springframework.boot.SpringApplication; 4 | import org.springframework.boot.autoconfigure.SpringBootApplication; 5 | import org.springframework.cloud.openfeign.EnableFeignClients; 6 | 7 | @EnableFeignClients 8 | @SpringBootApplication 9 | public class UserApplication { 10 | public static void main(String[] args) { 11 | SpringApplication.run(UserApplication.class, args); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /feign-interceptor-demo/user-service/src/main/java/com/github/xjs/pojo/User.java: -------------------------------------------------------------------------------- 1 | package com.github.xjs.pojo; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Data; 5 | import lombok.NoArgsConstructor; 6 | 7 | @Data 8 | @AllArgsConstructor 9 | @NoArgsConstructor 10 | public class User { 11 | private Long id; 12 | private String username; 13 | private String address; 14 | } -------------------------------------------------------------------------------- /feign-interceptor-demo/user-service/src/main/java/com/github/xjs/service/UserService.java: -------------------------------------------------------------------------------- 1 | package com.github.xjs.service; 2 | 3 | import com.github.xjs.pojo.User; 4 | import lombok.extern.slf4j.Slf4j; 5 | import org.springframework.stereotype.Service; 6 | 7 | @Slf4j 8 | @Service 9 | public class UserService { 10 | 11 | public User queryById(Long id) { 12 | log.info("==========查询id={}的用户", id); 13 | return new User(id, "hello", "bj"); 14 | } 15 | } -------------------------------------------------------------------------------- /feign-interceptor-demo/user-service/src/main/resources/application.yml: -------------------------------------------------------------------------------- 1 | server: 2 | port: 8081 3 | spring: 4 | application: 5 | name: user-service -------------------------------------------------------------------------------- /filter-demo/src/main/java/com/github/xjs/filterdemo/FilterdemoApplication.java: -------------------------------------------------------------------------------- 1 | package com.github.xjs.filterdemo; 2 | 3 | import org.springframework.boot.SpringApplication; 4 | import org.springframework.boot.autoconfigure.SpringBootApplication; 5 | import org.springframework.boot.web.servlet.ServletComponentScan; 6 | 7 | @ServletComponentScan 8 | @SpringBootApplication 9 | public class FilterdemoApplication { 10 | 11 | public static void main(String[] args) { 12 | SpringApplication.run(FilterdemoApplication.class, args); 13 | } 14 | 15 | } 16 | -------------------------------------------------------------------------------- /filter-demo/src/main/java/com/github/xjs/filterdemo/controller/DemoController.java: -------------------------------------------------------------------------------- 1 | package com.github.xjs.filterdemo.controller; 2 | 3 | import lombok.extern.slf4j.Slf4j; 4 | import org.springframework.web.bind.annotation.GetMapping; 5 | import org.springframework.web.bind.annotation.RestController; 6 | 7 | @Slf4j 8 | @RestController 9 | public class DemoController { 10 | 11 | @GetMapping("/demo") 12 | public String demo(){ 13 | log.info("demo"); 14 | return "success"; 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /filter-demo/src/main/resources/application.properties: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /filter-demo/src/test/java/com/github/xjs/filterdemo/FilterdemoApplicationTests.java: -------------------------------------------------------------------------------- 1 | package com.github.xjs.filterdemo; 2 | 3 | import org.junit.jupiter.api.Test; 4 | import org.springframework.boot.test.context.SpringBootTest; 5 | 6 | @SpringBootTest 7 | class FilterdemoApplicationTests { 8 | 9 | @Test 10 | void contextLoads() { 11 | } 12 | 13 | } 14 | -------------------------------------------------------------------------------- /gateway-demo/gateway-server/src/main/java/com/github/xjs/GatewayApplication.java: -------------------------------------------------------------------------------- 1 | package com.github.xjs; 2 | 3 | import org.springframework.boot.SpringApplication; 4 | import org.springframework.boot.autoconfigure.SpringBootApplication; 5 | 6 | @SpringBootApplication 7 | public class GatewayApplication { 8 | public static void main(String[] args) { 9 | SpringApplication.run(GatewayApplication.class, args); 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /gateway-demo/goods-servicde/src/main/java/com/github/xjs/GoodsApplication.java: -------------------------------------------------------------------------------- 1 | package com.github.xjs; 2 | 3 | import org.springframework.boot.SpringApplication; 4 | import org.springframework.boot.autoconfigure.SpringBootApplication; 5 | 6 | @SpringBootApplication 7 | public class GoodsApplication { 8 | public static void main(String[] args) { 9 | SpringApplication.run(GoodsApplication.class, args); 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /gateway-demo/goods-servicde/src/main/java/com/github/xjs/web/GoodsController.java: -------------------------------------------------------------------------------- 1 | package com.github.xjs.web; 2 | import lombok.extern.slf4j.Slf4j; 3 | import org.springframework.web.bind.annotation.*; 4 | 5 | @Slf4j 6 | @RestController 7 | @RequestMapping("/goods") 8 | public class GoodsController { 9 | 10 | 11 | @GetMapping("/{id}") 12 | public String queryById(@PathVariable("id") Long id) { 13 | return "goods:"+id; 14 | } 15 | 16 | } 17 | -------------------------------------------------------------------------------- /gateway-demo/goods-servicde/src/main/resources/application.yml: -------------------------------------------------------------------------------- 1 | server: 2 | port: 8082 3 | 4 | -------------------------------------------------------------------------------- /gateway-demo/goods-servicde/src/main/resources/bootstrap.yml: -------------------------------------------------------------------------------- 1 | spring: 2 | application: 3 | name: goods-service 4 | profiles: 5 | active: dev 6 | cloud: 7 | nacos: 8 | discovery: 9 | server-addr: localhost:8848 10 | config: 11 | server-addr: localhost:8848 12 | file-extension: yaml 13 | 14 | -------------------------------------------------------------------------------- /gateway-demo/user-service/src/main/java/com/github/xjs/UserApplication.java: -------------------------------------------------------------------------------- 1 | package com.github.xjs; 2 | 3 | import org.springframework.boot.SpringApplication; 4 | import org.springframework.boot.autoconfigure.SpringBootApplication; 5 | import org.springframework.cloud.openfeign.EnableFeignClients; 6 | 7 | @EnableFeignClients 8 | @SpringBootApplication 9 | public class UserApplication { 10 | public static void main(String[] args) { 11 | SpringApplication.run(UserApplication.class, args); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /gateway-demo/user-service/src/main/java/com/github/xjs/config/PatternProperties.java: -------------------------------------------------------------------------------- 1 | package com.github.xjs.config; 2 | 3 | import lombok.Data; 4 | import org.springframework.boot.context.properties.ConfigurationProperties; 5 | import org.springframework.stereotype.Component; 6 | 7 | @Data 8 | @Component 9 | @ConfigurationProperties(prefix = "pattern") 10 | public class PatternProperties { 11 | 12 | private String dataformat; 13 | 14 | private String filename; 15 | 16 | 17 | } 18 | -------------------------------------------------------------------------------- /gateway-demo/user-service/src/main/java/com/github/xjs/feign/FeignConfig.java: -------------------------------------------------------------------------------- 1 | package com.github.xjs.feign; 2 | 3 | import com.github.xjs.feign.fallback.GoodsFallbackFactory; 4 | import org.springframework.context.annotation.Bean; 5 | 6 | public class FeignConfig { 7 | @Bean 8 | public GoodsFallbackFactory goodsFallbackFactory(){ 9 | return new GoodsFallbackFactory(); 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /gateway-demo/user-service/src/main/java/com/github/xjs/pojo/User.java: -------------------------------------------------------------------------------- 1 | package com.github.xjs.pojo; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Data; 5 | import lombok.NoArgsConstructor; 6 | 7 | @Data 8 | @AllArgsConstructor 9 | @NoArgsConstructor 10 | public class User { 11 | private Long id; 12 | private String username; 13 | private String address; 14 | } -------------------------------------------------------------------------------- /gateway-demo/user-service/src/main/java/com/github/xjs/service/UserService.java: -------------------------------------------------------------------------------- 1 | package com.github.xjs.service; 2 | 3 | import com.github.xjs.pojo.User; 4 | import lombok.extern.slf4j.Slf4j; 5 | import org.springframework.stereotype.Service; 6 | 7 | @Slf4j 8 | @Service 9 | public class UserService { 10 | 11 | public User queryById(Long id) { 12 | log.info("===========查询id={}的用户", id); 13 | return new User(id, "hello", "bj"); 14 | } 15 | } -------------------------------------------------------------------------------- /gateway-demo/user-service/src/main/resources/application.yml: -------------------------------------------------------------------------------- 1 | server: 2 | port: 8081 3 | feign: 4 | circuitbreaker: 5 | enabled: true 6 | -------------------------------------------------------------------------------- /gateway-demo/user-service/src/main/resources/bootstrap.yml: -------------------------------------------------------------------------------- 1 | spring: 2 | application: 3 | name: userservice 4 | profiles: 5 | active: dev 6 | cloud: 7 | nacos: 8 | discovery: 9 | server-addr: localhost:8848 10 | config: 11 | server-addr: localhost:8848 12 | file-extension: yaml 13 | 14 | -------------------------------------------------------------------------------- /gateway-filter-demo/gateway/src/main/java/com/github/xjs/gateway/GatewayApplication.java: -------------------------------------------------------------------------------- 1 | package com.github.xjs.gateway; 2 | 3 | import org.springframework.boot.SpringApplication; 4 | import org.springframework.boot.autoconfigure.SpringBootApplication; 5 | 6 | @SpringBootApplication 7 | public class GatewayApplication { 8 | 9 | public static void main(String[] args) { 10 | SpringApplication.run(GatewayApplication.class, args); 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /gateway-filter-demo/gateway/src/main/resources/application.yml: -------------------------------------------------------------------------------- 1 | spring: 2 | application: 3 | name: gateway 4 | cloud: 5 | gateway: 6 | routes: 7 | - id: user-service 8 | uri: http://localhost:8081 9 | predicates: 10 | - Path=/user/* 11 | filters: 12 | - QueryToHeader=authorization,auth 13 | server: 14 | port: 8080 15 | -------------------------------------------------------------------------------- /gateway-filter-demo/user-service/src/main/java/com/github/xjs/user/UserApplication.java: -------------------------------------------------------------------------------- 1 | package com.github.xjs.user; 2 | 3 | import org.springframework.boot.SpringApplication; 4 | import org.springframework.boot.autoconfigure.SpringBootApplication; 5 | 6 | @SpringBootApplication 7 | public class UserApplication { 8 | public static void main(String[] args) { 9 | SpringApplication.run(UserApplication.class, args); 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /gateway-filter-demo/user-service/src/main/java/com/github/xjs/user/UserController.java: -------------------------------------------------------------------------------- 1 | package com.github.xjs.user; 2 | 3 | import org.springframework.web.bind.annotation.*; 4 | 5 | @RestController 6 | @RequestMapping("/user") 7 | public class UserController { 8 | 9 | @GetMapping("/{id}") 10 | public String queryById(@PathVariable("id") Long id, 11 | @RequestHeader(value = "auth",required = false)String auth) { 12 | return "user=" + id + ",auth=" + auth; 13 | } 14 | 15 | } 16 | -------------------------------------------------------------------------------- /gateway-filter-demo/user-service/src/main/resources/application.yml: -------------------------------------------------------------------------------- 1 | server: 2 | port: 8081 3 | spring: 4 | application: 5 | name: userservice -------------------------------------------------------------------------------- /gateway-filter-order/gateway/src/main/java/com/github/xjs/gateway/GatewayApplication.java: -------------------------------------------------------------------------------- 1 | package com.github.xjs.gateway; 2 | 3 | import org.springframework.boot.SpringApplication; 4 | import org.springframework.boot.autoconfigure.SpringBootApplication; 5 | 6 | @SpringBootApplication 7 | public class GatewayApplication { 8 | 9 | public static void main(String[] args) { 10 | SpringApplication.run(GatewayApplication.class, args); 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /gateway-filter-order/user-service/src/main/java/com/github/xjs/user/UserApplication.java: -------------------------------------------------------------------------------- 1 | package com.github.xjs.user; 2 | 3 | import org.springframework.boot.SpringApplication; 4 | import org.springframework.boot.autoconfigure.SpringBootApplication; 5 | 6 | @SpringBootApplication 7 | public class UserApplication { 8 | public static void main(String[] args) { 9 | SpringApplication.run(UserApplication.class, args); 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /gateway-filter-order/user-service/src/main/java/com/github/xjs/user/controller/UserController.java: -------------------------------------------------------------------------------- 1 | package com.github.xjs.user.controller; 2 | 3 | import org.springframework.web.bind.annotation.*; 4 | 5 | @RestController 6 | @RequestMapping("/user") 7 | public class UserController { 8 | 9 | @GetMapping("/{id}") 10 | public String queryById(@PathVariable("id") Long id, 11 | @RequestHeader(value = "auth",required = false)String auth) { 12 | return "user=" + id + ",auth=" + auth; 13 | } 14 | 15 | } 16 | -------------------------------------------------------------------------------- /gateway-filter-order/user-service/src/main/resources/application.yml: -------------------------------------------------------------------------------- 1 | server: 2 | port: 8081 3 | spring: 4 | application: 5 | name: userservice -------------------------------------------------------------------------------- /gateway-knife4j/.gitignore: -------------------------------------------------------------------------------- 1 | # Maven # 2 | target/ 3 | 4 | # IDEA # 5 | .idea/ 6 | *.iml 7 | 8 | # Eclipse # 9 | .settings/ 10 | .classpath 11 | .project -------------------------------------------------------------------------------- /gateway-knife4j/doc-service/src/main/java/com/github/xjs/DocApplication.java: -------------------------------------------------------------------------------- 1 | package com.github.xjs; 2 | 3 | import org.springframework.boot.SpringApplication; 4 | import org.springframework.boot.autoconfigure.SpringBootApplication; 5 | 6 | @SpringBootApplication 7 | public class DocApplication { 8 | 9 | public static void main(String[] args) { 10 | SpringApplication.run(DocApplication.class, args); 11 | } 12 | 13 | } 14 | -------------------------------------------------------------------------------- /gateway-knife4j/order-service/src/main/java/com/github/xjs/OrderApplication.java: -------------------------------------------------------------------------------- 1 | package com.github.xjs; 2 | 3 | import org.springframework.boot.SpringApplication; 4 | import org.springframework.boot.autoconfigure.SpringBootApplication; 5 | 6 | @SpringBootApplication 7 | public class OrderApplication { 8 | 9 | public static void main(String[] args) { 10 | SpringApplication.run(OrderApplication.class, args); 11 | } 12 | 13 | } 14 | -------------------------------------------------------------------------------- /gateway-knife4j/order-service/src/main/java/com/github/xjs/service/OrderService.java: -------------------------------------------------------------------------------- 1 | package com.github.xjs.service; 2 | 3 | import com.github.xjs.domain.Order; 4 | 5 | public interface OrderService { 6 | void create(Order order); 7 | 8 | Order getOrder(Long id); 9 | 10 | void update(Order order); 11 | 12 | void delete(Long id); 13 | } 14 | -------------------------------------------------------------------------------- /gateway-knife4j/order-service/src/main/resources/application.yml: -------------------------------------------------------------------------------- 1 | server: 2 | port: 8081 3 | spring: 4 | application: 5 | name: order-service 6 | mvc: 7 | pathmatch: 8 | matching-strategy: ANT_PATH_MATCHER 9 | cloud: 10 | nacos: 11 | discovery: 12 | server-addr: localhost:8848 13 | -------------------------------------------------------------------------------- /gateway-knife4j/user-service/src/main/java/com/github/xjs/UserApplication.java: -------------------------------------------------------------------------------- 1 | package com.github.xjs; 2 | 3 | import org.springframework.boot.SpringApplication; 4 | import org.springframework.boot.autoconfigure.SpringBootApplication; 5 | 6 | @SpringBootApplication 7 | public class UserApplication { 8 | 9 | public static void main(String[] args) { 10 | SpringApplication.run(UserApplication.class, args); 11 | } 12 | 13 | } 14 | -------------------------------------------------------------------------------- /gateway-knife4j/user-service/src/main/java/com/github/xjs/domain/User.java: -------------------------------------------------------------------------------- 1 | package com.github.xjs.domain; 2 | 3 | import io.swagger.annotations.ApiModelProperty; 4 | import lombok.Builder; 5 | import lombok.Data; 6 | import lombok.EqualsAndHashCode; 7 | 8 | @Data 9 | @EqualsAndHashCode(callSuper = false) 10 | @Builder 11 | public class User { 12 | @ApiModelProperty("用户ID") 13 | private Long id; 14 | @ApiModelProperty("用户名") 15 | private String username; 16 | @ApiModelProperty("密码") 17 | private String password; 18 | } 19 | -------------------------------------------------------------------------------- /gateway-knife4j/user-service/src/main/java/com/github/xjs/service/UserService.java: -------------------------------------------------------------------------------- 1 | package com.github.xjs.service; 2 | 3 | import com.github.xjs.domain.User; 4 | 5 | import java.util.List; 6 | 7 | public interface UserService { 8 | void create(User user); 9 | 10 | User getUser(Long id); 11 | 12 | void update(User user); 13 | 14 | void delete(Long id); 15 | 16 | User getByUsername(String username); 17 | 18 | List getUserByIds(List ids); 19 | } 20 | -------------------------------------------------------------------------------- /gateway-knife4j/user-service/src/main/resources/application.yml: -------------------------------------------------------------------------------- 1 | server: 2 | port: 8082 3 | spring: 4 | application: 5 | name: user-service 6 | mvc: 7 | pathmatch: 8 | matching-strategy: ANT_PATH_MATCHER 9 | cloud: 10 | nacos: 11 | discovery: 12 | server-addr: localhost:8848 13 | -------------------------------------------------------------------------------- /gateway-predicate-demo/gateway/src/main/java/com/github/demo/gateway/GatewayApplication.java: -------------------------------------------------------------------------------- 1 | package com.github.demo.gateway; 2 | 3 | 4 | import org.springframework.boot.SpringApplication; 5 | import org.springframework.boot.autoconfigure.SpringBootApplication; 6 | 7 | @SpringBootApplication 8 | public class GatewayApplication { 9 | public static void main(String[] args) { 10 | SpringApplication.run(GatewayApplication.class, args); 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /gateway-predicate-demo/gateway/src/main/resources/application.yml: -------------------------------------------------------------------------------- 1 | spring: 2 | application: 3 | name: gateway 4 | cloud: 5 | gateway: 6 | routes: 7 | - id: user-service 8 | uri: http://localhost:8081 9 | predicates: 10 | - Path=/user/* 11 | - Hour=9,21 12 | server: 13 | port: 8080 14 | -------------------------------------------------------------------------------- /gateway-predicate-demo/user-service/src/main/java/com/github/demo/user/UserApplication.java: -------------------------------------------------------------------------------- 1 | package com.github.demo.user; 2 | 3 | import org.springframework.boot.SpringApplication; 4 | import org.springframework.boot.autoconfigure.SpringBootApplication; 5 | 6 | @SpringBootApplication 7 | public class UserApplication { 8 | public static void main(String[] args) { 9 | SpringApplication.run(UserApplication.class, args); 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /gateway-predicate-demo/user-service/src/main/java/com/github/demo/user/UserController.java: -------------------------------------------------------------------------------- 1 | package com.github.demo.user; 2 | 3 | import lombok.extern.slf4j.Slf4j; 4 | import org.springframework.web.bind.annotation.*; 5 | 6 | @Slf4j 7 | @RestController 8 | @RequestMapping("/user") 9 | public class UserController { 10 | 11 | @GetMapping("/{id}") 12 | public String queryById(@PathVariable("id") Long id) { 13 | return "user=" + id; 14 | } 15 | 16 | } 17 | -------------------------------------------------------------------------------- /gateway-predicate-demo/user-service/src/main/resources/application.yml: -------------------------------------------------------------------------------- 1 | server: 2 | port: 8081 3 | spring: 4 | application: 5 | name: userservice -------------------------------------------------------------------------------- /gateway-sentinel-demo/gateway/src/main/java/com/github/xjs/gateway/GatewayApplication.java: -------------------------------------------------------------------------------- 1 | package com.github.xjs.gateway; 2 | 3 | import org.springframework.boot.SpringApplication; 4 | import org.springframework.boot.autoconfigure.SpringBootApplication; 5 | 6 | @SpringBootApplication 7 | public class GatewayApplication { 8 | 9 | public static void main(String[] args) { 10 | SpringApplication.run(GatewayApplication.class, args); 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /gateway-sentinel-demo/gateway/src/main/resources/application.yml: -------------------------------------------------------------------------------- 1 | server: 2 | port: 8080 3 | spring: 4 | application: 5 | name: gateway 6 | cloud: 7 | gateway: 8 | routes: 9 | - id: user-service 10 | uri: http://localhost:8081 11 | predicates: 12 | - Path=/user/* 13 | sentinel: 14 | transport: 15 | dashboard: localhost:8888 16 | 17 | -------------------------------------------------------------------------------- /gateway-sentinel-demo/user-service/src/main/java/com/github/xjs/user/UserApplication.java: -------------------------------------------------------------------------------- 1 | package com.github.xjs.user; 2 | 3 | import org.springframework.boot.SpringApplication; 4 | import org.springframework.boot.autoconfigure.SpringBootApplication; 5 | 6 | @SpringBootApplication 7 | public class UserApplication { 8 | public static void main(String[] args) { 9 | SpringApplication.run(UserApplication.class, args); 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /gateway-sentinel-demo/user-service/src/main/java/com/github/xjs/user/UserController.java: -------------------------------------------------------------------------------- 1 | package com.github.xjs.user; 2 | 3 | import org.springframework.web.bind.annotation.*; 4 | 5 | @RestController 6 | @RequestMapping("/user") 7 | public class UserController { 8 | 9 | @GetMapping("/{id}") 10 | public String queryById(@PathVariable("id") Long id) { 11 | return "user=" + id; 12 | } 13 | 14 | } 15 | -------------------------------------------------------------------------------- /gateway-sentinel-demo/user-service/src/main/resources/application.yml: -------------------------------------------------------------------------------- 1 | server: 2 | port: 8081 3 | spring: 4 | application: 5 | name: userservice -------------------------------------------------------------------------------- /grpc-demo/interceptor-unary/grpc-api/src/main/proto/product.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | 3 | option java_multiple_files = true; 4 | option java_package = "com.github.xjs.grpcapi"; 5 | option java_outer_classname = "ProductProto"; 6 | 7 | package product; 8 | 9 | service ProductInfo { 10 | 11 | rpc getProduct(ProductId) returns(Product); 12 | 13 | } 14 | 15 | message Product { 16 | string id = 1; 17 | string name=2; 18 | string description=3; 19 | float price=4; 20 | } 21 | 22 | message ProductId { 23 | string value = 1; 24 | } 25 | -------------------------------------------------------------------------------- /grpc-demo/spring-boot-chat-room/grpc-server/src/main/resources/application.yml: -------------------------------------------------------------------------------- 1 | grpc: 2 | server: 3 | port: 9090 -------------------------------------------------------------------------------- /grpc-demo/spring-boot-demo/grpc-api/src/main/proto/product.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | 3 | option java_multiple_files = true; 4 | option java_package = "com.github.xjs.grpcapi"; 5 | option java_outer_classname = "ProductProto"; 6 | 7 | package product; 8 | 9 | service ProductInfo { 10 | rpc getProduct(ProductId) returns(Product); 11 | } 12 | 13 | message Product { 14 | string id = 1; 15 | string name=2; 16 | string description=3; 17 | float price=4; 18 | } 19 | 20 | message ProductId { 21 | string value = 1; 22 | } -------------------------------------------------------------------------------- /grpc-demo/spring-boot-demo/grpc-client/src/main/java/com/github/xjs/grpcdemo/GrpcClientApplication.java: -------------------------------------------------------------------------------- 1 | package com.github.xjs.grpcdemo; 2 | 3 | import org.springframework.boot.SpringApplication; 4 | import org.springframework.boot.autoconfigure.SpringBootApplication; 5 | 6 | @SpringBootApplication 7 | public class GrpcClientApplication { 8 | public static void main(String[] args) { 9 | SpringApplication.run(GrpcClientApplication.class, args); 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /grpc-demo/spring-boot-demo/grpc-server/src/main/java/com/github/xjs/grpcdemo/GrpcServerApplication.java: -------------------------------------------------------------------------------- 1 | package com.github.xjs.grpcdemo; 2 | 3 | import org.springframework.boot.SpringApplication; 4 | import org.springframework.boot.autoconfigure.SpringBootApplication; 5 | 6 | @SpringBootApplication 7 | public class GrpcServerApplication { 8 | public static void main(String[] args) { 9 | SpringApplication.run(GrpcServerApplication.class, args); 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /grpc-demo/spring-boot-demo/grpc-server/src/main/resources/application.yml: -------------------------------------------------------------------------------- 1 | server: 2 | port: 8080 3 | spring: 4 | application: 5 | name: product-service 6 | grpc: 7 | server: 8 | port: 9090 -------------------------------------------------------------------------------- /h2-demo/src/main/resources/application.yml: -------------------------------------------------------------------------------- 1 | server: 2 | port: 8080 3 | spring: 4 | datasource: 5 | url: jdbc:h2:~/users 6 | driver-class-name: org.h2.Driver 7 | username: root #随便定义 8 | password: 123456 #随便定义 9 | h2: 10 | console: 11 | path: /h2-console #h2嵌入式数据库控制台 12 | enabled: true -------------------------------------------------------------------------------- /h2-demo/src/main/resources/db/schema-h2.sql: -------------------------------------------------------------------------------- 1 | /** 2 | 用户表 3 | */ 4 | DROP TABLE IF EXISTS tb_user; 5 | CREATE TABLE tb_user 6 | ( 7 | id BIGINT NOT NULL COMMENT 'id', 8 | name VARCHAR(30) COMMENT '姓名', 9 | PRIMARY KEY (id) 10 | ); 11 | insert into tb_user(id,name)values(1, 'zhangsan'); 12 | insert into tb_user(id,name)values(2, 'lisi'); 13 | insert into tb_user(id,name)values(3, 'wangwu'); -------------------------------------------------------------------------------- /hystrix-demo/hystrix-boot/src/test/java/com/github/xjs/hystrix/boot/HystrixBootApplicationTests.java: -------------------------------------------------------------------------------- 1 | package com.github.xjs.hystrix.boot; 2 | 3 | import org.junit.jupiter.api.Test; 4 | import org.springframework.boot.test.context.SpringBootTest; 5 | 6 | @SpringBootTest 7 | class HystrixBootApplicationTests { 8 | 9 | @Test 10 | void contextLoads() { 11 | } 12 | 13 | } 14 | -------------------------------------------------------------------------------- /hystrix-demo/hystrix-demo/activity-api/src/main/java/com/github/xjs/hystrix/activity/ActivityApiConfig.java: -------------------------------------------------------------------------------- 1 | package com.github.xjs.hystrix.activity; 2 | 3 | import org.springframework.context.annotation.ComponentScan; 4 | import org.springframework.context.annotation.Configuration; 5 | 6 | @Configuration 7 | @ComponentScan 8 | public class ActivityApiConfig { 9 | 10 | 11 | } 12 | -------------------------------------------------------------------------------- /hystrix-demo/hystrix-demo/activity-api/src/main/java/com/github/xjs/hystrix/activity/constants/Constant.java: -------------------------------------------------------------------------------- 1 | package com.github.xjs.hystrix.activity.constants; 2 | 3 | public interface Constant { 4 | 5 | String prefix= "http://ACTIVITY-SERVICE"; 6 | String register = prefix + "/sendCouponAfterRegister"; 7 | String timeout = prefix + "/sendCouponAfterRegisterTimeout"; 8 | String error = prefix + "/sendCouponAfterRegisterError"; 9 | 10 | } 11 | -------------------------------------------------------------------------------- /hystrix-demo/hystrix-demo/activity-api/src/main/resources/META-INF/spring.factories: -------------------------------------------------------------------------------- 1 | org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ 2 | com.github.xjs.hystrix.activity.ActivityApiConfig -------------------------------------------------------------------------------- /hystrix-demo/hystrix-demo/activity-service/src/main/resources/application.yml: -------------------------------------------------------------------------------- 1 | server: 2 | port: 8100 3 | 4 | spring: 5 | application: 6 | name: activity-service 7 | 8 | eureka: 9 | instance: 10 | preferIpAddress: true 11 | client: 12 | register-with-eureka: true 13 | service-url: 14 | defaultZone: http://localhost:8000/eureka/ 15 | 16 | 17 | -------------------------------------------------------------------------------- /hystrix-demo/hystrix-demo/dashboard/src/main/resources/application.yml: -------------------------------------------------------------------------------- 1 | server: 2 | port: 8500 3 | -------------------------------------------------------------------------------- /hystrix-demo/hystrix-demo/registry/src/main/resources/application.yml: -------------------------------------------------------------------------------- 1 | server: 2 | port: 8000 3 | 4 | spring: 5 | application: 6 | name: registry 7 | 8 | eureka: 9 | client: 10 | register-with-eureka: false 11 | fetch-registry: false 12 | service-url: 13 | defaultZone: http://localhost:8000/eureka 14 | server: 15 | enable-self-preservation: false 16 | 17 | 18 | -------------------------------------------------------------------------------- /hystrix-demo/hystrix-demo/turbine/src/main/resources/application.yml: -------------------------------------------------------------------------------- 1 | server: 2 | port: 8700 3 | 4 | eureka: 5 | instance: 6 | preferIpAddress: true 7 | client: 8 | register-with-eureka: true 9 | service-url: 10 | defaultZone: http://localhost:8000/eureka/ 11 | 12 | turbine: 13 | appConfig: user-service 14 | clusterNameExpression: "'default'" 15 | 16 | spring: 17 | application: 18 | name: turbine -------------------------------------------------------------------------------- /hystrix-demo/hystrix-demo/user-service/readme3.txt: -------------------------------------------------------------------------------- 1 | 目前存在的问题: 2 | 1.服务地址是字符串,容易出错 3 | 2.服务的入参和返回值是在客户端写的,不容易与服务端保持一致 4 | 3.服务提供者发生了变化,如何通知到调用者 5 | 解决方案: 6 | 1.把服务地址抽取成常量 7 | 2.让服务端提供调用接口,客户端只负责引用 8 | 3.抽取接口,让服务提供者 和 api都实现接口 9 | 10 | 1.抽取常量放到 activity-api 11 | 2.在activity-api里面: 12 | 2.1 提供ActivityApiService,里面做服务调用 13 | 2.2 提供AutoConfiguration,注册ActivityApiService 14 | 2.3 用户服务引用ActivityApiService 15 | 2.4 此时,hystrix的设置就不能放在activity-api,而是放在服务调用方里面 16 | 3. 17 | 18 | -------------------------------------------------------------------------------- /hystrix-demo/hystrix-demo/user-service/src/main/java/com/github/xjs/hystrix/user/service/FeignActivitServiceClient.java: -------------------------------------------------------------------------------- 1 | package com.github.xjs.hystrix.user.service; 2 | 3 | import com.github.xjs.hystrix.activity.feign.IFeignActivitService; 4 | import org.springframework.cloud.openfeign.FeignClient; 5 | 6 | @FeignClient(name="activity-service", fallbackFactory = IFeignActivitServiceFallbackFactory.class) 7 | public interface FeignActivitServiceClient extends IFeignActivitService { 8 | 9 | } 10 | -------------------------------------------------------------------------------- /hystrix-demo/hystrix-javanica/src/main/java/com/github/xjs/hystrix/Profile.java: -------------------------------------------------------------------------------- 1 | package com.github.xjs.hystrix; 2 | 3 | public class Profile { 4 | private String name; 5 | private String email; 6 | 7 | public String getName() { 8 | return name; 9 | } 10 | 11 | public void setName(String name) { 12 | this.name = name; 13 | } 14 | 15 | public String getEmail() { 16 | return email; 17 | } 18 | 19 | public void setEmail(String email) { 20 | this.email = email; 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /hystrix-demo/hystrix-javanica/src/main/java/com/github/xjs/hystrix/demo4/BizException.java: -------------------------------------------------------------------------------- 1 | package com.github.xjs.hystrix.demo4; 2 | 3 | public class BizException extends RuntimeException { 4 | } 5 | -------------------------------------------------------------------------------- /hystrix-demo/hystrix-javanica/src/main/resources/readme.txt: -------------------------------------------------------------------------------- 1 | https://github.com/Netflix/Hystrix/tree/master/hystrix-contrib/hystrix-javanica -------------------------------------------------------------------------------- /hystrix-demo/hystrix/src/main/resources/readme.txt: -------------------------------------------------------------------------------- 1 | https://github.com/Netflix/Hystrix/wiki/How-To-Use -------------------------------------------------------------------------------- /import-demo/src/main/java/com/github/xjs/importdemo/config/DemoConfig.java: -------------------------------------------------------------------------------- 1 | package com.github.xjs.importdemo.config; 2 | 3 | import com.github.xjs.importdemo.service.Service2; 4 | import org.springframework.context.annotation.Bean; 5 | import org.springframework.context.annotation.Configuration; 6 | 7 | @Configuration 8 | public class DemoConfig { 9 | @Bean 10 | public Service2 service2(){ 11 | return new Service2(); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /import-demo/src/main/java/com/github/xjs/importdemo/config/DemoScan.java: -------------------------------------------------------------------------------- 1 | package com.github.xjs.importdemo.config; 2 | 3 | import org.springframework.context.annotation.Import; 4 | 5 | import java.lang.annotation.*; 6 | 7 | @Retention(RetentionPolicy.RUNTIME) 8 | @Target({ElementType.TYPE}) 9 | @Import({DemoImportSelector.class}) 10 | public @interface DemoScan { 11 | /** 12 | * 要扫描的根路径 13 | * */ 14 | String basePackage() default ""; 15 | } 16 | -------------------------------------------------------------------------------- /import-demo/src/main/java/com/github/xjs/importdemo/service/Service1.java: -------------------------------------------------------------------------------- 1 | package com.github.xjs.importdemo.service; 2 | 3 | public class Service1 { 4 | public Service1(){ 5 | System.out.println("Service1"); 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /import-demo/src/main/java/com/github/xjs/importdemo/service/Service2.java: -------------------------------------------------------------------------------- 1 | package com.github.xjs.importdemo.service; 2 | 3 | public class Service2 { 4 | public Service2(){ 5 | System.out.println("service2"); 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /import-demo/src/main/java/com/github/xjs/importdemo/service/Service3.java: -------------------------------------------------------------------------------- 1 | package com.github.xjs.importdemo.service; 2 | 3 | public class Service3 { 4 | 5 | public Service3(){ 6 | System.out.println("service3"); 7 | } 8 | 9 | } 10 | -------------------------------------------------------------------------------- /import-demo/src/main/java/com/github/xjs/importdemo/service/Service4.java: -------------------------------------------------------------------------------- 1 | package com.github.xjs.importdemo.service; 2 | 3 | public class Service4 { 4 | 5 | public Service4(){ 6 | System.out.println("service4"); 7 | } 8 | 9 | } 10 | -------------------------------------------------------------------------------- /ioc-demo/Spring IOC.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xjs1919/learning-demo/422a6e01331330db5623e98c0b2d2224b78186c6/ioc-demo/Spring IOC.txt -------------------------------------------------------------------------------- /ioc-demo/src/main/java/com/github/xjs/iocdemo/IocDemoApplication.java: -------------------------------------------------------------------------------- 1 | package com.github.xjs.iocdemo; 2 | 3 | import org.springframework.boot.SpringApplication; 4 | import org.springframework.boot.autoconfigure.SpringBootApplication; 5 | 6 | @SpringBootApplication 7 | public class IocDemoApplication { 8 | public static void main(String[] args) { 9 | SpringApplication.run(IocDemoApplication.class, args); 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /ioc-demo/src/main/java/com/github/xjs/iocdemo/inject1/IService.java: -------------------------------------------------------------------------------- 1 | package com.github.xjs.iocdemo.inject1; 2 | 3 | public interface IService { 4 | } 5 | -------------------------------------------------------------------------------- /ioc-demo/src/main/java/com/github/xjs/iocdemo/inject1/Service1.java: -------------------------------------------------------------------------------- 1 | package com.github.xjs.iocdemo.inject1; 2 | 3 | public class Service1 implements IService { 4 | 5 | public Service1(){ 6 | System.out.println("Service1():" + this); 7 | } 8 | 9 | } 10 | -------------------------------------------------------------------------------- /ioc-demo/src/main/java/com/github/xjs/iocdemo/inject1/Service2.java: -------------------------------------------------------------------------------- 1 | package com.github.xjs.iocdemo.inject1; 2 | 3 | public class Service2 implements IService { 4 | 5 | public Service2(){ 6 | System.out.println("Service2():" +this); 7 | } 8 | 9 | } 10 | -------------------------------------------------------------------------------- /ioc-demo/src/main/java/com/github/xjs/iocdemo/inject1/Service3.java: -------------------------------------------------------------------------------- 1 | package com.github.xjs.iocdemo.inject1; 2 | 3 | public class Service3 { 4 | 5 | private IService iService; 6 | 7 | public Service3(IService iService){ 8 | this.iService = iService; 9 | } 10 | 11 | public IService getIService(){ 12 | return iService; 13 | } 14 | 15 | } 16 | -------------------------------------------------------------------------------- /ioc-demo/src/main/java/com/github/xjs/iocdemo/inject2/IService.java: -------------------------------------------------------------------------------- 1 | package com.github.xjs.iocdemo.inject2; 2 | 3 | public interface IService { 4 | } 5 | -------------------------------------------------------------------------------- /ioc-demo/src/main/java/com/github/xjs/iocdemo/inject2/Main.java: -------------------------------------------------------------------------------- 1 | package com.github.xjs.iocdemo.inject2; 2 | 3 | import org.springframework.context.annotation.AnnotationConfigApplicationContext; 4 | 5 | public class Main { 6 | public static void main(String[] args) { 7 | AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext(DemoApp.class); 8 | Service3 s3 = ctx.getBean(Service3.class); 9 | System.out.println(s3.getService()); 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /ioc-demo/src/main/java/com/github/xjs/iocdemo/inject2/MyQualifier.java: -------------------------------------------------------------------------------- 1 | package com.github.xjs.iocdemo.inject2; 2 | 3 | import org.springframework.beans.factory.annotation.Qualifier; 4 | 5 | import java.lang.annotation.ElementType; 6 | import java.lang.annotation.Retention; 7 | import java.lang.annotation.RetentionPolicy; 8 | import java.lang.annotation.Target; 9 | 10 | @Target({ElementType.FIELD, ElementType.PARAMETER, ElementType.METHOD}) 11 | @Retention(RetentionPolicy.RUNTIME) 12 | @Qualifier 13 | public @interface MyQualifier { 14 | } 15 | -------------------------------------------------------------------------------- /ioc-demo/src/main/java/com/github/xjs/iocdemo/inject2/Service1.java: -------------------------------------------------------------------------------- 1 | package com.github.xjs.iocdemo.inject2; 2 | 3 | 4 | public class Service1 implements IService { 5 | 6 | public Service1(){ 7 | System.out.println("Service1():" + this); 8 | } 9 | 10 | } 11 | -------------------------------------------------------------------------------- /ioc-demo/src/main/java/com/github/xjs/iocdemo/inject2/Service2.java: -------------------------------------------------------------------------------- 1 | package com.github.xjs.iocdemo.inject2; 2 | 3 | public class Service2 implements IService{ 4 | public Service2(){ 5 | System.out.println("Service2():" + this); 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /ioc-demo/src/main/java/com/github/xjs/iocdemo/inject2/Service3.java: -------------------------------------------------------------------------------- 1 | package com.github.xjs.iocdemo.inject2; 2 | 3 | public class Service3 implements IService{ 4 | 5 | private IService service; 6 | 7 | public Service3(IService service) { 8 | this.service = service; 9 | } 10 | 11 | public IService getService() { 12 | return service; 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /ioc-demo/src/main/java/com/github/xjs/iocdemo/inject3/IService.java: -------------------------------------------------------------------------------- 1 | package com.github.xjs.iocdemo.inject3; 2 | 3 | public interface IService { 4 | } 5 | -------------------------------------------------------------------------------- /ioc-demo/src/main/java/com/github/xjs/iocdemo/inject3/IntegerService.java: -------------------------------------------------------------------------------- 1 | package com.github.xjs.iocdemo.inject3; 2 | 3 | public class IntegerService implements IService { 4 | } 5 | -------------------------------------------------------------------------------- /ioc-demo/src/main/java/com/github/xjs/iocdemo/inject3/Main.java: -------------------------------------------------------------------------------- 1 | package com.github.xjs.iocdemo.inject3; 2 | 3 | import org.springframework.context.annotation.AnnotationConfigApplicationContext; 4 | 5 | public class Main { 6 | public static void main(String[] args) { 7 | AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext(DemoApp.class); 8 | Service6 s3 = ctx.getBean(Service6.class); 9 | System.out.println(s3.getS1()); 10 | System.out.println(s3.getS2()); 11 | 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /ioc-demo/src/main/java/com/github/xjs/iocdemo/inject3/StringService.java: -------------------------------------------------------------------------------- 1 | package com.github.xjs.iocdemo.inject3; 2 | 3 | public class StringService implements IService { 4 | } 5 | -------------------------------------------------------------------------------- /ioc-demo/src/main/java/com/github/xjs/iocdemo/instantiating/DemoApp.java: -------------------------------------------------------------------------------- 1 | package com.github.xjs.iocdemo.instantiating; 2 | 3 | import org.springframework.context.annotation.Configuration; 4 | import org.springframework.context.annotation.ImportResource; 5 | 6 | @Configuration 7 | @ImportResource("classpath:com/github/xjs/iocdemo/instantiating/beans.xml") 8 | public class DemoApp { 9 | } -------------------------------------------------------------------------------- /ioc-demo/src/main/java/com/github/xjs/iocdemo/instantiating/IService.java: -------------------------------------------------------------------------------- 1 | package com.github.xjs.iocdemo.instantiating; 2 | 3 | public interface IService { 4 | } 5 | -------------------------------------------------------------------------------- /ioc-demo/src/main/java/com/github/xjs/iocdemo/instantiating/Main.java: -------------------------------------------------------------------------------- 1 | package com.github.xjs.iocdemo.instantiating; 2 | 3 | import org.springframework.context.annotation.AnnotationConfigApplicationContext; 4 | 5 | public class Main { 6 | public static void main(String[] args) { 7 | AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext(DemoApp.class); 8 | System.out.println(ctx.getType("serviceFactory")); 9 | System.out.println(ctx.getType("randomService")); 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /ioc-demo/src/main/java/com/github/xjs/iocdemo/instantiating/Service1.java: -------------------------------------------------------------------------------- 1 | package com.github.xjs.iocdemo.instantiating; 2 | 3 | public class Service1 implements IService { 4 | } 5 | -------------------------------------------------------------------------------- /ioc-demo/src/main/java/com/github/xjs/iocdemo/instantiating/Service2.java: -------------------------------------------------------------------------------- 1 | package com.github.xjs.iocdemo.instantiating; 2 | 3 | public class Service2 implements IService { 4 | } 5 | -------------------------------------------------------------------------------- /ioc-demo/src/main/java/com/github/xjs/iocdemo/instantiating/ServiceFactory.java: -------------------------------------------------------------------------------- 1 | package com.github.xjs.iocdemo.instantiating; 2 | 3 | public class ServiceFactory { 4 | 5 | private static int i = 0; 6 | 7 | private ServiceFactory() {} 8 | 9 | public static IService createInstance() { 10 | return new Service1(); 11 | } 12 | 13 | public IService createService() { 14 | return new Service2(); 15 | } 16 | 17 | } 18 | -------------------------------------------------------------------------------- /ioc-demo/src/main/java/com/github/xjs/iocdemo/lifecycle/DemoApp.java: -------------------------------------------------------------------------------- 1 | package com.github.xjs.iocdemo.lifecycle; 2 | 3 | import org.springframework.context.annotation.Bean; 4 | import org.springframework.context.annotation.Configuration; 5 | 6 | @Configuration 7 | public class DemoApp { 8 | 9 | @Bean(initMethod = "initMethod", destroyMethod = "destroyMethod") 10 | public Service1 service1(){ 11 | return new Service1(); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /ioc-demo/src/main/java/com/github/xjs/iocdemo/lifecycle/Main.java: -------------------------------------------------------------------------------- 1 | package com.github.xjs.iocdemo.lifecycle; 2 | 3 | import org.springframework.context.annotation.AnnotationConfigApplicationContext; 4 | 5 | public class Main { 6 | public static void main(String[] args) { 7 | AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext(DemoApp.class); 8 | ctx.getBean(Service1.class); 9 | ctx.close(); 10 | //如果不主动调用close(),也可以注册ctx.registerShutdownHook(); 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /ioc-demo/src/main/java/com/github/xjs/iocdemo/methodinjection/coupled/CoupleApp.java: -------------------------------------------------------------------------------- 1 | package com.github.xjs.iocdemo.methodinjection.coupled; 2 | 3 | import org.springframework.context.annotation.ComponentScan; 4 | 5 | @ComponentScan 6 | public class CoupleApp { 7 | } 8 | -------------------------------------------------------------------------------- /ioc-demo/src/main/java/com/github/xjs/iocdemo/methodinjection/lookupmethod/Command.java: -------------------------------------------------------------------------------- 1 | package com.github.xjs.iocdemo.methodinjection.lookupmethod; 2 | 3 | public class Command { 4 | 5 | public Command(){ 6 | System.out.println(this); 7 | } 8 | 9 | public void setState(Object commandState) { 10 | } 11 | 12 | public Object execute() { 13 | return null; 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /ioc-demo/src/main/java/com/github/xjs/iocdemo/methodinjection/lookupmethod/Lookup3App.java: -------------------------------------------------------------------------------- 1 | package com.github.xjs.iocdemo.methodinjection.lookupmethod; 2 | 3 | import org.springframework.context.annotation.ComponentScan; 4 | 5 | @ComponentScan 6 | public class Lookup3App { 7 | 8 | } 9 | -------------------------------------------------------------------------------- /ioc-demo/src/main/java/com/github/xjs/iocdemo/methodinjection/lookupmethod/LookupApp.java: -------------------------------------------------------------------------------- 1 | package com.github.xjs.iocdemo.methodinjection.lookupmethod; 2 | 3 | import org.springframework.context.annotation.ImportResource; 4 | 5 | @ImportResource("classpath:com/github/xjs/iocdemo/methodinjection/lookupmethod/beans.xml") 6 | public class LookupApp { 7 | } 8 | -------------------------------------------------------------------------------- /ioc-demo/src/main/java/com/github/xjs/iocdemo/other/Service6.java: -------------------------------------------------------------------------------- 1 | package com.github.xjs.iocdemo.other; 2 | 3 | import org.springframework.stereotype.Component; 4 | 5 | import javax.annotation.PostConstruct; 6 | 7 | @Component 8 | public class Service6 { 9 | 10 | @PostConstruct 11 | public void PostConstruct(){ 12 | System.out.println(">>>>>>>>>>>>>>>Service6#PostConstruct()"); 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /ioc-demo/src/main/java/com/github/xjs/iocdemo/scopedemo/Service1.java: -------------------------------------------------------------------------------- 1 | package com.github.xjs.iocdemo.scopedemo; 2 | 3 | public class Service1 { 4 | } 5 | -------------------------------------------------------------------------------- /ioc-demo/src/test/java/com/github/xjs/redis/SpringBootDemoTest.java: -------------------------------------------------------------------------------- 1 | package com.github.xjs.redis; 2 | 3 | import org.junit.runner.RunWith; 4 | import org.springframework.boot.test.context.SpringBootTest; 5 | import org.springframework.test.context.junit4.SpringRunner; 6 | 7 | @SpringBootTest 8 | @RunWith(SpringRunner.class) 9 | public class SpringBootDemoTest { 10 | 11 | } 12 | -------------------------------------------------------------------------------- /jpa-demo/jpa/src/main/java/com/github/xjs/entity/singletable/Gender.java: -------------------------------------------------------------------------------- 1 | package com.github.xjs.entity.singletable; 2 | 3 | public enum Gender { 4 | MALE, FEMALE 5 | } -------------------------------------------------------------------------------- /jpa-demo/spring-data-jpa/src/main/java/com/github/xjs/JpaApplication.java: -------------------------------------------------------------------------------- 1 | package com.github.xjs; 2 | 3 | import org.springframework.boot.SpringApplication; 4 | import org.springframework.boot.autoconfigure.SpringBootApplication; 5 | 6 | @SpringBootApplication 7 | public class JpaApplication { 8 | public static void main(String[] args) { 9 | SpringApplication.run(JpaApplication.class, args); 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /jpa-demo/spring-data-jpa/src/main/java/com/github/xjs/dao/BlogDao.java: -------------------------------------------------------------------------------- 1 | package com.github.xjs.dao; 2 | 3 | import com.github.xjs.entity.Blog; 4 | import org.springframework.data.jpa.repository.JpaRepository; 5 | import org.springframework.data.jpa.repository.JpaSpecificationExecutor; 6 | 7 | public interface BlogDao extends JpaRepository, JpaSpecificationExecutor { 8 | } 9 | -------------------------------------------------------------------------------- /jpa-demo/spring-data-jpa/src/main/java/com/github/xjs/entity/Gender.java: -------------------------------------------------------------------------------- 1 | package com.github.xjs.entity; 2 | 3 | public enum Gender { 4 | MALE, FEMALE 5 | } -------------------------------------------------------------------------------- /jpa-demo/spring-data-jpa/src/main/resources/application.yml: -------------------------------------------------------------------------------- 1 | spring: 2 | application: 3 | name: jpa 4 | datasource: 5 | driver-class-name: com.informix.jdbc.IfxDriver 6 | url: jdbc:informix-sqli://192.168.200.128:9088/jpa_test:INFORMIXSERVER=ifxserver;user=informix;password=in4mix; 7 | jpa: 8 | database: informix 9 | database-platform: org.hibernate.dialect.Informix10Dialect 10 | show-sql: true 11 | hibernate: 12 | ddl-auto: none -------------------------------------------------------------------------------- /jsonp-demo/src/main/resources/static/jsonp.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | jsonp 6 | 7 | 8 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /knife4j-demo/src/main/java/com/github/xjs/Knife4jApplication.java: -------------------------------------------------------------------------------- 1 | package com.github.xjs; 2 | 3 | import org.springframework.boot.SpringApplication; 4 | import org.springframework.boot.autoconfigure.SpringBootApplication; 5 | 6 | @SpringBootApplication 7 | public class Knife4jApplication { 8 | public static void main(String[] args) { 9 | SpringApplication.run(Knife4jApplication.class, args); 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /knife4j-demo/src/main/java/com/github/xjs/controller/DemoController.java: -------------------------------------------------------------------------------- 1 | package com.github.xjs.controller; 2 | 3 | import io.swagger.annotations.Api; 4 | import io.swagger.annotations.ApiOperation; 5 | import org.springframework.web.bind.annotation.GetMapping; 6 | import org.springframework.web.bind.annotation.RestController; 7 | 8 | @Api(tags = "测试类") 9 | @RestController 10 | public class DemoController { 11 | 12 | @ApiOperation("测试方法") 13 | @GetMapping("/demo") 14 | public String demo(){ 15 | return "demo"; 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /knife4j-demo/src/main/resources/application.yml: -------------------------------------------------------------------------------- 1 | # 方式1 2 | #spring: 3 | # mvc: 4 | # pathmatch: 5 | # matching-strategy: ant_path_matcher 6 | # 方式2 7 | knife4j: 8 | enable: true 9 | openapi: 10 | title: 接口文档 11 | description: "接口文档" 12 | email: 605162215@qq.com 13 | concat: xjs1919 14 | url: https://github.com/xjs1919 15 | version: v1.0.0 16 | group: 17 | default: 18 | group-name: default 19 | api-rule: package 20 | api-rule-resources: 21 | - com.github.xjs.controller -------------------------------------------------------------------------------- /knife4j-demo/src/main/resources/static/index.html: -------------------------------------------------------------------------------- 1 | this is index.html -------------------------------------------------------------------------------- /lettuce-prometheus-demo/src/main/java/com/github/xjs1919/DemoApplication.java: -------------------------------------------------------------------------------- 1 | package com.github.xjs1919; 2 | 3 | import org.springframework.boot.SpringApplication; 4 | import org.springframework.boot.autoconfigure.SpringBootApplication; 5 | 6 | @SpringBootApplication 7 | public class DemoApplication { 8 | 9 | public static void main(String[] args) { 10 | SpringApplication.run(DemoApplication.class, args); 11 | } 12 | 13 | } 14 | -------------------------------------------------------------------------------- /lettuce-prometheus-demo/src/main/resources/application.yml: -------------------------------------------------------------------------------- 1 | spring: 2 | application: 3 | name: demo-application 4 | 5 | redis: 6 | host: 127.0.0.1 7 | port: 6379 8 | password: 123456 9 | 10 | 11 | management: 12 | endpoints: 13 | web: 14 | exposure: 15 | include: prometheus, health 16 | metrics: 17 | tags: 18 | application: ${spring.application.name} -------------------------------------------------------------------------------- /logback-demo/src/main/java/com/example/demo/DemoApplication.java: -------------------------------------------------------------------------------- 1 | package com.example.demo; 2 | 3 | import org.springframework.boot.SpringApplication; 4 | import org.springframework.boot.autoconfigure.SpringBootApplication; 5 | 6 | @SpringBootApplication 7 | public class DemoApplication { 8 | 9 | public static void main(String[] args) { 10 | SpringApplication.run(DemoApplication.class, args); 11 | } 12 | 13 | } 14 | -------------------------------------------------------------------------------- /logback-demo/src/main/java/com/example/demo/log/UserLogbackLayout.java: -------------------------------------------------------------------------------- 1 | package com.example.demo.log; 2 | 3 | import ch.qos.logback.classic.PatternLayout; 4 | 5 | /** 6 | * @author xujiashuai 7 | * @date 2022/5/27 14:46 8 | **/ 9 | public class UserLogbackLayout extends PatternLayout { 10 | 11 | static { 12 | DEFAULT_CONVERTER_MAP.put("u", LogbackUserPatternConverter.class.getName()); 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /logback-demo/src/main/resources/application.yml: -------------------------------------------------------------------------------- 1 | spring: 2 | application: 3 | name: logback-demo 4 | server: 5 | port: 9999 -------------------------------------------------------------------------------- /logstash-demo/src/main/java/com/example/demo/DemoApplication.java: -------------------------------------------------------------------------------- 1 | package com.example.demo; 2 | 3 | import org.springframework.boot.SpringApplication; 4 | import org.springframework.boot.autoconfigure.SpringBootApplication; 5 | 6 | @SpringBootApplication 7 | public class DemoApplication { 8 | 9 | public static void main(String[] args) { 10 | SpringApplication.run(DemoApplication.class, args); 11 | } 12 | 13 | } 14 | -------------------------------------------------------------------------------- /logstash-demo/src/main/resources/application.yml: -------------------------------------------------------------------------------- 1 | spring: 2 | application: 3 | name: logstash-demo 4 | server: 5 | port: 9999 -------------------------------------------------------------------------------- /mockbatis-demo/mockbatis-spring-boot-starter-demo/src/main/java/com/test/demo/DemoApplication.java: -------------------------------------------------------------------------------- 1 | package com.test.demo; 2 | 3 | import com.github.xjs.mockbatis.config.MockScan; 4 | import org.springframework.boot.SpringApplication; 5 | import org.springframework.boot.autoconfigure.SpringBootApplication; 6 | 7 | @SpringBootApplication 8 | @MockScan("com.test.demo.mapper") 9 | public class DemoApplication { 10 | 11 | public static void main(String[] args) { 12 | SpringApplication.run(DemoApplication.class, args); 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /mockbatis-demo/mockbatis-spring-boot-starter-demo/src/main/java/com/test/demo/domain/User.java: -------------------------------------------------------------------------------- 1 | package com.test.demo.domain; 2 | 3 | import lombok.Data; 4 | 5 | @Data 6 | public class User { 7 | 8 | private int id; 9 | 10 | private String name; 11 | 12 | } 13 | -------------------------------------------------------------------------------- /mockbatis-demo/mockbatis-spring-boot-starter-demo/src/main/java/com/test/demo/mapper/UserMapper.java: -------------------------------------------------------------------------------- 1 | package com.test.demo.mapper; 2 | 3 | import com.github.xjs.mockbatis.config.MockMapper; 4 | import com.github.xjs.mockbatis.config.Select; 5 | import com.test.demo.domain.User; 6 | 7 | @MockMapper 8 | public interface UserMapper { 9 | 10 | @Select("select * from user where id = #1") 11 | public User selectById(int id); 12 | 13 | } 14 | -------------------------------------------------------------------------------- /mockbatis-demo/mockbatis-spring-boot-starter-demo/src/test/java/com/test/demo/DemoApplicationTest.java: -------------------------------------------------------------------------------- 1 | package com.test.demo; 2 | 3 | import org.junit.runner.RunWith; 4 | import org.springframework.boot.SpringApplication; 5 | import org.springframework.boot.autoconfigure.SpringBootApplication; 6 | import org.springframework.boot.test.context.SpringBootTest; 7 | import org.springframework.test.context.junit4.SpringRunner; 8 | 9 | @SpringBootTest 10 | @RunWith(SpringRunner.class) 11 | public class DemoApplicationTest { 12 | } 13 | -------------------------------------------------------------------------------- /mockbatis-demo/mockbatis-spring-boot-starter/src/main/java/com/github/xjs/mockbatis/config/MockMapper.java: -------------------------------------------------------------------------------- 1 | package com.github.xjs.mockbatis.config; 2 | 3 | import com.github.xjs.mockbatis.config.MockScannerRegistrar; 4 | import org.springframework.context.annotation.Import; 5 | 6 | import java.lang.annotation.*; 7 | 8 | @Retention(RetentionPolicy.RUNTIME) 9 | @Target({ElementType.TYPE}) 10 | @Inherited 11 | @Documented 12 | public @interface MockMapper { 13 | String value() default ""; 14 | } 15 | -------------------------------------------------------------------------------- /mockbatis-demo/mockbatis-spring-boot-starter/src/main/java/com/github/xjs/mockbatis/config/MockScan.java: -------------------------------------------------------------------------------- 1 | package com.github.xjs.mockbatis.config; 2 | 3 | import org.springframework.context.annotation.Import; 4 | 5 | import java.lang.annotation.*; 6 | 7 | @Retention(RetentionPolicy.RUNTIME) 8 | @Target({ElementType.TYPE}) 9 | @Documented 10 | @Import({MockScannerRegistrar.class}) 11 | public @interface MockScan { 12 | String value() default ""; 13 | } 14 | -------------------------------------------------------------------------------- /mockbatis-demo/mockbatis-spring-boot-starter/src/main/java/com/github/xjs/mockbatis/config/Select.java: -------------------------------------------------------------------------------- 1 | package com.github.xjs.mockbatis.config; 2 | 3 | import java.lang.annotation.*; 4 | 5 | @Retention(RetentionPolicy.RUNTIME) 6 | @Target({ElementType.METHOD}) 7 | @Inherited 8 | @Documented 9 | public @interface Select { 10 | String value() default ""; 11 | } 12 | -------------------------------------------------------------------------------- /mockbatis-demo/mockbatis-spring-boot-starter/src/main/resources/META-INF/spring.factories: -------------------------------------------------------------------------------- 1 | org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ 2 | com.github.xjs.mockbatis.config.MockbatisAutoConfiguration -------------------------------------------------------------------------------- /mockspringboot/src/main/java/com/github/xjs/attarget/config/DemoConfig.java: -------------------------------------------------------------------------------- 1 | package com.github.xjs.attarget.config; 2 | 3 | import org.springframework.context.annotation.ComponentScan; 4 | import org.springframework.context.annotation.Configuration; 5 | 6 | @Configuration 7 | @ComponentScan("com.github.xjs") 8 | public class DemoConfig { 9 | 10 | } -------------------------------------------------------------------------------- /mockspringboot/src/main/java/com/github/xjs/attarget/controller/DemoController.java: -------------------------------------------------------------------------------- 1 | package com.github.xjs.attarget.controller; 2 | 3 | import org.springframework.web.bind.annotation.GetMapping; 4 | import org.springframework.web.bind.annotation.RestController; 5 | 6 | @RestController 7 | public class DemoController { 8 | 9 | @GetMapping("/hello") 10 | public String hello(){ 11 | return "hello"; 12 | } 13 | 14 | } 15 | -------------------------------------------------------------------------------- /mvcdemo/WebContent/WEB-INF/views/home.jsp: -------------------------------------------------------------------------------- 1 | <%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="UTF-8"%> 2 |
3 | ${message} 4 |
-------------------------------------------------------------------------------- /mvcdemo/WebContent/index.html: -------------------------------------------------------------------------------- 1 | this is index.html -------------------------------------------------------------------------------- /mybatis-from-novice-to-expert/mybatis-multi-datasource/README: -------------------------------------------------------------------------------- 1 | mysql是否开启XA事务支持: 2 | SHOW VARIABLES LIKE '%xa%'; -------------------------------------------------------------------------------- /mybatis-from-novice-to-expert/mybatis-multi-datasource/src/main/java/com/xjs1919/mybatis/MultiDataSourceApplication.java: -------------------------------------------------------------------------------- 1 | package com.xjs1919.mybatis; 2 | 3 | import org.springframework.boot.SpringApplication; 4 | import org.springframework.boot.autoconfigure.SpringBootApplication; 5 | 6 | @SpringBootApplication 7 | public class MultiDataSourceApplication { 8 | 9 | public static void main(String[] args) { 10 | SpringApplication.run(MultiDataSourceApplication.class, args); 11 | } 12 | 13 | } 14 | -------------------------------------------------------------------------------- /mybatis-from-novice-to-expert/mybatis-multi-datasource/src/main/java/com/xjs1919/mybatis/domain/Goods.java: -------------------------------------------------------------------------------- 1 | package com.xjs1919.mybatis.domain; 2 | 3 | import lombok.Data; 4 | 5 | /** 6 | * @author jiashuai.xujs 7 | * @date 2022/3/31 10:49 8 | */ 9 | @Data 10 | public class Goods { 11 | private Integer id; 12 | private String name; 13 | private String title; 14 | private Integer stock; 15 | } 16 | -------------------------------------------------------------------------------- /mybatis-from-novice-to-expert/mybatis-multi-datasource/src/main/java/com/xjs1919/mybatis/domain/User.java: -------------------------------------------------------------------------------- 1 | package com.xjs1919.mybatis.domain; 2 | 3 | import lombok.Data; 4 | 5 | /** 6 | * @author jiashuai.xujs 7 | * @date 2022/3/31 10:49 8 | */ 9 | @Data 10 | public class User { 11 | private Integer id; 12 | private String name; 13 | private Integer gender; 14 | } 15 | -------------------------------------------------------------------------------- /mybatis-from-novice-to-expert/mybatis-multi-datasource/src/test/java/com/xjs1919/mybatis/MultiDataSourceApplicationTests.java: -------------------------------------------------------------------------------- 1 | package com.xjs1919.mybatis; 2 | 3 | import org.junit.jupiter.api.Test; 4 | import org.springframework.boot.test.context.SpringBootTest; 5 | 6 | @SpringBootTest 7 | class MultiDataSourceApplicationTests { 8 | 9 | @Test 10 | void contextLoads() { 11 | } 12 | 13 | } 14 | -------------------------------------------------------------------------------- /mybatis-from-novice-to-expert/mybatis-only/README.txt: -------------------------------------------------------------------------------- 1 | 1.resultMap extends 2 | 2.springmvc的时候 可以添加parent pom 3 | 3.springboot 4 | mybatis.mapperLocations=classpath:mapper/*.xml 5 | mybatis.configLocations=classpath:mapper/*.xml 6 | 4.bind指令 ognl 7 | 5.一对一嵌套查询,user. 8 | 6.@SelectProvider @注解查询 9 | 7.下划线转驼峰插件 10 | -------------------------------------------------------------------------------- /mybatis-from-novice-to-expert/mybatis-only/src/main/java/com/xjs1919/mybatis/entity/chapter_2_6/EnumAble.java: -------------------------------------------------------------------------------- 1 | package com.xjs1919.mybatis.entity.chapter_2_6; 2 | 3 | /** 4 | * @author jiashuai.xujs 5 | * @date 2022/3/7 10:13 6 | */ 7 | public interface EnumAble { 8 | T getValue(); 9 | String getLabel(); 10 | } 11 | -------------------------------------------------------------------------------- /mybatis-from-novice-to-expert/mybatis-only/src/main/java/com/xjs1919/mybatis/mapper/chapter_2_3/BlogMapper.java: -------------------------------------------------------------------------------- 1 | package com.xjs1919.mybatis.mapper.chapter_2_3; 2 | 3 | import com.xjs1919.mybatis.entity.Blog; 4 | 5 | /** 6 | * @author jiashuai.xujs 7 | * @date 2022/2/28 19:00 8 | */ 9 | public interface BlogMapper { 10 | 11 | Blog selectById(int id); 12 | 13 | Blog selectById2(int id); 14 | } 15 | -------------------------------------------------------------------------------- /mybatis-from-novice-to-expert/mybatis-only/src/main/java/com/xjs1919/mybatis/mapper/chapter_2_3/UserMapper.java: -------------------------------------------------------------------------------- 1 | package com.xjs1919.mybatis.mapper.chapter_2_3; 2 | 3 | import com.xjs1919.mybatis.entity.User; 4 | 5 | /** 6 | * @author jiashuai.xujs 7 | * @date 2022/2/28 19:02 8 | */ 9 | public interface UserMapper { 10 | 11 | User selectById(Integer id); 12 | } 13 | -------------------------------------------------------------------------------- /mybatis-from-novice-to-expert/mybatis-only/src/main/java/com/xjs1919/mybatis/mapper/chapter_2_6/User2Mapper.java: -------------------------------------------------------------------------------- 1 | package com.xjs1919.mybatis.mapper.chapter_2_6; 2 | 3 | 4 | import com.xjs1919.mybatis.entity.chapter_2_6.User; 5 | 6 | import java.util.List; 7 | 8 | /** 9 | * @author 若鱼1919 10 | * @date 2022/3/7 0007 22:03 11 | */ 12 | public interface User2Mapper { 13 | 14 | User selectById(int id); 15 | 16 | List selectByNameAndGender(String name, int gender); 17 | 18 | } 19 | -------------------------------------------------------------------------------- /mybatis-from-novice-to-expert/mybatis-only/src/main/java/com/xjs1919/mybatis/mapper/chapter_2_8/UserMapper.java: -------------------------------------------------------------------------------- 1 | package com.xjs1919.mybatis.mapper.chapter_2_8; 2 | 3 | import com.xjs1919.mybatis.entity.User; 4 | 5 | import java.util.List; 6 | 7 | /** 8 | * @author 若鱼1919 9 | * @date 2022/4/4 0004 11:40 10 | */ 11 | public interface UserMapper { 12 | List selectById(Integer id); 13 | } 14 | -------------------------------------------------------------------------------- /mybatis-from-novice-to-expert/mybatis-only/src/main/java/com/xjs1919/mybatis/mapper/chapter_3_2/UserMapper.java: -------------------------------------------------------------------------------- 1 | package com.xjs1919.mybatis.mapper.chapter_3_2; 2 | 3 | import com.xjs1919.mybatis.entity.User; 4 | import org.apache.ibatis.annotations.Param; 5 | 6 | /** 7 | * @author jiashuai.xujs 8 | * @date 2022/3/14 14:08 9 | */ 10 | public interface UserMapper { 11 | 12 | User selectById(@Param("id")Integer id); 13 | 14 | } 15 | -------------------------------------------------------------------------------- /mybatis-from-novice-to-expert/mybatis-only/src/main/java/com/xjs1919/mybatis/mapper/chapter_3_3/UserMapper.java: -------------------------------------------------------------------------------- 1 | package com.xjs1919.mybatis.mapper.chapter_3_3; 2 | 3 | import com.xjs1919.mybatis.entity.User; 4 | import org.apache.ibatis.annotations.Param; 5 | 6 | /** 7 | * @author jiashuai.xujs 8 | * @date 2022/3/14 14:08 9 | */ 10 | public interface UserMapper { 11 | 12 | User selectById(@Param("id")Integer id); 13 | 14 | } 15 | -------------------------------------------------------------------------------- /mybatis-from-novice-to-expert/mybatis-only/src/main/java/com/xjs1919/mybatis/plugin/EnableLogSql.java: -------------------------------------------------------------------------------- 1 | package com.xjs1919.mybatis.plugin; 2 | 3 | import java.lang.annotation.ElementType; 4 | import java.lang.annotation.Retention; 5 | import java.lang.annotation.RetentionPolicy; 6 | import java.lang.annotation.Target; 7 | 8 | /** 9 | * @author jiashuai.xujs 10 | * @date 2022/4/2 12:55 11 | */ 12 | @Retention(RetentionPolicy.RUNTIME) 13 | @Target(ElementType.METHOD) 14 | public @interface EnableLogSql { 15 | boolean value() default true; 16 | } 17 | -------------------------------------------------------------------------------- /mybatis-from-novice-to-expert/mybatis-only/src/main/java/com/xjs1919/mybatis/plugin/README.txt: -------------------------------------------------------------------------------- 1 | 1.插件的执行顺序 2 | https://zhuanlan.zhihu.com/p/266735787 3 | 2.Mybatis插件原理(一)-- 简单编写Mybatis插件 4 | https://blog.csdn.net/weixin_44046437/article/details/100526643 5 | 3.Mybatis插件原理(二)-- Mybatis插件执行流程 6 | https://blog.csdn.net/weixin_44046437/article/details/100523028 -------------------------------------------------------------------------------- /mybatis-from-novice-to-expert/mybatis-only/src/main/resources/chapter_2_6/db.properties: -------------------------------------------------------------------------------- 1 | mysql.driver=com.mysql.cj.jdbc.Driver 2 | mysql.url=jdbc:mysql://localhost:3306/mybatis_from_novice_to_expert?allowMultiQueries=true&useSSL=false&serverTimezone=Asia/Shanghai 3 | #mysql.username=root 4 | #mysql.password=123456 -------------------------------------------------------------------------------- /mybatis-from-novice-to-expert/mybatis-only/src/main/resources/chapter_2_7/db.properties: -------------------------------------------------------------------------------- 1 | mysql.driver=com.mysql.cj.jdbc.Driver 2 | mysql.url=jdbc:mysql://localhost:3306/mybatis_from_novice_to_expert?allowMultiQueries=true&useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true 3 | mysql.username=root 4 | mysql.password=123456 -------------------------------------------------------------------------------- /mybatis-from-novice-to-expert/mybatis-only/src/main/resources/db.properties: -------------------------------------------------------------------------------- 1 | mysql.driver=com.mysql.cj.jdbc.Driver 2 | mysql.url=jdbc:mysql://localhost:3306/mybatis_from_novice_to_expert?rewriteBatchedStatements=true&useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true 3 | mysql.username=root 4 | mysql.password=123456 -------------------------------------------------------------------------------- /mybatis-from-novice-to-expert/mybatis-only/src/main/resources/init.sql: -------------------------------------------------------------------------------- 1 | CREATE TABLE `users` ( 2 | `id` int(11) NOT NULL AUTO_INCREMENT, 3 | `name` varchar(10) DEFAULT NULL, 4 | `gender` tinyint(4) NOT NULL DEFAULT '0' COMMENT '1:boy 2girl', 5 | `birth` date DEFAULT NULL, 6 | PRIMARY KEY (`id`) 7 | ) ENGINE=InnoDB DEFAULT CHARSET=utf8; 8 | 9 | LOCK TABLES `users` WRITE; 10 | INSERT INTO `users` VALUES (1,'hello',0,'1998-10-01'),(2,'world',0,'1998-10-02'),(3,'tom',1,'1998-10-03'),(4,'jerry',1,'1998-10-04'); 11 | UNLOCK TABLES; -------------------------------------------------------------------------------- /mybatis-from-novice-to-expert/mybatis-only/src/main/resources/mapper/chapter_2_1/UserMapper.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 9 | 10 | -------------------------------------------------------------------------------- /mybatis-from-novice-to-expert/mybatis-only/src/main/resources/mapper/chapter_2_3/ER图.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xjs1919/learning-demo/422a6e01331330db5623e98c0b2d2224b78186c6/mybatis-from-novice-to-expert/mybatis-only/src/main/resources/mapper/chapter_2_3/ER图.jpg -------------------------------------------------------------------------------- /mybatis-from-novice-to-expert/mybatis-only/src/main/resources/mapper/chapter_2_3/doc/ER图.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xjs1919/learning-demo/422a6e01331330db5623e98c0b2d2224b78186c6/mybatis-from-novice-to-expert/mybatis-only/src/main/resources/mapper/chapter_2_3/doc/ER图.jpg -------------------------------------------------------------------------------- /mybatis-from-novice-to-expert/mybatis-only/src/main/resources/mapper/chapter_2_3/doc/类图.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xjs1919/learning-demo/422a6e01331330db5623e98c0b2d2224b78186c6/mybatis-from-novice-to-expert/mybatis-only/src/main/resources/mapper/chapter_2_3/doc/类图.jpg -------------------------------------------------------------------------------- /mybatis-from-novice-to-expert/mybatis-only/src/main/resources/mapper/chapter_2_3/类图.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xjs1919/learning-demo/422a6e01331330db5623e98c0b2d2224b78186c6/mybatis-from-novice-to-expert/mybatis-only/src/main/resources/mapper/chapter_2_3/类图.jpg -------------------------------------------------------------------------------- /mybatis-from-novice-to-expert/mybatis-only/src/test/java/com/xjs1919/mybatis/chapter_3_3/Mapper动态代理.puml: -------------------------------------------------------------------------------- 1 | @startuml 2 | 'https://plantuml.com/sequence-diagram 3 | 4 | autonumber 5 | 6 | MapperProxyFactory -> MapperProxy: newInstance 7 | note right: 动态代理 8 | MapperProxy -> PlainMethodInvoker:invoke 9 | PlainMethodInvoker->MapperMethod:invoke 10 | MapperMethod->MapperMethod:execute 11 | 12 | 13 | @enduml -------------------------------------------------------------------------------- /mybatis-from-novice-to-expert/mybatis-only/src/test/java/com/xjs1919/mybatis/chapter_3_5/一级缓存序列图.puml: -------------------------------------------------------------------------------- 1 | @startuml 2 | 'https://plantuml.com/sequence-diagram 3 | 4 | autonumber 5 | DefaultSqlSession -> CachingExecutor: selectList 6 | CachingExecutor -> SimpleExecutor: query 7 | SimpleExecutor -> SimpleExecutor: query 8 | @enduml -------------------------------------------------------------------------------- /mybatis-from-novice-to-expert/mybatis-only/src/test/java/com/xjs1919/mybatis/chapter_3_5/二级缓存.puml: -------------------------------------------------------------------------------- 1 | @startuml 2 | 'https://plantuml.com/sequence-diagram 3 | 4 | autonumber 5 | 6 | CachingExecutor -> TransactionalCacheManager: query 7 | TransactionalCacheManager -> TransactionalCache: getObject 8 | 9 | TransactionalCache -> Cache: getObject 10 | Cache -> Cache: getObject 11 | @enduml -------------------------------------------------------------------------------- /mybatis-from-novice-to-expert/mybatis-shard-datasource-v1/src/main/java/com/xjs1919/mybatis/domain/BaseEntity.java: -------------------------------------------------------------------------------- 1 | package com.xjs1919.mybatis.domain; 2 | 3 | import lombok.Data; 4 | 5 | /** 6 | * @author jiashuai.xujs 7 | * @date 2022/4/1 13:29 8 | */ 9 | @Data 10 | public class BaseEntity { 11 | 12 | private String tenantId; 13 | 14 | private Integer groupId; 15 | 16 | private Integer companyId; 17 | 18 | private Integer id; 19 | 20 | } 21 | -------------------------------------------------------------------------------- /mybatis-from-novice-to-expert/mybatis-shard-datasource-v2/src/main/java/com/xjs1919/mybatis/domain/BaseEntity.java: -------------------------------------------------------------------------------- 1 | package com.xjs1919.mybatis.domain; 2 | 3 | import lombok.Data; 4 | 5 | /** 6 | * @author jiashuai.xujs 7 | * @date 2022/4/1 13:29 8 | */ 9 | @Data 10 | public class BaseEntity { 11 | 12 | private String tenantId; 13 | 14 | private Integer groupId; 15 | 16 | private Integer companyId; 17 | 18 | private Integer id; 19 | 20 | } 21 | -------------------------------------------------------------------------------- /mybatis-from-novice-to-expert/mybatis-shard-starter/src/main/resources/META-INF/spring.factories: -------------------------------------------------------------------------------- 1 | org.springframework.boot.autoconfigure.EnableAutoConfiguration=com.xjs1919.mybatis.ShardConfiguration -------------------------------------------------------------------------------- /mybatis-from-novice-to-expert/mybatis-springboot/src/main/java/com/xjs1919/mybatis/MybatisApplication.java: -------------------------------------------------------------------------------- 1 | package com.xjs1919.mybatis; 2 | 3 | import org.springframework.boot.SpringApplication; 4 | import org.springframework.boot.autoconfigure.SpringBootApplication; 5 | 6 | /** 7 | * @author 若鱼1919 8 | * @date 2022/3/30 0030 9:54 9 | */ 10 | @SpringBootApplication 11 | public class MybatisApplication { 12 | public static void main(String[] args) { 13 | SpringApplication.run(MybatisApplication.class, args); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /mybatis-from-novice-to-expert/mybatis-springboot/src/main/java/com/xjs1919/mybatis/dao/UserMapper.java: -------------------------------------------------------------------------------- 1 | package com.xjs1919.mybatis.dao; 2 | 3 | import com.xjs1919.mybatis.domain.User; 4 | import org.apache.ibatis.annotations.Mapper; 5 | 6 | /** 7 | * @author 若鱼1919 8 | * @date 2022/2/27 0027 13:45 9 | */ 10 | @Mapper 11 | public interface UserMapper { 12 | 13 | User selectById(Integer id); 14 | 15 | int insert(User u); 16 | 17 | int update(User u); 18 | 19 | } 20 | -------------------------------------------------------------------------------- /mybatis-from-novice-to-expert/mybatis-springmvc/README.txt: -------------------------------------------------------------------------------- 1 | springmvc: 2 | https://docs.spring.io/spring-framework/docs/current/reference/html/web.html 3 | mybatis-spring: 4 | https://mybatis.org/spring/index.html 5 | copy 6 | copy /y "mybatis-springmvc\target\mybatis-springmvc.war" D:\ali-tomcat-8.5.51\webapps\ 7 | 8 | (1)添加依赖 9 | 10 | org.mybatis 11 | mybatis-spring 12 | 2.0.7 13 | 14 | (2)定义SqlSessionFactory 15 | -------------------------------------------------------------------------------- /mybatis-from-novice-to-expert/mybatis-springmvc/src/main/java/com/xjs1919/mybatis/dao/UserMapper.java: -------------------------------------------------------------------------------- 1 | package com.xjs1919.mybatis.dao; 2 | 3 | import com.xjs1919.mybatis.domain.User; 4 | import org.apache.ibatis.annotations.Mapper; 5 | 6 | /** 7 | * @author 若鱼1919 8 | * @date 2022/2/27 0027 13:45 9 | */ 10 | @Mapper 11 | public interface UserMapper { 12 | 13 | User selectById(Integer id); 14 | 15 | int insert(User u); 16 | 17 | int update(User u); 18 | 19 | } 20 | -------------------------------------------------------------------------------- /mybatis-from-novice-to-expert/mybatis-springmvc/src/main/resources/Mapper注入流程.puml: -------------------------------------------------------------------------------- 1 | @startuml 2 | 'https://plantuml.com/sequence-diagram 3 | autonumber 4 | Spring容器 -> MapperFactoryBean: 回调 5 | MapperFactoryBean -> MapperFactoryBean: afterPropertiesSet 6 | note left:MapperFactoryBean包含:\nsqlSessionTemplate\nmapperInterface 7 | MapperFactoryBean-> SqlSessionTemplate: 8 | SqlSessionTemplate-> SqlSessionTemplate: getConfiguration 9 | note left: 返回Configuration 10 | SqlSessionTemplate-> Configuration: 11 | Configuration->Configuration: addMapper 12 | @enduml -------------------------------------------------------------------------------- /mybatis-from-novice-to-expert/mybatis-springmvc/src/main/resources/db.properties: -------------------------------------------------------------------------------- 1 | mysql.driver=com.mysql.cj.jdbc.Driver 2 | mysql.url=jdbc:mysql://localhost:3306/mybatis_from_novice_to_expert?allowMultiQueries=true&useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true 3 | mysql.username=root 4 | mysql.password=123456 -------------------------------------------------------------------------------- /mybatis-param/src/main/java/com/github/xjs/mybatisparam/MybatisParamApplication.java: -------------------------------------------------------------------------------- 1 | package com.github.xjs.mybatisparam; 2 | 3 | import org.springframework.boot.SpringApplication; 4 | import org.springframework.boot.autoconfigure.SpringBootApplication; 5 | 6 | @SpringBootApplication 7 | public class MybatisParamApplication { 8 | 9 | public static void main(String[] args) { 10 | SpringApplication.run(MybatisParamApplication.class, args); 11 | } 12 | 13 | } 14 | -------------------------------------------------------------------------------- /mybatis-param/src/main/java/com/github/xjs/mybatisparam/entity/Dept.java: -------------------------------------------------------------------------------- 1 | package com.github.xjs.mybatisparam.entity; 2 | 3 | import lombok.Data; 4 | 5 | @Data 6 | public class Dept { 7 | private Integer id; 8 | private String name; 9 | } 10 | -------------------------------------------------------------------------------- /mybatis-param/src/main/java/com/github/xjs/mybatisparam/mapper/DeptMapper.java: -------------------------------------------------------------------------------- 1 | package com.github.xjs.mybatisparam.mapper; 2 | 3 | import com.github.xjs.mybatisparam.entity.Dept; 4 | import org.apache.ibatis.annotations.Mapper; 5 | import org.apache.ibatis.annotations.Select; 6 | 7 | import java.util.List; 8 | 9 | @Mapper 10 | public interface DeptMapper { 11 | @Select("select * from dept where name = #{name} and code = #{code}") 12 | List selectByNameAndCode(String name, String code); 13 | } 14 | -------------------------------------------------------------------------------- /mybatis-param/src/main/resources/application.yml: -------------------------------------------------------------------------------- 1 | spring: 2 | datasource: 3 | driver-class-name: com.mysql.cj.jdbc.Driver 4 | url: jdbc:mysql://localhost:3306/db01?useUnicode=true&characterEncoding=UTF-8&serverTimezone=GMT%2B8&useSSL=false&allowPublicKeyRetrieval=true 5 | username: root 6 | password: 1234 7 | 8 | mybatis: 9 | configuration: 10 | use-actual-param-name: true -------------------------------------------------------------------------------- /mybatis-param/src/test/java/com/github/xjs/mybatisparam/MybatisParamApplicationTests.java: -------------------------------------------------------------------------------- 1 | package com.github.xjs.mybatisparam; 2 | 3 | import org.junit.jupiter.api.Test; 4 | import org.springframework.boot.test.context.SpringBootTest; 5 | 6 | @SpringBootTest 7 | class MybatisParamApplicationTests { 8 | 9 | @Test 10 | void contextLoads() { 11 | } 12 | 13 | } 14 | -------------------------------------------------------------------------------- /openfeign/feign-boot/feign-api/src/main/java/com/github/xjs/openfeign/boot/api/HystrixApi.java: -------------------------------------------------------------------------------- 1 | package com.github.xjs.openfeign.boot.api; 2 | 3 | import org.springframework.web.bind.annotation.GetMapping; 4 | import org.springframework.web.bind.annotation.PathVariable; 5 | import org.springframework.web.bind.annotation.RequestMapping; 6 | import org.springframework.web.bind.annotation.RequestParam; 7 | 8 | @RequestMapping("/server/hystrix") 9 | public interface HystrixApi { 10 | 11 | @GetMapping("/hello") 12 | public String hello(); 13 | } 14 | 15 | -------------------------------------------------------------------------------- /openfeign/feign-boot/feign-api/src/main/java/com/github/xjs/openfeign/boot/api/User.java: -------------------------------------------------------------------------------- 1 | package com.github.xjs.openfeign.boot.api; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Data; 5 | import lombok.NoArgsConstructor; 6 | 7 | 8 | /** 9 | * @Author: xjs@choicesoft.com.cn 10 | * @Date: 2020/8/15 10:31 11 | */ 12 | @Data 13 | @AllArgsConstructor 14 | @NoArgsConstructor 15 | public class User { 16 | private String id; 17 | private String username; 18 | } 19 | -------------------------------------------------------------------------------- /openfeign/feign-boot/feign-api/src/main/java/com/github/xjs/openfeign/boot/api/UserApi.java: -------------------------------------------------------------------------------- 1 | package com.github.xjs.openfeign.boot.api; 2 | 3 | import org.springframework.web.bind.annotation.*; 4 | 5 | @RequestMapping("/server/user") 6 | public interface UserApi { 7 | 8 | @GetMapping("/getById/{id}") 9 | public User getById(@PathVariable("id") String id); 10 | 11 | @PostMapping("/addUser") 12 | public User addUser(@RequestBody User user); 13 | 14 | } 15 | 16 | -------------------------------------------------------------------------------- /openfeign/feign-boot/feign-client/src/main/resources/application.yml: -------------------------------------------------------------------------------- 1 | server: 2 | port: 8081 3 | feign: 4 | hystrix: 5 | enabled: true -------------------------------------------------------------------------------- /openfeign/feign-boot/feign-client/src/test/java/com/github/xjs/openfeign/boot/server/FeignBootApplicationTests.java: -------------------------------------------------------------------------------- 1 | package com.github.xjs.openfeign.boot.client; 2 | 3 | import org.junit.jupiter.api.Test; 4 | import org.springframework.boot.test.context.SpringBootTest; 5 | 6 | @SpringBootTest 7 | class FeignBootApplicationTests { 8 | 9 | @Test 10 | void contextLoads() { 11 | } 12 | 13 | } 14 | -------------------------------------------------------------------------------- /openfeign/feign-boot/feign-server/src/main/java/com/github/xjs/openfeign/boot/server/FeignServerApplication.java: -------------------------------------------------------------------------------- 1 | package com.github.xjs.openfeign.boot.server; 2 | 3 | import org.springframework.boot.SpringApplication; 4 | import org.springframework.boot.autoconfigure.SpringBootApplication; 5 | 6 | @SpringBootApplication 7 | public class FeignServerApplication { 8 | 9 | public static void main(String[] args) { 10 | SpringApplication.run(FeignServerApplication.class, args); 11 | } 12 | 13 | } 14 | -------------------------------------------------------------------------------- /openfeign/feign-boot/feign-server/src/main/java/com/github/xjs/openfeign/boot/server/controller/ServerDemoController2.java: -------------------------------------------------------------------------------- 1 | package com.github.xjs.openfeign.boot.server.controller; 2 | 3 | import com.github.xjs.openfeign.boot.api.DemoApi; 4 | import org.springframework.web.bind.annotation.*; 5 | 6 | @RestController 7 | public class ServerDemoController2 implements DemoApi { 8 | 9 | @Override 10 | public String hello(String username, String msg){ 11 | return "hello:" + username+",say:"+ msg; 12 | } 13 | 14 | 15 | } 16 | -------------------------------------------------------------------------------- /openfeign/feign-boot/feign-server/src/main/resources/application.properties: -------------------------------------------------------------------------------- 1 | server.port=8080 -------------------------------------------------------------------------------- /openfeign/feign-boot/readme.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xjs1919/learning-demo/422a6e01331330db5623e98c0b2d2224b78186c6/openfeign/feign-boot/readme.txt -------------------------------------------------------------------------------- /openfeign/feign/readme.txt: -------------------------------------------------------------------------------- 1 | https://github.com/OpenFeign/feign 2 | https://github.com/OpenFeign/feign/tree/master/hystrix 3 | https://github.com/OpenFeign/feign/tree/master/ribbon 4 | https://github.com/OpenFeign/feign/tree/master/okhttp -------------------------------------------------------------------------------- /openfeign/feign/src/main/java/com/github/xjs/openfeign/OpenFeignApplication.java: -------------------------------------------------------------------------------- 1 | package com.github.xjs.openfeign; 2 | 3 | import org.springframework.boot.SpringApplication; 4 | import org.springframework.boot.autoconfigure.SpringBootApplication; 5 | 6 | @SpringBootApplication 7 | public class OpenFeignApplication { 8 | public static void main(String[] args) { 9 | SpringApplication.run(OpenFeignApplication.class, args); 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /openfeign/feign/src/main/java/com/github/xjs/openfeign/controller/AsyncController.java: -------------------------------------------------------------------------------- 1 | package com.github.xjs.openfeign.controller; 2 | 3 | import com.github.xjs.openfeign.demo1.User; 4 | import org.springframework.web.bind.annotation.*; 5 | 6 | @RestController 7 | @RequestMapping("/async") 8 | public class AsyncController { 9 | @GetMapping("/hello") 10 | public String hello(){ 11 | try{Thread.sleep(3000);}catch (Exception e){} 12 | return "hello"; 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /openfeign/feign/src/main/java/com/github/xjs/openfeign/controller/ErrorController.java: -------------------------------------------------------------------------------- 1 | package com.github.xjs.openfeign.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 | @RestController 8 | @RequestMapping("/error") 9 | public class ErrorController { 10 | 11 | @GetMapping("/hello") 12 | public String hello(){ 13 | throw new RuntimeException("服务端异常"); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /openfeign/feign/src/main/java/com/github/xjs/openfeign/controller/ExtendsController.java: -------------------------------------------------------------------------------- 1 | package com.github.xjs.openfeign.controller; 2 | 3 | import com.github.xjs.openfeign.demo4extend.User; 4 | import org.springframework.web.bind.annotation.*; 5 | 6 | @RestController 7 | @RequestMapping("/extend") 8 | public class ExtendsController { 9 | 10 | @GetMapping("/getById/{id}") 11 | public User getById(@PathVariable("id")String id){ 12 | return new User(id, "username"); 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /openfeign/feign/src/main/java/com/github/xjs/openfeign/demo1/User.java: -------------------------------------------------------------------------------- 1 | package com.github.xjs.openfeign.demo1; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Data; 5 | import lombok.NoArgsConstructor; 6 | 7 | @Data 8 | @NoArgsConstructor 9 | @AllArgsConstructor 10 | public class User { 11 | private Integer age; 12 | private String username; 13 | private String password; 14 | } -------------------------------------------------------------------------------- /openfeign/feign/src/main/java/com/github/xjs/openfeign/demo2encoder/Encoder.java: -------------------------------------------------------------------------------- 1 | package com.github.xjs.openfeign.demo2encoder; 2 | 3 | import feign.Headers; 4 | import feign.RequestLine; 5 | 6 | public interface Encoder { 7 | 8 | @RequestLine("POST /encoder/add") 9 | @Headers("Content-Type: application/json") 10 | User add(User user); 11 | } 12 | -------------------------------------------------------------------------------- /openfeign/feign/src/main/java/com/github/xjs/openfeign/demo2encoder/User.java: -------------------------------------------------------------------------------- 1 | package com.github.xjs.openfeign.demo2encoder; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Data; 5 | import lombok.NoArgsConstructor; 6 | 7 | @Data 8 | @NoArgsConstructor 9 | @AllArgsConstructor 10 | public class User { 11 | private Integer age; 12 | private String username; 13 | private String password; 14 | } -------------------------------------------------------------------------------- /openfeign/feign/src/main/java/com/github/xjs/openfeign/demo3interceptor/Client.java: -------------------------------------------------------------------------------- 1 | package com.github.xjs.openfeign.demo3interceptor; 2 | 3 | import feign.Feign; 4 | 5 | public class Client { 6 | public static void main(String[] args) { 7 | Itcpt itcpt = Feign.builder() 8 | .requestInterceptor(new TokenInterceptor()) 9 | .target(Itcpt.class, "http://localhost:8080/"); 10 | System.out.println(itcpt.getByUsername("Joshua")); 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /openfeign/feign/src/main/java/com/github/xjs/openfeign/demo3interceptor/Itcpt.java: -------------------------------------------------------------------------------- 1 | package com.github.xjs.openfeign.demo3interceptor; 2 | 3 | import feign.Param; 4 | import feign.RequestLine; 5 | 6 | public interface Itcpt { 7 | 8 | @RequestLine("GET /itcpt/getByUsername/{username}") 9 | public String getByUsername(@Param("username") String username); 10 | 11 | } 12 | -------------------------------------------------------------------------------- /openfeign/feign/src/main/java/com/github/xjs/openfeign/demo3interceptor/TokenInterceptor.java: -------------------------------------------------------------------------------- 1 | package com.github.xjs.openfeign.demo3interceptor; 2 | 3 | import feign.RequestInterceptor; 4 | import feign.RequestTemplate; 5 | 6 | public class TokenInterceptor implements RequestInterceptor { 7 | @Override 8 | public void apply(RequestTemplate template) { 9 | template.header("token", "TK-1234567890"); 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /openfeign/feign/src/main/java/com/github/xjs/openfeign/demo3interceptor/User.java: -------------------------------------------------------------------------------- 1 | package com.github.xjs.openfeign.demo3interceptor; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Data; 5 | import lombok.NoArgsConstructor; 6 | 7 | @Data 8 | @NoArgsConstructor 9 | @AllArgsConstructor 10 | public class User { 11 | private Integer age; 12 | private String username; 13 | private String password; 14 | } -------------------------------------------------------------------------------- /openfeign/feign/src/main/java/com/github/xjs/openfeign/demo4extend/BaseApi.java: -------------------------------------------------------------------------------- 1 | package com.github.xjs.openfeign.demo4extend; 2 | 3 | import feign.Param; 4 | import feign.RequestLine; 5 | 6 | public interface BaseApi { 7 | @RequestLine("GET /extend/getById/{id}") 8 | T getById(@Param("id")String id); 9 | } 10 | -------------------------------------------------------------------------------- /openfeign/feign/src/main/java/com/github/xjs/openfeign/demo4extend/Client.java: -------------------------------------------------------------------------------- 1 | package com.github.xjs.openfeign.demo4extend; 2 | 3 | import feign.Feign; 4 | import feign.gson.GsonDecoder; 5 | 6 | public class Client { 7 | public static void main(String[] args) { 8 | UserApi userApi = Feign.builder() 9 | .decoder(new GsonDecoder()) 10 | .target(UserApi.class, "http://localhost:8080/"); 11 | User u = userApi.getById("100"); 12 | System.out.println(u); 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /openfeign/feign/src/main/java/com/github/xjs/openfeign/demo4extend/User.java: -------------------------------------------------------------------------------- 1 | package com.github.xjs.openfeign.demo4extend; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Data; 5 | import lombok.NoArgsConstructor; 6 | 7 | @Data 8 | @NoArgsConstructor 9 | @AllArgsConstructor 10 | public class User { 11 | private String id; 12 | private String username; 13 | } 14 | -------------------------------------------------------------------------------- /openfeign/feign/src/main/java/com/github/xjs/openfeign/demo4extend/UserApi.java: -------------------------------------------------------------------------------- 1 | package com.github.xjs.openfeign.demo4extend; 2 | 3 | public interface UserApi extends BaseApi{ 4 | } 5 | -------------------------------------------------------------------------------- /openfeign/feign/src/main/java/com/github/xjs/openfeign/demo5errordecoder/BizException.java: -------------------------------------------------------------------------------- 1 | package com.github.xjs.openfeign.demo5errordecoder; 2 | 3 | public class BizException extends RuntimeException { 4 | public BizException(String msg){ 5 | super(msg); 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /openfeign/feign/src/main/java/com/github/xjs/openfeign/demo5errordecoder/Demo.java: -------------------------------------------------------------------------------- 1 | package com.github.xjs.openfeign.demo5errordecoder; 2 | 3 | import feign.RequestLine; 4 | public interface Demo { 5 | @RequestLine("GET /error/hello") 6 | String hello(); 7 | } 8 | -------------------------------------------------------------------------------- /openfeign/feign/src/main/java/com/github/xjs/openfeign/demo5errordecoder/User.java: -------------------------------------------------------------------------------- 1 | package com.github.xjs.openfeign.demo5errordecoder; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Data; 5 | import lombok.NoArgsConstructor; 6 | 7 | @Data 8 | @NoArgsConstructor 9 | @AllArgsConstructor 10 | public class User { 11 | private Integer age; 12 | private String username; 13 | private String password; 14 | } -------------------------------------------------------------------------------- /openfeign/feign/src/main/java/com/github/xjs/openfeign/demo6async/Client.java: -------------------------------------------------------------------------------- 1 | package com.github.xjs.openfeign.demo6async; 2 | 3 | import feign.AsyncFeign; 4 | 5 | import java.util.concurrent.CompletableFuture; 6 | 7 | public class Client { 8 | 9 | public static void main(String[] args)throws Exception { 10 | Demo demo = AsyncFeign.asyncBuilder() 11 | .target(Demo.class, "http://localhost:8080/"); 12 | CompletableFuture result = demo.hello(); 13 | System.out.println(result.get()); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /openfeign/feign/src/main/java/com/github/xjs/openfeign/demo6async/Demo.java: -------------------------------------------------------------------------------- 1 | package com.github.xjs.openfeign.demo6async; 2 | 3 | import feign.RequestLine; 4 | 5 | import java.util.concurrent.CompletableFuture; 6 | 7 | public interface Demo { 8 | @RequestLine("GET /async/hello") 9 | CompletableFuture hello(); 10 | } 11 | -------------------------------------------------------------------------------- /openfeign/feign/src/main/java/com/github/xjs/openfeign/demo6async/User.java: -------------------------------------------------------------------------------- 1 | package com.github.xjs.openfeign.demo6async; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Data; 5 | import lombok.NoArgsConstructor; 6 | 7 | @Data 8 | @NoArgsConstructor 9 | @AllArgsConstructor 10 | public class User { 11 | private Integer age; 12 | private String username; 13 | private String password; 14 | } -------------------------------------------------------------------------------- /openfeign/feign/src/main/java/com/github/xjs/openfeign/demo7hystrix/User.java: -------------------------------------------------------------------------------- 1 | package com.github.xjs.openfeign.demo7hystrix; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Data; 5 | import lombok.NoArgsConstructor; 6 | 7 | @Data 8 | @NoArgsConstructor 9 | @AllArgsConstructor 10 | public class User { 11 | private Integer age; 12 | private String username; 13 | private String password; 14 | } -------------------------------------------------------------------------------- /order_auto_confirm/.gitignore: -------------------------------------------------------------------------------- 1 | /target/ 2 | -------------------------------------------------------------------------------- /order_auto_confirm/.settings/org.eclipse.core.resources.prefs: -------------------------------------------------------------------------------- 1 | eclipse.preferences.version=1 2 | encoding//src/main/java=UTF-8 3 | encoding//src/main/resources=UTF-8 4 | encoding//src/test/java=UTF-8 5 | encoding/=UTF-8 6 | -------------------------------------------------------------------------------- /order_auto_confirm/.settings/org.eclipse.jdt.core.prefs: -------------------------------------------------------------------------------- 1 | eclipse.preferences.version=1 2 | org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 3 | org.eclipse.jdt.core.compiler.compliance=1.8 4 | org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning 5 | org.eclipse.jdt.core.compiler.source=1.8 6 | -------------------------------------------------------------------------------- /order_auto_confirm/.settings/org.eclipse.m2e.core.prefs: -------------------------------------------------------------------------------- 1 | activeProfiles= 2 | eclipse.preferences.version=1 3 | resolveWorkspaceProjects=true 4 | version=1 5 | -------------------------------------------------------------------------------- /order_auto_confirm/src/main/java/com/github/xjs/order_auto_confirm/MainApplication.java: -------------------------------------------------------------------------------- 1 | package com.github.xjs.order_auto_confirm; 2 | 3 | import org.springframework.boot.SpringApplication; 4 | import org.springframework.boot.autoconfigure.SpringBootApplication; 5 | 6 | @SpringBootApplication 7 | public class MainApplication { 8 | 9 | public static void main(String[] args) { 10 | SpringApplication.run(MainApplication.class, args); 11 | } 12 | 13 | } 14 | -------------------------------------------------------------------------------- /order_auto_confirm/src/main/java/com/github/xjs/order_auto_confirm/delay/OnDelayedListener.java: -------------------------------------------------------------------------------- 1 | package com.github.xjs.order_auto_confirm.delay; 2 | 3 | /** 4 | * @author xujs@inspur.com 5 | * 6 | * @date 2019年5月25日 下午3:09:09
7 | */ 8 | @SuppressWarnings("rawtypes") 9 | public interface OnDelayedListener { 10 | public void onDelayedArrived(T delayed); 11 | } 12 | -------------------------------------------------------------------------------- /order_auto_confirm/src/main/resources/application.properties: -------------------------------------------------------------------------------- 1 | #redis 2 | #redis 3 | spring.redis.host=127.0.0.1 4 | spring.redis.port=6379 5 | spring.redis.password=123456 6 | spring.redis.ssl=false 7 | spring.redis.timeout=3000 8 | spring.redis.pool.max-active=2 9 | spring.redis.pool.max-idle=1 10 | spring.redis.pool.min-idle=1 11 | spring.redis.pool.max-wait=3000 12 | -------------------------------------------------------------------------------- /profile-demo/src/main/java/com/github/xjs/profiledemo/ProfileDemoApplication.java: -------------------------------------------------------------------------------- 1 | package com.github.xjs.profiledemo; 2 | 3 | import org.springframework.boot.SpringApplication; 4 | import org.springframework.boot.autoconfigure.SpringBootApplication; 5 | 6 | @SpringBootApplication 7 | public class ProfileDemoApplication { 8 | 9 | public static void main(String[] args) { 10 | SpringApplication.run(ProfileDemoApplication.class, args); 11 | } 12 | 13 | } 14 | -------------------------------------------------------------------------------- /profile-demo/src/main/resources/application-dev.yml: -------------------------------------------------------------------------------- 1 | my: 2 | props: 3 | username: xjs-dev 4 | password: 123456 5 | -------------------------------------------------------------------------------- /profile-demo/src/main/resources/application-pro.yml: -------------------------------------------------------------------------------- 1 | my: 2 | props: 3 | username: xjs-pro 4 | password: 123456 5 | -------------------------------------------------------------------------------- /profile-demo/src/main/resources/application-test.yml: -------------------------------------------------------------------------------- 1 | my: 2 | props: 3 | username: xjs-test 4 | password: 123456 -------------------------------------------------------------------------------- /profile-demo/src/main/resources/application.yml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xjs1919/learning-demo/422a6e01331330db5623e98c0b2d2224b78186c6/profile-demo/src/main/resources/application.yml -------------------------------------------------------------------------------- /profile-demo/src/test/java/com/github/xjs/profiledemo/ProfileDemoApplicationTests.java: -------------------------------------------------------------------------------- 1 | package com.github.xjs.profiledemo; 2 | 3 | import org.junit.Test; 4 | import org.junit.runner.RunWith; 5 | import org.springframework.boot.test.context.SpringBootTest; 6 | import org.springframework.test.context.junit4.SpringRunner; 7 | 8 | @RunWith(SpringRunner.class) 9 | @SpringBootTest 10 | public class ProfileDemoApplicationTests { 11 | 12 | @Test 13 | public void contextLoads() { 14 | } 15 | 16 | } 17 | -------------------------------------------------------------------------------- /properties-demo/src/test/java/com/github/xjs/PropertiesTest.java: -------------------------------------------------------------------------------- 1 | package com.github.xjs; 2 | 3 | 4 | import org.junit.Test; 5 | 6 | public class PropertiesTest { 7 | 8 | @Test 9 | public void testReadProperties(){ 10 | 11 | String 青岛 = CityCodeUtils.getCityCode1("青岛"); 12 | System.out.println(青岛); 13 | 14 | String 济南 = CityCodeUtils.getCityCode2("济南"); 15 | System.out.println(济南); 16 | 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /protobuff-demo/src/main/java/com/github/xjs/protobuffdemo/ProtobuffDemoApplication.java: -------------------------------------------------------------------------------- 1 | package com.github.xjs.protobuffdemo; 2 | 3 | import org.springframework.boot.SpringApplication; 4 | import org.springframework.boot.autoconfigure.SpringBootApplication; 5 | 6 | @SpringBootApplication 7 | public class ProtobuffDemoApplication { 8 | 9 | public static void main(String[] args) { 10 | SpringApplication.run(ProtobuffDemoApplication.class, args); 11 | } 12 | 13 | } 14 | -------------------------------------------------------------------------------- /protobuff-demo/src/main/proto/Person.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | option java_package = "com.github.xjs.protobuffdemo"; 3 | option java_outer_classname = "PersonProto"; 4 | 5 | message Person{ 6 | string name = 1; 7 | int32 age = 2; 8 | } -------------------------------------------------------------------------------- /protobuff-demo/src/main/resources/application.properties: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /protobuff-demo/src/test/java/com/github/xjs/protobuffdemo/ProtobuffDemoApplicationTests.java: -------------------------------------------------------------------------------- 1 | package com.github.xjs.protobuffdemo; 2 | 3 | import org.junit.Test; 4 | import org.junit.runner.RunWith; 5 | import org.springframework.boot.test.context.SpringBootTest; 6 | import org.springframework.test.context.junit4.SpringRunner; 7 | 8 | @RunWith(SpringRunner.class) 9 | @SpringBootTest 10 | public class ProtobuffDemoApplicationTests { 11 | 12 | @Test 13 | public void contextLoads() { 14 | } 15 | 16 | } 17 | -------------------------------------------------------------------------------- /ribbon-boot/src/main/resources/application.yml: -------------------------------------------------------------------------------- 1 | userService: 2 | ribbon: 3 | listOfServers: "localhost:8080" 4 | -------------------------------------------------------------------------------- /ribbon-boot/src/test/java/com/github/xjs/ribbonboot/RibbonBootApplicationTests.java: -------------------------------------------------------------------------------- 1 | package com.github.xjs.ribbonboot; 2 | 3 | import org.junit.jupiter.api.Test; 4 | import org.springframework.boot.test.context.SpringBootTest; 5 | 6 | @SpringBootTest 7 | class RibbonBootApplicationTests { 8 | 9 | @Test 10 | void contextLoads() { 11 | } 12 | 13 | } 14 | -------------------------------------------------------------------------------- /schedule-demo/src/main/resources/application.yml: -------------------------------------------------------------------------------- 1 | logging: 2 | level: 3 | ROOT: INFO -------------------------------------------------------------------------------- /simple-apollo/simple-apollo-client/src/main/java/com/github/xjs/simple/apollo/repository/RepositoryChangeListener.java: -------------------------------------------------------------------------------- 1 | package com.github.xjs.simple.apollo.repository; 2 | 3 | import java.util.Properties; 4 | 5 | 6 | 7 | /** 8 | * @Author: xjs@choicesoft.com.cn 9 | * @Date: 2020/9/30 11:22 10 | */ 11 | public interface RepositoryChangeListener { 12 | 13 | void onRepositoryChange(Properties newProperties); 14 | 15 | } 16 | -------------------------------------------------------------------------------- /simple-apollo/simple-apollo-client/src/main/java/com/github/xjs/simple/apollo/util/PropertyChangeType.java: -------------------------------------------------------------------------------- 1 | package com.github.xjs.simple.apollo.util; 2 | 3 | /** 4 | * @Author: xjs@choicesoft.com.cn 5 | * @Date: 2020/9/30 11:28 6 | */ 7 | public enum PropertyChangeType { 8 | ADDED, MODIFIED, DELETED 9 | } 10 | -------------------------------------------------------------------------------- /simple-apollo/simple-apollo-demo/src/main/resources/META-INF/app.properties: -------------------------------------------------------------------------------- 1 | appId=app1 2 | meta=http://localhost:8000 -------------------------------------------------------------------------------- /simple-apollo/simple-apollo-demo/src/main/resources/application.yml: -------------------------------------------------------------------------------- 1 | server: 2 | port: 8888 -------------------------------------------------------------------------------- /simple-apollo/simple-apollo-server/src/main/java/com/github/xjs/ApolloServerApplication.java: -------------------------------------------------------------------------------- 1 | package com.github.xjs; 2 | 3 | import org.springframework.boot.SpringApplication; 4 | import org.springframework.boot.autoconfigure.SpringBootApplication; 5 | 6 | /** 7 | * @Author: xjs@choicesoft.com.cn 8 | * @Date: 2020/9/29 14:08 9 | */ 10 | @SpringBootApplication 11 | public class ApolloServerApplication { 12 | public static void main(String[] args) { 13 | SpringApplication.run(ApolloServerApplication.class, args); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /simple-apollo/simple-apollo-server/src/main/resources/application.yml: -------------------------------------------------------------------------------- 1 | server: 2 | port: 8000 -------------------------------------------------------------------------------- /spi-demo/jdk/src/main/java/com/github/xjs/spi/sql/Connection.java: -------------------------------------------------------------------------------- 1 | package com.github.xjs.spi.sql; 2 | 3 | public interface Connection { 4 | } 5 | -------------------------------------------------------------------------------- /spi-demo/jdk/src/main/java/com/github/xjs/spi/sql/JdbcDriver.java: -------------------------------------------------------------------------------- 1 | package com.github.xjs.spi.sql; 2 | 3 | public interface JdbcDriver { 4 | 5 | public Connection getConnection(); 6 | 7 | } 8 | -------------------------------------------------------------------------------- /spi-demo/jdk/src/main/resources/application.yml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xjs1919/learning-demo/422a6e01331330db5623e98c0b2d2224b78186c6/spi-demo/jdk/src/main/resources/application.yml -------------------------------------------------------------------------------- /spi-demo/mysql/src/main/java/com/github/xjs/spi/mysql/MySQLDriver.java: -------------------------------------------------------------------------------- 1 | package com.github.xjs.spi.mysql; 2 | 3 | import com.github.xjs.spi.sql.Connection; 4 | import com.github.xjs.spi.sql.JdbcDriver; 5 | 6 | public class MySQLDriver implements JdbcDriver { 7 | @Override 8 | public Connection getConnection() { 9 | return new Connection(){ 10 | }; 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /spi-demo/mysql/src/main/resources/META-INF/services/com.github.xjs.spi.sql.JdbcDriver: -------------------------------------------------------------------------------- 1 | com.github.xjs.spi.mysql.MySQLDriver 2 | 3 | -------------------------------------------------------------------------------- /spi-demo/mysql/src/main/resources/application.yml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xjs1919/learning-demo/422a6e01331330db5623e98c0b2d2224b78186c6/spi-demo/mysql/src/main/resources/application.yml -------------------------------------------------------------------------------- /spi-demo/userapp/src/main/resources/application.yml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xjs1919/learning-demo/422a6e01331330db5623e98c0b2d2224b78186c6/spi-demo/userapp/src/main/resources/application.yml -------------------------------------------------------------------------------- /spring-bean-lifecycle/src/main/java/com/github/xjs/BeanLifecycleTest.java: -------------------------------------------------------------------------------- 1 | package com.github.xjs; 2 | 3 | import org.springframework.context.annotation.AnnotationConfigApplicationContext; 4 | 5 | public class BeanLifecycleTest { 6 | public static void main(String[] args) { 7 | AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext(); 8 | ctx.scan("com.github.xjs.bean.lifecycle"); 9 | ctx.refresh(); 10 | ctx.close(); 11 | } 12 | } -------------------------------------------------------------------------------- /spring-bean-lifecycle/src/main/java/com/github/xjs/bean/lifecycle/InjectedService.java: -------------------------------------------------------------------------------- 1 | package com.github.xjs.bean.lifecycle; 2 | 3 | import org.springframework.stereotype.Service; 4 | 5 | @Service 6 | public class InjectedService { 7 | } 8 | -------------------------------------------------------------------------------- /spring-bean-lifecycle/src/main/resources/application.yml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xjs1919/learning-demo/422a6e01331330db5623e98c0b2d2224b78186c6/spring-bean-lifecycle/src/main/resources/application.yml -------------------------------------------------------------------------------- /spring-bean-lifecycle/src/main/resources/com/github/xjs/bean/lifecycle/beans.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 7 | -------------------------------------------------------------------------------- /spring-data-jpa-demo/src/main/java/com/example/demo/dao/CustomerRepository.java: -------------------------------------------------------------------------------- 1 | package com.example.demo.dao; 2 | 3 | import com.example.demo.entity.Customer; 4 | import com.example.demo.mock.MockRepository; 5 | import org.springframework.data.repository.CrudRepository; 6 | 7 | 8 | /** 9 | * @author 若鱼1919 10 | * @date 2022/5/7 0007 10:08 11 | */ 12 | @MockRepository 13 | public interface CustomerRepository extends CrudRepository { 14 | 15 | } 16 | -------------------------------------------------------------------------------- /spring-data-jpa-demo/src/main/java/com/example/demo/mock/MockRepository.java: -------------------------------------------------------------------------------- 1 | package com.example.demo.mock; 2 | 3 | import org.springframework.stereotype.Component; 4 | 5 | import java.lang.annotation.*; 6 | 7 | /** 8 | * @author 若鱼1919 9 | * @date 2022/5/8 0008 13:07 10 | */ 11 | @Target(ElementType.TYPE) 12 | @Retention(RetentionPolicy.RUNTIME) 13 | public @interface MockRepository { 14 | } 15 | -------------------------------------------------------------------------------- /springboot-config-demo/src/main/java/com/github/xjs/ConfigApplication.java: -------------------------------------------------------------------------------- 1 | package com.github.xjs; 2 | 3 | import org.springframework.boot.SpringApplication; 4 | import org.springframework.boot.autoconfigure.SpringBootApplication; 5 | 6 | @SpringBootApplication 7 | public class ConfigApplication { 8 | public static void main(String[] args) { 9 | SpringApplication.run(ConfigApplication.class, args); 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /springboot-config-demo/src/main/resources/application.yml: -------------------------------------------------------------------------------- 1 | app: 2 | date: 2024-01-01 -------------------------------------------------------------------------------- /springboot-config-demo/src/main/resources/custom.properties: -------------------------------------------------------------------------------- 1 | app.name=config-service -------------------------------------------------------------------------------- /springboot-config-demo/src/main/resources/custom.yml: -------------------------------------------------------------------------------- 1 | app: 2 | author: xjs -------------------------------------------------------------------------------- /springboot-jsp-demo/src/main/resources/application.yml: -------------------------------------------------------------------------------- 1 | #Spring boot视图配置 2 | spring: 3 | mvc: 4 | view: 5 | prefix: /WEB-INF/pages/ 6 | suffix: .jsp -------------------------------------------------------------------------------- /springboot-jsp-demo/src/main/webapp/WEB-INF/pages/index.jsp: -------------------------------------------------------------------------------- 1 | <%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" %> 2 | <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> 3 | 4 | 5 | 首页 6 | 7 | 8 |

使用JSP表达式:

9 | 用户姓名:<%= request.getAttribute("name") %>
10 | 11 |

使用EL表达式语言:

12 | 用户姓名:${requestScope.name}
13 | 14 |

使用JSTL标签库:

15 | 用户姓名:
16 | 17 | -------------------------------------------------------------------------------- /springboot-jsp-demo/src/main/webapp/WEB-INF/web.xml: -------------------------------------------------------------------------------- 1 | 7 | -------------------------------------------------------------------------------- /springboot-kafka-avro/src/main/avro/User.avsc: -------------------------------------------------------------------------------- 1 | { 2 | "namespace": "com.github.xjs.protocol", 3 | "type": "record", 4 | "name": "UserRecord", 5 | "fields": [ 6 | { 7 | "name": "id", 8 | "type": "int" 9 | }, 10 | { 11 | "name": "name", 12 | "type": "string" 13 | } 14 | ] 15 | } -------------------------------------------------------------------------------- /springboot-kafka-avro/src/main/java/com/github/xjs/KafkaSchemaApplication.java: -------------------------------------------------------------------------------- 1 | package com.github.xjs; 2 | 3 | import org.springframework.boot.SpringApplication; 4 | import org.springframework.boot.autoconfigure.SpringBootApplication; 5 | 6 | @SpringBootApplication 7 | public class KafkaSchemaApplication { 8 | public static void main(String[] args) { 9 | SpringApplication.run(KafkaSchemaApplication.class, args); 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /springboot-webservice/src/main/java/com/github/xjs/WebServiceApplication.java: -------------------------------------------------------------------------------- 1 | package com.github.xjs; 2 | 3 | import org.springframework.boot.SpringApplication; 4 | import org.springframework.boot.autoconfigure.SpringBootApplication; 5 | 6 | @SpringBootApplication 7 | public class WebServiceApplication{ 8 | 9 | public static void main(String[] args) { 10 | SpringApplication.run(WebServiceApplication.class, args); 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /springboot-webservice/src/main/java/com/github/xjs/dto/UserDTO.java: -------------------------------------------------------------------------------- 1 | package com.github.xjs.dto; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Data; 5 | import lombok.NoArgsConstructor; 6 | 7 | @Data 8 | @AllArgsConstructor 9 | @NoArgsConstructor 10 | public class UserDTO { 11 | private Integer id; 12 | private String name; 13 | } 14 | -------------------------------------------------------------------------------- /springboot-webservice/src/main/java/com/github/xjs/service/UserService.java: -------------------------------------------------------------------------------- 1 | package com.github.xjs.service; 2 | 3 | 4 | import com.github.xjs.dto.UserDTO; 5 | 6 | import javax.jws.WebParam; 7 | 8 | public interface UserService { 9 | 10 | UserDTO getById(@WebParam(name="id") Integer id); 11 | 12 | } 13 | -------------------------------------------------------------------------------- /springboot-webservice/src/main/resources/application.yml: -------------------------------------------------------------------------------- 1 | server: 2 | port: 8888 -------------------------------------------------------------------------------- /springbootdemo/src/main/java/com/github/xjs/sbdemo/MainApplication.java: -------------------------------------------------------------------------------- 1 | package com.github.xjs.sbdemo; 2 | 3 | import org.springframework.boot.SpringApplication; 4 | import org.springframework.boot.autoconfigure.SpringBootApplication; 5 | 6 | @SpringBootApplication 7 | public class MainApplication { 8 | 9 | public static void main(String[] args) { 10 | SpringApplication.run(MainApplication.class, args); 11 | } 12 | 13 | } 14 | -------------------------------------------------------------------------------- /springbootdemo/src/main/java/com/github/xjs/sbdemo/dao/EmployeeDao.java: -------------------------------------------------------------------------------- 1 | package com.github.xjs.sbdemo.dao; 2 | 3 | import java.util.List; 4 | 5 | import org.apache.ibatis.annotations.Mapper; 6 | 7 | /** 8 | * @author xujs@inspur.com 9 | * 10 | * @date 2019年5月14日 下午2:00:52
11 | */ 12 | @Mapper 13 | public interface EmployeeDao { 14 | public int isTableExist(); 15 | public void createTable(); 16 | public void dropTable(); 17 | public int insert(Employee emp); 18 | public List listAll(); 19 | } 20 | -------------------------------------------------------------------------------- /springbootdemo/src/main/java/com/github/xjs/sbdemo/enums/EnumAble.java: -------------------------------------------------------------------------------- 1 | package com.github.xjs.sbdemo.enums; 2 | 3 | /** 4 | * @author xujs@inspur.com 5 | * 6 | * @date 2019年5月11日 上午10:39:57
7 | */ 8 | public interface EnumAble { 9 | public T getValue(); 10 | public String getDesc(); 11 | } 12 | -------------------------------------------------------------------------------- /springbootdemo/src/main/java/com/github/xjs/sbdemo/enums/EnumScanConfig.java: -------------------------------------------------------------------------------- 1 | package com.github.xjs.sbdemo.enums; 2 | 3 | import org.springframework.context.annotation.Configuration; 4 | 5 | /** 6 | * @author xujs@inspur.com 7 | * 8 | * @date 2019年5月13日 下午3:39:00
9 | * 参考:https://blog.csdn.net/qq_27529917/article/details/79050302 10 | */ 11 | @EnumComponentScan(basePackages="com.github.xjs.sbdemo.enums") 12 | @Configuration 13 | public class EnumScanConfig { 14 | 15 | } 16 | -------------------------------------------------------------------------------- /springbootdemo/src/main/java/com/github/xjs/sbdemo/enums/Gender.java: -------------------------------------------------------------------------------- 1 | package com.github.xjs.sbdemo.enums; 2 | 3 | /** 4 | * @author xujs@inspur.com 5 | * 6 | * @date 2019年5月14日 下午2:30:39
7 | */ 8 | public class Gender extends BaseEnum { 9 | 10 | public Gender(Integer value, String desc) { 11 | super(value, desc); 12 | } 13 | public static Gender MALE = new Gender(1, "男"); 14 | public static Gender FEMALE = new Gender(2, "女"); 15 | 16 | 17 | } 18 | -------------------------------------------------------------------------------- /springbootdemo/src/main/resources/application.properties: -------------------------------------------------------------------------------- 1 | #datasource 2 | spring.datasource.url=jdbc:sqlite:employees.db 3 | spring.datasource.driver-class-name=org.sqlite.JDBC 4 | #mybatis 5 | mybatis.configuration.map-underscore-to-camel-case=true 6 | mybatis.mapperLocations = classpath:com/github/xjs/sbdemo/dao/*.xml 7 | #jackson 8 | spring.jackson.default-property-inclusion=non_null 9 | spring.jackson.date-format=yyyy-MM-dd HH:mm:ss 10 | spring.jackson.time-zone=GMT+8 -------------------------------------------------------------------------------- /springmvcdemo/src/main/java/com/github/xjs/spdemo/dao/EmployeeDao.java: -------------------------------------------------------------------------------- 1 | package com.github.xjs.spdemo.dao; 2 | 3 | import java.util.List; 4 | 5 | /** 6 | * @author xujs@inspur.com 7 | * 8 | * @date 2019年5月14日 下午2:00:52
9 | */ 10 | public interface EmployeeDao { 11 | public int isTableExist(); 12 | public void createTable(); 13 | public void dropTable(); 14 | public int insert(Employee emp); 15 | public List listAll(); 16 | } 17 | -------------------------------------------------------------------------------- /springmvcdemo/src/main/java/com/github/xjs/spdemo/enums/EnumAble.java: -------------------------------------------------------------------------------- 1 | package com.github.xjs.spdemo.enums; 2 | 3 | /** 4 | * @author xujs@inspur.com 5 | * 6 | * @date 2019年5月11日 上午10:39:57
7 | */ 8 | public interface EnumAble { 9 | public T getValue(); 10 | public String getDesc(); 11 | } 12 | -------------------------------------------------------------------------------- /springmvcdemo/src/main/java/com/github/xjs/spdemo/enums/EnumScanConfig.java: -------------------------------------------------------------------------------- 1 | package com.github.xjs.spdemo.enums; 2 | 3 | import org.springframework.context.annotation.Configuration; 4 | 5 | /** 6 | * @author xujs@inspur.com 7 | * 8 | * @date 2019年5月13日 下午3:39:00
9 | * 参考:https://blog.csdn.net/qq_27529917/article/details/79050302 10 | */ 11 | @EnumComponentScan(basePackages="com.github.xjs.spdemo.enums") 12 | @Configuration 13 | public class EnumScanConfig { 14 | 15 | } 16 | -------------------------------------------------------------------------------- /springmvcdemo/src/main/java/com/github/xjs/spdemo/enums/Gender.java: -------------------------------------------------------------------------------- 1 | package com.github.xjs.spdemo.enums; 2 | 3 | /** 4 | * @author xujs@inspur.com 5 | * 6 | * @date 2019年5月14日 下午2:30:39
7 | */ 8 | public class Gender extends BaseEnum { 9 | 10 | public Gender(Integer value, String desc) { 11 | super(value, desc); 12 | } 13 | public static Gender MALE = new Gender(1, "男"); 14 | public static Gender FEMALE = new Gender(2, "女"); 15 | 16 | 17 | } 18 | -------------------------------------------------------------------------------- /springmvcdemo/src/main/resources/conf.properties: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xjs1919/learning-demo/422a6e01331330db5623e98c0b2d2224b78186c6/springmvcdemo/src/main/resources/conf.properties -------------------------------------------------------------------------------- /springmvcdemo/src/main/resources/log4j.properties: -------------------------------------------------------------------------------- 1 | #-------------------------------- 2 | # 3 | log4j.rootLogger=INFO, stdout 4 | 5 | log4j.appender.stdout=org.apache.log4j.ConsoleAppender 6 | log4j.appender.stdout.layout=org.apache.log4j.PatternLayout 7 | log4j.appender.stdout.layout.ConversionPattern=[%-5p][%d{yyyy-MM-dd HH:mm:ss}]%m%n 8 | 9 | log4j.logger.com.github.xjs.spdemo=DEBUG 10 | log4j.logger.org.sqlite=DEBUG 11 | log4j.logger.org.mybatis=DEBUG 12 | log4j.logger.com.ibatis = DEBUG 13 | log4j.logger.org.apache.ibatis=DEBUG 14 | -------------------------------------------------------------------------------- /springmvcdemo/src/main/resources/mybatis-config.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /springmvcdemo/src/main/webapp/index.html: -------------------------------------------------------------------------------- 1 | this is index.html -------------------------------------------------------------------------------- /sse-demo/src/main/java/com/github/xjs/sbdemo/SseApplication.java: -------------------------------------------------------------------------------- 1 | package com.github.xjs.sbdemo; 2 | 3 | import org.springframework.boot.SpringApplication; 4 | import org.springframework.boot.autoconfigure.SpringBootApplication; 5 | import org.springframework.scheduling.annotation.EnableScheduling; 6 | 7 | @EnableScheduling 8 | @SpringBootApplication 9 | public class SseApplication { 10 | 11 | public static void main(String[] args) { 12 | SpringApplication.run(SseApplication.class, args); 13 | } 14 | 15 | } 16 | -------------------------------------------------------------------------------- /sse-demo/src/main/resources/application.properties: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xjs1919/learning-demo/422a6e01331330db5623e98c0b2d2224b78186c6/sse-demo/src/main/resources/application.properties -------------------------------------------------------------------------------- /sso-static/hosts: -------------------------------------------------------------------------------- 1 | 127.0.0.1 www.site1.com 2 | 127.0.0.1 www.site2.com 3 | 127.0.0.1 www.usercenter.com 4 | -------------------------------------------------------------------------------- /sso-static/sso-site1/src/main/java/com/github/xjs/sso/site1/Site1Application.java: -------------------------------------------------------------------------------- 1 | package com.github.xjs.sso.site1; 2 | import org.springframework.boot.SpringApplication; 3 | import org.springframework.boot.autoconfigure.SpringBootApplication; 4 | 5 | @SpringBootApplication 6 | public class Site1Application { 7 | 8 | public static void main(String[] args) throws Exception { 9 | SpringApplication.run(Site1Application.class, args); 10 | } 11 | 12 | } -------------------------------------------------------------------------------- /sso-static/sso-site1/src/main/resources/application.properties: -------------------------------------------------------------------------------- 1 | server.port=8081 2 | -------------------------------------------------------------------------------- /sso-static/sso-site1/src/main/resources/static/index.html: -------------------------------------------------------------------------------- 1 | this is site1 index
2 | 3 | -------------------------------------------------------------------------------- /sso-static/sso-site1/src/main/resources/static/proxy.html: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /sso-static/sso-site2/src/main/java/com/github/xjs/sso/site2/Site2Application.java: -------------------------------------------------------------------------------- 1 | package com.github.xjs.sso.site2; 2 | import org.springframework.boot.SpringApplication; 3 | import org.springframework.boot.autoconfigure.SpringBootApplication; 4 | 5 | @SpringBootApplication 6 | public class Site2Application { 7 | 8 | public static void main(String[] args) throws Exception { 9 | SpringApplication.run(Site2Application.class, args); 10 | } 11 | 12 | } -------------------------------------------------------------------------------- /sso-static/sso-site2/src/main/resources/application.properties: -------------------------------------------------------------------------------- 1 | server.port=8082 2 | -------------------------------------------------------------------------------- /sso-static/sso-site2/src/main/resources/static/index.html: -------------------------------------------------------------------------------- 1 | this is site2 index
2 | 3 | -------------------------------------------------------------------------------- /sso-static/sso-site2/src/main/resources/static/proxy.html: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /sso-static/sso-user-center/src/main/java/com/github/xjs/sso/user_center/UserCenterApplication.java: -------------------------------------------------------------------------------- 1 | package com.github.xjs.sso.user_center; 2 | import org.springframework.boot.SpringApplication; 3 | import org.springframework.boot.autoconfigure.SpringBootApplication; 4 | 5 | @SpringBootApplication 6 | public class UserCenterApplication { 7 | 8 | public static void main(String[] args) throws Exception { 9 | SpringApplication.run(UserCenterApplication.class, args); 10 | } 11 | 12 | } -------------------------------------------------------------------------------- /sso-static/sso-user-center/src/main/resources/application.properties: -------------------------------------------------------------------------------- 1 | server.port=8080 2 | spring.thymeleaf.cache=false 3 | spring.thymeleaf.enabled=true 4 | spring.thymeleaf.prefix=classpath:/templates/ 5 | spring.thymeleaf.suffix=.htm -------------------------------------------------------------------------------- /sso-static/sso-user-center/src/main/resources/static/index.html: -------------------------------------------------------------------------------- 1 | 3 | 4 | 5 | user center 6 | 7 | 8 | this is usercenter 9 | 10 | -------------------------------------------------------------------------------- /sso/hosts: -------------------------------------------------------------------------------- 1 | 127.0.0.1 www.site1.com 2 | 127.0.0.1 www.site2.com 3 | 127.0.0.1 www.usercenter.com 4 | -------------------------------------------------------------------------------- /sso/sso-site1/src/main/java/com/github/xjs/sso/site1/MainApplication.java: -------------------------------------------------------------------------------- 1 | package com.github.xjs.sso.site1; 2 | import org.springframework.boot.SpringApplication; 3 | import org.springframework.boot.autoconfigure.SpringBootApplication; 4 | 5 | @SpringBootApplication 6 | public class MainApplication{ 7 | 8 | public static void main(String[] args) throws Exception { 9 | SpringApplication.run(MainApplication.class, args); 10 | } 11 | 12 | } -------------------------------------------------------------------------------- /sso/sso-site1/src/main/resources/application.properties: -------------------------------------------------------------------------------- 1 | server.port=8081 2 | 3 | spring.thymeleaf.cache=false 4 | spring.thymeleaf.enabled=true 5 | spring.thymeleaf.prefix=classpath:/templates/ 6 | spring.thymeleaf.suffix=.htm 7 | -------------------------------------------------------------------------------- /sso/sso-site1/src/main/resources/static/index.html: -------------------------------------------------------------------------------- 1 | this is site1 index
2 | 3 | -------------------------------------------------------------------------------- /sso/sso-site1/src/main/resources/templates/main.htm: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | site1主页 5 | 6 | 7 | 8 | 欢迎你:,这是site1的主页面
9 | 10 | 15 | 16 | -------------------------------------------------------------------------------- /sso/sso-site2/src/main/java/com/github/xjs/sso/site2/MainApplication.java: -------------------------------------------------------------------------------- 1 | package com.github.xjs.sso.site2; 2 | import org.springframework.boot.SpringApplication; 3 | import org.springframework.boot.autoconfigure.SpringBootApplication; 4 | 5 | @SpringBootApplication 6 | public class MainApplication{ 7 | 8 | public static void main(String[] args) throws Exception { 9 | SpringApplication.run(MainApplication.class, args); 10 | } 11 | 12 | } -------------------------------------------------------------------------------- /sso/sso-site2/src/main/resources/application.properties: -------------------------------------------------------------------------------- 1 | server.port=8082 2 | spring.thymeleaf.cache=false 3 | spring.thymeleaf.enabled=true 4 | spring.thymeleaf.prefix=classpath:/templates/ 5 | spring.thymeleaf.suffix=.htm 6 | -------------------------------------------------------------------------------- /sso/sso-site2/src/main/resources/static/index.html: -------------------------------------------------------------------------------- 1 | this is site2 index
2 | 3 | -------------------------------------------------------------------------------- /sso/sso-site2/src/main/resources/templates/main.htm: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | site2主页 5 | 6 | 7 | 8 | ,这是site2的主页面
9 | 10 | 15 | 16 | -------------------------------------------------------------------------------- /sso/sso-user-center/src/main/java/com/github/xjs/sso/user_center/MainApplication.java: -------------------------------------------------------------------------------- 1 | package com.github.xjs.sso.user_center; 2 | import org.springframework.boot.SpringApplication; 3 | import org.springframework.boot.autoconfigure.SpringBootApplication; 4 | 5 | @SpringBootApplication 6 | public class MainApplication{ 7 | 8 | public static void main(String[] args) throws Exception { 9 | SpringApplication.run(MainApplication.class, args); 10 | } 11 | 12 | } -------------------------------------------------------------------------------- /sso/sso-user-center/src/main/resources/application.properties: -------------------------------------------------------------------------------- 1 | server.port=8080 2 | spring.thymeleaf.cache=false 3 | spring.thymeleaf.enabled=true 4 | spring.thymeleaf.prefix=classpath:/templates/ 5 | spring.thymeleaf.suffix=.htm -------------------------------------------------------------------------------- /trace-id-demo/common-service/src/main/resources/META-INF/spring.factories: -------------------------------------------------------------------------------- 1 | org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ 2 | com.github.xjs.config.MvcConfig, \ 3 | com.github.xjs.config.FeignConfig, \ 4 | com.github.xjs.config.ThreadPoolConfig, \ 5 | com.github.xjs.config.RestConfig -------------------------------------------------------------------------------- /trace-id-demo/common/src/main/java/com/github/xjs/Constants.java: -------------------------------------------------------------------------------- 1 | package com.github.xjs; 2 | 3 | public class Constants { 4 | public static final String TRACE_ID = "traceId"; 5 | } 6 | -------------------------------------------------------------------------------- /trace-id-demo/gateway-server/src/main/java/com/github/xjs/GatewayApplication.java: -------------------------------------------------------------------------------- 1 | package com.github.xjs; 2 | 3 | import org.springframework.boot.SpringApplication; 4 | import org.springframework.boot.autoconfigure.SpringBootApplication; 5 | 6 | @SpringBootApplication 7 | public class GatewayApplication { 8 | public static void main(String[] args) { 9 | SpringApplication.run(GatewayApplication.class, args); 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /trace-id-demo/order-service/src/main/java/com/github/xjs/feign/FeignConfig.java: -------------------------------------------------------------------------------- 1 | package com.github.xjs.feign; 2 | 3 | import com.github.xjs.feign.fallback.UserClientFallbackFactory; 4 | import org.springframework.context.annotation.Bean; 5 | 6 | public class FeignConfig { 7 | @Bean 8 | public UserClientFallbackFactory userClientFallbackFactory(){ 9 | return new UserClientFallbackFactory(); 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /trace-id-demo/order-service/src/main/java/com/github/xjs/pojo/Order.java: -------------------------------------------------------------------------------- 1 | package com.github.xjs.pojo; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Data; 5 | import lombok.NoArgsConstructor; 6 | 7 | @NoArgsConstructor 8 | @AllArgsConstructor 9 | @Data 10 | public class Order { 11 | 12 | private Long id; 13 | private String goodsName; 14 | private String price; 15 | private Long userId; 16 | private User user; 17 | 18 | } 19 | -------------------------------------------------------------------------------- /trace-id-demo/order-service/src/main/java/com/github/xjs/pojo/User.java: -------------------------------------------------------------------------------- 1 | package com.github.xjs.pojo; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Data; 5 | import lombok.NoArgsConstructor; 6 | 7 | @Data 8 | @AllArgsConstructor 9 | @NoArgsConstructor 10 | public class User { 11 | private Long id; 12 | private String username; 13 | private String address; 14 | } -------------------------------------------------------------------------------- /trace-id-demo/order-service/src/main/resources/application.yml: -------------------------------------------------------------------------------- 1 | server: 2 | port: 8080 3 | spring: 4 | application: 5 | name: order-service 6 | 7 | logging: 8 | level: 9 | root: info 10 | com.github.xjs: debug 11 | feign: 12 | client: 13 | config: 14 | default: 15 | logger-level: full 16 | circuitbreaker: 17 | enabled: true 18 | 19 | -------------------------------------------------------------------------------- /trace-id-demo/order-service/src/main/resources/logback.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | [%X{traceId}]-%d{HH:mm:ss.SSS} %contextName [%thread] %-5level %logger{36} - %msg%n 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /trace-id-demo/user-service/src/main/java/com/github/xjs/UserApplication.java: -------------------------------------------------------------------------------- 1 | package com.github.xjs; 2 | 3 | import org.springframework.boot.SpringApplication; 4 | import org.springframework.boot.autoconfigure.SpringBootApplication; 5 | import org.springframework.cloud.openfeign.EnableFeignClients; 6 | 7 | @EnableFeignClients 8 | @SpringBootApplication 9 | public class UserApplication { 10 | public static void main(String[] args) { 11 | SpringApplication.run(UserApplication.class, args); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /trace-id-demo/user-service/src/main/java/com/github/xjs/pojo/User.java: -------------------------------------------------------------------------------- 1 | package com.github.xjs.pojo; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Data; 5 | import lombok.NoArgsConstructor; 6 | 7 | @Data 8 | @AllArgsConstructor 9 | @NoArgsConstructor 10 | public class User { 11 | private Long id; 12 | private String username; 13 | private String address; 14 | } -------------------------------------------------------------------------------- /trace-id-demo/user-service/src/main/resources/application.yml: -------------------------------------------------------------------------------- 1 | server: 2 | port: 8081 3 | spring: 4 | application: 5 | name: user-service -------------------------------------------------------------------------------- /trace-id-demo/user-service/src/main/resources/logback.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | [%X{traceId}]-%d{HH:mm:ss.SSS} %contextName [%thread] %-5level %logger{36} - %msg%n 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /transaction-demo/employees.db: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xjs1919/learning-demo/422a6e01331330db5623e98c0b2d2224b78186c6/transaction-demo/employees.db -------------------------------------------------------------------------------- /transaction-demo/src/main/java/com/github/xjs/sbdemo/MainApplication.java: -------------------------------------------------------------------------------- 1 | package com.github.xjs.sbdemo; 2 | 3 | import org.springframework.boot.SpringApplication; 4 | import org.springframework.boot.autoconfigure.SpringBootApplication; 5 | import org.springframework.scheduling.annotation.EnableAsync; 6 | 7 | @EnableAsync 8 | @SpringBootApplication 9 | public class MainApplication { 10 | 11 | public static void main(String[] args) { 12 | SpringApplication.run(MainApplication.class, args); 13 | } 14 | 15 | } 16 | -------------------------------------------------------------------------------- /transaction-demo/src/main/java/com/github/xjs/sbdemo/event/UserRegisterEvent.java: -------------------------------------------------------------------------------- 1 | package com.github.xjs.sbdemo.event; 2 | 3 | import org.springframework.context.ApplicationEvent; 4 | 5 | public class UserRegisterEvent extends ApplicationEvent { 6 | 7 | private Integer userId; 8 | 9 | public UserRegisterEvent(Object source, Integer userId) { 10 | super(source); 11 | this.userId = userId; 12 | } 13 | 14 | public Integer getUserId() { 15 | return userId; 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /transaction-demo/src/main/resources/application.properties: -------------------------------------------------------------------------------- 1 | #datasource 2 | spring.datasource.url=jdbc:sqlite:employees.db 3 | spring.datasource.driver-class-name=org.sqlite.JDBC 4 | #mybatis 5 | mybatis.configuration.map-underscore-to-camel-case=true 6 | mybatis.mapperLocations = classpath:mapper/*.xml -------------------------------------------------------------------------------- /upload-starter-demo/upload-starter-client/src/main/java/com/github/xjs/upload/UploadClientApplication.java: -------------------------------------------------------------------------------- 1 | package com.github.xjs.upload; 2 | 3 | import org.springframework.boot.SpringApplication; 4 | import org.springframework.boot.autoconfigure.SpringBootApplication; 5 | 6 | @SpringBootApplication 7 | public class UploadClientApplication { 8 | 9 | public static void main(String[] args) { 10 | SpringApplication.run(UploadClientApplication.class, args); 11 | } 12 | 13 | } 14 | -------------------------------------------------------------------------------- /upload-starter-demo/upload-starter-client/src/main/resources/application.yml: -------------------------------------------------------------------------------- 1 | upload: 2 | service: minio 3 | minio: 4 | endpoint: http://192.168.137.138:9000 5 | bucket: itheima 6 | username: minio 7 | password: minio123 8 | -------------------------------------------------------------------------------- /upload-starter-demo/upload-starter/src/main/java/com/github/xjs/upload/UploadService.java: -------------------------------------------------------------------------------- 1 | package com.github.xjs.upload; 2 | 3 | import java.io.File; 4 | import java.io.InputStream; 5 | 6 | public interface UploadService { 7 | /*** 8 | * 上传返回url 9 | */ 10 | String upload(InputStream in, String filename); 11 | 12 | String upload(byte[] bytes, String filename); 13 | 14 | String upload(File file); 15 | 16 | } 17 | -------------------------------------------------------------------------------- /upload-starter-demo/upload-starter/src/main/resources/META-INF/spring.factories: -------------------------------------------------------------------------------- 1 | org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ 2 | com.github.xjs.upload.minio.MinioAutoConfiguration,\ 3 | com.github.xjs.upload.oss.OssAutoConfiguration 4 | 5 | -------------------------------------------------------------------------------- /websocket-demo/src/main/java/com/github/xjs/WebsocketApplication.java: -------------------------------------------------------------------------------- 1 | package com.github.xjs; 2 | 3 | import org.springframework.boot.SpringApplication; 4 | import org.springframework.boot.autoconfigure.SpringBootApplication; 5 | 6 | @SpringBootApplication 7 | public class WebsocketApplication { 8 | public static void main(String[] args) { 9 | SpringApplication.run(WebsocketApplication.class, args); 10 | } 11 | } -------------------------------------------------------------------------------- /websocket-demo/src/main/java/com/github/xjs/service/DemoService.java: -------------------------------------------------------------------------------- 1 | package com.github.xjs.service; 2 | 3 | import org.springframework.stereotype.Service; 4 | 5 | @Service 6 | public class DemoService { 7 | public String hello(){ 8 | System.out.println("hello"); 9 | return "hello"; 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /word-demo/src/main/java/com/github/xjs/WordApplication.java: -------------------------------------------------------------------------------- 1 | package com.github.xjs; 2 | 3 | import org.springframework.boot.SpringApplication; 4 | import org.springframework.boot.autoconfigure.SpringBootApplication; 5 | 6 | @SpringBootApplication 7 | public class WordApplication { 8 | public static void main(String[] args) { 9 | SpringApplication.run(WordApplication.class, args); 10 | } 11 | } -------------------------------------------------------------------------------- /word-demo/src/main/resources/template/demo.docx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xjs1919/learning-demo/422a6e01331330db5623e98c0b2d2224b78186c6/word-demo/src/main/resources/template/demo.docx --------------------------------------------------------------------------------