├── .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
--------------------------------------------------------------------------------