Showing preview only (4,744K chars total). Download the full file or copy to clipboard to get everything.
Repository: Xlinlin/SpringCloud-Demo
Branch: master
Commit: 5efd083d427f
Files: 742
Total size: 22.6 MB
Directory structure:
gitextract_ftqt9i7b/
├── .gitattributes
├── .gitignore
├── CODE_OF_CONDUCT.md
├── LICENSE.txt
├── README.md
├── SpringBoot-Admin/
│ ├── pom.xml
│ ├── readme.md
│ └── src/
│ └── main/
│ ├── java/
│ │ └── com/
│ │ └── xiao/
│ │ └── spring/
│ │ └── boot/
│ │ └── admin/
│ │ └── SpringBootAdminApplication.java
│ └── resources/
│ ├── application.yml
│ └── bootstrap.yml
├── SpringBoot-Custom-Elasticsearch-Starter/
│ ├── Custom-Elasticsearch-Starter/
│ │ └── pom.xml
│ ├── Custom-Elasticsearch-Starter-Autoconfig/
│ │ ├── pom.xml
│ │ └── src/
│ │ └── main/
│ │ ├── java/
│ │ │ └── com/
│ │ │ └── xiao/
│ │ │ └── custom/
│ │ │ └── elasticsearch/
│ │ │ └── start/
│ │ │ └── autoconfig/
│ │ │ ├── ElasticsearchAutoConfiguration.java
│ │ │ └── properties/
│ │ │ ├── ElasticsearchProperties.java
│ │ │ └── HostInfo.java
│ │ └── resources/
│ │ └── META-INF/
│ │ └── spring.factories
│ ├── Custom-Elasticsearch-Starter-Example/
│ │ ├── pom.xml
│ │ └── src/
│ │ ├── main/
│ │ │ ├── java/
│ │ │ │ └── com/
│ │ │ │ └── xiao/
│ │ │ │ └── custom/
│ │ │ │ └── elasticsearch/
│ │ │ │ └── starter/
│ │ │ │ └── example/
│ │ │ │ └── ElasticsearchApplication.java
│ │ │ └── resources/
│ │ │ ├── application.properties
│ │ │ ├── application.yml
│ │ │ ├── bootstrap.yml
│ │ │ └── logback-spring.xml
│ │ └── test/
│ │ └── java/
│ │ └── com/
│ │ └── xiao/
│ │ └── custom/
│ │ └── elasticsearch/
│ │ └── starter/
│ │ └── example/
│ │ └── ElasticsearchApplicationTest.java
│ ├── Readme.md
│ └── pom.xml
├── SpringBoot-Custom-Rest-Starter/
│ ├── Readme.md
│ ├── SpringBoot-Custom-Rest-Autconfigure/
│ │ ├── pom.xml
│ │ └── src/
│ │ └── main/
│ │ ├── java/
│ │ │ └── com/
│ │ │ └── xiao/
│ │ │ └── custom/
│ │ │ └── rest/
│ │ │ └── starter/
│ │ │ └── autoconfigure/
│ │ │ ├── config/
│ │ │ │ ├── RestTemplateConfiguration.java
│ │ │ │ └── properties/
│ │ │ │ ├── HttpPoolProperties.java
│ │ │ │ └── OkHttpProperties.java
│ │ │ ├── dto/
│ │ │ │ └── Request.java
│ │ │ ├── interceptor/
│ │ │ │ └── RestInterceptor.java
│ │ │ ├── log/
│ │ │ │ ├── annotation/
│ │ │ │ │ ├── RequestLog.java
│ │ │ │ │ └── RequestLogAspect.java
│ │ │ │ ├── dto/
│ │ │ │ │ └── HttpRequestLog.java
│ │ │ │ └── service/
│ │ │ │ └── HttpRequestLogService.java
│ │ │ ├── service/
│ │ │ │ ├── HttpClientService.java
│ │ │ │ └── impl/
│ │ │ │ ├── HttpClientAsyncServiceImpl.java
│ │ │ │ ├── HttpClientServiceImpl.java
│ │ │ │ └── HttpRetryService.java
│ │ │ └── util/
│ │ │ ├── RequestValidatorParamsUtil.java
│ │ │ └── ThreadLocalUtil.java
│ │ └── resources/
│ │ └── META-INF/
│ │ └── spring.factories
│ ├── SpringBoot-Custom-Rest-Example/
│ │ ├── pom.xml
│ │ └── src/
│ │ ├── main/
│ │ │ ├── java/
│ │ │ │ └── com/
│ │ │ │ └── xiao/
│ │ │ │ └── custom/
│ │ │ │ └── rest/
│ │ │ │ └── example/
│ │ │ │ ├── RestExampleApp.java
│ │ │ │ └── log/
│ │ │ │ └── impl/
│ │ │ │ └── HttpLogServiceImpl.java
│ │ │ └── resources/
│ │ │ ├── application.yml
│ │ │ └── logback-spring.xml
│ │ └── test/
│ │ └── java/
│ │ └── com/
│ │ └── xiao/
│ │ └── custom/
│ │ └── rest/
│ │ └── example/
│ │ ├── RestTemplateStarterAppTest.java
│ │ ├── httpclient/
│ │ │ └── HttpClientTest.java
│ │ └── template/
│ │ └── RestTemplateTest.java
│ └── pom.xml
├── SpringBoot-Stock-Demo/
│ ├── doc/
│ │ ├── bootstrap.sh
│ │ ├── stock.sql
│ │ └── stock_demo_jmeter.jmx
│ ├── pom.xml
│ ├── readme.md
│ └── src/
│ └── main/
│ ├── java/
│ │ └── com/
│ │ └── xiao/
│ │ └── stock/
│ │ └── demo/
│ │ ├── StockDemoApplication.java
│ │ ├── common/
│ │ │ └── StockOptTypeEnum.java
│ │ ├── configure/
│ │ │ ├── DataSourceConfiguration.java
│ │ │ └── RedissonConfiguration.java
│ │ ├── entity/
│ │ │ ├── OrderDemo.java
│ │ │ ├── StockChangeLodDemo.java
│ │ │ └── StockDemo.java
│ │ ├── mapper/
│ │ │ ├── OrderDemoMapper.java
│ │ │ ├── StockChangeLodDemoMapper.java
│ │ │ └── StockDemoMapper.java
│ │ ├── rest/
│ │ │ └── StockRestService.java
│ │ ├── service/
│ │ │ ├── StockDemoService.java
│ │ │ └── impl/
│ │ │ └── StockDemoServiceImpl.java
│ │ └── util/
│ │ ├── OrderNoUtil.java
│ │ └── StockUtil.java
│ └── resources/
│ ├── application.yml
│ ├── com/
│ │ └── xiao/
│ │ └── stock/
│ │ └── demo/
│ │ └── mapper/
│ │ ├── OrderDemoMapper.xml
│ │ ├── StockChangeLodDemoMapper.xml
│ │ └── StockDemoMapper.xml
│ └── logback-spring.xml
├── SpringCloud-Canal/
│ ├── doc/
│ │ └── ServerRunningMonitor源码注解.md
│ ├── pom.xml
│ ├── readme.md
│ └── src/
│ └── main/
│ ├── java/
│ │ └── com/
│ │ ├── alibaba/
│ │ │ └── canal/
│ │ │ └── simple/
│ │ │ └── ClientSample.java
│ │ └── xiao/
│ │ └── springcloud/
│ │ ├── CanalSimpleApplication.java
│ │ ├── canal/
│ │ │ ├── CanalClientService.java
│ │ │ └── CanalConfig.java
│ │ └── disruptor/
│ │ ├── DataEvent.java
│ │ ├── DataEventFactory.java
│ │ ├── DisruptorConsumer.java
│ │ ├── DisruptorExceptionHandler.java
│ │ ├── DisruptorProducer.java
│ │ ├── DisruptorThreadFactory.java
│ │ ├── TableData.java
│ │ └── service/
│ │ ├── DisruptorService.java
│ │ └── impl/
│ │ └── DisruptorServiceImpl.java
│ └── resources/
│ └── application.properties
├── SpringCloud-Common/
│ ├── README.md
│ ├── pom.xml
│ ├── script/
│ │ ├── auto_deploy.sh
│ │ ├── bootstrap.sh
│ │ └── remote_deploy.sh
│ └── src/
│ └── main/
│ └── java/
│ └── com/
│ └── xiao/
│ └── springcloud/
│ └── demo/
│ └── common/
│ ├── SkywalkingService.java
│ ├── cache/
│ │ ├── README.md
│ │ ├── code/
│ │ │ ├── FastJsonCodec.java
│ │ │ └── SerializerObject.java
│ │ ├── conf/
│ │ │ └── RedissonConfig.java
│ │ ├── dto/
│ │ │ └── EntryDto.java
│ │ ├── local/
│ │ │ └── SpringGuavaCacheConfig.java
│ │ └── service/
│ │ ├── CacheService.java
│ │ ├── DistributedService.java
│ │ └── impl/
│ │ ├── CacheServiceRedisImpl.java
│ │ └── DistributedServiceRedissonImpl.java
│ ├── conf/
│ │ └── FeignConfiguration.java
│ ├── disruptor/
│ │ ├── DataEventFactory.java
│ │ ├── DisruptorConsumer.java
│ │ ├── DisruptorExceptionHandler.java
│ │ ├── DisruptorProducer.java
│ │ ├── DisruptorThreadFactory.java
│ │ ├── data/
│ │ │ ├── BasisData.java
│ │ │ ├── DataEvent.java
│ │ │ └── EventEnum.java
│ │ ├── event/
│ │ │ └── ServiceEvent.java
│ │ ├── readme.md
│ │ └── service/
│ │ ├── DisruptorService.java
│ │ └── impl/
│ │ └── DisruptorServiceImpl.java
│ ├── eureka/
│ │ └── LoadBalancerAspect.java
│ ├── exception/
│ │ ├── AbstractServiceException.java
│ │ ├── CommonException.java
│ │ └── CommonExceptionEnum.java
│ ├── forkjoin/
│ │ ├── ForkjoinConfiguration.java
│ │ ├── ForkjoinService.java
│ │ └── task/
│ │ └── ForkjoinTask.java
│ ├── gloab/
│ │ ├── interceptor/
│ │ │ ├── README.md
│ │ │ ├── advice/
│ │ │ │ └── DefaultControllerAdvice.java
│ │ │ ├── config/
│ │ │ │ ├── FastjsonConfig.java
│ │ │ │ └── FeignConfig.java
│ │ │ └── fegin/
│ │ │ ├── CommonFeignErrorDecoder.java
│ │ │ ├── CommonFeignHeaderProcessInterceptor.java
│ │ │ ├── DefaultCommonErrorAttributes.java
│ │ │ ├── FeignBeanFactoryPostProcessor.java
│ │ │ └── HttpContext.java
│ │ └── response/
│ │ ├── ErrorResponseData.java
│ │ ├── ResponseData.java
│ │ └── SuccessResponseData.java
│ ├── logaspect/
│ │ ├── LogAnnotation.java
│ │ ├── LogAspect.java
│ │ ├── LogInfo.java
│ │ ├── LogService.java
│ │ ├── README.md
│ │ └── Slf4jLogService.java
│ ├── sign/
│ │ ├── SignConstants.java
│ │ ├── annotation/
│ │ │ ├── DisposeSign.java
│ │ │ └── DisposeSignService.java
│ │ ├── filter/
│ │ │ └── WrapperRequestFilter.java
│ │ ├── readme.md
│ │ ├── request/
│ │ │ └── BodyReaderHttpServletRequestWrapper.java
│ │ ├── service/
│ │ │ ├── AppManagerService.java
│ │ │ └── impl/
│ │ │ └── AppManagerServiceConfigImpl.java
│ │ └── util/
│ │ ├── AsciiSortUtil.java
│ │ ├── HttpRequestUtils.java
│ │ └── SignUtil.java
│ ├── util/
│ │ ├── CodeFormatConstants.java
│ │ ├── DateUtils.java
│ │ ├── ListPageUtil.java
│ │ ├── StringLengthUtils.java
│ │ ├── encode/
│ │ │ ├── AESEncryption.java
│ │ │ ├── AESType.java
│ │ │ ├── BinaryHelper.java
│ │ │ ├── ByteUtils.java
│ │ │ ├── HMACUtil.java
│ │ │ └── Md5DigestUtil.java
│ │ └── image/
│ │ ├── ImageDHashUtil.java
│ │ └── ImagePHashUtil.java
│ └── validator/
│ ├── CodePrefix.java
│ ├── ParamAspect.java
│ ├── ParamValidator.java
│ ├── ParamVerify.java
│ ├── Validator.java
│ └── VerifyConstants.java
├── SpringCloud-ConfigCenter/
│ ├── Readme.txt
│ ├── pom.xml
│ └── src/
│ └── main/
│ ├── java/
│ │ └── com/
│ │ └── xiao/
│ │ └── springcloud/
│ │ └── configure/
│ │ └── ConfigureApplication.java
│ └── resources/
│ └── application.yml
├── SpringCloud-Configure/
│ ├── README.txt
│ ├── consumer/
│ │ ├── springcloud-dev.properties
│ │ ├── springcloud-dev.yml
│ │ ├── springcloud-prod.properties
│ │ ├── springcloud-prod.yml
│ │ ├── springcloud-test.properties
│ │ └── springcloud-test.yml
│ ├── eureka-server/
│ │ ├── eureka-server-dev.properties
│ │ ├── eureka-server-dev.yml
│ │ ├── eureka-server-test.properties
│ │ └── eureka-server-test.yml
│ ├── pom.xml
│ └── redisson/
│ ├── redission-dev.yml
│ ├── redission-sentinel-dev.yml
│ ├── redisson-cloud.yml
│ ├── redisson-cluster-dev.yml
│ └── redisson-cluster-test.yml
├── SpringCloud-Consumer/
│ ├── pom.xml
│ └── src/
│ └── main/
│ ├── java/
│ │ └── com/
│ │ └── xiao/
│ │ └── skywalking/
│ │ └── consumer/
│ │ ├── ConsumerApp.java
│ │ ├── common/
│ │ │ ├── CommonConstants.java
│ │ │ ├── CommonException.java
│ │ │ ├── ExceptionEnum.java
│ │ │ ├── advice/
│ │ │ │ ├── GlobalExceptionAdvice.java
│ │ │ │ └── UnifiedReturnAdvice.java
│ │ │ └── response/
│ │ │ ├── ErrorResponseData.java
│ │ │ ├── ResponseData.java
│ │ │ └── SuccessResponseData.java
│ │ ├── controller/
│ │ │ └── FeignContoller.java
│ │ ├── feign/
│ │ │ ├── FeignService.java
│ │ │ └── impl/
│ │ │ ├── FQA
│ │ │ └── FeignServiceImpl.java
│ │ └── ribbon/
│ │ └── RibbonService.java
│ └── resources/
│ ├── application.yml
│ └── bootstrap.yml
├── SpringCloud-Custom-ConfigCenter/
│ ├── README.MD
│ ├── custom-config-client/
│ │ ├── README.md
│ │ ├── pom.xml
│ │ └── src/
│ │ └── main/
│ │ ├── java/
│ │ │ └── com/
│ │ │ └── xiao/
│ │ │ └── custom/
│ │ │ └── config/
│ │ │ └── client/
│ │ │ ├── configuration/
│ │ │ │ ├── ConfigClientAutoConfiguration.java
│ │ │ │ ├── ConfigClientHealthProperties.java
│ │ │ │ ├── ConfigClientProperties.java
│ │ │ │ ├── ConfigClientStateHolder.java
│ │ │ │ ├── ConfigClientWatch.java
│ │ │ │ ├── ConfigServerHealthIndicator.java
│ │ │ │ ├── ConfigServiceBootstrapConfiguration.java
│ │ │ │ ├── ConfigServicePropertySourceLocator.java
│ │ │ │ ├── DiscoveryClientConfigServiceBootstrapConfiguration.java
│ │ │ │ └── RetryProperties.java
│ │ │ ├── environment/
│ │ │ │ ├── Environment.java
│ │ │ │ └── PropertySource.java
│ │ │ ├── netty/
│ │ │ │ ├── client/
│ │ │ │ │ └── NettyClient.java
│ │ │ │ ├── coder/
│ │ │ │ │ ├── ProtoDecoder.java
│ │ │ │ │ └── ProtoEncoder.java
│ │ │ │ ├── dto/
│ │ │ │ │ ├── CommandEnum.java
│ │ │ │ │ └── Message.java
│ │ │ │ ├── factory/
│ │ │ │ │ ├── CoderFactory.java
│ │ │ │ │ └── NamedThreadFactory.java
│ │ │ │ ├── handler/
│ │ │ │ │ └── ServiceHandler.java
│ │ │ │ └── util/
│ │ │ │ ├── ProtostuffUtil.java
│ │ │ │ └── RemotingUtil.java
│ │ │ └── refresh/
│ │ │ ├── api/
│ │ │ │ └── RefreshController.java
│ │ │ ├── component/
│ │ │ │ └── RefreshBeanConfig.java
│ │ │ └── service/
│ │ │ ├── ConfigRefreshService.java
│ │ │ └── impl/
│ │ │ └── ConfigRefreshServiceImpl.java
│ │ └── resources/
│ │ └── META-INF/
│ │ └── spring.factories
│ ├── custom-config-dependencies/
│ │ └── pom.xml
│ ├── custom-config-pojo/
│ │ ├── pom.xml
│ │ └── src/
│ │ └── main/
│ │ ├── java/
│ │ │ └── com/
│ │ │ └── xiao/
│ │ │ └── custom/
│ │ │ └── config/
│ │ │ └── pojo/
│ │ │ ├── common/
│ │ │ │ └── BaseQuery.java
│ │ │ ├── dto/
│ │ │ │ ├── ApplicationConfigDto.java
│ │ │ │ ├── ApplicationDto.java
│ │ │ │ ├── ClientHostInfoDto.java
│ │ │ │ ├── ConfigItemDto.java
│ │ │ │ ├── ConfigItemGroupDto.java
│ │ │ │ ├── RegionDto.java
│ │ │ │ └── ServerHostConfigDto.java
│ │ │ ├── entity/
│ │ │ │ ├── Application.java
│ │ │ │ ├── ApplicationConfig.java
│ │ │ │ ├── ApplicationItemGroupRelation.java
│ │ │ │ ├── AuthUser.java
│ │ │ │ ├── ClientApplication.java
│ │ │ │ ├── ClientHostInfo.java
│ │ │ │ ├── ClientInfo.java
│ │ │ │ ├── ConfigItem.java
│ │ │ │ ├── ConfigItemGroup.java
│ │ │ │ ├── ConfigItemGroupRelation.java
│ │ │ │ ├── Region.java
│ │ │ │ ├── Role.java
│ │ │ │ └── ServerHostConfig.java
│ │ │ ├── mapper/
│ │ │ │ ├── ApplicationConfigMapper.java
│ │ │ │ ├── ApplicationItemGroupRelationMapper.java
│ │ │ │ ├── ApplicationMapper.java
│ │ │ │ ├── AuthMapper.java
│ │ │ │ ├── ClientApplicationMapper.java
│ │ │ │ ├── ClientHostInfoMapper.java
│ │ │ │ ├── ConfigItemGroupMapper.java
│ │ │ │ ├── ConfigItemGroupRelationMapper.java
│ │ │ │ ├── ConfigItemMapper.java
│ │ │ │ ├── RegionMapper.java
│ │ │ │ └── ServerHostConfigMapper.java
│ │ │ └── query/
│ │ │ ├── AppQuery.java
│ │ │ ├── ApplicationConfigQuery.java
│ │ │ ├── ClientHostInfoQuery.java
│ │ │ ├── ConfigItemGroupQuery.java
│ │ │ ├── ConfigItemQuery.java
│ │ │ ├── RegionQuery.java
│ │ │ └── ServerHostConfigQuery.java
│ │ └── resources/
│ │ └── com/
│ │ └── xiao/
│ │ └── custom/
│ │ └── config/
│ │ └── pojo/
│ │ └── mapper/
│ │ ├── ApplicationConfigMapper.xml
│ │ ├── ApplicationItemGroupRelationMapper.xml
│ │ ├── ApplicationMapper.xml
│ │ ├── AuthMapper.xml
│ │ ├── ClientApplicationMapper.xml
│ │ ├── ClientHostInfoMapper.xml
│ │ ├── ConfigItemGroupMapper.xml
│ │ ├── ConfigItemGroupRelationMapper.xml
│ │ ├── ConfigItemMapper.xml
│ │ ├── RegionMapper.xml
│ │ └── ServerHostConfigMapper.xml
│ ├── custom-config-server/
│ │ ├── README.md
│ │ ├── pom.xml
│ │ └── src/
│ │ └── main/
│ │ ├── java/
│ │ │ └── com/
│ │ │ └── xiao/
│ │ │ └── custom/
│ │ │ └── config/
│ │ │ └── server/
│ │ │ ├── ConfigerCenterApplication.java
│ │ │ ├── annotation/
│ │ │ │ └── CustomEnableConfigServer.java
│ │ │ ├── config/
│ │ │ │ └── CustomEnvironmentRepositoryConfiguration.java
│ │ │ ├── controller/
│ │ │ │ └── RefreshController.java
│ │ │ ├── environment/
│ │ │ │ └── CustomEnvironmentRepository.java
│ │ │ ├── manager/
│ │ │ │ ├── ClientManagerService.java
│ │ │ │ ├── SqlConstants.java
│ │ │ │ └── impl/
│ │ │ │ └── ClientManagerServiceDbImpl.java
│ │ │ ├── netty/
│ │ │ │ ├── coder/
│ │ │ │ │ ├── ProtoDecoder.java
│ │ │ │ │ └── ProtoEncoder.java
│ │ │ │ ├── dto/
│ │ │ │ │ ├── CommandEnum.java
│ │ │ │ │ └── Message.java
│ │ │ │ ├── factory/
│ │ │ │ │ ├── CoderFactory.java
│ │ │ │ │ └── NamedThreadFactory.java
│ │ │ │ ├── handler/
│ │ │ │ │ └── ServiceHandler.java
│ │ │ │ ├── manager/
│ │ │ │ │ ├── Connection.java
│ │ │ │ │ └── ConnectionManager.java
│ │ │ │ ├── server/
│ │ │ │ │ └── NettyServer.java
│ │ │ │ └── util/
│ │ │ │ ├── NettyConfig.java
│ │ │ │ ├── NettyEventLoopUtil.java
│ │ │ │ ├── ProtostuffUtil.java
│ │ │ │ └── RemotingUtil.java
│ │ │ └── service/
│ │ │ ├── RefreshService.java
│ │ │ ├── RepositoryService.java
│ │ │ └── impl/
│ │ │ ├── JdbcRepositoryServiceImpl.java
│ │ │ └── RefreshServiceImpl.java
│ │ └── resources/
│ │ └── application.yml
│ ├── custom-config-service/
│ │ ├── README.md
│ │ ├── pom.xml
│ │ └── src/
│ │ └── main/
│ │ ├── java/
│ │ │ └── com/
│ │ │ └── xiao/
│ │ │ └── custom/
│ │ │ └── config/
│ │ │ └── service/
│ │ │ ├── ConfigServiceApplication.java
│ │ │ ├── api/
│ │ │ │ ├── ApplicationApi.java
│ │ │ │ ├── AuthApi.java
│ │ │ │ ├── ClientHostApi.java
│ │ │ │ ├── ConfigItemApi.java
│ │ │ │ ├── ConfigItemGroupApi.java
│ │ │ │ ├── RegionApi.java
│ │ │ │ └── ServerHostConfigApi.java
│ │ │ ├── feign/
│ │ │ │ └── RefreshFeign.java
│ │ │ └── service/
│ │ │ ├── ApplicationItemGroupRelationService.java
│ │ │ ├── ApplicationService.java
│ │ │ ├── AuthService.java
│ │ │ ├── ClientHostService.java
│ │ │ ├── ConfigItemGroupRelationService.java
│ │ │ ├── ConfigItemGroupService.java
│ │ │ ├── ConfigItemService.java
│ │ │ ├── RegionService.java
│ │ │ ├── ServerHostConfigService.java
│ │ │ └── impl/
│ │ │ ├── ApplicationItemGroupRelationServiceImpl.java
│ │ │ ├── ApplicationServiceImpl.java
│ │ │ ├── AuthServiceImpl.java
│ │ │ ├── ClientHostServiceImpl.java
│ │ │ ├── ConfigItemGroupRelationServiceImpl.java
│ │ │ ├── ConfigItemGroupServiceImpl.java
│ │ │ ├── ConfigItemServiceImpl.java
│ │ │ ├── RegionServiceImpl.java
│ │ │ └── ServerHostConfigServiceImpl.java
│ │ └── resources/
│ │ ├── application.yml
│ │ └── bootstrap.yml
│ ├── custom-config-simple/
│ │ ├── README.md
│ │ ├── pom.xml
│ │ └── src/
│ │ └── main/
│ │ ├── java/
│ │ │ └── com/
│ │ │ └── xiao/
│ │ │ └── custom/
│ │ │ └── config/
│ │ │ └── simple/
│ │ │ ├── ConfigClientApplication.java
│ │ │ ├── datasource/
│ │ │ │ └── DataSourceConfigure.java
│ │ │ └── demo/
│ │ │ └── ControllerDemo.java
│ │ └── resources/
│ │ ├── bootstrap.yml
│ │ └── logback-spring.xml
│ ├── custom-config-web/
│ │ ├── README.md
│ │ ├── pom.xml
│ │ └── src/
│ │ └── main/
│ │ ├── java/
│ │ │ └── com/
│ │ │ └── xiao/
│ │ │ └── custom/
│ │ │ └── config/
│ │ │ └── web/
│ │ │ ├── ConfigCenterWebApplication.java
│ │ │ ├── auth/
│ │ │ │ ├── AuthContants.java
│ │ │ │ ├── config/
│ │ │ │ │ ├── HttpSessionConfig.java
│ │ │ │ │ ├── JwtAuthenticationEntryPoint.java
│ │ │ │ │ ├── JwtAuthenticationTokenFilter.java
│ │ │ │ │ ├── RestAccessDeniedHandler.java
│ │ │ │ │ └── WebSecurityConfig.java
│ │ │ │ ├── controller/
│ │ │ │ │ └── AuthController.java
│ │ │ │ ├── entity/
│ │ │ │ │ ├── ResponseUserToken.java
│ │ │ │ │ ├── User.java
│ │ │ │ │ └── UserDetail.java
│ │ │ │ ├── exception/
│ │ │ │ │ ├── CustomException.java
│ │ │ │ │ └── DefaultExceptionHandler.java
│ │ │ │ ├── service/
│ │ │ │ │ ├── AuthUserService.java
│ │ │ │ │ └── impl/
│ │ │ │ │ ├── AuthUserServiceImpl.java
│ │ │ │ │ └── ConfigUserDetailsServiceImpl.java
│ │ │ │ └── util/
│ │ │ │ ├── JwtUtils.java
│ │ │ │ ├── PageResult.java
│ │ │ │ ├── ResultCode.java
│ │ │ │ └── ResultJson.java
│ │ │ ├── commo/
│ │ │ │ └── Constants.java
│ │ │ ├── config/
│ │ │ │ └── AppControllerAdvice.java
│ │ │ ├── controller/
│ │ │ │ ├── ClientInfoController.java
│ │ │ │ ├── ConfigGroupController.java
│ │ │ │ ├── ConfigItemController.java
│ │ │ │ ├── IndexController.java
│ │ │ │ ├── RegionController.java
│ │ │ │ ├── ServerHostConfigController.java
│ │ │ │ └── app/
│ │ │ │ ├── AppManagerController.java
│ │ │ │ └── vo/
│ │ │ │ ├── ApplicationVo.java
│ │ │ │ └── RegionVo.java
│ │ │ ├── dto/
│ │ │ │ └── ServerHostConfigDto.java
│ │ │ ├── exception/
│ │ │ │ └── ExceptionEnum.java
│ │ │ └── feign/
│ │ │ ├── app/
│ │ │ │ └── ApplicationFeign.java
│ │ │ ├── auth/
│ │ │ │ └── AuthFeign.java
│ │ │ ├── client/
│ │ │ │ └── ClientInfoFeign.java
│ │ │ ├── config/
│ │ │ │ ├── ConfigGroupFeign.java
│ │ │ │ └── ConfigItemFeign.java
│ │ │ ├── region/
│ │ │ │ └── RegionFeign.java
│ │ │ └── server/
│ │ │ └── ServerHostConfigFeign.java
│ │ └── resources/
│ │ ├── application.properties
│ │ ├── application.yml
│ │ ├── bootstrap.yml
│ │ └── static/
│ │ ├── mock/
│ │ │ ├── index.js
│ │ │ └── mock.js
│ │ ├── pages/
│ │ │ ├── app/
│ │ │ │ ├── add.html
│ │ │ │ ├── add.js
│ │ │ │ ├── app.html
│ │ │ │ ├── app.js
│ │ │ │ ├── configgroup.html
│ │ │ │ ├── configgroup.js
│ │ │ │ ├── detail.html
│ │ │ │ ├── detail.js
│ │ │ │ ├── refconfiggroup.html
│ │ │ │ └── refconfiggroup.js
│ │ │ ├── client/
│ │ │ │ ├── client.html
│ │ │ │ └── client.js
│ │ │ ├── config/
│ │ │ │ ├── configitem.html
│ │ │ │ └── configitem.js
│ │ │ ├── configgroup/
│ │ │ │ ├── configgroup.html
│ │ │ │ ├── configgroup.js
│ │ │ │ ├── detail.html
│ │ │ │ ├── detail.js
│ │ │ │ ├── refdetail.html
│ │ │ │ └── refdetail.js
│ │ │ ├── error/
│ │ │ │ ├── 401.html
│ │ │ │ ├── 404.html
│ │ │ │ └── 500.html
│ │ │ ├── home/
│ │ │ │ ├── home.html
│ │ │ │ └── home.js
│ │ │ ├── index/
│ │ │ │ ├── compents.js
│ │ │ │ ├── index.css
│ │ │ │ ├── index.html
│ │ │ │ └── index.js
│ │ │ ├── login/
│ │ │ │ └── login.html
│ │ │ ├── region/
│ │ │ │ ├── region.html
│ │ │ │ └── region.js
│ │ │ ├── server/
│ │ │ │ ├── server.js
│ │ │ │ └── serverlist.html
│ │ │ ├── support/
│ │ │ │ ├── code_check.html
│ │ │ │ └── support.html
│ │ │ └── template/
│ │ │ ├── detail.html
│ │ │ ├── detail.js
│ │ │ ├── template.html
│ │ │ └── template.js
│ │ └── plugin/
│ │ ├── common/
│ │ │ ├── common.js
│ │ │ └── env.js
│ │ ├── element/
│ │ │ ├── js/
│ │ │ │ └── index.js
│ │ │ └── styles/
│ │ │ ├── fonts/
│ │ │ │ ├── iconfont.css
│ │ │ │ └── iconfont.js
│ │ │ └── index.css
│ │ ├── iview/
│ │ │ ├── js/
│ │ │ │ └── iview-editor.js
│ │ │ └── styles/
│ │ │ ├── iview-editor.css
│ │ │ └── iview.css
│ │ ├── jquery/
│ │ │ ├── 3.3.1/
│ │ │ │ └── jquery.js
│ │ │ └── jquery.history.js
│ │ └── mock/
│ │ └── mock-min.js
│ ├── custom-starter-config/
│ │ ├── README.md
│ │ ├── pom.xml
│ │ └── src/
│ │ └── main/
│ │ └── resources/
│ │ └── META-INF/
│ │ └── spring.provides
│ ├── doc/
│ │ └── configMysql.sql
│ └── pom.xml
├── SpringCloud-Custom-RestTemplate-Stater/
│ ├── Readme.md
│ ├── SpringCloud-RestTemplate-Stater/
│ │ ├── pom.xml
│ │ └── src/
│ │ └── main/
│ │ ├── java/
│ │ │ └── com/
│ │ │ └── xiao/
│ │ │ └── springcloud/
│ │ │ └── rest/
│ │ │ └── stater/
│ │ │ └── autoconfig/
│ │ │ ├── common/
│ │ │ │ ├── dto/
│ │ │ │ │ └── Request.java
│ │ │ │ ├── interceptor/
│ │ │ │ │ └── RestInterceptor.java
│ │ │ │ ├── log/
│ │ │ │ │ ├── annotation/
│ │ │ │ │ │ ├── RequestLog.java
│ │ │ │ │ │ └── RequestLogAspect.java
│ │ │ │ │ ├── dto/
│ │ │ │ │ │ └── HttpRequestLog.java
│ │ │ │ │ └── service/
│ │ │ │ │ └── HttpRequestLogService.java
│ │ │ │ ├── service/
│ │ │ │ │ ├── HttpClientService.java
│ │ │ │ │ └── impl/
│ │ │ │ │ └── HttpClientServiceImpl.java
│ │ │ │ └── util/
│ │ │ │ └── ThreadLocalUtil.java
│ │ │ └── config/
│ │ │ ├── RestTemplateConfiguration.java
│ │ │ └── properties/
│ │ │ ├── HttpPoolProperties.java
│ │ │ └── OkHttpProperties.java
│ │ └── resources/
│ │ └── META-INF/
│ │ └── spring.factories
│ ├── SpringCloud-RestTemplate-Stater-Example/
│ │ ├── pom.xml
│ │ └── src/
│ │ ├── main/
│ │ │ ├── java/
│ │ │ │ └── com/
│ │ │ │ └── xiao/
│ │ │ │ └── springcloud/
│ │ │ │ └── rest/
│ │ │ │ ├── RestTemplateStaterApp.java
│ │ │ │ └── log/
│ │ │ │ └── impl/
│ │ │ │ └── HttpLogServiceiImpl.java
│ │ │ └── resources/
│ │ │ ├── application.yml
│ │ │ └── logback-spring.xml
│ │ └── test/
│ │ └── java/
│ │ └── com/
│ │ └── xiao/
│ │ └── springcloud/
│ │ └── rest/
│ │ ├── RestTemplateStarterAppTest.java
│ │ └── httpclient/
│ │ └── HttpClientTest.java
│ └── pom.xml
├── SpringCloud-Demo-Doc/
│ ├── ES/
│ │ ├── ElasticSearch后台操作(使用)手册1.0.docx
│ │ ├── ElasticSearch安装手册1.0.docx
│ │ ├── Elasticsearch IK分词器扩展说明.docx
│ │ └── es索引创建1.1.jmx
│ ├── docker/
│ │ ├── batch_del.sh
│ │ ├── docker-build.sh
│ │ ├── docker-monitor.json
│ │ ├── docker-monitor.yml
│ │ └── docker-swarm-springcloud.md
│ ├── gitlab/
│ │ ├── Gitlab使用手册.docx
│ │ ├── Gitlab安装手册.docx
│ │ ├── gitlab-ci.yml
│ │ ├── sonar_analyze.sh
│ │ └── sonar_preview.sh
│ ├── k8s/
│ │ ├── CronJob.yaml
│ │ ├── DaemonSet.yaml
│ │ ├── Job.yaml
│ │ ├── K8S Linux Centos 7安装.docx
│ │ ├── Pod.yaml
│ │ ├── ReplicaSet.yaml
│ │ ├── ReplicationController.yaml
│ │ ├── k8s-master-bootstrap.sh
│ │ └── k8s-node-bootstrap.sh
│ ├── kafka+elk/
│ │ ├── ELK安装文档.docx
│ │ ├── ELK日志logstash解析JSON嵌套.md
│ │ ├── ElasticSearch安装手册1.0.docx
│ │ ├── Kafka安装指导手册.docx
│ │ ├── elk+springboot+kafka日志跟踪配置.docx
│ │ └── 使用logback-kafka导致服务之间调用多1分钟之坑.md
│ ├── linux/
│ │ └── Linux-netstat命令.md
│ ├── pom.xml
│ ├── rxjava/
│ │ └── RxJavaHelloWorld.MD
│ ├── spring-cloud/
│ │ ├── README.md
│ │ ├── SpringCloud-FQA.md
│ │ ├── 源码解析专栏/
│ │ │ ├── Spring Cloud Config Client加载配置源码分析.md
│ │ │ ├── Spring Cloud Config 是如何实现热更新的
│ │ │ ├── Spring Cloud Netflix Eureka多网卡环境下Eureka服务注册IP选择问题.md
│ │ │ ├── Spring Cloud Netflix Eureka源码导读与原理分析.md
│ │ │ ├── eureka分区的深入讲解.md
│ │ │ └── spring-cloud-feign源码深度解析.md
│ │ └── 链路跟踪/
│ │ └── spring-cloud+skywalking链路跟踪.docx
│ ├── sql/
│ │ └── 行政区域带经纬度.sql
│ ├── 其他个人总结/
│ │ ├── Jmeter分布式压测.docx
│ │ ├── openresty.conf
│ │ ├── stock.lua
│ │ ├── 参数校验注解使用指南.docx
│ │ ├── 微信小程序MQTT协议通信.docx
│ │ └── 聊一聊微服务.pptx
│ └── 持续集成/
│ ├── Gitlab+P3C-PMD(Aliyun)标准化你团队的代码.docx
│ ├── Gitlab安装手册.docx
│ ├── Gitlab的Hooks(钩子)做Push代码检测.docx
│ ├── auto_deploy.sh
│ ├── bootstrap.sh
│ ├── example-gitlab-ci.yml
│ ├── gitlab-hooks/
│ │ ├── checkStyle模板
│ │ ├── pre-receive
│ │ ├── pre-receive(checkstyle版本,使用请更名为pre-receive)
│ │ └── pre-receive(p3c-pmd版,使用请更名为pre-receive)
│ ├── monitor-jstat.sh
│ ├── remote_deploy.sh
│ ├── 代码质量监控体系方案.pptx
│ ├── 代码质量监控平台.docx
│ ├── 代码质量监控平台安装使用手册.docx
│ ├── 持续集成之Jenkins安装和使用指导手册.docx
│ └── 持续集成之Sonarqube安装和使用指导手册.docx
├── SpringCloud-Docker/
│ ├── Dockerfile
│ ├── README.md
│ ├── docker-build.sh
│ ├── pom.xml
│ ├── src/
│ │ └── main/
│ │ ├── java/
│ │ │ └── com/
│ │ │ └── xiao/
│ │ │ └── springboot/
│ │ │ └── docker/
│ │ │ ├── OmniZipkinServerApplication.java
│ │ │ └── controller/
│ │ │ └── DockerDemo.java
│ │ └── resources/
│ │ └── application.yml
│ └── zipkin-server-docker.sh
├── SpringCloud-Eureka/
│ ├── pom.xml
│ ├── readme.txt
│ ├── sql/
│ │ └── config.sql
│ └── src/
│ └── main/
│ ├── java/
│ │ └── com/
│ │ └── xiao/
│ │ └── skywalking/
│ │ └── center/
│ │ └── Application.java
│ └── resources/
│ ├── application.yml
│ └── bootstrap.yml
├── SpringCloud-Gateway/
│ ├── README.txt
│ ├── pom.xml
│ └── src/
│ └── main/
│ ├── java/
│ │ └── com/
│ │ └── xiao/
│ │ └── skywalking/
│ │ └── gateway/
│ │ └── zuul/
│ │ └── GatewayApplication.java
│ └── resources/
│ └── application.yml
├── SpringCloud-Hystrix-Demo/
│ ├── README.MD
│ ├── SpringCloud-Hystrix-Consumer/
│ │ ├── pom.xml
│ │ └── src/
│ │ └── main/
│ │ ├── java/
│ │ │ └── com/
│ │ │ └── xiao/
│ │ │ └── hystrix/
│ │ │ └── demo/
│ │ │ └── consumer/
│ │ │ ├── ConsumerApplication.java
│ │ │ ├── api/
│ │ │ │ └── ConsumerRestService.java
│ │ │ ├── common/
│ │ │ │ └── CacheConstants.java
│ │ │ ├── config/
│ │ │ │ ├── CaffeineCacheConfiguration.java
│ │ │ │ ├── FeignConfiguration.java
│ │ │ │ └── HystrixCacheConfiguration.java
│ │ │ ├── dynamic/
│ │ │ │ ├── DynamicConfigSource.java
│ │ │ │ └── InitHystrixConfiguration.java
│ │ │ ├── feign/
│ │ │ │ ├── ProducerFeign.java
│ │ │ │ └── impl/
│ │ │ │ ├── ProducerFeignFactory.java
│ │ │ │ └── ProducerFeignFallBack.java
│ │ │ └── filter/
│ │ │ └── HystrixCacheFilter.java
│ │ └── resources/
│ │ ├── application.properties
│ │ ├── application.yml
│ │ └── bootstrap.yml
│ ├── SpringCloud-Hystrix-Eureka/
│ │ ├── pom.xml
│ │ └── src/
│ │ └── main/
│ │ ├── java/
│ │ │ └── com/
│ │ │ └── xiao/
│ │ │ └── hystrix/
│ │ │ └── demo/
│ │ │ └── eureka/
│ │ │ └── EurekaApplication.java
│ │ └── resources/
│ │ └── bootstrap.yml
│ ├── SpringCloud-Hystrix-Producer/
│ │ ├── pom.xml
│ │ └── src/
│ │ └── main/
│ │ ├── java/
│ │ │ └── com/
│ │ │ └── xiao/
│ │ │ └── hystrix/
│ │ │ └── demo/
│ │ │ └── producer/
│ │ │ ├── ProducerApplication.java
│ │ │ ├── api/
│ │ │ │ └── ProducerRestService.java
│ │ │ └── service/
│ │ │ ├── ProducerService.java
│ │ │ └── impl/
│ │ │ └── ProducerServiceImpl.java
│ │ └── resources/
│ │ ├── application.properties
│ │ ├── application.yml
│ │ └── bootstrap.yml
│ └── pom.xml
├── SpringCloud-Kafka-Elk/
│ ├── README.md
│ ├── pom.xml
│ └── src/
│ └── main/
│ ├── java/
│ │ └── com/
│ │ └── xiao/
│ │ └── springcloud/
│ │ └── demo/
│ │ └── kafka/
│ │ └── elk/
│ │ ├── ElkKafkaApplication.java
│ │ └── kafka/
│ │ ├── KafkaProducerTest.java
│ │ └── LogCompent.java
│ └── resources/
│ ├── application.yml
│ ├── bootstrap.yml
│ └── logback-spring.xml
├── SpringCloud-MQTT/
│ ├── Readme.MD
│ ├── doc/
│ │ ├── mqtt.conf
│ │ ├── nginx.conf
│ │ └── wss.conf
│ ├── pom.xml
│ └── src/
│ └── main/
│ ├── java/
│ │ └── com/
│ │ └── skywalking/
│ │ └── mqtt/
│ │ ├── ClientCallback.java
│ │ ├── MqttServiceApp.java
│ │ ├── MqttTestClient.java
│ │ ├── MvcController.java
│ │ ├── PurTrustManager.java
│ │ └── TopicProducerTest.java
│ ├── resources/
│ │ └── application.yml
│ └── webapp/
│ └── WEB-INF/
│ ├── js/
│ │ ├── crypto-js.js
│ │ ├── layer/
│ │ │ ├── layer.js
│ │ │ ├── mobile/
│ │ │ │ ├── layer.js
│ │ │ │ └── need/
│ │ │ │ └── layer.css
│ │ │ └── skin/
│ │ │ └── default/
│ │ │ └── layer.css
│ │ └── mqttws31-min.js
│ └── jsp/
│ └── mqtt_client.jsp
├── SpringCloud-Mybatis/
│ ├── pom.xml
│ └── src/
│ └── main/
│ ├── java/
│ │ └── com/
│ │ └── xiao/
│ │ └── springcloud/
│ │ └── mybatis/
│ │ └── generator/
│ │ └── plugin/
│ │ └── LombokPlugin.java
│ └── resources/
│ └── generatorConfig.xml
├── SpringCloud-Provider/
│ ├── pom.xml
│ └── src/
│ └── main/
│ ├── java/
│ │ └── com/
│ │ └── xiao/
│ │ └── skywalking/
│ │ └── provider/
│ │ ├── ProviderApp.java
│ │ ├── controller/
│ │ │ └── SkywalkingController.java
│ │ └── local/
│ │ └── cache/
│ │ └── SpringGuavaCacheConfig.java
│ └── resources/
│ └── application.yml
├── SpringCloud-Quartz-JobService/
│ ├── README.md
│ ├── pom.xml
│ └── src/
│ └── main/
│ ├── java/
│ │ └── com/
│ │ └── xiao/
│ │ └── springcloud/
│ │ └── job/
│ │ ├── JobServiceApplication.java
│ │ ├── config/
│ │ │ ├── JobConfig.java
│ │ │ └── TaskSchedulerFactory.java
│ │ ├── entity/
│ │ │ └── TaskConfigDocument.java
│ │ ├── job/
│ │ │ └── ServiceTaskExecuteJob.java
│ │ ├── quartz/
│ │ │ └── JobManager.java
│ │ └── util/
│ │ └── CronExpUtil.java
│ └── resources/
│ ├── application.yml
│ └── bootstrap.yml
├── SpringCloud-Redisson/
│ ├── README.md
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ ├── java/
│ │ │ └── com/
│ │ │ └── xiao/
│ │ │ └── spring/
│ │ │ └── cloud/
│ │ │ └── redisson/
│ │ │ ├── SpringDataRedissonApplication.java
│ │ │ └── config/
│ │ │ └── SpringDataRedissonConfig.java
│ │ └── resources/
│ │ ├── application.yml
│ │ └── redisson.yml
│ └── test/
│ └── java/
│ └── com/
│ └── xiao/
│ └── spring/
│ └── cloud/
│ └── redisson/
│ └── SpringDataRedissonApplicationTest.java
├── SpringCloud-SearchService/
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ ├── java/
│ │ │ └── com/
│ │ │ └── xiao/
│ │ │ └── spring/
│ │ │ └── cloud/
│ │ │ └── search/
│ │ │ ├── SearchApplication.java
│ │ │ ├── dto/
│ │ │ │ ├── ElasticSearchDoc.java
│ │ │ │ ├── PaginationDo.java
│ │ │ │ ├── SearchBrandDo.java
│ │ │ │ ├── SearchCategoryDo.java
│ │ │ │ ├── SearchCommoPropOptionDto.java
│ │ │ │ ├── SearchCommodityPropertyDo.java
│ │ │ │ ├── SearchCommodityResultDo.java
│ │ │ │ ├── SearchLogDo.java
│ │ │ │ ├── SearchMenusDo.java
│ │ │ │ ├── SearchRequestDo.java
│ │ │ │ ├── SearchResultDo.java
│ │ │ │ ├── SearchShopWeightDto.java
│ │ │ │ └── ShopPriceRangeDto.java
│ │ │ ├── es/
│ │ │ │ ├── client/
│ │ │ │ │ └── ElasticSearchClient.java
│ │ │ │ ├── common/
│ │ │ │ │ ├── AnalyzeType.java
│ │ │ │ │ ├── ESConstants.java
│ │ │ │ │ ├── OrderField.java
│ │ │ │ │ └── SearchException.java
│ │ │ │ ├── log/
│ │ │ │ │ ├── ISearchLogService.java
│ │ │ │ │ ├── impl/
│ │ │ │ │ │ └── SearchLogServiceImpl.java
│ │ │ │ │ └── thread/
│ │ │ │ │ ├── BatchSaveSearchLogThread.java
│ │ │ │ │ ├── SearchLogThread.java
│ │ │ │ │ ├── SearchLogThreadPool.java
│ │ │ │ │ └── SearchThreadFactory.java
│ │ │ │ └── service/
│ │ │ │ ├── SearchManagerEsImpl.java
│ │ │ │ └── SearchServiceEsImpl.java
│ │ │ ├── rest/
│ │ │ │ ├── SearchManagerRestService.java
│ │ │ │ └── SearchRestService.java
│ │ │ └── service/
│ │ │ ├── SearchManangerService.java
│ │ │ └── SearchService.java
│ │ └── resources/
│ │ ├── application.yml
│ │ ├── bootstrap.yml
│ │ └── logback-spring.xml
│ └── test/
│ └── java/
│ └── com/
│ └── xiao/
│ └── springcloud/
│ └── test/
│ ├── SearchApplicationTest.java
│ ├── SearchManagerTest.java
│ ├── SearchTest.java
│ └── cache/
│ └── RedisCacheTest.java
├── SpringCloud-Sentinel/
│ ├── Readme.MD
│ ├── SpringCloud-Sentinel-Consumer/
│ │ ├── pom.xml
│ │ └── src/
│ │ └── main/
│ │ ├── java/
│ │ │ └── com/
│ │ │ └── xiao/
│ │ │ └── springcloud/
│ │ │ └── sentinel/
│ │ │ └── consumer/
│ │ │ ├── ConsumerApplication.java
│ │ │ ├── api/
│ │ │ │ └── ConsumerRestService.java
│ │ │ ├── config/
│ │ │ │ └── FeignConfiguration.java
│ │ │ └── feign/
│ │ │ ├── ProducerFeign.java
│ │ │ └── fallback/
│ │ │ └── ProducerFeignFallBack.java
│ │ └── resources/
│ │ ├── application.properties
│ │ ├── application.yml
│ │ └── bootstrap.yml
│ ├── SpringCloud-Sentinel-Eureka/
│ │ ├── pom.xml
│ │ └── src/
│ │ └── main/
│ │ ├── java/
│ │ │ └── com.xiao.springcloud.sentinel.eureka/
│ │ │ └── EurekaApplication.java
│ │ └── resources/
│ │ └── bootstrap.yml
│ ├── SpringCloud-Sentinel-Producer/
│ │ ├── pom.xml
│ │ └── src/
│ │ └── main/
│ │ ├── java/
│ │ │ └── com/
│ │ │ └── xiao/
│ │ │ └── springcloud/
│ │ │ └── sentinel/
│ │ │ └── producer/
│ │ │ ├── ProducerApplication.java
│ │ │ ├── api/
│ │ │ │ └── ProducerRestService.java
│ │ │ └── service/
│ │ │ ├── ProducerService.java
│ │ │ └── impl/
│ │ │ └── ProducerServiceImpl.java
│ │ └── resources/
│ │ ├── application.properties
│ │ ├── application.yml
│ │ └── bootstrap.yml
│ ├── dashbord/
│ │ └── readme.md
│ └── pom.xml
├── SpringCloud-Sharding-Sphere/
│ ├── pom.xml
│ └── src/
│ └── main/
│ ├── java/
│ │ └── com/
│ │ └── purcotton/
│ │ └── sharding/
│ │ └── sphere/
│ │ └── demo/
│ │ ├── SpringBootStarterExample.java
│ │ ├── entity/
│ │ │ ├── Order.java
│ │ │ └── OrderItem.java
│ │ ├── repository/
│ │ │ ├── CommonRepository.java
│ │ │ ├── OrderItemRepository.java
│ │ │ └── OrderRepository.java
│ │ └── service/
│ │ ├── BasisCommonService.java
│ │ ├── CommonService.java
│ │ └── impl/
│ │ └── SpringPojoServiceImpl.java
│ └── resources/
│ ├── META-INF/
│ │ ├── mappers/
│ │ │ ├── OrderItemMapper.xml
│ │ │ └── OrderMapper.xml
│ │ └── mybatis-config.xml
│ ├── application-sharding-databases.properties
│ ├── application.properties
│ └── logback.xml
├── SpringCloud-ZipkinServer/
│ ├── README.md
│ ├── pom.xml
│ └── src/
│ └── main/
│ ├── java/
│ │ └── com/
│ │ └── xiao/
│ │ └── springcloud/
│ │ └── zs/
│ │ └── ZipkinServerApplication.java
│ └── resources/
│ ├── application.properties
│ └── application.yml
├── SpringCloud-Zookeeper/
│ ├── pom.xml
│ └── readme.md
└── pom.xml
================================================
FILE CONTENTS
================================================
================================================
FILE: .gitattributes
================================================
*.js linguist-language=Java
*.css linguist-language=Java
*.html linguist-language=Java
================================================
FILE: .gitignore
================================================
## .gitignore for Grails 1.2 and 1.3
# .gitignore for maven
target/
*.releaseBackup
# web application files
#/web-app/WEB-INF
# IDE support files
/.classpath
/.launch
/.project
/.settings
/*.launch
/*.tmproj
/ivy*
/eclipse
# default HSQL database files for production mode
/prodDb.*
# general HSQL database files
*Db.properties
*Db.script
# logs
/stacktrace.log
/test/reports
/logs
*.log
*.log.*
# project release file
/*.war
# plugin release file
/*.zip
/*.zip.sha1
# older plugin install locations
/plugins
/web-app/plugins
/web-app/WEB-INF/classes
# "temporary" build files
target/
out/
build/
# other
*.iws
#.gitignore for java
*.class
# Package Files #
*.jar
*.war
*.ear
## .gitignore for eclipse
*.pydevproject
.project
.metadata
bin/**
tmp/**
tmp/**/*
*.tmp
*.bak
*.swp
*~.nib
local.properties
.classpath
.settings/
.loadpath
# External tool builders
.externalToolBuilders/
# Locally stored "Eclipse launch configurations"
*.launch
# CDT-specific
.cproject
# PDT-specific
.buildpath
## .gitignore for intellij
*.iml
*.ipr
*.iws
.idea/
## .gitignore for linux
.*
!.gitignore
!.gitattributes
!.editorconfig
!.eslintrc
!.travis.yml
*~
## .gitignore for windows
# Windows image file caches
Thumbs.db
ehthumbs.db
# Folder config file
Desktop.ini
# Recycle Bin used on file shares
$RECYCLE.BIN/
## .gitignore for mac os x
.DS_Store
.AppleDouble
.LSOverride
Icon
# Thumbnails
._*
# Files that might appear on external disk
.Spotlight-V100
.Trashes
## hack for graddle wrapper
!wrapper/*.jar
!**/wrapper/*.jar
================================================
FILE: CODE_OF_CONDUCT.md
================================================
# Contributor Covenant Code of Conduct
## Our Pledge
In the interest of fostering an open and welcoming environment, we as
contributors and maintainers pledge to making participation in our project and
our community a harassment-free experience for everyone, regardless of age, body
size, disability, ethnicity, sex characteristics, gender identity and expression,
level of experience, education, socio-economic status, nationality, personal
appearance, race, religion, or sexual identity and orientation.
## Our Standards
Examples of behavior that contributes to creating a positive environment
include:
* Using welcoming and inclusive language
* Being respectful of differing viewpoints and experiences
* Gracefully accepting constructive criticism
* Focusing on what is best for the community
* Showing empathy towards other community members
Examples of unacceptable behavior by participants include:
* The use of sexualized language or imagery and unwelcome sexual attention or
advances
* Trolling, insulting/derogatory comments, and personal or political attacks
* Public or private harassment
* Publishing others' private information, such as a physical or electronic
address, without explicit permission
* Other conduct which could reasonably be considered inappropriate in a
professional setting
## Our Responsibilities
Project maintainers are responsible for clarifying the standards of acceptable
behavior and are expected to take appropriate and fair corrective action in
response to any instances of unacceptable behavior.
Project maintainers have the right and responsibility to remove, edit, or
reject comments, commits, code, wiki edits, issues, and other contributions
that are not aligned to this Code of Conduct, or to ban temporarily or
permanently any contributor for other behaviors that they deem inappropriate,
threatening, offensive, or harmful.
## Scope
This Code of Conduct applies both within project spaces and in public spaces
when an individual is representing the project or its community. Examples of
representing a project or community include using an official project e-mail
address, posting via an official social media account, or acting as an appointed
representative at an online or offline event. Representation of a project may be
further defined and clarified by project maintainers.
## Enforcement
Instances of abusive, harassing, or otherwise unacceptable behavior may be
reported by contacting the project team at 84226733@qq.com. All
complaints will be reviewed and investigated and will result in a response that
is deemed necessary and appropriate to the circumstances. The project team is
obligated to maintain confidentiality with regard to the reporter of an incident.
Further details of specific enforcement policies may be posted separately.
Project maintainers who do not follow or enforce the Code of Conduct in good
faith may face temporary or permanent repercussions as determined by other
members of the project's leadership.
## Attribution
This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4,
available at https://www.contributor-covenant.org/version/1/4/code-of-conduct.html
[homepage]: https://www.contributor-covenant.org
For answers to common questions about this code of conduct, see
https://www.contributor-covenant.org/faq
================================================
FILE: LICENSE.txt
================================================
MIT License
Copyright (c) 2021 Linlin xiao
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
================================================
FILE: README.md
================================================
# spring-cloud-demo
## 不定期更新与记录在springcloud开发中所遇到的坑以及解决方法
## 说明:由于版本不兼容,很多核心、重点的技术难题都以单独的项目形式提交,并同时更新到csdn,如有需要请关注:https://blog.csdn.net/xiaoll880214?type=blog
初始化添加
1. spring-cloud skywalking demo
2. add mqtt suports
3. add 微信小程序 suports mqtt
4. kafka elk支持
20180809
1. 更新 代码结构
2. 新增git配置中心
3. 新增kafka elk demo配置以及文档
4. 文档结构整理
5. 分离注册中心和配置中心
7. 添加zipkin服务跟踪
20180905
1. 自定义注解实现aop日志
2. 自定义注解实现实体类参数校验
3. 添加mybatis自定生成映射实体类、mapper等
4. 添加全局异常处理
5. 添加fegin自定义数据解析
20180907
1. 添加注解,作为参数校验入口
20180910
1. 解决服务之间调用fegin+hystrix 熔断异常拦截处理
20180914
1. 服务调用之间的rest请求,参数为对象时需要添加@RequestBody注解
``eg:
saveRegionCity(@RequestBody RegionCityDto regionCityDto)``
2. 服务间调用接口的返回值,不能使接口返回,必须要使用实现类返回,fegin客户端获取不到数据返回Null
`eg:
public User getUser(@RequestBody UserQuery query);
User必须为实现类,不能为接口`
3. 添加fastjson解析,解决部分调用对象内包含对象传值为空问题
20180921
1. Doc 目录结构调整
2. 记录[elk+kafka+logback服务之间调用多1分钟时间之坑](https://github.com/Xlinlin/spring-cloud-demo/blob/master/SpringCloud-Demo-Doc/kafka%2Belk/使用logback-kafka导致服务之间调用多1分钟之坑.md)
20180927
1. [elk+logstash+logback解析嵌套json数据](https://github.com/Xlinlin/spring-cloud-demo/blob/master/SpringCloud-Demo-Doc/kafka%2Belk/ELK%E6%97%A5%E5%BF%97logstash%E8%A7%A3%E6%9E%90JSON%E5%B5%8C%E5%A5%97.md)
20180930
1. 添加guava+spring-cache本地缓存实现,[参考入口](https://blog.csdn.net/mafei6827/article/details/80868931)
2. 记录springcloud 1.x版本解决feignclient下requestmapping与springmvc的定义冲突问题,[参考入口](http://blog.didispace.com/spring-cloud-feignclient-problem/?utm_source=tuicool&utm_medium=referral)
20181009
1. 添加ES实现电商[搜索基础服务](https://github.com/Xlinlin/spring-cloud-demo/tree/master/SpringCloud-SearchService)
2. 添加Mockito实现api的junit测试
20181012
1. redisson yml配置加载,支持单机、集群、云托管、sentinel模式<br>
2. 配置文件中添加配置文件即可开启redisson的配置:<br>
`` redisson.fileName: redission-cluster(自定义)``
3. 提供缓存基本服务和分布式服务: <br>
``> CacheService 提供缓存基础服务`` <br>
``> DistributedService 提供分布式**可重入公平/非公平锁**、**读写锁**、**闭锁**``<br>
[代码实现参考](https://github.com/Xlinlin/spring-cloud-demo/tree/master/SpringCloud-Common/src/main/java/com/xiao/springcloud/demo/common/cache)<br>
[junit测试参考](https://github.com/Xlinlin/spring-cloud-demo/tree/master/SpringCloud-SearchService/src/test/java/com/xiao/springcloud/test/cache)<br>
20181016
1. redis缓存 redisson客户端添加批处理
20181018
1. [spring-cache+guava 添加本地缓存](https://github.com/Xlinlin/spring-cloud-demo/tree/master/SpringCloud-Common/src/main/java/com/xiao/springcloud/demo/common/cache)
20181022
1. 升级Springboot2.0 详情参考springboot2.0分之
2. 调整common包,可打成jar包
3. 添加启动shell脚本,参考common包script目录下.sh文件
20181027
1. bootstrap.sh 脚本参数简化
20181029
1. 优化bootstrap.sh脚本
2. 添加jenkins构建后自动部署脚本
3. 添加jenkins构建后远程自动部署脚本
[详情](https://github.com/Xlinlin/spring-cloud-demo/tree/master/SpringCloud-Common/script)
20181114
1. Sharding-sphere尝试
20181115
1. bootstrap.sh 脚本添加jvm参数配置,以及停止时旧日志文件的备份
2. 本地和远程自动部署时,不进行原服务包的删除,按时间戳进行备份原来的可执行包
20181127
1. springcloud-config 自定义mysql实现,[详情](https://github.com/Xlinlin/SpringCloud-Demo/tree/master/SpringCloud-Custom-ConfigCenter)
20181210
1. 工程结果整理
2. 添加springboot+quartz自定义实现 任务调度
20190119
1. 新增Redisson集成springdata,使用RedisTemplate,[详情](https://github.com/Xlinlin/SpringCloud-Demo/tree/master/SpringCloud-Redisson)
20190124
1. 新增RedisTemplate 使用pipeline批量操作redis数据
2. 添加常用工具类 AES加解密、MD5等
20190126
1. 改造zipkin链路跟踪实现:SpringCloud Sleuth Stream Zipkin Kafka Elasticsearch 实现简单链路跟踪。<br>
[参考](https://github.com/Xlinlin/SpringCloud-Demo/blob/master/SpringCloud-ZipkinServer/README.md)
20190131
1. 自定义配置中心重构,[详情](https://github.com/Xlinlin/SpringCloud-Demo/tree/master/SpringCloud-Custom-ConfigCenter)
2. 新增多条件搜索测试,[详情](https://github.com/Xlinlin/SpringCloud-Demo/blob/master/SpringCloud-SearchService/src/test/java/com/xiao/springcloud/test/SearchManagerTest.java)<br>
3. 更多多条件搜索的[参考资料](http://www.scienjus.com/elasticsearch-function-score-query/)
20190201
1. 新增[Docker + SpringBoot + Maven 构建发布到远程仓库 DEMO](https://github.com/Xlinlin/SpringCloud-Demo/tree/master/SpringCloud-Docker)
20190320
1. 新增 ES 权重查询 以及 聚合逻辑,[详情参考](https://github.com/Xlinlin/SpringCloud-Demo/blob/master/SpringCloud-SearchService/src/main/java/com/xiao/spring/cloud/search/es/service/SearchServiceEsImpl.java)
2. 新增阿里开源数据同步工具[Canal](https://github.com/alibaba/canal)的简单[Demo使用](https://github.com/Xlinlin/SpringCloud-Demo/tree/master/SpringCloud-Canal)
20190327
1. 将Canal+Disruptor整合到springboot中,提供一套完整的Canal异步框架,在DisruptorServiceImpl服务中实现自己的业务逻辑即可,[更多详见](https://github.com/Xlinlin/SpringCloud-Demo/tree/master/SpringCloud-Canal)
20190402
1. 自定义配置中心,引入Netty监测心跳[详情](https://github.com/Xlinlin/SpringCloud-Demo/tree/master/SpringCloud-Custom-ConfigCenter)
20190405
1. netty实现配置刷新[详情](https://github.com/Xlinlin/SpringCloud-Demo/tree/master/SpringCloud-Custom-ConfigCenter)
20190411
1. 添加maven+jenkins+docker+springboot 构建打包发布部署的jenkins shell脚本
20190402
1. 修复linux系统,客户端异常断开,服务端无感知问题,即在linux上使用kill或ctrl+c 中断服务,无法进入exceptionCaught方法导致无法感知应用下线问题。<br>
更换为channelInactive方法来感知和下线客户端(netty)
20190504
1. [新增mqtt通过nginx代理配置](https://github.com/Xlinlin/SpringCloud-Demo/tree/master/SpringCloud-MQTT)
20190515
1. 新增spring session+ spring security + jwt简单鉴权,[参考入口](https://github.com/Xlinlin/SpringCloud-Demo/tree/master/SpringCloud-Custom-ConfigCenter/custom-config-web)
20190611
1. 记录 fork join demo[详情](https://github.com/Xlinlin/SpringCloud-Demo/tree/master/SpringCloud-Common/src/main/java/com/xiao/springcloud/demo/common/forkjoin)
20190621
1. Disruptor+spring event封装[详情以及使用说明](https://github.com/Xlinlin/SpringCloud-Demo/tree/master/SpringCloud-Common/src/main/java/com/xiao/springcloud/demo/common/disruptor)
20190624
1. [入手Zookeeper](https://github.com/Xlinlin/SpringCloud-Demo/tree/master/SpringCloud-Zookeeper)
20190702
1. 新增Canal启动 [ServerRunningMonitor部分源码注解记录](https://github.com/Xlinlin/SpringCloud-Demo/blob/master/SpringCloud-Canal/doc/ServerRunningMonitor%E6%BA%90%E7%A0%81%E6%B3%A8%E8%A7%A3.md),
2. 修复定时任务重新启动时加载启动状态且已过期的任务报错问题:[新增在添加任务是校验表达的合法性](https://github.com/Xlinlin/SpringCloud-Demo/blob/master/SpringCloud-Quartz-JobService/src/main/java/com/xiao/springcloud/job/util/CronExpUtil.java)
20190720
1. Springboot-Admin 2.0服务端+Springboot-Admin 1.5.6客户端[集成使用](https://github.com/Xlinlin/SpringCloud-Demo/tree/master/SpringBoot-Admin),掌控你的微服务。
20190801
1. [SpringBoot + SpringCloud + Feign + Sentinel 集成实现接口限流监控](https://github.com/Xlinlin/SpringCloud-Demo/tree/master/SpringCloud-Sentinel)
20190813
1. [SpringCloud + Feign + Hystrix 熔断、线程池的一些坑记录](https://github.com/Xlinlin/SpringCloud-Demo/tree/master/SpringCloud-Hystrix-Demo)
20190909
1. [定制SpringBoot Starter 之Elasticsearch Rest High Level Client Starter](https://github.com/Xlinlin/SpringCloud-Demo/tree/master/SpringBoot-Custom-Elasticsearch-Starter)
20190910
1. [启动脚本添加GC参数和skywalking探针](https://github.com/Xlinlin/SpringCloud-Demo/blob/master/SpringCloud-Common/script/bootstrap.sh)
20190929
1. 新增图片比较工具类,比较两张图片是否相同:[DHashUtil](https://github.com/Xlinlin/SpringCloud-Demo/blob/master/SpringCloud-Common/src/main/java/com/xiao/springcloud/demo/common/util/image/ImageDHashUtil.java)&[PHashUtil](https://github.com/Xlinlin/SpringCloud-Demo/blob/master/SpringCloud-Common/src/main/java/com/xiao/springcloud/demo/common/util/image/ImagePHashUtil.java)
20191019
1. redisson分布式锁库存使用,下单、取消单、出库单之jmeter ifelse程序并发测试--**预告**
20191022
1. [Springboot官方文档-配置新-Tomcat优化](https://docs.spring.io/spring-boot/docs/2.2.1.BUILD-SNAPSHOT/reference/html/appendix-application-properties.html#server-properties)
20191023
1. [Jmeter+Springboot+Redisson分布式锁并发订单操作(下单、取消单、完成单、加库存)](https://github.com/Xlinlin/SpringCloud-Demo/tree/master/SpringBoot-Stock-Demo)
20191105
1. Api对外接口统一返回值,如:{"code":200,"erroMsg":"",data:{}},[参考实现](https://github.com/Xlinlin/SpringCloud-Demo/blob/master/SpringCloud-Consumer/src/main/java/com/xiao/skywalking/consumer/common/advice/UnifiedReturnAdvice.java)
20191119
1. Springboot 的Rest请求返回的Response中的HTTP响应行只有:HTTP/1.1 200 {OK},无OK返回导致老的http客户端无法识别,是因为springboot 1.4以上版本将tomcat升级到了8.5.x以后的版本,如果需要支持,需要设置tomcat的版本低于8.5的版本,设置:
```$xslt
<properties>
<tomcat.version>8.0.29</tomcat.version>
</properties>
```
[参考资料1](http://www.mamicode.com/info-detail-2280850.html);<br>
[参考资料2](https://stackoverflow.com/questions/49610522/spring-boot-return-http-1-1-200-not-http-1-1-200-ok);
20191125
1. [Gitlab+P3C-PMD(ali)标准化你团队的代码.doc](https://github.com/Xlinlin/SpringCloud-Demo/blob/master/SpringCloud-Demo-Doc/%E6%8C%81%E7%BB%AD%E9%9B%86%E6%88%90/Gitlab%2BP3C-PMD(Aliyun)%E6%A0%87%E5%87%86%E5%8C%96%E4%BD%A0%E5%9B%A2%E9%98%9F%E7%9A%84%E4%BB%A3%E7%A0%81.docx)
20191206
1. [SpringCloud RestTemplate 封装stater](https://github.com/Xlinlin/SpringCloud-Demo/tree/master/SpringCloud-Custom-RestTemplate-Stater)支持使用http连接池、okhttp等
20191208
1. [Linux之netstat命令](https://github.com/Xlinlin/SpringCloud-Demo/blob/master/SpringCloud-Demo-Doc/linux/Linux-netstat%E5%91%BD%E4%BB%A4.md)-服务自动化发布时以此结果为依据停止服务
20191213
1. [RxJava Hello World](https://github.com/Xlinlin/SpringCloud-Demo/blob/master/SpringCloud-Demo-Doc/rxjava/RxJavaHelloWorld.MD),要入手一定要敲代码,敲起来!
20200104
1. Shell脚本+jstat+curl+crontab 监控JVM发短信[脚本](https://github.com/Xlinlin/SpringCloud-Demo/blob/master/SpringCloud-Demo-Doc/%E6%8C%81%E7%BB%AD%E9%9B%86%E6%88%90/monitor-jstat.sh)
20200111
1. [基于Springboot1.5.9+SpringCloud+Zipkin+ELK链路跟踪实现](https://github.com/Xlinlin/spingcloud-zipkin-elk-demo)
20200114
1. String字符GBK和UTF编码格式长度判断以及截取
20200115
1. 经常用到对list进行分页批处理,写了[工具类](https://github.com/Xlinlin/SpringCloud-Demo/blob/master/SpringCloud-Common/src/main/java/com/xiao/springcloud/demo/common/util/ListPageUtil.java)一劳永逸
20200117
1. 封装RestTemplate,支持okhttp,httpool,支持同步和异步请求,[ReadMe.MD](https://github.com/Xlinlin/SpringCloud-Demo/tree/master/SpringBoot-Custom-Rest-Starter)
20200224
1. Springboot web应用签名包括工具类,[传送链接](https://github.com/Xlinlin/SpringCloud-Demo/tree/master/SpringCloud-Common/src/main/java/com/xiao/springcloud/demo/common/sign)
20200229
1. K8S Cluster[安装文档](https://github.com/Xlinlin/SpringCloud-Demo/blob/master/SpringCloud-Demo-Doc/k8s/K8S%20Linux%20%20Centos%207%E5%AE%89%E8%A3%85.docx)
20200422
1. Sonarqube+Gitlab-CICD构建[代码质量管理平台](https://github.com/Xlinlin/SpringCloud-Demo/blob/master/SpringCloud-Demo-Doc/%E6%8C%81%E7%BB%AD%E9%9B%86%E6%88%90)
20200426
1. 完善代码质量[监控体系](https://github.com/Xlinlin/SpringCloud-Demo/blob/master/SpringCloud-Demo-Doc/%E6%8C%81%E7%BB%AD%E9%9B%86%E6%88%90/%E4%BB%A3%E7%A0%81%E8%B4%A8%E9%87%8F%E7%9B%91%E6%8E%A7%E4%BD%93%E7%B3%BB%E6%96%B9%E6%A1%88.pptx)
20200508
1. SpringCloud Gateway + nacos实现灰度, + ribbon实现全链路版本请求,[详情](https://github.com/Xlinlin/SpringCloud-Gateway-Canary)
20200527
1. [添加docker-build脚本,执行脚本构建镜像并推送到私服仓库](https://github.com/Xlinlin/SpringCloud-Demo/blob/master/SpringCloud-Docker/docker-build.sh)
20200528
1. swagger2 创建[api文档](https://github.com/Xlinlin/SpringCloud-Demo/blob/master/SpringCloud-Demo-Doc/swagger%E7%94%9F%E6%88%90html%E6%96%87%E4%BB%B6.pdf)整理
2. [docker-swarm集群监控文档](https://github.com/Xlinlin/SpringCloud-Demo/tree/master/SpringCloud-Demo-Doc/docker)整理
20200529
1. 补充swarm集群部署springcloud项目,[详细文档](https://github.com/Xlinlin/SpringCloud-Demo/blob/master/SpringCloud-Demo-Doc/docker/docker-swarm-springcloud.md)
20200814
1. 新gitlab使用代码规则校验说明,[详情参考](https://github.com/Xlinlin/SpringCloud-Demo/blob/master/SpringCloud-Demo-Doc/%E6%8C%81%E7%BB%AD%E9%9B%86%E6%88%90/gitlab-hooks/pre-receive)
20201002
1. 说明:本仓库的代码以springboot 1.0版本,工作中已使用2.0以上版本,很多新的分享会单独创建git项目
2. 基于nacos或eureka实现 服务级别的灰度,支持网关、feign自由插件[详情参考](https://github.com/Xlinlin/canary)
20211012
1. [Springboot Admin(SBA) + Nacos + Arthas 搭建你的在线性能分析和问题定位工具-服务端改造篇](https://blog.csdn.net/xiaoll880214/article/details/120191476?spm=1001.2014.3001.5501)
2. [Springboot Admin(SBA) + Nacos + Arthas 搭建你的在线性能分析和问题定位工具-客户端改造篇](https://blog.csdn.net/xiaoll880214/article/details/120295070?spm=1001.2014.3001.5501)
================================================
FILE: SpringBoot-Admin/pom.xml
================================================
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<!--<parent>-->
<!--<artifactId>SpringCloud-Demo</artifactId>-->
<!--<groupId>com.xiao.skywalking.demo</groupId>-->
<!--<version>0.0.1-SNAPSHOT</version>-->
<!--</parent>-->
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.0.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<description>Springboot-Admin 2.0版本和SpringBoot 1.5.X版本结合使用</description>
<artifactId>SpringBoot-Admin</artifactId>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<spring-boot-admin.version>2.1.0</spring-boot-admin.version>
</properties>
<dependencies>
<dependency>
<groupId>de.codecentric</groupId>
<artifactId>spring-boot-admin-starter-server</artifactId>
<version>${spring-boot-admin.version}</version>
</dependency>
<dependency>
<groupId>de.codecentric</groupId>
<artifactId>spring-boot-admin-server-ui</artifactId>
<version>${spring-boot-admin.version}</version>
</dependency>
<dependency>
<groupId>org.jolokia</groupId>
<artifactId>jolokia-core</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<!--排除这个slf4j-log4j12-->
<exclusions>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
</exclusion>
</exclusions>
</dependency>
<!-- 安全认证 -->
<!--<dependency>-->
<!--<groupId>org.springframework.boot</groupId>-->
<!--<artifactId>spring-boot-starter-security</artifactId>-->
<!--</dependency>-->
<!-- 邮件通知 -->
<!--<dependency>-->
<!--<groupId>org.springframework.boot</groupId>-->
<!--<artifactId>spring-boot-starter-mail</artifactId>-->
<!--</dependency>-->
</dependencies>
<build>
<finalName>SpringBoot-Admin</finalName>
<resources>
<resource>
<targetPath>${project.build.directory}/classes</targetPath>
<directory>src/main/resources</directory>
<filtering>true</filtering>
<includes>
<include>**/*.xml</include>
<include>**/*.yml</include>
<include>**/*.properties</include>
<include>META-INF/**</include>
</includes>
</resource>
</resources>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<executions>
<execution>
<goals>
<goal>build-info</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
================================================
FILE: SpringBoot-Admin/readme.md
================================================
Springboot-Admin 2.0服务端+Springboot-Admin 1.5.6客户端集成使用监控服务<br>
原参考的[github地址](https://github.com/p555iii/spring-boot-admin1.5to2.0)<br>
服务端配置参考[地址](https://github.com/Xlinlin/SpringCloud-Demo/tree/master/SpringBoot-Admin)<br>
客户端配置参考[地址](https://github.com/Xlinlin/SpringCloud-Demo/tree/master/SpringCloud-Provider)<br>
================================================
FILE: SpringBoot-Admin/src/main/java/com/xiao/spring/boot/admin/SpringBootAdminApplication.java
================================================
package com.xiao.spring.boot.admin;
import de.codecentric.boot.admin.server.config.EnableAdminServer;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Configuration;
/**
* [简要描述]: springboot-admin 集成eureka 监控服务
* [详细描述]:
*
* @author llxiao
* @version 1.0, 2019/7/30 09:47
* @since JDK 1.8
*/
@Configuration
@SpringBootApplication
@EnableAdminServer
public class SpringBootAdminApplication
{
public static void main(String[] args)
{
SpringApplication.run(SpringBootAdminApplication.class, args);
}
}
================================================
FILE: SpringBoot-Admin/src/main/resources/application.yml
================================================
info:
groupId: @project.groupId@
artifactId: @project.artifactId@
version: @project.version@
###################
# 邮件通知配置
##################
#spring:
#mail:
#host: smtphm.qiye.163.com
#username: # 用户名
#password: # 密码
#boot:
#admin:
#notify:
#mail:
#from: # 发件人
#to: # 收件人
#enabled: true
================================================
FILE: SpringBoot-Admin/src/main/resources/bootstrap.yml
================================================
server:
port: 8080
spring:
application:
name: omni-service-admin
security:
user:
name: "admin"
password: "admin@123"
#eureka:
#client:
#fetch-registry: true
#service-url:
#defaultZone: http://192.168.206.201:8888/eureka
#register-with-eureka: true
#registry-fetch-interval-seconds: 30
#instance:
#hostname: localhost
#prefer-ip-address: true
#lease-renewal-interval-in-seconds: 10
#lease-expiration-duration-in-seconds: 30
#health-check-url-path: /actuator/health
#metadata-map:
#user.name: ${spring.security.user.name}
#user.password: ${spring.security.user.password}
#info:
#name: @project.name@
#groupId: @project.groupId@
#artifactId: @project.artifactId@
#version: @project.version@
#management:
#endpoints:
#web:
#exposure:
#include: "*"
#base-path: /
#endpoint:
#health:
#show-details: ALWAYS
================================================
FILE: SpringBoot-Custom-Elasticsearch-Starter/Custom-Elasticsearch-Starter/pom.xml
================================================
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>SpringBoot-Custom-Elasticsearch-Starter</artifactId>
<groupId>com.xiao.skywalking.demo</groupId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>Custom-Elasticsearch-Starter</artifactId>
<name>Custom ElasticSearch High Level Rest Client Stater AutoConfigure</name>
<dependencies>
<dependency>
<groupId>com.xiao.skywalking.demo</groupId>
<artifactId>Custom-Elasticsearch-Starter-Autoconfig</artifactId>
<version>${project.version}</version>
</dependency>
</dependencies>
</project>
================================================
FILE: SpringBoot-Custom-Elasticsearch-Starter/Custom-Elasticsearch-Starter-Autoconfig/pom.xml
================================================
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>SpringBoot-Custom-Elasticsearch-Starter</artifactId>
<groupId>com.xiao.skywalking.demo</groupId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>Custom-Elasticsearch-Starter-Autoconfig</artifactId>
<name>Custom ElasticSearch High Level Rest Client Stater AutoConfigure</name>
<properties>
<elasticsearch.version>6.8.17</elasticsearch.version>
</properties>
<dependencies>
<!-- springboot 依赖 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-autoconfigure</artifactId>
</dependency>
<!-- 将被@ConfigurationProperties注解的类的属性注入到元数据 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.16.18</version>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.elasticsearch</groupId>
<artifactId>elasticsearch</artifactId>
<version>${elasticsearch.version}</version>
</dependency>
<dependency>
<groupId>org.elasticsearch.client</groupId>
<artifactId>elasticsearch-rest-client</artifactId>
<version>${elasticsearch.version}</version>
</dependency>
<dependency>
<groupId>org.elasticsearch.client</groupId>
<artifactId>elasticsearch-rest-high-level-client</artifactId>
<version>${elasticsearch.version}</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.4</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.83</version>
</dependency>
</dependencies>
</project>
================================================
FILE: SpringBoot-Custom-Elasticsearch-Starter/Custom-Elasticsearch-Starter-Autoconfig/src/main/java/com/xiao/custom/elasticsearch/start/autoconfig/ElasticsearchAutoConfiguration.java
================================================
package com.xiao.custom.elasticsearch.start.autoconfig;
import com.alibaba.fastjson.JSONObject;
import com.xiao.custom.elasticsearch.start.autoconfig.properties.ElasticsearchProperties;
import com.xiao.custom.elasticsearch.start.autoconfig.properties.HostInfo;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.apache.http.HttpHost;
import org.apache.http.auth.AuthScope;
import org.apache.http.auth.UsernamePasswordCredentials;
import org.apache.http.client.CredentialsProvider;
import org.apache.http.impl.client.BasicCredentialsProvider;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestClientBuilder;
import org.elasticsearch.client.RestHighLevelClient;
import org.springframework.beans.factory.DisposableBean;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.util.CollectionUtils;
import java.util.List;
/**
* [简要描述]: 自动装配
* [详细描述]: <p>
* EnableAutoConfiguration 利用SpringFactoriesLoader机制加载所有的AutoConfiguration类 META-INF/spring.factories
*
* @author llxiao
* @version 1.0, 2019/8/28 10:28
* @since JDK 1.8
*/
@Configuration
@EnableConfigurationProperties(ElasticsearchProperties.class)
@Slf4j
public class ElasticsearchAutoConfiguration implements DisposableBean
{
private RestHighLevelClient restHighLevelClient;
@Bean
@ConditionalOnMissingBean
public RestHighLevelClient restHighLevelClient(ElasticsearchProperties elasticsearchProperties)
{
if (log.isDebugEnabled())
{
log.debug("初始化Elasticsearch Rest High Level Client....");
}
List<HostInfo> hosts = elasticsearchProperties.getHosts();
if (CollectionUtils.isEmpty(hosts))
{
throw new RuntimeException("Elasticsearch host配置为空,请检查:spring.elasticsearch.rest.hosts的配置是否正确");
}
if (log.isDebugEnabled())
{
log.debug("Elasticsearch host: {}", JSONObject.toJSONString(hosts));
}
HttpHost[] httpHosts = new HttpHost[hosts.size()];
int i = 0;
for (HostInfo host : hosts)
{
httpHosts[i++] = new HttpHost(host.getHostname(), host.getPort(), host.getSchema());
}
RestClientBuilder restClientBuilder = RestClient.builder(httpHosts);
restClientBuilder.setMaxRetryTimeoutMillis(elasticsearchProperties.getMaxRetryTimeout());
// 请求参数设置
restClientBuilder.setRequestConfigCallback(requestConfigBuilder ->
{
requestConfigBuilder.setConnectTimeout(elasticsearchProperties.getConnectTimeout());
requestConfigBuilder.setSocketTimeout(elasticsearchProperties.getSocketTimeout());
requestConfigBuilder.setConnectionRequestTimeout(elasticsearchProperties.getRequestTimeout());
return requestConfigBuilder;
});
//异步 httpclient 连接参数配置
restClientBuilder.setHttpClientConfigCallback(httpClientBuilder ->
{
httpClientBuilder.setMaxConnTotal(elasticsearchProperties.getMaxConnect());
httpClientBuilder.setMaxConnPerRoute(elasticsearchProperties.getMaxConnectRoute());
// httpClientBuilder.setThreadFactory();
// SSL 配置
// httpClientBuilder.setSSLContext()
// 请求队列头部拦截 ,request response HttpResponseInterceptor HttpRequestInterceptor
// httpClientBuilder.addInterceptorFirst();
// 请求队列尾部拦截 ,request response
// httpClientBuilder.addInterceptorLast();
// 鉴权设置
if (StringUtils.isNotBlank(elasticsearchProperties.getUsername()) && StringUtils
.isNotBlank(elasticsearchProperties.getPassword()))
{
CredentialsProvider credentialsProvider = new BasicCredentialsProvider();
credentialsProvider
.setCredentials(AuthScope.ANY, new UsernamePasswordCredentials(elasticsearchProperties
.getUsername(), elasticsearchProperties.getPassword()));
httpClientBuilder.setDefaultCredentialsProvider(credentialsProvider);
}
return httpClientBuilder;
});
if (log.isDebugEnabled())
{
log.debug("初始化Elasticsearch Rest High Level Client 成功!");
}
restHighLevelClient = new RestHighLevelClient(restClientBuilder);
return restHighLevelClient;
}
/**
* Invoked by a BeanFactory on destruction of a singleton.
*
* @exception Exception in case of shutdown errors.
* Exceptions will get logged but not rethrown to allow
* other beans to release their resources too.
*/
@Override
public void destroy() throws Exception
{
restHighLevelClient.close();
}
}
================================================
FILE: SpringBoot-Custom-Elasticsearch-Starter/Custom-Elasticsearch-Starter-Autoconfig/src/main/java/com/xiao/custom/elasticsearch/start/autoconfig/properties/ElasticsearchProperties.java
================================================
package com.xiao.custom.elasticsearch.start.autoconfig.properties;
import lombok.Data;
import org.elasticsearch.client.RestClientBuilder;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.context.properties.NestedConfigurationProperty;
import java.util.List;
/**
* [简要描述]: Elasticsearch 配置类
* [详细描述]:
*
* @author llxiao
* @version 1.0, 2019/8/28 10:18
* @since JDK 1.8
*/
@Data
@ConfigurationProperties(prefix = ElasticsearchProperties.ELASTIC_SEARCH_PREFIX)
public class ElasticsearchProperties
{
public static final String ELASTIC_SEARCH_PREFIX = "spring.elasticsearch.rest";
/**
* 集群名称
*/
private String clusterName;
/**
* 节点信息
*/
@NestedConfigurationProperty
private List<HostInfo> hosts;
/**
* 鉴权使用
*/
private String username;
private String password;
/**
* 高亮前缀
*/
private String highlightPre = "";
/**
* 高亮后缀
*/
private String highlightPost = "";
/**
* 连接超时时间
*/
private int connectTimeout = RestClientBuilder.DEFAULT_CONNECT_TIMEOUT_MILLIS;
/**
* socket超时时间
*/
private int socketTimeout = RestClientBuilder.DEFAULT_SOCKET_TIMEOUT_MILLIS;
/**
* 请求超时时间
*/
private int requestTimeout = RestClientBuilder.DEFAULT_CONNECT_TIMEOUT_MILLIS;
/**
* 最大连接数
*/
private int maxConnect = RestClientBuilder.DEFAULT_MAX_CONN_TOTAL;
/**
* 单主机并发最大数
*/
private int maxConnectRoute = RestClientBuilder.DEFAULT_MAX_CONN_PER_ROUTE;
/**
* 重试最大超时时间
*/
private int maxRetryTimeout = RestClientBuilder.DEFAULT_MAX_RETRY_TIMEOUT_MILLIS;
}
================================================
FILE: SpringBoot-Custom-Elasticsearch-Starter/Custom-Elasticsearch-Starter-Autoconfig/src/main/java/com/xiao/custom/elasticsearch/start/autoconfig/properties/HostInfo.java
================================================
package com.xiao.custom.elasticsearch.start.autoconfig.properties;
import lombok.Data;
/**
* [简要描述]:
* [详细描述]:
*
* @author llxiao
* @version 1.0, 2019/8/28 10:22
* @since JDK 1.8
*/
@Data
public class HostInfo
{
private String hostname;
private int port;
private String schema;
}
================================================
FILE: SpringBoot-Custom-Elasticsearch-Starter/Custom-Elasticsearch-Starter-Autoconfig/src/main/resources/META-INF/spring.factories
================================================
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
com.xiao.custom.elasticsearch.start.autoconfig.ElasticsearchAutoConfiguration
================================================
FILE: SpringBoot-Custom-Elasticsearch-Starter/Custom-Elasticsearch-Starter-Example/pom.xml
================================================
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>SpringBoot-Custom-Elasticsearch-Starter</artifactId>
<groupId>com.xiao.skywalking.demo</groupId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>Custom-Elasticsearch-Starter-Example</artifactId>
<name>Custom ElasticSearch High Level Rest Client Stater Example</name>
<properties>
<elasticsearch.version>6.3.2</elasticsearch.version>
<log4j2.version>2.17.1</log4j2.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<!--排除这个slf4j-log4j12-->
<exclusions>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
<version>${log4j2.version}</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>${log4j2.version}</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.xiao.skywalking.demo</groupId>
<artifactId>Custom-Elasticsearch-Starter</artifactId>
<version>${project.version}</version>
</dependency>
</dependencies>
<build>
<finalName>${project.artifactId}</finalName>
<resources>
<resource>
<targetPath>${project.build.directory}/classes</targetPath>
<directory>src/main/resources</directory>
<filtering>true</filtering>
<includes>
<include>**/*.xml</include>
<include>**/*.yml</include>
<include>**/*.properties</include>
<include>META-INF/**</include>
</includes>
</resource>
</resources>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
================================================
FILE: SpringBoot-Custom-Elasticsearch-Starter/Custom-Elasticsearch-Starter-Example/src/main/java/com/xiao/custom/elasticsearch/starter/example/ElasticsearchApplication.java
================================================
package com.xiao.custom.elasticsearch.starter.example;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
/**
* [简要描述]:
* [详细描述]:
*
* @author llxiao
* @version 1.0, 2019/8/28 13:54
* @since JDK 1.8
*/
@SpringBootApplication
public class ElasticsearchApplication
{
public static void main(String[] args)
{
SpringApplication.run(ElasticsearchApplication.class, args);
}
}
================================================
FILE: SpringBoot-Custom-Elasticsearch-Starter/Custom-Elasticsearch-Starter-Example/src/main/resources/application.properties
================================================
#spring.elasticsearch.rest.clusterName=omni-dev-es
#spring.elasticsearch.rest.hosts[0].hostname=192.168.206.210
#spring.elasticsearch.rest.hosts[0].port=9200
#spring.elasticsearch.rest.hosts[0].schema=http
#spring.elasticsearch.rest.connectTimeout=1000
#spring.elasticsearch.rest.socketTimeout=30000
#spring.elasticsearch.rest.requestTimeout=500
#spring.elasticsearch.rest.maxConnect=30
#spring.elasticsearch.rest.maxConnectRoute=10
#spring.elasticsearch.rest.maxRetryTimeout=30000
================================================
FILE: SpringBoot-Custom-Elasticsearch-Starter/Custom-Elasticsearch-Starter-Example/src/main/resources/application.yml
================================================
spring:
elasticsearch:
rest:
clusterName: omni-dev-es
hosts:
-
hostname: 192.168.206.210
port: 9200
schema: http
#-
#hostname: 192.168.206.212
#port: 9200
#schema: http
#username: you username
#password: you passwd
# 连接超时时间,单位ms,默认1S
connectTimeout: 1000
# socket超时时间,单位ms,默认30S
socketTimeout: 30000
# 请求超时时间,单位ms,默认500ms
requestTimeout: 500
# 单机最大连接数,默认30个
maxConnect: 30
# 单机最大并发数,默认10个
maxConnectRoute: 10
# 最大重试时间,默认30S
maxRetryTimeout: 30000
# 高亮前缀
#highlightPre: <span style=\"color:red\">
# 高亮后缀
#highlightPost: </span>
================================================
FILE: SpringBoot-Custom-Elasticsearch-Starter/Custom-Elasticsearch-Starter-Example/src/main/resources/bootstrap.yml
================================================
================================================
FILE: SpringBoot-Custom-Elasticsearch-Starter/Custom-Elasticsearch-Starter-Example/src/main/resources/logback-spring.xml
================================================
<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true">
<!-- 控制台Appender -->
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
</encoder>
</appender>
<!-- <logger name="org.springframework.web" level="ERROR" /> -->
<logger name="org.apache.http" level="ERROR"/>
<logger name="com.netflix.discovery" level="ERROR"/>
<logger name="org.apache.tomcat" level="ERROR"/>
<logger name="org.apache.zookeeper" level="ERROR"/>
<logger name="com.netflix.discovery.shared.resolver.aws.ConfigClusterResolver" level="ERROR"/>
<!-- 启动的时候一些日志屏蔽 -->
<logger name="com.netflix.discovery" level="ERROR"/>
<logger name="org.apache" level="ERROR"/>
<logger name="org.springframework.jmx.export.annotation.AnnotationMBeanExporter" level="ERROR"/>
<logger name="org.springframework.boot.actuate.endpoint.mvc" level="ERROR"/>
<logger name="org.springframework.boot.web.servlet.FilterRegistrationBean" level="ERROR"/>
<logger name="org.springframework.boot.context.embedded.tomcat.TomcatEmbeddedServletContainer" level="ERROR"/>
<logger name="com.netflix.config.sources.URLConfigurationSource" level="ERROR"/>
<logger name="com.netflix.discovery.shared.resolver.aws.ConfigClusterResolver" level="ERROR"/>
<logger name="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping" level="ERROR"/>
<logger name="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping" level="ERROR"/>
<logger name="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter" level="ERROR"/>
<logger name="org.springframework.ui.freemarker.SpringTemplateLoader" level="ERROR"/>
<logger name="org.springframework.context.annotation.AnnotationConfigApplicationContext" level="ERROR"/>
<logger name="org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor" level="ERROR"/>
<logger name="org.springframework.beans.factory.support.DefaultListableBeanFactory" level="ERROR"/>
<logger name="org.springframework.boot.actuate.endpoint.jmx.EndpointMBeanExporter" level="ERROR"/>
<logger name="com.purcotton.omni.elasticsearch.starter.example" level="debug" additivity="false">
<appender-ref ref="STDOUT"/>
</logger>
<root level="INFO">
<appender-ref ref="STDOUT"/>
</root>
</configuration>
================================================
FILE: SpringBoot-Custom-Elasticsearch-Starter/Custom-Elasticsearch-Starter-Example/src/test/java/com/xiao/custom/elasticsearch/starter/example/ElasticsearchApplicationTest.java
================================================
package com.xiao.custom.elasticsearch.starter.example;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.xiao.custom.elasticsearch.start.autoconfig.properties.ElasticsearchProperties;
import org.apache.commons.lang3.StringUtils;
import org.apache.http.Header;
import org.apache.http.HttpEntity;
import org.apache.http.entity.ContentType;
import org.apache.http.message.BasicHeader;
import org.apache.http.nio.entity.NStringEntity;
import org.apache.http.util.EntityUtils;
import org.elasticsearch.ElasticsearchException;
import org.elasticsearch.action.DocWriteRequest;
import org.elasticsearch.action.DocWriteResponse;
import org.elasticsearch.action.admin.indices.alias.Alias;
import org.elasticsearch.action.admin.indices.close.CloseIndexRequest;
import org.elasticsearch.action.admin.indices.close.CloseIndexResponse;
import org.elasticsearch.action.admin.indices.create.CreateIndexRequest;
import org.elasticsearch.action.admin.indices.create.CreateIndexResponse;
import org.elasticsearch.action.admin.indices.delete.DeleteIndexRequest;
import org.elasticsearch.action.admin.indices.delete.DeleteIndexResponse;
import org.elasticsearch.action.admin.indices.get.GetIndexRequest;
import org.elasticsearch.action.admin.indices.open.OpenIndexRequest;
import org.elasticsearch.action.admin.indices.open.OpenIndexResponse;
import org.elasticsearch.action.bulk.*;
import org.elasticsearch.action.delete.DeleteRequest;
import org.elasticsearch.action.delete.DeleteResponse;
import org.elasticsearch.action.get.GetRequest;
import org.elasticsearch.action.get.GetResponse;
import org.elasticsearch.action.index.IndexRequest;
import org.elasticsearch.action.index.IndexResponse;
import org.elasticsearch.action.search.SearchRequest;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.action.support.master.AcknowledgedRequest;
import org.elasticsearch.action.support.replication.ReplicationResponse;
import org.elasticsearch.action.update.UpdateRequest;
import org.elasticsearch.action.update.UpdateResponse;
import org.elasticsearch.client.Response;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.common.unit.ByteSizeUnit;
import org.elasticsearch.common.unit.ByteSizeValue;
import org.elasticsearch.common.unit.TimeValue;
import org.elasticsearch.common.xcontent.XContentBuilder;
import org.elasticsearch.common.xcontent.XContentFactory;
import org.elasticsearch.common.xcontent.XContentType;
import org.elasticsearch.index.get.GetResult;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.rest.RestStatus;
import org.elasticsearch.search.builder.SearchSourceBuilder;
import org.elasticsearch.search.fetch.subphase.FetchSourceContext;
import org.elasticsearch.search.fetch.subphase.highlight.HighlightBuilder;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
import java.io.IOException;
import java.util.*;
import java.util.concurrent.TimeUnit;
/**
* [简要描述]:
* [详细描述]:
*
* @author llxiao
* @version 1.0, 2019/8/28 13:56
* @since JDK 1.8
*/
@RunWith(SpringRunner.class)
@SpringBootTest
public class ElasticsearchApplicationTest
{
@Autowired
private RestHighLevelClient restHighLevelClient;
@Autowired
private ElasticsearchProperties elasticsearchProperties;
/**
* 搜索
* https://www.elastic.co/guide/en/elasticsearch/client/java-rest/6.2/java-rest-high-search.html
*/
@Test
public void testQuery()
{
SearchRequest request = new SearchRequest("10000");
// request.searchType("10000");
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
searchSourceBuilder.query(QueryBuilders.termQuery("commodityNo", "3439538790"));
searchSourceBuilder.from(0);
searchSourceBuilder.size(10);
searchSourceBuilder.timeout(new TimeValue(60, TimeUnit.SECONDS));
// 高亮设置
HighlightBuilder highlightBuilder = new HighlightBuilder().field("*").requireFieldMatch(false);
if (StringUtils.isNoneEmpty(elasticsearchProperties.getHighlightPre()))
{
highlightBuilder.preTags(elasticsearchProperties.getHighlightPre());
highlightBuilder.postTags(elasticsearchProperties.getHighlightPost());
highlightBuilder.field("subTitle");
highlightBuilder.field("title");
}
searchSourceBuilder.highlighter(highlightBuilder);
request.source(searchSourceBuilder);
try
{
final SearchResponse response = restHighLevelClient.search(request);
response.getHits().forEach(document -> System.out.println(document.getSourceAsString()));
}
catch (IOException e)
{
e.printStackTrace();
}
}
/**
* 批处理:
* 增删改查
*/
public void testBulkRequest()
{
BulkRequest request = new BulkRequest();
request.add(new DeleteRequest("posts", "doc", "3"));
request.add(new UpdateRequest("posts", "doc", "2").doc(XContentType.JSON, "other", "test"));
request.add(new IndexRequest("posts", "doc", "4").source(XContentType.JSON, "field", "baz"));
try
{
// restHighLevelClient.bulkAsync(request, ActionListener);
BulkResponse bulkResponse = restHighLevelClient.bulk(request);
if (bulkResponse.hasFailures())
{
for (BulkItemResponse bulkItemResponse : bulkResponse)
{
if (bulkItemResponse.isFailed())
{
BulkItemResponse.Failure failure = bulkItemResponse.getFailure();
System.out.println("处理失败:" + failure.getId() + '-' + failure.getMessage());
}
}
}
for (BulkItemResponse bulkItemResponse : bulkResponse)
{
DocWriteResponse itemResponse = bulkItemResponse.getResponse();
if (bulkItemResponse.getOpType() == DocWriteRequest.OpType.INDEX
|| bulkItemResponse.getOpType() == DocWriteRequest.OpType.CREATE)
{
IndexResponse indexResponse = (IndexResponse) itemResponse;
// 创建
}
else if (bulkItemResponse.getOpType() == DocWriteRequest.OpType.UPDATE)
{
UpdateResponse updateResponse = (UpdateResponse) itemResponse;
// 更新
}
else if (bulkItemResponse.getOpType() == DocWriteRequest.OpType.DELETE)
{
DeleteResponse deleteResponse = (DeleteResponse) itemResponse;
// 删除
}
}
}
catch (IOException e)
{
e.printStackTrace();
}
}
/**
* BulkProcessor通过提供一个实用程序类简化了批量API的使用,该实用程序类允许在将索引/更新/删除操作添加到处理器时透明地执行这些操作。
*/
@Test
public void testBulkProcessor()
{
BulkProcessor.Listener listener = new BulkProcessor.Listener()
{
@Override
public void beforeBulk(long executionId, BulkRequest request)
{
int numberOfActions = request.numberOfActions();
System.out.println("当前BulkProcessor中执行的操作数:" + numberOfActions);
}
@Override
public void afterBulk(long executionId, BulkRequest request, BulkResponse response)
{
if (response.hasFailures())
{
System.out.println("当前BulkProcessor执行出现异常:" + response.buildFailureMessage());
}
else
{
System.out.println("执行成功!");
}
}
@Override
public void afterBulk(long executionId, BulkRequest request, Throwable failure)
{
System.out.println("当前请求发生的错误消息:" + failure.getMessage());
failure.printStackTrace();
}
};
BulkProcessor.Builder builder = BulkProcessor.builder(restHighLevelClient::bulkAsync, listener);
//根据当前添加的操作数设置刷新新批量请求的时间 defaults to 1000
builder.setBulkActions(500);
// 根据当前添加的操作的大小设置刷新新批量请求的时间 defaults to 5Mb
builder.setBulkSize(new ByteSizeValue(1L, ByteSizeUnit.MB));
// 设置允许执行的并发请求数 默认0仅允许一个
builder.setConcurrentRequests(0);
// 设置刷新间隔,如果间隔通过,则刷新任何挂起的BulkRequest
builder.setFlushInterval(TimeValue.timeValueSeconds(10L));
// 回退策略 等待1秒,最多重试3
builder.setBackoffPolicy(BackoffPolicy.constantBackoff(TimeValue.timeValueSeconds(1L), 3));
BulkProcessor bulkProcessor = builder.build();
IndexRequest one = new IndexRequest("posts", "doc", "1").
source(XContentType.JSON, "title", "In which order are my Elasticsearch queries executed?");
IndexRequest two = new IndexRequest("posts", "doc", "2")
.source(XContentType.JSON, "title", "Current status and upcoming changes in Elasticsearch");
IndexRequest three = new IndexRequest("posts", "doc", "3")
.source(XContentType.JSON, "title", "The Future of Federated Search in Elasticsearch");
bulkProcessor.add(one);
bulkProcessor.add(two);
bulkProcessor.add(three);
try
{
// 执行并等待,直到超时
boolean terminated = bulkProcessor.awaitClose(30L, TimeUnit.SECONDS);
}
catch (InterruptedException e)
{
e.printStackTrace();
}
// 关闭
bulkProcessor.close();
}
/**
* 插入数据 index api
*/
@Test
public void testInsert() throws IOException
{
String index = "101010";
String type = index;
String id = UUID.randomUUID().toString();
IndexRequest indexRequest = new IndexRequest(index, type, id);
// 可以设置版本号,但可能出现版本冲突异常 ElasticsearchException e.status() == RestStatus.CONFLICT
indexRequest.version(1);
// or
// IndexRequest indexRequest = new IndexRequest();
// indexRequest.index(index);
// indexRequest.type(type);
// indexRequest.id(id);
// As json String
String jsonString = "{" + "\"user\":\"kimchy\"," + "\"postDate\":\"2013-01-30\","
+ "\"message\":\"trying out Elasticsearch\"" + "}";
indexRequest.source(jsonString, XContentType.JSON);
// As map
Map<String, Object> jsonMap = new HashMap<>();
jsonMap.put("user", "kimchy");
jsonMap.put("postDate", new Date());
jsonMap.put("message", "trying out Elasticsearch");
indexRequest.source(jsonMap);
// As XContentBuilder
XContentBuilder builder = XContentFactory.jsonBuilder();
builder.startObject();
{
builder.field("user", "kimchy");
builder.field("postDate", new Date());
builder.field("message", "trying out Elasticsearch");
}
builder.endObject();
indexRequest.source(builder);
// As source
indexRequest.source("user", "kimchy", "postDate", new Date(), "message", "trying out Elasticsearch");
// index or indexAsync
IndexResponse indexResponse = restHighLevelClient.index(indexRequest);
index = indexResponse.getIndex();
type = indexResponse.getType();
id = indexResponse.getId();
long version = indexResponse.getVersion();
if (indexResponse.getResult() == DocWriteResponse.Result.CREATED)
{
System.out.println("ES数据已经成功创建");
}
else if (indexResponse.getResult() == DocWriteResponse.Result.UPDATED)
{
System.out.println("ES数据已经成功覆盖");
}
ReplicationResponse.ShardInfo shardInfo = indexResponse.getShardInfo();
if (shardInfo.getTotal() != shardInfo.getSuccessful())
{
System.out.println("数据创建成功,但成功的shard数量小于总shard数量");
}
if (shardInfo.getFailed() > 0)
{
for (ReplicationResponse.ShardInfo.Failure failure : shardInfo.getFailures())
{
System.out.println("失败原:" + failure.reason());
}
}
}
/**
* 文档ID 查找
*/
@Test
public void testGetIndex()
{
GetRequest getRequest = new GetRequest("101010", "101010", "101010");
// 设置版本
// getRequest.version(2);
//禁用获取 _source字段
getRequest.fetchSourceContext(new FetchSourceContext(false));
try
{
// get or getAsync(request,ActionListener)
GetResponse getResponse = restHighLevelClient.get(getRequest);
String index = getResponse.getIndex();
String type = getResponse.getType();
String id = getResponse.getId();
if (getResponse.isExists())
{
long version = getResponse.getVersion();
String sourceAsString = getResponse.getSourceAsString();
Map<String, Object> sourceAsMap = getResponse.getSourceAsMap();
byte[] sourceAsBytes = getResponse.getSourceAsBytes();
}
else
{
System.out.println("不存在的数据!");
}
}
catch (ElasticsearchException e)
{
if (e.status() == RestStatus.NOT_FOUND)
{
System.out.println("索引不存在");
}
else if (e.status() == RestStatus.CONFLICT)
{
System.out.println("版本冲突!");
}
else
{
System.out.println("其他为未知异常:" + e.status().name());
}
}
catch (IOException e)
{
System.out.println("IO 异常");
}
}
/**
* 文档ID 更新
* 1. 脚本更新
* 2. 文档更新:部分字段更新和不存在直接插入更新
*/
@Test
public void testUpdate() throws IOException
{
UpdateRequest request = new UpdateRequest("101010", "101010", "101010");
// ############## 更新文档数据部分字段使用 .doc ,如果不确定存在则直接插入使用 .upsert方法
// As JSON String
String jsonString = "{" + "\"updated\":\"2017-01-01\"," + "\"reason\":\"daily update\"" + "}";
request.doc(jsonString, XContentType.JSON);
// request.upsert(jsonString,XContentType.JSON);
// As Map
Map<String, Object> jsonMap = new HashMap<>();
jsonMap.put("updated", new Date());
jsonMap.put("reason", "daily update");
request.doc(jsonMap);
// request.upsert(jsonMap);
// AS XContentBuilder
XContentBuilder builder = XContentFactory.jsonBuilder();
builder.startObject();
{
builder.field("updated", new Date());
builder.field("reason", "daily update");
}
builder.endObject();
request.doc(builder);
request.upsert(builder);
// 设置版本
// request.version(2);
//指示如果部分文档尚不存在,则必须将其用作upsert文档。
// request.docAsUpsert(true);
try
{
//同步 update 异步 updateAsync(request,ActionListener)
UpdateResponse updateResponse = restHighLevelClient.update(request);
String index = updateResponse.getIndex();
String type = updateResponse.getType();
String id = updateResponse.getId();
long version = updateResponse.getVersion();
if (updateResponse.getResult() == DocWriteResponse.Result.CREATED)
{
System.out.println("文档不存在,创建成功!");
}
else if (updateResponse.getResult() == DocWriteResponse.Result.UPDATED)
{
System.out.println("文档更新成功!");
}
else if (updateResponse.getResult() == DocWriteResponse.Result.DELETED)
{
System.out.println("文档删除成功!");
}
else if (updateResponse.getResult() == DocWriteResponse.Result.NOOP)
{
System.out.println("没有对文档做任何更新操作!");
}
// 获取更新后的数据
GetResult result = updateResponse.getGetResult();
if (result.isExists())
{
String sourceAsString = result.sourceAsString();
Map<String, Object> sourceAsMap = result.sourceAsMap();
byte[] sourceAsBytes = result.source();
}
else
{
System.out.println("文档不存在!");
}
// 分片更新失败
ReplicationResponse.ShardInfo shardInfo = updateResponse.getShardInfo();
if (shardInfo.getFailed() > 0)
{
for (ReplicationResponse.ShardInfo.Failure failure : shardInfo.getFailures())
{
System.out.println("分片ID:" + failure.fullShardId() + "更新失败:" + failure.reason());
}
}
}
catch (ElasticsearchException e)
{
// 可能有索引没找到,版本异常,参考RestStatus
System.out.println("更新异常:" + e.status().name());
}
}
/**
* 文档ID 删除
*/
@Test
public void testDel()
{
DeleteRequest request = new DeleteRequest("101010", "101010", "101010");
try
{
DeleteResponse deleteResponse = restHighLevelClient.delete(request);
if (deleteResponse.getResult() == DocWriteResponse.Result.NOT_FOUND)
{
System.out.println("删除的文档不存在");
}
ReplicationResponse.ShardInfo shardInfo = deleteResponse.getShardInfo();
if (shardInfo.getTotal() != shardInfo.getSuccessful())
{
System.out.println("删除成功了,但是删除的数量与分片的数量不符合!");
}
if (shardInfo.getFailed() > 0)
{
for (ReplicationResponse.ShardInfo.Failure failure : shardInfo.getFailures())
{
System.out.println("分片ID:" + failure.fullShardId() + "更新失败:" + failure.reason());
}
}
}
catch (ElasticsearchException e)
{
System.out.println("删除异常:" + e.status().name());
}
catch (IOException e)
{
e.printStackTrace();
}
}
/**
* 创建索引
*
* @exception IOException
*/
@Test
public void testCreateIndex() throws IOException
{
CreateIndexRequest request = new CreateIndexRequest("101010");
// setting设置
request.settings(Settings.builder().put("index.number_of_shards", 3).put("index.number_of_replicas", 2));
// mapping
// request.mapping();
request.alias(new Alias("101010_alias"));
// 其他可选参数
setOptionParams(request);
// 同步创建
final CreateIndexResponse createIndexResponse = restHighLevelClient.indices().create(request);
// 所有节点是否已确认请求
if (createIndexResponse.isAcknowledged())
{
System.out.println("创建成功!");
}
// 是否在超时前为索引中的每个碎片启动了所需数量的分片副本
if (createIndexResponse.isShardsAcknowledged())
{
System.out.println("分片副本都已创建成功");
}
// 异步创建
// restHighLevelClient.indices().createAsync(request, new ActionListener<CreateIndexResponse>()
// {
// @Override
// public void onResponse(CreateIndexResponse clearIndicesCacheResponse)
// {
// System.out.println("所有节点是否已确认请求: " + createIndexResponse.isAcknowledged());
// System.out.println("分片副本都已创建成功:" + createIndexResponse.isShardsAcknowledged());
// }
//
// @Override
// public void onFailure(Exception e)
// {
// System.out.println("请求出现异常,异常信息:" + e.getMessage());
// e.printStackTrace();
// }
// });
}
/**
* 所以是否存在
*/
@Test
public void testIndexExist()
{
GetIndexRequest request = new GetIndexRequest();
request.indices("10001");
try
{
System.out.println(restHighLevelClient.indices().exists(request));
}
catch (IOException e)
{
e.printStackTrace();
}
}
/**
* 删除索引
*/
@Test
public void testDelIndex()
{
DeleteIndexRequest request = new DeleteIndexRequest("101010");
// 其他可选参数
setOptionParams(request);
// 同步
try
{
DeleteIndexResponse response = restHighLevelClient.indices().delete(request);
System.out.println("所有节点已确认:" + response.isAcknowledged());
}
catch (ElasticsearchException exception)
{
if (exception.status() == RestStatus.NOT_FOUND)
{
System.out.println("索引未找到!");
}
}
catch (IOException e)
{
e.printStackTrace();
}
// 异步
// restHighLevelClient.indices().deleteAsync(request, new ActionListener<DeleteIndexResponse>()
// {
// @Override
// public void onResponse(DeleteIndexResponse deleteIndexResponse)
// {
// System.out.println("所有节点已确认:" + deleteIndexResponse.isAcknowledged());
// }
//
// @Override
// public void onFailure(Exception e)
// {
// if (e instanceof ElasticsearchException)
// {
// ElasticsearchException exception = (ElasticsearchException) e;
// if (exception.status() == RestStatus.NOT_FOUND)
// {
// System.out.println("索引未找到!");
// }
// }
// System.out.println("删除出现位置异常!");
// }
// });
}
/**
* 打开和关闭索引
*/
@Test
public void testOpenAndCloseIndex() throws IOException
{
OpenIndexRequest openIndexRequest = new OpenIndexRequest("index");
setOptionParams(openIndexRequest);
// 同步 open or 异步 openAsync
OpenIndexResponse openIndexResponse = restHighLevelClient.indices().open(openIndexRequest);
System.out.println("所有节点已确认:" + openIndexResponse.isAcknowledged());
System.out.println("所有副本分片已确认:" + openIndexResponse.isShardsAcknowledged());
CloseIndexRequest closeIndexRequest = new CloseIndexRequest("index");
setOptionParams(closeIndexRequest);
// 同步 close or 异步 closeAsync
CloseIndexResponse closeIndexResponse = restHighLevelClient.indices().close(closeIndexRequest);
System.out.println("所有节点已确认:" + closeIndexResponse.isAcknowledged());
}
private void setOptionParams(AcknowledgedRequest request)
{
// 其他可选参数
request.timeout(TimeValue.timeValueMinutes(2));
// request.timeout("2m");
// master node
// request.masterNodeTimeout(TimeValue.timeValueMinutes(1));
// request.masterNodeTimeout("1m");
// 创建索引API返回响应之前等待的活动分片副本数
// request.waitForActiveShards(2);
// request.waitForActiveShards(ActiveShardCount.DEFAULT);
}
/**
* [简要描述]:使用LowLevelClient 执行analyzer操作<br/>
* [详细描述]:<br/>
* <p>
* llxiao 2019/9/17 - 10:45
**/
@Test
public void testAnalysis()
{
RestClient lowLevelClient = restHighLevelClient.getLowLevelClient();
JSONObject entity = new JSONObject();
entity.put("analyzer", "ik_max_word");
entity.put("text", "我是中国人");
HttpEntity httpEntity = new NStringEntity(JSONObject.toJSONString(entity), ContentType.APPLICATION_JSON);
Map<String, String> params = Collections.emptyMap();
Header[] defaultHeaders = new Header[] { new BasicHeader("header", "value") };
try
{
Response response = lowLevelClient.performRequest("POST", "_analyze", params, httpEntity, defaultHeaders);
JSONObject tokens = JSONObject.parseObject(EntityUtils.toString(response.getEntity()));
JSONArray arrays = tokens.getJSONArray("tokens");
String[] result = new String[arrays.size()];
for (int i = 0; i < arrays.size(); i++)
{
JSONObject obj = JSONObject.parseObject(arrays.getString(i));
result[i] = obj.getString("token");
}
System.out.println(Arrays.toString(result));
}
catch (IOException e)
{
e.printStackTrace();
}
}
}
================================================
FILE: SpringBoot-Custom-Elasticsearch-Starter/Readme.md
================================================
**定制SpringBoot Starter 之Elasticsearch Rest High Level Client Starter**
**1. 自定义SpringBoot Starter 三要素:**
>1.1.pom :
```$xslt
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-autoconfigure</artifactId>
</dependency>
<!-- 将被@ConfigurationProperties注解的类的属性注入到元数据 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
```
>1.2. 注解使用
```$xslt
@Data
@ConfigurationProperties(prefix = ElasticsearchProperties.ELASTIC_SEARCH_PREFIX)
public class ElasticsearchProperties{}
@Configuration
@EnableConfigurationProperties(ElasticsearchProperties.class)
public class ElasticsearchAutoConfiguration{}
```
>1.3 EnableAutoConfiguration 利用SpringFactoriesLoader机制加载所有的AutoConfiguration类 META-INF/spring.factories
```$xslt
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
com.xiao.custom.elasticsearch.start.autoconfig.ElasticsearchAutoConfiguration
```
Elasticsearch高级客户端打包集成为Springboot Starter包,详情参考[Example工程](https://github.com/Xlinlin/SpringCloud-Demo/tree/master/SpringBoot-Custom-Elasticsearch-Starter/Custom-Elasticsearch-Starter-Example)<p>
**2. Custom ElasticSearch High Level Rest Client Starter使用说明:**<p>
>2.1Pom引入<br>
```$xslt
<properties>
<elasticsearch.version>6.3.2</elasticsearch.version>
</properties>
<dependencies>
<dependency>
<groupId>com.purcotton.omni</groupId>
<artifactId>omni-common-elasticsearch-starter</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>org.elasticsearch</groupId>
<artifactId>elasticsearch</artifactId>
<version>${elasticsearch.version}</version>
</dependency>
<dependency>
<groupId>org.elasticsearch.client</groupId>
<artifactId>elasticsearch-rest-client</artifactId>
<version>${elasticsearch.version}</version>
</dependency>
<dependency>
<groupId>org.elasticsearch.client</groupId>
<artifactId>elasticsearch-rest-high-level-client</artifactId>
<version>${elasticsearch.version}</version>
</dependency>
</dependencies>
```
>2.2配置文件:<br>
```$xslt
spring:
elasticsearch:
rest:
clusterName: omni-dev-es
hosts:
-
hostname: 192.168.206.210
port: 9200
schema: http
#-
#hostname: 192.168.206.212
#port: 9200
#schema: http
#username: you username
#password: you passwd
# 连接超时时间,单位ms,默认1S
connectTimeout: 1000
# socket超时时间,单位ms,默认30S
socketTimeout: 30000
# 请求超时时间,单位ms,默认500ms
requestTimeout: 500
# 单机最大连接数,默认30个
maxConnect: 30
# 单机最大并发数,默认10个
maxConnectRoute: 10
# 最大重试时间,默认30S
maxRetryTimeout: 30000
```
>2.3代码引用:<br>
```$xslt
@Autowired
private RestHighLevelClient restHighLevelClient;
```
>2.4ElasticSearch High Level Rest Client 增删改Demo:<br>
[ElasticsearchApplicationTest](https://github.com/Xlinlin/SpringCloud-Demo/blob/master/SpringBoot-Custom-Elasticsearch-Starter/Custom-Elasticsearch-Starter-Example/src/test/java/com/xiao/custom/elasticsearch/starter/example/ElasticsearchApplicationTest.java)<br>
```$xslt
// 创建索引
ElasticsearchApplicationTest.testCreateIndex()
// 索引是否存在
ElasticsearchApplicationTest.testIndexExist()
// 删除索引
ElasticsearchApplicationTest.testDelIndex()
// 打开和关闭索引
ElasticsearchApplicationTest.testOpenAndCloseIndex()
// 添加文档
ElasticsearchApplicationTest.testInsert()
// 主键ID获取文档
ElasticsearchApplicationTest.testGetIndex()
// 更新文档
ElasticsearchApplicationTest.testUpdate()
// 搜索
ElasticsearchApplicationTest.testQuery()
// 删除文档
ElasticsearchApplicationTest.testDel()
// 批处理1
ElasticsearchApplicationTest.testBulkRequest()
// 批处理2
ElasticsearchApplicationTest.testBulkProcessor()
```
================================================
FILE: SpringBoot-Custom-Elasticsearch-Starter/pom.xml
================================================
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.9.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<modelVersion>4.0.0</modelVersion>
<groupId>com.xiao.skywalking.demo</groupId>
<artifactId>SpringBoot-Custom-Elasticsearch-Starter</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>Custom ElasticSearch High Level Rest Client Stater</name>
<packaging>pom</packaging>
<modules>
<module>Custom-Elasticsearch-Starter-Autoconfig</module>
<module>Custom-Elasticsearch-Starter</module>
<module>Custom-Elasticsearch-Starter-Example</module>
</modules>
</project>
================================================
FILE: SpringBoot-Custom-Rest-Starter/Readme.md
================================================
Springboot Rest Template配置
1. 支持Ok Http和Http连接池模式,内嵌包装成HttClientService服务,并提供完成的请求日志处理
2. 引入pom:
```$xslt
<dependency>
<groupId>com.xiao.skywalking.demo</groupId>
<artifactId>SpringBoot-Custom-Rest-Autconfigure</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
```
3. Ok Http使用:
```$xslt
rest:
# okhttp 配置
okhttp:
enable: true
connection-timeout: 12000
read-timeout: 30000
write-timeout: 12000
```
4. Http pool使用:
```$xslt
rest
# http pool
pool:
enable: true
max-total: 20
default-max-per-route: 2
validate-after-inactivity: 2000
connect-timeout: 10000
connection-request-timeout: 10000
socket-timeout: 10000
```
5. 同步异步使用:
```$xslt
rest:
http:
service:
sync: true
async: false
```
6. 使用方式,推荐使用HttpClientService,因为提供了完整的日志记录:
```$xslt
// 使用包装http client
@Autowired
private HttpClientService httpClientService;
// 使用 resttemplate
@Autowired
private RestTemplate restTemplate;
```
7. HttpClientService日志处理,实现HttpRequestLogService接口
```$xslt
public class HttpLogServiceImpl implements HttpRequestLogService
{
/**
* [简要描述]:保存日志信息<br/>
* [详细描述]:<br/>
*
* @param requestLog :
* llxiao 2019/4/24 - 14:42
**/
@Override
public void saveRequestLog(HttpRequestLog requestLog)
{
// 日志输出
log.info("Example log : {}", JSONObject.toJSONString(requestLog));
}
}
```
================================================
FILE: SpringBoot-Custom-Rest-Starter/SpringBoot-Custom-Rest-Autconfigure/pom.xml
================================================
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>SpringBoot-Custom-Rest-Starter</artifactId>
<groupId>com.xiao.skywalking.demo</groupId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>SpringBoot-Custom-Rest-Autconfigure</artifactId>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<!--排除这个slf4j-log4j12-->
<exclusions>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework.retry</groupId>
<artifactId>spring-retry</artifactId>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-context</artifactId>
<scope>compile</scope>
<version>1.3.4.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency>
<!-- springboot 依赖 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-autoconfigure</artifactId>
</dependency>
<!-- 将被@ConfigurationProperties注解的类的属性注入到元数据 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.16.18</version>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.4</version>
</dependency>
<dependency>
<groupId>commons-collections</groupId>
<artifactId>commons-collections</artifactId>
<version>3.2.2</version>
</dependency>
<dependency>
<groupId>com.squareup.okhttp3</groupId>
<artifactId>okhttp</artifactId>
<version>3.11.0</version>
</dependency>
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>4.5.13</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.83</version>
</dependency>
</dependencies>
</project>
================================================
FILE: SpringBoot-Custom-Rest-Starter/SpringBoot-Custom-Rest-Autconfigure/src/main/java/com/xiao/custom/rest/starter/autoconfigure/config/RestTemplateConfiguration.java
================================================
package com.xiao.custom.rest.starter.autoconfigure.config;
import com.xiao.custom.rest.starter.autoconfigure.config.properties.HttpPoolProperties;
import com.xiao.custom.rest.starter.autoconfigure.config.properties.OkHttpProperties;
import com.xiao.custom.rest.starter.autoconfigure.interceptor.RestInterceptor;
import com.xiao.custom.rest.starter.autoconfigure.service.HttpClientService;
import com.xiao.custom.rest.starter.autoconfigure.service.impl.HttpClientAsyncServiceImpl;
import com.xiao.custom.rest.starter.autoconfigure.service.impl.HttpClientServiceImpl;
import com.xiao.custom.rest.starter.autoconfigure.service.impl.HttpRetryService;
import lombok.extern.slf4j.Slf4j;
import okhttp3.OkHttpClient;
import org.apache.http.client.config.RequestConfig;
import org.apache.http.config.Registry;
import org.apache.http.config.RegistryBuilder;
import org.apache.http.conn.socket.ConnectionSocketFactory;
import org.apache.http.conn.socket.PlainConnectionSocketFactory;
import org.apache.http.conn.ssl.NoopHostnameVerifier;
import org.apache.http.conn.ssl.SSLConnectionSocketFactory;
import org.apache.http.impl.client.HttpClientBuilder;
import org.apache.http.impl.conn.PoolingHttpClientConnectionManager;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.client.ClientHttpRequestFactory;
import org.springframework.http.client.HttpComponentsClientHttpRequestFactory;
import org.springframework.http.client.OkHttp3ClientHttpRequestFactory;
import org.springframework.http.converter.StringHttpMessageConverter;
import org.springframework.retry.annotation.EnableRetry;
import org.springframework.web.client.DefaultResponseErrorHandler;
import org.springframework.web.client.RestTemplate;
import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLSocketFactory;
import javax.net.ssl.TrustManager;
import javax.net.ssl.X509TrustManager;
import java.nio.charset.StandardCharsets;
import java.security.KeyManagementException;
import java.security.NoSuchAlgorithmException;
import java.util.Collections;
/**
* [简要描述]: 初始化rest template
* [详细描述]: 开启重试
*
* @author llxiao
* @version 1.0, 2019/11/30 10:43
* @since JDK 1.8
*/
@Configuration
@ComponentScan("com.xiao.custom.rest.starter.autoconfigure")
@Slf4j
@EnableRetry
public class RestTemplateConfiguration
{
/**
* [简要描述]:okHttp支持<br/>
* [详细描述]:<br/>
*
* @param okHttpProperties :
* @return org.springframework.http.client.ClientHttpRequestFactory
* xiaolinlin 2020/1/16 - 18:43
**/
@Bean
@ConditionalOnProperty(value = "rest.okhttp.enable", havingValue = "true")
@ConditionalOnMissingBean(ClientHttpRequestFactory.class)
public ClientHttpRequestFactory okHttpHttpRequestFactory(OkHttpProperties okHttpProperties)
{
log.info("Init request factory for okHttp!");
OkHttp3ClientHttpRequestFactory clientHttpRequestFactory = new OkHttp3ClientHttpRequestFactory(buildOkHttpsClient()
.build());
//连接超时
clientHttpRequestFactory.setConnectTimeout(okHttpProperties.getConnectionTimeout());
//读超时
clientHttpRequestFactory.setReadTimeout(okHttpProperties.getReadTimeout());
//写超时
clientHttpRequestFactory.setWriteTimeout(okHttpProperties.getWriteTimeout());
return clientHttpRequestFactory;
}
/**
* [简要描述]:http pool支持<br/>
* [详细描述]:<br/>
*
* @param httpPoolProperties :
* @return org.springframework.http.client.ClientHttpRequestFactory
* xiaolinlin 2020/1/16 - 18:43
**/
@Bean
@ConditionalOnProperty(value = "rest.pool.enable", havingValue = "true")
@ConditionalOnMissingBean(ClientHttpRequestFactory.class)
public ClientHttpRequestFactory httpPoolRequestFactory(HttpPoolProperties httpPoolProperties)
{
log.info("Init request factory for http pool");
SSLConnectionSocketFactory socketFactory = null;
SSLContext sslContext = buildSslContext();
if (null != sslContext)
{
socketFactory = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);
}
else
{
socketFactory = SSLConnectionSocketFactory.getSocketFactory();
}
Registry<ConnectionSocketFactory> registry = RegistryBuilder.<ConnectionSocketFactory>create()
.register("http", PlainConnectionSocketFactory.getSocketFactory()).register("https", socketFactory)
.build();
PoolingHttpClientConnectionManager connectionManager = new PoolingHttpClientConnectionManager(registry);
connectionManager.setMaxTotal(httpPoolProperties.getMaxTotal());
connectionManager.setDefaultMaxPerRoute(httpPoolProperties.getDefaultMaxPerRoute());
connectionManager.setValidateAfterInactivity(httpPoolProperties.getValidateAfterInactivity());
RequestConfig requestConfig = RequestConfig.custom()
//服务器返回数据(response)的时间,超过抛出read timeout
.setSocketTimeout(httpPoolProperties.getSocketTimeout())
//连接上服务器(握手成功)的时间,超出抛出connect timeout
.setConnectTimeout(httpPoolProperties.getConnectTimeout())
//从连接池中获取连接的超时时间,超时间未拿到可用连接,会抛出org.apache.http.conn.ConnectionPoolTimeoutException: Timeout waiting for connection from pool
.setConnectionRequestTimeout(httpPoolProperties.getConnectionRequestTimeout()).build();
return new HttpComponentsClientHttpRequestFactory(HttpClientBuilder.create()
.setDefaultRequestConfig(requestConfig).setConnectionManager(connectionManager).build());
}
/**
* [简要描述]:RestTemplate<br/>
* [详细描述]:<br/>
*
* @param clientHttpRequestFactory :
* @return org.springframework.web.client.RestTemplate
* xiaolinlin 2020/1/16 - 18:47
**/
@Bean
@ConditionalOnMissingBean(RestTemplate.class)
public RestTemplate restTemplate(ClientHttpRequestFactory clientHttpRequestFactory)
{
log.info("Init rest template!");
RestTemplate restTemplate = new RestTemplate();
restTemplate.getMessageConverters().set(1, new StringHttpMessageConverter(StandardCharsets.UTF_8));
restTemplate.setRequestFactory(clientHttpRequestFactory);
restTemplate.setErrorHandler(new DefaultResponseErrorHandler());
// 拦截
restTemplate.setInterceptors(Collections.singletonList(new RestInterceptor()));
return restTemplate;
}
/**
* [简要描述]:集成重试机制<br/>
* [详细描述]:<br/>
*
* @param restTemplate :
* @return com.purcotton.omni.rest.stater.common.service.impl.HttpRetryService
* xiaolinlin 2020/1/16 - 18:47
**/
@Bean
public HttpRetryService retryService(RestTemplate restTemplate)
{
log.info("Init http retry support!");
return new HttpRetryService(restTemplate);
}
/**
* [简要描述]:http 同步服务<br/>
* [详细描述]:<br/>
*
* @param retryService: 支持重试请求
* @return com.purcotton.omni.rest.stater.common.service.HttpClientService
* xiaolinlin 2020/1/16 - 18:48
**/
@Bean
@ConditionalOnProperty(value = "rest.http.service.sync", havingValue = "true")
@ConditionalOnMissingBean(HttpClientService.class)
public HttpClientService httpClientService(HttpRetryService retryService)
{
log.info("Use sync http client service!");
return new HttpClientServiceImpl(retryService);
}
/**
* [简要描述]:http 异步服务<br/>
* [详细描述]:<br/>
*
* @param retryService : 支持重试请求
* @return com.purcotton.omni.rest.stater.common.service.HttpClientService
* xiaolinlin 2020/1/16 - 18:48
**/
@Bean
@ConditionalOnProperty(value = "rest.http.service.async", havingValue = "true")
@ConditionalOnMissingBean(HttpClientService.class)
public HttpClientService asyncHttpClientService(HttpRetryService retryService)
{
log.info("User async http client service!");
return new HttpClientAsyncServiceImpl(retryService);
}
/**
* [简要描述]:okhttp3 跳过https验证<br/>
* [详细描述]:<br/>
*
* @return okhttp3.OkHttpClient.Builder
* xiaolinlin 2020/1/4 - 10:31
**/
private OkHttpClient.Builder buildOkHttpsClient()
{
OkHttpClient.Builder builder = new OkHttpClient.Builder();
TrustManager[] trustAllCerts = buildTrustManagers();
SSLContext sslContext = buildSslContext();
if (null != sslContext && null != trustAllCerts)
{
final SSLSocketFactory sslSocketFactory = sslContext.getSocketFactory();
builder.sslSocketFactory(sslSocketFactory, (X509TrustManager) trustAllCerts[0]);
}
builder.hostnameVerifier((hostname, session) -> true);
return builder;
}
private SSLContext buildSslContext()
{
TrustManager[] trustAllCerts = buildTrustManagers();
SSLContext sslContext = null;
try
{
sslContext = SSLContext.getInstance("SSL");
sslContext.init(null, trustAllCerts, new java.security.SecureRandom());
}
catch (NoSuchAlgorithmException | KeyManagementException e)
{
log.error("Init SSLContext error :\n", e);
}
return sslContext;
}
private TrustManager[] buildTrustManagers()
{
return new TrustManager[] { new X509TrustManager()
{
@Override
public void checkClientTrusted(java.security.cert.X509Certificate[] chain, String authType)
{
}
@Override
public void checkServerTrusted(java.security.cert.X509Certificate[] chain, String authType)
{
}
@Override
public java.security.cert.X509Certificate[] getAcceptedIssuers()
{
return new java.security.cert.X509Certificate[] {};
}
}
};
}
}
================================================
FILE: SpringBoot-Custom-Rest-Starter/SpringBoot-Custom-Rest-Autconfigure/src/main/java/com/xiao/custom/rest/starter/autoconfigure/config/properties/HttpPoolProperties.java
================================================
package com.xiao.custom.rest.starter.autoconfigure.config.properties;
import lombok.Data;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
/**
* [简要描述]: http 连接池参数配置
* [详细描述]:
*
* @author llxiao
* @version 1.0, 2019/11/30 11:09
* @since JDK 1.8
*/
@Component
@ConfigurationProperties(prefix = "rest.pool")
@ConditionalOnProperty(value = "rest.pool.enable", havingValue = "true")
@Data
public class HttpPoolProperties
{
private boolean enable;
/**
* 最大连接数
*/
private Integer maxTotal = 20;
/**
* 最大路由数
*/
private Integer defaultMaxPerRoute = 2;
/**
* 连接超时时间
*/
private Integer connectTimeout = 5000;
/**
* 请求超时时间
*/
private Integer connectionRequestTimeout = 1000;
/**
* socket超时时间
*/
private Integer socketTimeout = 6500;
/**
* 校验时间
*/
private Integer validateAfterInactivity = 2000;
}
================================================
FILE: SpringBoot-Custom-Rest-Starter/SpringBoot-Custom-Rest-Autconfigure/src/main/java/com/xiao/custom/rest/starter/autoconfigure/config/properties/OkHttpProperties.java
================================================
package com.xiao.custom.rest.starter.autoconfigure.config.properties;
import lombok.Data;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
/**
* [简要描述]: ok http 参数配置
* [详细描述]:
*
* @author llxiao
* @version 1.0, 2019/11/30 11:09
* @since JDK 1.8
*/
@Component
@ConfigurationProperties("rest.okhttp")
@ConditionalOnProperty(value = "rest.okhttp.enable", havingValue = "true")
@Data
public class OkHttpProperties
{
private boolean enable;
/**
* 连接超时时间
*/
private int connectionTimeout = 12000;
/**
* 读超时时间
*/
private int readTimeout = 300000;
/**
* 写超时时间
*/
private int writeTimeout = 120000;
}
================================================
FILE: SpringBoot-Custom-Rest-Starter/SpringBoot-Custom-Rest-Autconfigure/src/main/java/com/xiao/custom/rest/starter/autoconfigure/dto/Request.java
================================================
package com.xiao.custom.rest.starter.autoconfigure.dto;
import lombok.Data;
import org.springframework.http.HttpHeaders;
/**
* [简要描述]:
* [详细描述]:
*
* @author llxiao
* @version 1.0, 2019/4/24 13:48
* @since JDK 1.8
*/
@Data
public class Request
{
public static final int POST = 0;
public static final int JSON = 1;
/**
* 请求uri
*/
private String uri;
/**
* 返回值类型
*/
private Class responseType;
/**
* 请求参数
*/
private Object params;
/**
* 执行方式:0普通请求,1.JSON请求
*/
private int method;
/**
* 执行请求的ID,用于重复请求更新操作
*/
private Long requestId;
/**
* 自定义请求头
*/
private HttpHeaders headers;
/**
* url变量
*/
private Object uriVariables;
}
================================================
FILE: SpringBoot-Custom-Rest-Starter/SpringBoot-Custom-Rest-Autconfigure/src/main/java/com/xiao/custom/rest/starter/autoconfigure/interceptor/RestInterceptor.java
================================================
package com.xiao.custom.rest.starter.autoconfigure.interceptor;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.xiao.custom.rest.starter.autoconfigure.log.dto.HttpRequestLog;
import com.xiao.custom.rest.starter.autoconfigure.util.ThreadLocalUtil;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpRequest;
import org.springframework.http.client.ClientHttpRequestExecution;
import org.springframework.http.client.ClientHttpRequestInterceptor;
import org.springframework.http.client.ClientHttpResponse;
import org.springframework.http.client.support.HttpRequestWrapper;
import java.io.IOException;
import java.sql.Timestamp;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* [简要描述]: restTemplate 拦截
* [详细描述]:
*
* @author llxiao
* @version 1.0, 2019/4/23 16:47
* @since JDK 1.8
*/
@Slf4j
public class RestInterceptor implements ClientHttpRequestInterceptor
{
/**
* Intercept the given request, and return a response. The given {@link ClientHttpRequestExecution} allows
* the interceptor to pass on the request and response to the next entity in the chain.
*
* <p>A typical implementation of this method would follow the following pattern:
* <ol>
* <li>Examine the {@linkplain HttpRequest request} and body</li>
* <li>Optionally {@linkplain HttpRequestWrapper wrap} the request to filter HTTP attributes.</li>
* <li>Optionally modify the body of the request.</li>
* <li><strong>Either</strong>
* <ul>
* <li>execute the request using {@link ClientHttpRequestExecution#execute(HttpRequest, byte[])},</li>
* <strong>or</strong>
* <li>do not execute the request to block the execution altogether.</li>
* </ul>
* <li>Optionally wrap the response to filter HTTP attributes.</li>
* </ol>
*
* @param request the request, containing method, URI, and headers
* @param body the body of the request
* @param execution the request execution
* @return the response
* @exception IOException in case of I/O errors
*/
@Override
public ClientHttpResponse intercept(HttpRequest request, byte[] body, ClientHttpRequestExecution execution)
throws IOException
{
HttpRequestLog requestLog = (HttpRequestLog) ThreadLocalUtil.get(HttpRequestLog.REQUEST_LOG);
if (null != requestLog)
{
requestLog.setMethod(request.getMethod().name());
requestLog.setHeader(JSONObject.toJSONString(this.filtrationHeaders(request.getHeaders())));
requestLog.setRequestTime(new Timestamp(System.currentTimeMillis()));
}
ClientHttpResponse response = execution.execute(request, body);
if (null != requestLog)
{
requestLog.setHttpStatus(response.getStatusCode().value());
requestLog.setResponseTime(new Timestamp(System.currentTimeMillis()));
}
return response;
}
private Map<String, Object> filtrationHeaders(HttpHeaders httpHeaders)
{
Map<String, Object> logMap = null;
if (null != httpHeaders)
{
logMap = new HashMap<>();
Map<String, List<String>> headerMap = (Map<String, List<String>>) JSONArray.toJSON(httpHeaders);
for (Map.Entry<String, List<String>> stringListEntry : headerMap.entrySet())
{
if (StringUtils.isNotBlank(stringListEntry.getKey()) && CollectionUtils
.isNotEmpty(stringListEntry.getValue()))
{
logMap.put(stringListEntry.getKey(), stringListEntry.getValue());
}
}
}
return logMap;
}
}
================================================
FILE: SpringBoot-Custom-Rest-Starter/SpringBoot-Custom-Rest-Autconfigure/src/main/java/com/xiao/custom/rest/starter/autoconfigure/log/annotation/RequestLog.java
================================================
package com.xiao.custom.rest.starter.autoconfigure.log.annotation;
import java.lang.annotation.*;
import static java.lang.annotation.RetentionPolicy.RUNTIME;
/**
* [简要描述]: 请HTTP求日志注解
* [详细描述]:
* Retention 注解会在class字节码文件中存在,在运行时可以通过反射获取到
* Inherited 说明子类可以继承父类中的该注解
* Target 既可以在方法上,也可以在类上
* Documented说明该注解将被包含在javadoc中
*
* @author llxiao
* @version 1.0, 2019/4/24 11:40
* @since JDK 1.8
*/
@Retention(RUNTIME)
@Inherited
@Target(ElementType.METHOD)
@Documented
public @interface RequestLog
{
String value() default "";
}
================================================
FILE: SpringBoot-Custom-Rest-Starter/SpringBoot-Custom-Rest-Autconfigure/src/main/java/com/xiao/custom/rest/starter/autoconfigure/log/annotation/RequestLogAspect.java
================================================
package com.xiao.custom.rest.starter.autoconfigure.log.annotation;
import com.alibaba.fastjson.JSONObject;
import com.xiao.custom.rest.starter.autoconfigure.dto.Request;
import com.xiao.custom.rest.starter.autoconfigure.log.dto.HttpRequestLog;
import com.xiao.custom.rest.starter.autoconfigure.log.service.HttpRequestLogService;
import com.xiao.custom.rest.starter.autoconfigure.util.ThreadLocalUtil;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Pointcut;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.sql.Timestamp;
/**
* [简要描述]: 请求日志切面
* [详细描述]:
*
* @author llxiao
* @version 1.0, 2019/4/24 11:39
* @since JDK 1.8
*/
@Aspect
@Component
@Slf4j
public class RequestLogAspect
{
/**
* 请求响应最大长度
*/
private static final int MAX_PARAMS_LENGTH = 256;
/**
* 日志服务
*/
@Autowired(required = false)
private HttpRequestLogService httpRequestLogService;
/**
* [简要描述]:定义一个annotation切入点<br/>
* [详细描述]:切入点<br/>
* llxiao 2018/9/2 - 17:02
**/
@Pointcut("@annotation(com.xiao.custom.rest.starter.autoconfigure.log.annotation.RequestLog)")
public void logAnnotatison()
{
}
/**
* [简要描述]:around 切面强化<br/>
* [详细描述]:<br/>
*
* @param joinPoint :
* @return Object
* llxiao 2019/11/27 - 19:10
**/
@Around("logAnnotatison()")
public Object execute(ProceedingJoinPoint joinPoint) throws Throwable
{
HttpRequestLog requestLog = null;
Object retrunobj = null;
Object[] args = joinPoint.getArgs();
if (args.length > 0)
{
Object params = args[0];
if (params instanceof Request)
{
Request request = (Request) params;
Long requestId = request.getRequestId();
if (null == requestId)
{
requestLog = new HttpRequestLog();
requestLog.setCreateTime(new Timestamp(System.currentTimeMillis()));
requestLog.setRequest(subParams(JSONObject.toJSONString(request)));
requestLog.setUri(request.getUri());
requestLog.setParams(subParams(JSONObject.toJSONString(request.getParams())));
requestLog.setResponseType(request.getResponseType().getName());
}
ThreadLocalUtil.put(HttpRequestLog.REQUEST_LOG, requestLog);
}
}
try
{
retrunobj = joinPoint.proceed(args);
if (null != requestLog)
{
requestLog.setResponse(subParams(JSONObject.toJSONString(retrunobj)));
}
}
catch (Throwable e)
{
if (null != requestLog)
{
requestLog.setErrorMsg(e.getMessage());
}
log.error("Http 请求执行错误: ", e);
throw e;
}
finally
{
//删除当前线程保存数据,防止内存溢出
ThreadLocalUtil.remove();
if (null != httpRequestLogService)
{
httpRequestLogService.saveRequestLog(requestLog);
}
// else
// {
// log.info("Http 执行日志:{}", JSONObject.toJSONString(requestLog));
// }
}
return retrunobj;
}
/**
* [简要描述]:参数截取,参数太长超过2000直接用*号代替<br/>
* [详细描述]:<br/>
*
* @param toJsonString :
* @return java.lang.String
* llxiao 2019/8/8 - 11:43
**/
private String subParams(String toJsonString)
{
String params = "";
if (StringUtils.isNotEmpty(toJsonString))
{
if (toJsonString.length() > MAX_PARAMS_LENGTH)
{
params = toJsonString.substring(0, MAX_PARAMS_LENGTH);
}
else
{
params = toJsonString;
}
}
return params;
}
}
================================================
FILE: SpringBoot-Custom-Rest-Starter/SpringBoot-Custom-Rest-Autconfigure/src/main/java/com/xiao/custom/rest/starter/autoconfigure/log/dto/HttpRequestLog.java
================================================
package com.xiao.custom.rest.starter.autoconfigure.log.dto;
import lombok.Data;
import java.sql.Timestamp;
/**
* [简要描述]: 请求日志,以此来做请求补偿,请求日志记录等等
* [详细描述]:
*
* @author llxiao
* @version 1.0, 2019/4/24 10:00
* @since JDK 1.8
*/
@Data
public class HttpRequestLog
{
public static final String REQUEST_LOG = "HttpRequestLog";
/**
* 主键ID
*/
private Long id;
/**
* 请求Url
*/
private String uri;
/**
* 请求方式
*/
private String method;
/**
* JSON键值对header
*/
private String header;
/**
* 请求参数,JSON数据
*/
private String params;
/**
* 响应参数,JSON数据
*/
private String response;
/**
* 响应参数需要转换的类型
*/
private String responseType;
/**
* http状态
*/
private int httpStatus;
/**
* 请求最终状态
*/
private int status;
/**
* 尝试次数
*/
private int tryNum;
/**
* 整个请求request-JSON串
*/
private String request;
/**
* 错误消息
*/
private String errorMsg;
/**
* 请求时间
*/
private Timestamp requestTime;
/**
* 响应时间
*/
private Timestamp responseTime;
private Timestamp createTime;
private Timestamp updateTime;
}
================================================
FILE: SpringBoot-Custom-Rest-Starter/SpringBoot-Custom-Rest-Autconfigure/src/main/java/com/xiao/custom/rest/starter/autoconfigure/log/service/HttpRequestLogService.java
================================================
package com.xiao.custom.rest.starter.autoconfigure.log.service;
import com.xiao.custom.rest.starter.autoconfigure.log.dto.HttpRequestLog;
/**
* [简要描述]: http 请求日志记录
* [详细描述]:
*
* @author llxiao
* @version 1.0, 2019/11/29 15:33
* @since JDK 1.8
*/
public interface HttpRequestLogService
{
/**
* [简要描述]:保存日志信息<br/>
* [详细描述]:<br/>
*
* @param requestLog :
* llxiao 2019/4/24 - 14:42
**/
void saveRequestLog(HttpRequestLog requestLog);
}
================================================
FILE: SpringBoot-Custom-Rest-Starter/SpringBoot-Custom-Rest-Autconfigure/src/main/java/com/xiao/custom/rest/starter/autoconfigure/service/HttpClientService.java
================================================
package com.xiao.custom.rest.starter.autoconfigure.service;
import com.xiao.custom.rest.starter.autoconfigure.dto.Request;
import org.springframework.http.ResponseEntity;
/**
* [简要描述]: http服务
* [详细描述]:
*
* @author llxiao
* @version 1.0, 2019/4/23 19:53
* @since JDK 1.8
*/
public interface HttpClientService
{
/**
* [简要描述]:发起post请求<br/>
* [详细描述]:<br/>
*
* @param request : 请求参数
* @return T
* llxiao 2019/4/23 - 19:56
**/
<T> T doForObject(Request request);
<T> T doRequest(Request request);
<T> T getForObject(Request request);
/**
* [简要描述]:formdata 获取请求Response<br/>
* [详细描述]:<br/>
*
* @param request :
* @return org.springframework.http.ResponseEntity<T>
* llxiao 2019/8/26 - 16:33
**/
<T> ResponseEntity<T> postFormData(Request request);
}
================================================
FILE: SpringBoot-Custom-Rest-Starter/SpringBoot-Custom-Rest-Autconfigure/src/main/java/com/xiao/custom/rest/starter/autoconfigure/service/impl/HttpClientAsyncServiceImpl.java
================================================
package com.xiao.custom.rest.starter.autoconfigure.service.impl;
import com.alibaba.fastjson.JSONObject;
import com.xiao.custom.rest.starter.autoconfigure.dto.Request;
import com.xiao.custom.rest.starter.autoconfigure.log.annotation.RequestLog;
import com.xiao.custom.rest.starter.autoconfigure.service.HttpClientService;
import com.xiao.custom.rest.starter.autoconfigure.util.RequestValidatorParamsUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.http.ResponseEntity;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutionException;
/**
* [简要描述]: CompletableFuture实现http异步服务
* [详细描述]:
*
* @author llxiao
* @version 1.0, 2019/4/24 09:25
* @since JDK 1.8
*/
@Slf4j
public class HttpClientAsyncServiceImpl implements HttpClientService
{
private HttpClientServiceImpl httpClientService;
public HttpClientAsyncServiceImpl(HttpRetryService retryService)
{
this.httpClientService = new HttpClientServiceImpl(retryService);
}
/**
* [简要描述]: 发起post请求<br/>
* [详细描述]: @Retryable默认重试 等待2000ms 3次
*
* @param request : 请求参数
* @return T
* llxiao 2019/4/23 - 19:56
**/
@Override
@RequestLog
public <T> T doForObject(Request request)
{
if (RequestValidatorParamsUtil.validateParams(request))
{
return null;
}
CompletableFuture<T> tCompletableFuture = CompletableFuture
.supplyAsync(() -> httpClientService.doForObject(request));
return futureResult(tCompletableFuture, request);
}
@Override
@RequestLog
public <T> T doRequest(Request request)
{
if (RequestValidatorParamsUtil.validateParams(request))
{
return null;
}
CompletableFuture<T> tCompletableFuture = CompletableFuture
.supplyAsync(() -> httpClientService.doRequest(request));
return futureResult(tCompletableFuture, request);
}
/**
* [简要描述]: 不进行encode编码的get请求
* [详细描述]: 请求参数中的url必须进行手动encode编码
*
* @param request : 请求参数
* @return T
* mjye 2019/10/23 - 11:32
**/
@Override
@RequestLog
public <T> T getForObject(Request request)
{
if (RequestValidatorParamsUtil.validateParams(request))
{
return null;
}
CompletableFuture<T> future = CompletableFuture.supplyAsync(() -> httpClientService.doForObject(request));
return futureResult(future, request);
}
/**
* [简要描述]:formdata 获取请求Response<br/>
* [详细描述]:<br/>
*
* @param request :
* @return org.springframework.http.ResponseEntity<T>
* llxiao 2019/8/26 - 16:33
**/
@Override
@RequestLog
public <T> ResponseEntity<T> postFormData(Request request)
{
if (RequestValidatorParamsUtil.validateParams(request))
{
return null;
}
CompletableFuture<ResponseEntity<T>> completableFuture = CompletableFuture
.supplyAsync(() -> httpClientService.postFormData(request));
return futureResult(completableFuture, request);
}
private <T> T futureResult(CompletableFuture<T> tCompletableFuture, Request request)
{
try
{
return tCompletableFuture.get();
}
catch (InterruptedException e)
{
log.error("请求参数:{}", JSONObject.toJSONString(request));
log.error("Http异步请求线程中断:", e);
}
catch (ExecutionException e)
{
log.error("请求参数:{}", JSONObject.toJSONString(request));
log.error("Http异步请求异常:", e);
}
return null;
}
}
================================================
FILE: SpringBoot-Custom-Rest-Starter/SpringBoot-Custom-Rest-Autconfigure/src/main/java/com/xiao/custom/rest/starter/autoconfigure/service/impl/HttpClientServiceImpl.java
================================================
package com.xiao.custom.rest.starter.autoconfigure.service.impl;
import com.alibaba.fastjson.JSONObject;
import com.xiao.custom.rest.starter.autoconfigure.dto.Request;
import com.xiao.custom.rest.starter.autoconfigure.log.annotation.RequestLog;
import com.xiao.custom.rest.starter.autoconfigure.service.HttpClientService;
import com.xiao.custom.rest.starter.autoconfigure.util.RequestValidatorParamsUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpHeaders;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.util.LinkedMultiValueMap;
import org.springframework.util.MultiValueMap;
import java.util.Map;
/**
* [简要描述]: http同步阻塞服务
* [详细描述]:
*
* @author llxiao
* @version 1.0, 2019/4/24 09:25
* @since JDK 1.8
*/
@Slf4j
public class HttpClientServiceImpl implements HttpClientService
{
private static final String JSON_UTF_8 = "application/json; charset=UTF-8";
private static final String HEADER_ACCEPT = "Accept";
/**
* 带重试机制
*/
private HttpRetryService retryService;
public HttpClientServiceImpl(HttpRetryService retryService)
{
this.retryService = retryService;
}
/**
* [简要描述]: 发起post请求<br/>
* [详细描述]: @Retryable默认重试 等待1000ms 3次
*
* @param request : 请求参数
* @return T
* llxiao 2019/4/23 - 19:56
**/
@Override
@RequestLog
public <T> T doForObject(Request request)
{
if (RequestValidatorParamsUtil.validateParams(request))
{
return null;
}
T entity = null;
if (null != request)
{
String uri = request.getUri();
Object params = request.getParams();
int method = request.getMethod();
Class responseType = request.getResponseType();
HttpHeaders headers = request.getHeaders();
Object uriVariables = request.getUriVariables();
if (Request.POST == method)
{
entity = retryService.postForObject(uri, params, responseType, uriVariables);
}
else if (Request.JSON == method)
{
if (null == headers)
{
headers = new HttpHeaders();
}
headers.setContentType(MediaType.parseMediaType(JSON_UTF_8));
headers.add(HEADER_ACCEPT, MediaType.APPLICATION_JSON.toString());
HttpEntity<String> formEntity = new HttpEntity<>(JSONObject.toJSONString(params), headers);
entity = retryService.postForObject(uri, formEntity, responseType, uriVariables);
}
else
{
log.error("当期请求暂不支持的操作,请求参数:{}", JSONObject.toJSONString(request));
}
}
return entity;
}
/**
* [简要描述]:普通HTTP请求<br/>
* [详细描述]:喆道对接在使用<br/>
*
* @param request :
* @return T
* xiaolinlin 2020/1/16 - 18:38
**/
@Override
@RequestLog
public <T> T doRequest(Request request)
{
if (RequestValidatorParamsUtil.validateParams(request))
{
return null;
}
return retryService.doRequest(request.getUri(), request.getParams(), request.getResponseType());
}
/**
* [简要描述]: 不进行encode编码的get请求
* [详细描述]: 请求参数中的url必须进行手动encode编码
*
* @param request : 请求参数
* @return T
* mjye 2019/10/23 - 11:32
**/
@Override
@RequestLog
public <T> T getForObject(Request request)
{
if (RequestValidatorParamsUtil.validateParams(request))
{
return null;
}
return retryService.getForObject(request.getUri(), request.getHeaders(), request.getResponseType());
}
/**
* [简要描述]:formdata 获取请求Response<br/>
* [详细描述]:<br/>
*
* @param request :
* @return org.springframework.http.ResponseEntity<T>
* llxiao 2019/8/26 - 16:33
**/
@Override
@RequestLog
public <T> ResponseEntity<T> postFormData(Request request)
{
if (RequestValidatorParamsUtil.validateParams(request))
{
return null;
}
HttpEntity httpEntity = null;
Object params = request.getParams();
// 请求参数为httpEntity直接发送请求
if (params instanceof HttpEntity)
{
httpEntity = (HttpEntity) params;
}
// 需要重新组装 HttpEntity
else if (params instanceof MultiValueMap)
{
MultiValueMap multiValueMap = (MultiValueMap) params;
httpEntity = new HttpEntity<>(multiValueMap, request.getHeaders());
}
else if (params instanceof Map)
{
Map<String, String> parmasMap = (Map<String, String>) params;
MultiValueMap<String, String> multiValueMap = new LinkedMultiValueMap<>();
for (Map.Entry<String, String> entry : parmasMap.entrySet())
{
multiValueMap.add(entry.getKey(), entry.getValue());
}
httpEntity = new HttpEntity<>(multiValueMap, request.getHeaders());
}
else
{
log.error("当亲请求暂不支持的操作请求,请求数据:{}", JSONObject.toJSONString(request));
}
if (null != httpEntity)
{
return retryService.postFormData(httpEntity, request.getUri(), request.getResponseType());
}
else
{
log.error("请求异常,无法识别请求数据,请求数据:{}", JSONObject.toJSONString(request));
return null;
}
}
}
================================================
FILE: SpringBoot-Custom-Rest-Starter/SpringBoot-Custom-Rest-Autconfigure/src/main/java/com/xiao/custom/rest/starter/autoconfigure/service/impl/HttpRetryService.java
================================================
package com.xiao.custom.rest.starter.autoconfigure.service.impl;
import org.apache.commons.lang3.StringUtils;
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpMethod;
import org.springframework.http.ResponseEntity;
import org.springframework.retry.annotation.Backoff;
import org.springframework.retry.annotation.Retryable;
import org.springframework.web.client.RestTemplate;
import org.springframework.web.util.UriComponentsBuilder;
import java.net.SocketTimeoutException;
/**
* [简要描述]: 重试不能使用接口实现类
* [详细描述]:
* 重试机制注解说明(https://blog.csdn.net/u011116672/article/details/77823867):
* EnableRetry注解:
* 能否重试,proxyTargetClass属性为true时(默认false),使用CGLIB代理
* <p>
* Retryable注解:注解需要被重试的方法
* include 指定处理的异常类。默认为空
* exclude指定不需要处理的异常。默认为空
* vaue指定要重试的异常。默认为空
* maxAttempts 最大重试次数。默认3次
* backoff 重试等待策略。默认使用@Backoff注解
* <p>
* Backoff注解:重试回退策略(立即重试还是等待一会再重试)
* 不设置参数时,默认使用FixedBackOffPolicy,重试等待1000ms
* 只设置delay()属性时,使用FixedBackOffPolicy,重试等待指定的毫秒数
* 当设置delay()和maxDealy()属性时,重试等待在这两个值之间均态分布
* 使用delay(),maxDealy()和multiplier()属性时,使用ExponentialBackOffPolicy
* 当设置multiplier()属性不等于0时,同时也设置了random()属性时,使用ExponentialRandomBackOffPolicy
* <p>
* Recover注解: 用于方法。
* 用于@Retryable失败时的“兜底”处理方法。 @Recover注释的方法必须要与@Retryable注解的方法“签名”保持一致,第一入参为要重试的异常,其他参数与@Retryable保持一致,返回值也要一样,否则无法执行!
* <p>
* CircuitBreaker注解:用于方法,实现熔断模式。
* include 指定处理的异常类。默认为空
* exclude指定不需要处理的异常。默认为空
* vaue指定要重试的异常。默认为空
* maxAttempts 最大重试次数。默认3次
* openTimeout 配置熔断器打开的超时时间,默认5s,当超过openTimeout之后熔断器电路变成半打开状态(只要有一次重试成功,则闭合电路)
* resetTimeout 配置熔断器重新闭合的超时时间,默认20s,超过这个时间断路器关闭
*
* @author xiaolinlin
* @version 1.0, 2020/1/16 17:45
* @since JDK 1.8
*/
public class HttpRetryService
{
private RestTemplate restTemplate;
public HttpRetryService(RestTemplate restTemplate)
{
this.restTemplate = restTemplate;
}
/**
* [简要描述]:发起post请求<br/>
* [详细描述]:<br/>
*
* @param uri :
* @param params :
* @param responseType :
* @param uriVariables :
* @return T
* xiaolinlin 2020/1/16 - 18:20
**/
@Retryable(value = SocketTimeoutException.class, maxAttempts = 3, backoff = @Backoff(delay = 2000, multiplier = 1.5))
public <T> T postForObject(String uri, Object params, Class responseType, Object uriVariables)
{
if (StringUtils.isNotBlank(uri) && null != params && null != responseType)
{
ResponseEntity<T> responseEntity = restTemplate.postForEntity(uri, params, responseType, uriVariables);
return null == responseEntity ? null : responseEntity.getBody();
}
return null;
}
/**
* [简要描述]:formdata 获取请求Response<br/>
* [详细描述]:<br/>
*
* @param httpEntity :
* @param uri :
* @param responseType :
* @return org.springframework.http.ResponseEntity<T>
* xiaolinlin 2020/1/16 - 18:27
**/
@Retryable(value = SocketTimeoutException.class, maxAttempts = 3, backoff = @Backoff(delay = 2000, multiplier = 1.5))
public <T> ResponseEntity<T> postFormData(HttpEntity httpEntity, String uri, Class responseType)
{
if (null != httpEntity && StringUtils.isNotBlank(uri) && null != responseType)
{
return restTemplate.postForEntity(uri, httpEntity, responseType);
}
return null;
}
/**
* [简要描述]:不进行encode编码的get请求<br/>
* [详细描述]:<br/>
*
* @param uri :
* @param headers :
* @param responseType :
* @return T
* xiaolinlin 2020/1/16 - 18:33
**/
@Retryable(value = SocketTimeoutException.class, maxAttempts = 3, backoff = @Backoff(delay = 2000, multiplier = 1.5))
public <T> T getForObject(String uri, HttpHeaders headers, Class responseType)
{
if (StringUtils.isNotBlank(uri) && null != responseType)
{
HttpEntity<String> requestEntity = null;
if (null != headers)
{
requestEntity = new HttpEntity<>(null, headers);
}
UriComponentsBuilder builder = UriComponentsBuilder.fromHttpUrl(uri);
ResponseEntity<T> resEntity = restTemplate
.exchange(builder.build(true).toUri(), HttpMethod.GET, requestEntity, responseType);
return resEntity.getBody();
}
return null;
}
/**
* [简要描述]:普通post请求<br/>
* [详细描述]:<br/>
*
* @param uri :
* @param params :
* @param responseType :
* @return T
* xiaolinlin 2020/1/16 - 18:37
**/
@Retryable(value = SocketTimeoutException.class, maxAttempts = 3, backoff = @Backoff(delay = 2000, multiplier = 1.5))
public <T> T doRequest(String uri, Object params, Class responseType)
{
if (StringUtils.isNotBlank(uri) && null != params && null != responseType)
{
return (T) restTemplate.postForObject(uri, params, responseType);
}
return null;
}
}
================================================
FILE: SpringBoot-Custom-Rest-Starter/SpringBoot-Custom-Rest-Autconfigure/src/main/java/com/xiao/custom/rest/starter/autoconfigure/util/RequestValidatorParamsUtil.java
================================================
package com.xiao.custom.rest.starter.autoconfigure.util;
import com.alibaba.fastjson.JSONObject;
import com.xiao.custom.rest.starter.autoconfigure.dto.Request;
import lombok.extern.slf4j.Slf4j;
import org.springframework.util.StringUtils;
/**
* [简要描述]:
* [详细描述]:
*
* @author xiaolinlin
* @version 1.0, 2020/1/16 15:47
* @since JDK 1.8
*/
@Slf4j
public class RequestValidatorParamsUtil
{
public static boolean validateParams(Request request)
{
if (null == request || StringUtils.isEmpty(request.getUri()) || null == request.getResponseType())
{
log.error("请求参数不能为空:{}", null == request ? "Request is null!" : JSONObject.toJSONString(request));
return true;
}
return false;
}
}
================================================
FILE: SpringBoot-Custom-Rest-Starter/SpringBoot-Custom-Rest-Autconfigure/src/main/java/com/xiao/custom/rest/starter/autoconfigure/util/ThreadLocalUtil.java
================================================
package com.xiao.custom.rest.starter.autoconfigure.util;
import java.util.HashMap;
import java.util.Map;
/**
* [简要描述]: ThreadLocalUtil
* [详细描述]:
*
* @author llxiao
* @version 1.0, 2019/4/24 09:25
* @since JDK 1.8
*/
public class ThreadLocalUtil
{
private static final ThreadLocal<Map<String, Object>> context = ThreadLocal.withInitial(() -> new HashMap<>());
public static Map<String, Object> getThreadLocal()
{
return context.get();
}
/**
* [简要描述]:从ThreadLocal中获取一个线程变量<br/>
* [详细描述]:不存在,返回null<br/>
*
* @param key :
* @return java.lang.Object
* llxiao 2019/4/24 - 9:43
**/
public static Object get(String key)
{
Map<String, Object> map = context.get();
if (null != map)
{
return map.get(key);
}
return null;
}
/**
* [简要描述]:设置一个键值对到ThreadLocal中<br/>
* [详细描述]:<br/>
*
* @param key :
* @param value :
* llxiao 2019/4/24 - 9:42
**/
public static void put(String key, Object value)
{
Map<String, Object> map = context.get();
if (null == map)
{
map = new HashMap<>();
context.set(map);
}
map.put(key, value);
}
/**
* [简要描述]:从ThreadLocal的当前线程中删除一个key<br/>
* [详细描述]:<br/>
*
* @param key :
* @return void
* llxiao 2019/4/24 - 9:41
**/
public static void remove(String key)
{
Map<String, Object> map = context.get();
if (null != map)
{
map.remove(key);
}
}
/**
* [简要描述]:从ThreadLocal中移除当前线程的变量<br/>
* [详细描述]:<br/>
* <p>
* llxiao 2019/4/24 - 9:41
**/
public static void remove()
{
context.remove();
}
}
================================================
FILE: SpringBoot-Custom-Rest-Starter/SpringBoot-Custom-Rest-Autconfigure/src/main/resources/META-INF/spring.factories
================================================
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
com.xiao.custom.rest.starter.autoconfigure.config.RestTemplateConfiguration
================================================
FILE: SpringBoot-Custom-Rest-Starter/SpringBoot-Custom-Rest-Example/pom.xml
================================================
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>SpringBoot-Custom-Rest-Starter</artifactId>
<groupId>com.xiao.skywalking.demo</groupId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>SpringBoot-Custom-Rest-Example</artifactId>
<dependencies>
<dependency>
<groupId>com.xiao.skywalking.demo</groupId>
<artifactId>SpringBoot-Custom-Rest-Autconfigure</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.16.18</version>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<finalName>${project.artifactId}</finalName>
<resources>
<resource>
<targetPath>${project.build.directory}/classes</targetPath>
<directory>src/main/resources</directory>
<filtering>true</filtering>
<includes>
<include>**/*.xml</include>
<include>**/*.yml</include>
<include>**/*.properties</include>
<include>META-INF/**</include>
</includes>
</resource>
</resources>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
================================================
FILE: SpringBoot-Custom-Rest-Starter/SpringBoot-Custom-Rest-Example/src/main/java/com/xiao/custom/rest/example/RestExampleApp.java
================================================
package com.xiao.custom.rest.example;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
/**
* [简要描述]:
* [详细描述]:
*
* @author xiaolinlin
* @version 1.0, 2020/1/17 20:03
* @since JDK 1.8
*/
@SpringBootApplication
public class RestExampleApp
{
public static void main(String[] args)
{
SpringApplication.run(RestExampleApp.class, args);
}
}
================================================
FILE: SpringBoot-Custom-Rest-Starter/SpringBoot-Custom-Rest-Example/src/main/java/com/xiao/custom/rest/example/log/impl/HttpLogServiceImpl.java
================================================
package com.xiao.custom.rest.example.log.impl;
import com.alibaba.fastjson.JSONObject;
import com.xiao.custom.rest.starter.autoconfigure.log.dto.HttpRequestLog;
import com.xiao.custom.rest.starter.autoconfigure.log.service.HttpRequestLogService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
/**
* [简要描述]: HTTP 日志处理实现类
* [详细描述]:
*
* @author llxiao
* @version 1.0, 2019/11/30 10:26
* @since JDK 1.8
*/
@Service
@Slf4j
public class HttpLogServiceImpl implements HttpRequestLogService
{
/**
* [简要描述]:保存日志信息<br/>
* [详细描述]:<br/>
*
* @param requestLog :
* llxiao 2019/4/24 - 14:42
**/
@Override
public void saveRequestLog(HttpRequestLog requestLog)
{
log.info("Example log : {}", JSONObject.toJSONString(requestLog));
}
}
================================================
FILE: SpringBoot-Custom-Rest-Starter/SpringBoot-Custom-Rest-Example/src/main/resources/application.yml
================================================
rest:
# okhttp 配置
okhttp:
enable: false
connection-timeout: 12000
read-timeout: 30000
write-timeout: 12000
# http pool
pool:
enable: true
max-total: 20
default-max-per-route: 2
validate-after-inactivity: 2000
connect-timeout: 10000
connection-request-timeout: 10000
socket-timeout: 10000
http:
service:
sync: true
async: false
================================================
FILE: SpringBoot-Custom-Rest-Starter/SpringBoot-Custom-Rest-Example/src/main/resources/logback-spring.xml
================================================
<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true">
<!-- 控制台Appender -->
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
</encoder>
</appender>
<!-- <logger name="org.springframework.web" level="ERROR" /> -->
<logger name="org.apache.http" level="ERROR"/>
<logger name="com.netflix.discovery" level="ERROR"/>
<logger name="org.apache.tomcat" level="ERROR"/>
<logger name="org.apache.zookeeper" level="ERROR"/>
<logger name="com.netflix.discovery.shared.resolver.aws.ConfigClusterResolver" level="ERROR"/>
<!-- 启动的时候一些日志屏蔽 -->
<logger name="com.netflix.discovery" level="ERROR"/>
<logger name="org.apache" level="ERROR"/>
<logger name="org.springframework.jmx.export.annotation.AnnotationMBeanExporter" level="ERROR"/>
<logger name="org.springframework.boot.actuate.endpoint.mvc" level="ERROR"/>
<logger name="org.springframework.boot.web.servlet.FilterRegistrationBean" level="ERROR"/>
<logger name="org.springframework.boot.context.embedded.tomcat.TomcatEmbeddedServletContainer" level="ERROR"/>
<logger name="com.netflix.config.sources.URLConfigurationSource" level="ERROR"/>
<logger name="com.netflix.discovery.shared.resolver.aws.ConfigClusterResolver" level="ERROR"/>
<logger name="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping" level="ERROR"/>
<logger name="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping" level="ERROR"/>
<logger name="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter" level="ERROR"/>
<logger name="org.springframework.ui.freemarker.SpringTemplateLoader" level="ERROR"/>
<logger name="org.springframework.context.annotation.AnnotationConfigApplicationContext" level="ERROR"/>
<logger name="org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor" level="ERROR"/>
<logger name="org.springframework.beans.factory.support.DefaultListableBeanFactory" level="ERROR"/>
<logger name="org.springframework.boot.actuate.endpoint.jmx.EndpointMBeanExporter" level="ERROR"/>
<logger name="com.purcotton.omni.rest.stater" level="debug" additivity="false">
<appender-ref ref="STDOUT"/>
</logger>
<root level="INFO">
<appender-ref ref="STDOUT"/>
</root>
</configuration>
================================================
FILE: SpringBoot-Custom-Rest-Starter/SpringBoot-Custom-Rest-Example/src/test/java/com/xiao/custom/rest/example/RestTemplateStarterAppTest.java
================================================
package com.xiao.custom.rest.example;
import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
/**
* [简要描述]:
* [详细描述]:
*
* @author llxiao
* @version 1.0, 2019/11/30 10:30
* @since JDK 1.8
*/
@RunWith(SpringRunner.class)
@SpringBootTest
public class RestTemplateStarterAppTest
{
}
================================================
FILE: SpringBoot-Custom-Rest-Starter/SpringBoot-Custom-Rest-Example/src/test/java/com/xiao/custom/rest/example/httpclient/HttpClientTest.java
================================================
package com.xiao.custom.rest.example.httpclient;
import com.xiao.custom.rest.example.RestTemplateStarterAppTest;
import com.xiao.custom.rest.starter.autoconfigure.dto.Request;
import com.xiao.custom.rest.starter.autoconfigure.service.HttpClientService;
import org.junit.Test;
import org.springframework.beans.factory.annotation.Autowired;
/**
* [简要描述]: HTTP client测试
* [详细描述]:
*
* @author llxiao
* @version 1.0, 2019/11/30 10:32
* @since JDK 1.8
*/
public class HttpClientTest extends RestTemplateStarterAppTest
{
@Autowired
private HttpClientService httpClientService;
@Test
public void testHttpGet()
{
Request request = new Request();
request.setResponseType(String.class);
request.setUri("http://www.baidu.com");
String forObject = httpClientService.getForObject(request);
System.out.println(forObject);
}
}
================================================
FILE: SpringBoot-Custom-Rest-Starter/SpringBoot-Custom-Rest-Example/src/test/java/com/xiao/custom/rest/example/template/RestTemplateTest.java
================================================
package com.xiao.custom.rest.example.template;
import com.xiao.custom.rest.example.RestTemplateStarterAppTest;
import org.junit.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.client.RestTemplate;
/**
* [简要描述]: resttemplate测试类
* [详细描述]:
*
* @author llxiao
* @version 1.0, 2019/11/30 10:31
* @since JDK 1.8
*/
public class RestTemplateTest extends RestTemplateStarterAppTest
{
@Autowired
private RestTemplate restTemplate;
@Test
public void testRest()
{
}
}
================================================
FILE: SpringBoot-Custom-Rest-Starter/pom.xml
================================================
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>SpringCloud-Demo</artifactId>
<groupId>com.xiao.skywalking.demo</groupId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<packaging>pom</packaging>
<modules>
<module>SpringBoot-Custom-Rest-Autconfigure</module>
<module>SpringBoot-Custom-Rest-Example</module>
</modules>
<artifactId>SpringBoot-Custom-Rest-Starter</artifactId>
</project>
================================================
FILE: SpringBoot-Stock-Demo/doc/bootstrap.sh
================================================
#!/bin/bash
## 加载配置,避免获取不到java_home
source /etc/profile
SERVICE_HOME=/home/admin/services
SERVICE_NAME=omni-basis-service
cd $SERVICE_HOME/$SERVICE_NAME
PROG=$SERVICE_HOME/$SERVICE_NAME
PIDFILE=$SERVICE_HOME/$SERVICE_NAME/$SERVICE_NAME.pid
JARFILE=$SERVICE_HOME/$SERVICE_NAME/$SERVICE_NAME.jar
SKYWALKING_AGENT=-javaagent:/home/admin/agent/skywalking-agent.jar
SKYWALKING_SERVCIE_NAME=OMNI-BASIS-SERVICE
status() {
if [ -f $PIDFILE ]; then
PID=$(cat $PIDFILE)
if [ ! -x /proc/${PID} ]; then
return 1
else
return 0
fi
else
return 1
fi
}
case "$1" in
start)
status
RETVAL=$?
if [ $RETVAL -eq 0 ]; then
echo "-----$PIDFILE exists, process is already running or crashed"
exit 1
fi
##检测 java环境
if [ ! -n $JAVA_HOME ]; then
echo "-----Please check JAVA_HOME!"
echo "-----Exist"
exist 1
else
echo "-----Jave home: $JAVA_HOME"
echo "-----Starting $PROG ..."
#nohup java -server -Xms512m -Xmx512m -jar $JARFILE > $SERVICE_NAME.log 2>&1 &
nohup java -server -Xms512m -Xmx512m $SKYWALKING_AGENT -Dskywalking.agent.service_name=$SKYWALKING_SERVCIE_NAME -jar $JARFILE > $SERVICE_NAME.log 2>&1 &
RETVAL=$?
if [ $RETVAL -eq 0 ]; then
echo "-----$PROG is started"
echo $! > $PIDFILE
exit 0
else
echo "-----Stopping $PROG"
rm -f $PIDFILE
exit 1
fi
fi
;;
stop)
status
RETVAL=$?
if [ $RETVAL -eq 0 ]; then
echo "-----Shutting down $PROG"
kill -15 `cat $PIDFILE`
RETVAL=$?
if [ $RETVAL -eq 0 ]; then
rm -f $PIDFILE
else
echo "-----Failed to stopping $PROG"
fi
fi
;;
status)
status
RETVAL=$?
if [ $RETVAL -eq 0 ]; then
PID=$(cat $PIDFILE)
echo "-----$PROG is running ($PID)"
else
echo "-----$PROG is not running"
fi
;;
restart)
$0 stop
$0 start
;;
*)
echo "Usage: $0 {start|stop|restart|status}"
;;
esac
================================================
FILE: SpringBoot-Stock-Demo/doc/stock.sql
================================================
CREATE TABLE `t_stock_demo`(
`id` bigint(64) NOT NULL AUTO_INCREMENT,
`product_no` varchar(64) NULL,
`shop_code` varchar(255) NULL,
`pre_stock` int(3) DEFAULT 0,
`ava_stock` int(3) DEFAULT 0,
`total_stock` int(3) DEFAULT 0 ,
`update_time` timestamp(0) NULL,
PRIMARY KEY (`id`)
) ENGINE = InnoDB DEFAULT CHARSET=utf8mb4;
CREATE TABLE `t_order_demo`(
`id` bigint(64) NOT NULL AUTO_INCREMENT,
`order_no` varchar(64) NULL,
`shop_code` varchar(255) NULL,
`product_no` varchar(64) DEFAULT 0,
`product_num` int(3) DEFAULT 0 ,
`status` int(3) NULL,
`update_time` timestamp(0) NULL,
PRIMARY KEY (`id`)
) ENGINE = InnoDB DEFAULT CHARSET=utf8mb4;
CREATE TABLE `t_stock_change_log_demo`(
`id` bigint(64) NOT NULL AUTO_INCREMENT,
`product_no` varchar(64) NULL,
`shop_code` varchar(255) NULL,
`order_no` varchar(255) NULL,
`opt_type` varchar(255) NULL,
`pre_stock_after` int(3) DEFAULT 0,
`ava_stock_after` int(3) DEFAULT 0,
`total_stock_after` int(3) DEFAULT 0 ,
`pre_stock_before` int(3) DEFAULT 0,
`ava_stock_before` int(3) DEFAULT 0,
`total_stock_before` int(3) DEFAULT 0 ,
`update_time` timestamp(0) NULL,
PRIMARY KEY (`id`)
) ENGINE = InnoDB DEFAULT CHARSET=utf8mb4;
================================================
FILE: SpringBoot-Stock-Demo/doc/stock_demo_jmeter.jmx
================================================
<?xml version="1.0" encoding="UTF-8"?>
<jmeterTestPlan version="1.2" properties="5.0" jmeter="5.1.1 r1855137">
<hashTree>
<TestPlan guiclass="TestPlanGui" testclass="TestPlan" testname="电商订单库存高并发模拟实操" enabled="true">
<stringProp name="TestPlan.comments"></stringProp>
<boolProp name="TestPlan.functional_mode">false</boolProp>
<boolProp name="TestPlan.tearDown_on_shutdown">true</boolProp>
<boolProp name="TestPlan.serialize_threadgroups">false</boolProp>
<elementProp name="TestPlan.user_defined_variables" elementType="Arguments" guiclass="ArgumentsPanel" testclass="Arguments" testname="用户定义的变量" enabled="true">
<collectionProp name="Arguments.arguments"/>
</elementProp>
<stringProp name="TestPlan.user_define_classpath"></stringProp>
</TestPlan>
<hashTree>
<ThreadGroup guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="库存测试" enabled="true">
<stringProp name="ThreadGroup.on_sample_error">continue</stringProp>
<elementProp name="ThreadGroup.main_controller" elementType="LoopController" guiclass="LoopControlPanel" testclass="LoopController" testname="循环控制器" enabled="true">
<boolProp name="LoopController.continue_forever">false</boolProp>
<stringProp name="LoopController.loops">10</stringProp>
</elementProp>
<stringProp name="ThreadGroup.num_threads">5</stringProp>
<stringProp name="ThreadGroup.ramp_time">1</stringProp>
<boolProp name="ThreadGroup.scheduler">false</boolProp>
<stringProp name="ThreadGroup.duration"></stringProp>
<stringProp name="ThreadGroup.delay"></stringProp>
<stringProp name="TestPlan.comments">JDBC操作、ifelse、随机数、用户参数、控制器、定时器、循环、计数器、变量、函数等等Jmeter并发操作库存实操,下单、取消单、出库、添加库存等操作并发执行,分布式并发执行。
问题:jmeter并发执行操作订单(取消、出库)时,订单加redisson分布式锁解决订单重复操作问题
</stringProp>
</ThreadGroup>
<hashTree>
<ConfigTestElement guiclass="HttpDefaultsGui" testclass="ConfigTestElement" testname="本地服务器" enabled="false">
<elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" testname="用户定义的变量" enabled="true">
<collectionProp name="Arguments.arguments"/>
</elementProp>
<stringProp name="HTTPSampler.domain">172.16.80.194</stringProp>
<stringProp name="HTTPSampler.port">7878</stringProp>
<stringProp name="HTTPSampler.protocol"></stringProp>
<stringProp name="HTTPSampler.contentEncoding"></stringProp>
<stringProp name="HTTPSampler.path"></stringProp>
<stringProp name="HTTPSampler.concurrentPool">6</stringProp>
<stringProp name="HTTPSampler.connect_timeout"></stringProp>
<stringProp name="HTTPSampler.response_timeout"></stringProp>
</ConfigTestElement>
<hashTree/>
<ConfigTestElement guiclass="HttpDefaultsGui" testclass="ConfigTestElement" testname="远程服务器" enabled="true">
<elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" testname="用户定义的变量" enabled="true">
<collectionProp name="Arguments.arguments"/>
</elementProp>
<stringProp name="HTTPSampler.domain">192.168.206.240</stringProp>
<stringProp name="HTTPSampler.port">7878</stringProp>
<stringProp name="HTTPSampler.protocol"></stringProp>
<stringProp name="HTTPSampler.contentEncoding"></stringProp>
<stringProp name="HTTPSampler.path"></stringProp>
<stringProp name="HTTPSampler.concurrentPool">6</stringProp>
<stringProp name="HTTPSampler.connect_timeout"></stringProp>
<stringProp name="HTTPSampler.response_timeout"></stringProp>
</ConfigTestElement>
<hashTree/>
<JDBCDataSource guiclass="TestBeanGUI" testclass="JDBCDataSource" testname="数据库" enabled="true">
<boolProp name="autocommit">true</boolProp>
<stringProp name="checkQuery">select 1</stringProp>
<stringProp name="connectionAge">5000</stringProp>
<stringProp name="dataSource">stockDemo</stringProp>
<stringProp name="dbUrl">jdbc:mysql://192.168.206.201:3306/basisdb?useSSL=false&allowMultiQueries=true</stringProp>
<stringProp name="driver">com.mysql.jdbc.Driver</stringProp>
<stringProp name="initQuery"></stringProp>
<boolProp name="keepAlive">true</boolProp>
<stringProp name="password">Basisuser123</stringProp>
<stringProp name="poolMax">20</stringProp>
<stringProp name="timeout">10000</stringProp>
<stringProp name="transactionIsolation">DEFAULT</stringProp>
<stringProp name="trimInterval">60000</stringProp>
<stringProp name="username">basisuser</stringProp>
</JDBCDataSource>
<hashTree/>
<UserParameters guiclass="UserParametersGui" testclass="UserParameters" testname="店铺编号" enabled="true">
<collectionProp name="UserParameters.names">
<stringProp name="-345796093">shopCode</stringProp>
</collectionProp>
<collectionProp name="UserParameters.thread_values">
<collectionProp name="442864825">
<stringProp name="1507423">1000</stringProp>
</collectionProp>
</collectionProp>
<boolProp name="UserParameters.per_iteration">false</boolProp>
</UserParameters>
<hashTree/>
<GenericController guiclass="LogicControllerGui" testclass="GenericController" testname="预占库存-下单" enabled="true"/>
<hashTree>
<UserParameters guiclass="UserParametersGui" testclass="UserParameters" testname="随机商品编号" enabled="false">
<collectionProp name="UserParameters.names">
<stringProp name="-1051830512">productNo</stringProp>
</collectionProp>
<collectionProp name="UserParameters.thread_values">
<collectionProp name="1909591592">
<stringProp name="-1033350992">A001001001</stringProp>
</collectionProp>
<collectionProp name="1909591556">
<stringProp name="-1033350991">A001001002</stringProp>
</collectionProp>
<collectionProp name="1909591520">
<stringProp name="-1033350990">A001001003</stringProp>
</collectionProp>
<collectionProp name="1909590707">
<stringProp name="-1033350989">A001001004</stringProp>
</collectionProp>
<collectionProp name="1909590671">
<stringProp name="-1033350988">A001001005</stringProp>
</collectionProp>
<collectionProp name="1909590635">
<stringProp name="-1033350987">A001001006</stringProp>
</collectionProp>
</collectionProp>
<boolProp name="UserParameters.per_iteration">true</boolProp>
</UserParameters>
<hashTree/>
<UserParameters guiclass="UserParametersGui" testclass="UserParameters" testname="单个商品编号" enabled="true">
<collectionProp name="UserParameters.names">
<stringProp name="-1051830512">productNo</stringProp>
</collectionProp>
<collectionProp name="UserParameters.thread_values">
<collectionProp name="1909591592">
<stringProp name="-1033350992">A001001001</stringProp>
</collectionProp>
</collectionProp>
<boolProp name="UserParameters.per_iteration">false</boolProp>
</UserParameters>
<hashTree/>
<GenericController guiclass="LogicControllerGui" testclass="GenericController" testname="判断库存不足不进行处理" enabled="false"/>
<hashTree>
<JDBCSampler guiclass="TestBeanGUI" testclass="JDBCSampler" testname="查询可用库存" enabled="true">
<stringProp name="dataSource">stockDemo</stringProp>
<stringProp name="queryType">Select Statement</stringProp>
<stringProp name="query">select ava_stock from `t_stock_demo` where shop_code = '${shopCode}' and product_no = '${productNo}';</stringProp>
<stringProp name="queryArguments"></stringProp>
<stringProp name="queryArgumentsTypes"></stringProp>
<stringProp name="variableNames">avaStock</stringProp>
<stringProp name="resultVariable"></stringProp>
<stringProp name="queryTimeout"></stringProp>
<stringProp name="resultSetHandler">Store as String</stringProp>
</JDBCSampler>
<hashTree/>
<IfController guiclass="IfControllerPanel" testclass="IfController" testname="如果可用库存不为0" enabled="true">
<stringProp name="IfController.condition">${__jexl3(${avaStock_1}>0 ,)}</stringProp>
<boolProp name="IfController.evaluateAll">false</boolProp>
<boolProp name="IfController.useExpression">true</boolProp>
</IfController>
<hashTree>
<UserParameters guiclass="UserParametersGui" testclass="UserParameters" testname="随机库存" enabled="true">
<collectionProp name="UserParameters.names">
<stringProp name="109446">num</stringProp>
</collectionProp>
<collectionProp name="UserParameters.thread_values">
<collectionProp name="85959">
<stringProp name="51">3</stringProp>
</collectionProp>
<collectionProp name="85921">
<stringProp name="50">2</stringProp>
</collectionProp>
<collectionProp name="85997">
<stringProp name="52">4</stringProp>
</collectionProp>
<collectionProp name="85106">
<stringProp name="49">1</stringProp>
</collectionProp>
</collectionProp>
<boolProp name="UserParameters.per_iteration">true</boolProp>
</UserParameters>
<hashTree/>
<HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="预占库存" enabled="true">
<elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" testname="用户定义的变量" enabled="true">
<collectionProp name="Arguments.arguments">
<elementProp name="productNo" elementType="HTTPArgument">
<boolProp name="HTTPArgument.always_encode">false</boolProp>
<stringProp name="Argument.value">${productNo}</stringProp>
<stringProp name="Argument.metadata">=</stringProp>
<boolProp name="HTTPArgument.use_equals">true</boolProp>
<stringProp name="Argument.name">productNo</stringProp>
</elementProp>
<elementProp name="shopCode" elementType="HTTPArgument">
<boolProp name="HTTPArgument.always_encode">false</boolProp>
<stringProp name="Argument.value">${shopCode}</stringProp>
<stringProp name="Argument.metadata">=</stringProp>
<boolProp name="HTTPArgument.use_equals">true</boolProp>
<stringProp name="Argument.name">shopCode</stringProp>
</elementProp>
<elementProp name="num" elementType="HTTPArgument">
<boolProp name="HTTPArgument.always_encode">false</boolProp>
<stringProp name="Argument.value">${num}</stringProp>
<stringProp name="Argument.metadata">=</stringProp>
<boolProp name="HTTPArgument.use_equals">true</boolProp>
<stringProp name="Argument.name">num</stringProp>
</elementProp>
</collectionProp>
</elementProp>
<stringProp name="HTTPSampler.domain"></stringProp>
<stringProp name="HTTPSampler.port"></stringProp>
<stringProp name="HTTPSampler.protocol"></stringProp>
<stringProp name="HTTPSampler.contentEncoding"></stringProp>
<stringProp name="HTTPSampler.path">/stock/preStock</stringProp>
<stringProp name="HTTPSampler.method">POST</stringProp>
<boolProp name="HTTPSampler.follow_redirects">true</boolProp>
<boolProp name="HTTPSampler.auto_redirects">false</boolProp>
<boolProp name="HTTPSampler.use_keepalive">true</boolProp>
<boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
<stringProp name="HTTPSampler.embedded_url_re"></stringProp>
<stringProp name="HTTPSampler.connect_timeout"></stringProp>
<stringProp name="HTTPSampler.response_timeout"></stringProp>
</HTTPSamplerProxy>
<hashTree>
<BeanShellAssertion guiclass="BeanShellAssertionGui" testclass="BeanShellAssertion" testname="BeanShell断言-返回结果是不是大于0-成功" enabled="true">
<stringProp name="TestPlan.comments">java 操作response as string。
prev api : https://jmeter.apache.org/api/org/apache/jmeter/samplers/SampleResult.html
beanshell docs: https://jmeter.apache.org/usermanual/component_reference.html#BeanShell_Assertion</stringProp>
<stringProp name="BeanShellAssertion.query">String result = prev.getResponseDataAsString();
if("0".equals(result)){
Failure = true;
}
else
{
Failure = false;
}
</stringProp>
<stringProp name="BeanShellAssertion.filename"></stringProp>
<stringProp name="BeanShellAssertion.parameters"></stringProp>
<boolProp name="BeanShellAssertion.resetInterpreter">false</boolProp>
</BeanShellAssertion>
<hashTree/>
</hashTree>
</hashTree>
</hashTree>
<GenericController guiclass="LogicControllerGui" testclass="GenericController" testname="普通下单,高并发请求" enabled="true"/>
<hashTree>
<UserParameters guiclass="UserParametersGui" testclass="UserParameters" testname="随机库存" enabled="true">
<collectionProp name="UserParameters.names">
<stringProp name="109446">num</stringProp>
</collectionProp>
<collectionProp name="UserParameters.thread_values">
<collectionProp name="85959">
<stringProp name="51">3</stringProp>
</collectionProp>
<collectionProp name="85921">
<stringProp name="50">2</stringProp>
</collectionProp>
<collectionProp name="85997">
<stringProp name="52">4</stringProp>
</collectionProp>
<collectionProp name="85106">
<stringProp name="49">1</stringProp>
</collectionProp>
</collectionProp>
<boolProp name="UserParameters.per_iteration">true</boolProp>
</UserParameters>
<hashTree/>
<HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="预占库存" enabled="true">
<elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" testname="用户定义的变量" enabled="true">
<collectionProp name="Arguments.arguments">
<elementProp name="productNo" elementType="HTTPArgument">
<boolProp name="HTTPArgument.always_encode">false</boolProp>
<stringProp name="Argument.value">${productNo}</stringProp>
<stringProp name="Argument.metadata">=</stringProp>
<boolProp name="HTTPArgument.use_equals">true</boolProp>
<stringProp name="Argument.name">productNo</stringProp>
</elementProp>
<elementProp name="shopCode" elementType="HTTPArgument">
<boolProp name="HTTPArgument.always_encode">false</boolProp>
<stringProp name="Argument.value">${shopCode}</stringProp>
<stringProp name="Argument.metadata">=</stringProp>
<boolProp name="HTTPArgument.use_equals">true</boolProp>
<stringProp name="Argument.name">shopCode</stringProp>
</elementProp>
<elementProp name="num" elementType="HTTPArgument">
<boolProp name="HTTPArgument.always_encode">false</boolProp>
<stringProp name="Argument.value">${num}</stringProp>
<stringProp name="Argument.metadata">=</stringProp>
<boolProp name="HTTPArgument.use_equals">true</boolProp>
<stringProp name="Argument.name">num</stringProp>
</elementProp>
</collectionProp>
</elementProp>
<stringProp name="HTTPSampler.domain"></stringProp>
<stringProp name="HTTPSampler.port"></stringProp>
<stringProp name="HTTPSampler.protocol"></stringProp>
<stringProp name="HTTPSampler.contentEncoding"></stringProp>
<stringProp name="HTTPSampler.path">/stock/preStock</stringProp>
<stringProp name="HTTPSampler.method">POST</stringProp>
<boolProp name="HTTPSampler.follow_redirects">true</boolProp>
<boolProp name="HTTPSampler.auto_redirects">false</boolProp>
<boolProp name="HTTPSampler.use_keepalive">true</boolProp>
<boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
<stringProp name="HTTPSampler.embedded_url_re"></stringProp>
<stringProp name="HTTPSampler.connect_timeout"></stringProp>
<stringProp name="HTTPSampler.response_timeout"></stringProp>
</HTTPSamplerProxy>
<hashTree>
<BeanShellAssertion guiclass="BeanShellAssertionGui" testclass="BeanShellAssertion" testname="BeanShell断言-返回结果是不是大于0-成功" enabled="true">
<stringProp name="TestPlan.comments">java 操作response as string。
prev api : https://jmeter.apache.org/api/org/apache/jmeter/samplers/SampleResult.html
beanshell docs: https://jmeter.apache.org/usermanual/component_reference.html#BeanShell_Assertion</stringProp>
<stringProp name="BeanShellAssertion.query">String result = prev.getResponseDataAsString();
if("0".equals(result)){
Failure = true;
FailureMessage = "下单失败,库存不足!";
}
else
{
Failure = false;
}
</stringProp>
<stringProp name="BeanShellAssertion.filename"></stringProp>
<stringProp name="BeanShellAssertion.parameters"></stringProp>
<boolProp name="BeanShellAssertion.resetInterpreter">false</boolProp>
</BeanShellAssertion>
<hashTree/>
</hashTree>
</hashTree>
</hashTree>
<GenericController guiclass="LogicControllerGui" testclass="GenericController" testname="释放库存-取消订单" enabled="true"/>
<hashTree>
<JDBCSampler guiclass="TestBeanGUI" testclass="JDBCSampler" testname="JDBC查询订单为已确认的总数" enabled="true">
<stringProp name="dataSource">stockDemo</stringProp>
<stringProp name="queryType">Select Statement</stringProp>
<stringProp name="query">SELECT count(order_no) FROM `t_order_demo` where status = 1;</stringProp>
<stringProp name="queryArguments"></stringProp>
<stringProp name="queryArgumentsTypes"></stringProp>
<stringProp name="variableNames">count</stringProp>
<stringProp name="resultVariable"></stringProp>
<stringProp name="queryTimeout"></stringProp>
<stringProp name="resultSetHandler">Store as String</stringProp>
</JDBCSampler>
<hashTree/>
<IfController guiclass="IfControllerPanel" testclass="IfController" testname="如果已确认的总数大于0,处理取消订单" enabled="true">
<stringProp name="TestPlan.comments">tools 工具选项使用 jex13 表达式</stringProp>
<stringProp name="IfController.condition">${__jexl3(${count_1}>0 ,)}</stringProp>
<boolProp name="IfController.evaluateAll">false</boolProp>
<boolProp name="IfController.useExpression">true</boolProp>
</IfController>
<hashTree>
<JDBCSampler guiclass="TestBeanGUI" testclass="JDBCSampler" testname="JDBC查询所有确认的订单号" enabled="true">
<stringProp name="dataSource">stockDemo</stringProp>
<stringProp name="query">SELECT order_no FROM `t_order_demo` where status = 1;
</stringProp>
<stringProp name="queryArguments"></stringProp>
<stringProp name="queryArgumentsTypes"></stringProp>
<stringProp name="queryTimeout"></stringProp>
<stringProp name="queryType">Select Statement</stringProp>
<stringProp name="resultSetHandler">Store as String</stringProp>
<stringProp name="resultVariable"></stringProp>
<stringProp name="variableNames">orderNo</stringProp>
</JDBCSampler>
<hashTree/>
<LoopController guiclass="LoopControlPanel" testclass="LoopController" testname="循环批量处理取消订单" enabled="false">
<boolProp name="LoopController.continue_forever">true</boolProp>
<stringProp name="TestPlan.comments">获取 sql count返回的结果</stringProp>
<stringProp name="LoopController.loops">${count_1}</stringProp>
</LoopController>
<hashTree>
<CounterConfig guiclass="CounterConfigGui" testclass="CounterConfig" testname="计数器" enabled="true">
<stringProp name="CounterConfig.start">1</stringProp>
<stringProp name="CounterConfig.end"></stringProp>
<stringProp name="CounterConfig.incr">1</stringProp>
<stringProp name="CounterConfig.name">index</stringProp>
<stringProp name="CounterConfig.format">0</stringProp>
<boolProp name="CounterConfig.per_user">true</boolProp>
<stringProp name="TestPlan.comments">从1开始,递增1</stringProp>
<boolProp name="CounterConfig.reset_on_tg_iteration">true</boolProp>
</CounterConfig>
<hashTree/>
<HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="取消订单释放库存" enabled="true">
<elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" testname="用户定义的变量" enabled="true">
<collectionProp name="Arguments.arguments">
<elementProp name="orderNo" elementType="HTTPArgument">
<boolProp name="HTTPArgument.always_encode">false</boolProp>
<stringProp name="Argument.value">${__V(orderNo_${index})}</stringProp>
<stringProp name="Argument.metadata">=</stringProp>
<boolProp name="HTTPArgument.use_equals">true</boolProp>
<stringProp name="Argument.name">orderNo</stringProp>
</elementProp>
</collectionProp>
</elementProp>
<stringProp name="HTTPSampler.domain"></stringProp>
<stringProp name="HTTPSampler.port"></stringProp>
<stringProp name="HTTPSampler.protocol"></stringProp>
<stringProp name="HTTPSampler.contentEncoding"></stringProp>
<stringProp name="HTTPSampler.path">/stock/releaseStock</stringProp>
<stringProp name="HTTPSampler.method">POST</stringProp>
<boolProp name="HTTPSampler.follow_redirects">true</boolProp>
<boolProp name="HTTPSampler.auto_redirects">false</boolProp>
<boolProp name="HTTPSampler.use_keepalive">true</boolProp>
<boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
<stringProp name="HTTPSampler.embedded_url_re"></stringProp>
<stringProp name="HTTPSampler.connect_timeout"></stringProp>
<stringProp name="HTTPSampler.response_timeout"></stringProp>
</HTTPSamplerProxy>
<hashTree/>
</hashTree>
<IfController guiclass="IfControllerPanel" testclass="IfController" testname="查询结果>1随机取消一个订单" enabled="true">
<stringProp name="IfController.condition">${__jexl3(${count_1}>1 ,)}</stringProp>
<boolProp name="IfController.evaluateAll">false</boolProp>
<boolProp name="IfController.useExpression">true</boolProp>
</IfController>
<hashTree>
<HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="取消订单释放库存" enabled="true">
<elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" testname="用户定义的变量" enabled="true">
<collectionProp name="Arguments.arguments">
<elementProp name="orderNo" elementType="HTTPArgument">
<boolProp name="HTTPArgument.always_encode">false</boolProp>
<stringProp name="Argument.value">${__V(orderNo_${__Random(1,${count_1})})}</stringProp>
<stringProp name="Argument.metadata">=</stringProp>
<boolProp name="HTTPArgument.use_equals">true</boolProp>
<stringProp name="Argument.name">orderNo</stringProp>
</elementProp>
</collectionProp>
</elementProp>
<stringProp name="HTTPSampler.domain"></stringProp>
<stringProp name="HTTPSampler.port"></stringProp>
<stringProp name="HTTPSampler.protocol"></stringProp>
<stringProp name="HTTPSampler.contentEncoding"></stringProp>
<stringProp name="HTTPSampler.path">/stock/releaseStock</stringProp>
<stringProp name="HTTPSampler.method">POST</stringProp>
<boolProp name="HTTPSampler.follow_redirects">true</boolProp>
<boolProp name="HTTPSampler.auto_redirects">false</boolProp>
<boolProp name="HTTPSampler.use_keepalive">true</boolProp>
<boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
<stringProp name="HTTPSampler.embedded_url_re"></stringProp>
<stringProp name="HTTPSampler.connect_timeout"></stringProp>
<stringProp name="HTTPSampler.response_timeout"></stringProp>
</HTTPSamplerProxy>
<hashTree/>
</hashTree>
<IfController guiclass="IfControllerPanel" testclass="IfController" testname="查询结果=1取释放当前订单" enabled="true">
<stringProp name="IfController.condition">${__jexl3(${count_1}==1 ,)}</stringProp>
<boolProp name="IfController.evaluateAll">false</boolProp>
<boolProp name="IfController.useExpression">true</boolProp>
</IfController>
<hashTree>
<HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="取消订单释放库存" enabled="true">
<elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" testname="用户定义的变量" enabled="true">
<collectionProp name="Arguments.arguments">
<elementProp name="orderNo" elementType="HTTPArgument">
<boolProp name="HTTPArgument.always_encode">false</boolProp>
<stringProp name="Argument.value">${__V(orderNo_1)}</stringProp>
<stringProp name="Argument.metadata">=</stringProp>
<boolProp name="HTTPArgument.use_equals">true</boolProp>
<stringProp name="Argument.name">orderNo</stringProp>
</elementProp>
</collectionProp>
</elementProp>
<stringProp name="HTTPSampler.domain"></stringProp>
<stringProp name="HTTPSampler.port"></stringProp>
<stringProp name="HTTPSampler.protocol"></stringProp>
<stringProp name="HTTPSampler.contentEncoding"></stringProp>
<stringProp name="HTTPSampler.path">/stock/releaseStock</stringProp>
<stringProp name="HTTPSampler.method">POST</stringProp>
<boolProp name="HTTPSampler.follow_redirects">true</boolProp>
<boolProp name="HTTPSampler.auto_redirects">false</boolProp>
<boolProp name="HTTPSampler.use_keepalive">true</boolProp>
<boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
<stringProp name="HTTPSampler.embedded_url_re"></stringProp>
<stringProp name="HTTPSampler.connect_timeout"></stringProp>
<stringProp name="HTTPSampler.response_timeout"></stringProp>
</HTTPSamplerProxy>
<hashTree/>
</hashTree>
</hashTree>
</hashTree>
<GenericController guiclass="LogicControllerGui" testclass="GenericController" testname="扣减库存-发货出库" enabled="true"/>
<hashTree>
<JDBCSampler guiclass="TestBeanGUI" testclass="JDBCSampler" testname="JDBC查询订单为已确认的总数" enabled="true">
<stringProp name="dataSource">stockDemo</stringProp>
<stringProp name="queryType">Select Statement</stringProp>
<stringProp name="query">SELECT count(order_no) FROM `t_order_demo` where status = 1;</stringProp>
<stringProp name="queryArguments"></stringProp>
<stringProp name="queryArgumentsTypes"></stringProp>
<stringProp name="variableNames">count</stringProp>
<stringProp name="resultVariable"></stringProp>
<stringProp name="queryTimeout"></stringProp>
<stringProp name="resultSetHandler">Store as String</stringProp>
</JDBCSampler>
<hashTree/>
<IfController guiclass="IfControllerPanel" testclass="IfController" testname="如果已确认的总数大于0,处理发货订单" enabled="true">
<stringProp name="IfController.condition">${__jexl3(${count_1}>0 ,)}</stringProp>
<boolProp name="IfController.evaluateAll">false</boolProp>
<boolProp name="IfController.useExpression">true</boolProp>
</IfController>
<hashTree>
<JDBCSampler guiclass="TestBeanGUI" testclass="JDBCSampler" testname="JDBC查询所有确认的订单号" enabled="true">
<stringProp name="dataSource">stockDemo</stringProp>
<stringProp name="query">SELECT order_no FROM `t_order_demo` where status = 1;
</stringProp>
<stringProp name="queryArguments"></stringProp>
<stringProp name="queryArgumentsTypes"></stringProp>
<stringProp name="queryTimeout"></stringProp>
<stringProp name="queryType">Select Statement</stringProp>
<stringProp name="resultSetHandler">Store as String</stringProp>
<stringProp name="resultVariable"></stringProp>
<stringProp name="variableNames">orderNo</stringProp>
</JDBCSampler>
<hashTree/>
<LoopController guiclass="LoopControlPanel" testclass="LoopController" testname="循环批量处理订单出库" enabled="false">
<boolProp name="LoopController.continue_forever">true</boolProp>
<stringProp name="TestPlan.comments">获取 sql count返回的结果</stringProp>
<stringProp name="LoopController.loops">${count_1}</stringProp>
</LoopController>
<hashTree>
<CounterConfig guiclass="CounterConfigGui" testclass="CounterConfig" testname="计数器" enabled="true">
<stringProp name="CounterConfig.start">1</stringProp>
<stringProp name="CounterConfig.end"></stringProp>
<stringProp name="CounterConfig.incr">1</stringProp>
<stringProp name="CounterConfig.name">index</stringProp>
<stringProp name="CounterConfig.format">0</stringProp>
<boolProp name="CounterConfig.per_user">true</boolProp>
<stringProp name="TestPlan.comments">从1开始,递增1</stringProp>
<boolProp name="CounterConfig.reset_on_tg_iteration">true</boolProp>
</CounterConfig>
<hashTree/>
<HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="订单出库减库存" enabled="true">
<elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" testname="用户定义的变量" enabled="true">
<collectionProp name="Arguments.arguments">
<elementProp name="orderNo" elementType="HTTPArgument">
<boolProp name="HTTPArgument.always_encode">false</boolProp>
<stringProp name="Argument.value">${__V(orderNo_${index})}</stringProp>
<stringProp name="Argument.metadata">=</stringProp>
<boolProp name="HTTPArgument.use_equals">true</boolProp>
<stringProp name="Argument.name">orderNo</stringProp>
</elementProp>
</collectionProp>
</elementProp>
<stringProp name="HTTPSampler.domain"></stringProp>
<stringProp name="HTTPSampler.port"></stringProp>
<stringProp name="HTTPSampler.protocol"></stringProp>
<stringProp name="HTTPSampler.contentEncoding"></stringProp>
<stringProp name="HTTPSampler.path">/stock/releaseStock</stringProp>
<stringProp name="HTTPSampler.method">POST</stringProp>
<boolProp name="HTTPSampler.follow_redirects">true</boolProp>
<boolProp name="HTTPSampler.auto_redirects">false</boolProp>
<boolProp name="HTTPSampler.use_keepalive">true</boolProp>
<boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
<stringProp name="HTTPSampler.embedded_url_re"></stringProp>
<stringProp name="HTTPSampler.connect_timeout"></stringProp>
<stringProp name="HTTPSampler.response_timeout"></stringProp>
</HTTPSamplerProxy>
<hashTree/>
</hashTree>
<IfController guiclass="IfControllerPanel" testclass="IfController" testname="查询结果>1随机处理一个订单出库完成" enabled="true">
<stringProp name="IfController.condition">${__jexl3(${count_1}>1 ,)}</stringProp>
<boolProp name="IfController.evaluateAll">false</boolProp>
<boolProp name="IfController.useExpression">true</boolProp>
</IfController>
<hashTree>
<HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="订单出库减库存" enabled="true">
<elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" testname="用户定义的变量" enabled="true">
<collectionProp name="Arguments.arguments">
<elementProp name="orderNo" elementType="HTTPArgument">
<boolProp name="HTTPArgument.always_encode">false</boolProp>
<stringProp name="Argument.value">${__V(orderNo_${__Random(1,${count_1})})}</stringProp>
<stringProp name="Argument.metadata">=</stringProp>
<boolProp name="HTTPArgument.use_equals">true</boolProp>
<stringProp name="Argument.name">orderNo</stringProp>
</elementProp>
</collectionProp>
</elementProp>
<stringProp name="HTTPSampler.domain"></stringProp>
<stringProp name="HTTPSampler.port"></stringProp>
<stringProp name="HTTPSampler.protocol"></stringProp>
<stringProp name="HTTPSampler.contentEncoding"></stringProp>
<stringProp name="HTTPSampler.path">/stock/warehouse</stringProp>
<stringProp name="HTTPSampler.method">POST</stringProp>
<boolProp name="HTTPSampler.follow_redirects">true</boolProp>
<boolProp name="HTTPSampler.auto_redirects">false</boolProp>
<boolProp name="HTTPSampler.use_keepalive">true</boolProp>
<boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
<stringProp name="HTTPSampler.embedded_url_re"></stringProp>
<stringProp name="HTTPSampler.connect_timeout"></stringProp>
<stringProp name="HTTPSampler.response_timeout"></stringProp>
</HTTPSamplerProxy>
<hashTree/>
</hashTree>
<IfController guiclass="IfControllerPanel" testclass="IfController" testname="查询结果=取当前订单出库完成" enabled="true">
<stringProp name="IfController.condition">${__jexl3(${count_1}==1 ,)}</stringProp>
<boolProp name="IfController.evaluateAll">false</boolProp>
<boolProp name="IfController.useExpression">true</boolProp>
</IfController>
<hashTree>
<HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="订单出库减库存" enabled="true">
<elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" testname="用户定义的变量" enabled="true">
<collectionProp name="Arguments.arguments">
<elementProp name="orderNo" elementType="HTTPArgument">
<boolProp name="HTTPArgument.always_encode">false</boolProp>
<stringProp name="Argument.value">${__V(orderNo_1)}</stringProp>
<stringProp name="Argument.metadata">=</stringProp>
<boolProp name="HTTPArgument.use_equals">true</boolProp>
<stringProp name="Argument.name">orderNo</stringProp>
</elementProp>
</collectionProp>
</elementProp>
<stringProp name="HTTPSampler.domain"></stringProp>
<stringProp name="HTTPSampler.port"></stringProp>
<stringProp name="HTTPSampler.protocol"></stringProp>
<stringProp name="HTTPSampler.contentEncoding"></stringProp>
<stringProp name="HTTPSampler.path">/stock/warehouse</stringProp>
<stringProp name="HTTPSampler.method">POST</stringProp>
<boolProp name="HTTPSampler.follow_redirects">true</boolProp>
<boolProp name="HTTPSampler.auto_redirects">false</boolProp>
<boolProp name="HTTPSampler.use_keepalive">true</boolProp>
<boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
<stringProp name="HTTPSampler.embedded_url_re"></stringProp>
<stringProp name="HTTPSampler.connect_timeout"></stringProp>
<stringProp name="HTTPSampler.response_timeout"></stringProp>
</HTTPSamplerProxy>
<hashTree/>
</hashTree>
</hashTree>
</hashTree>
<OnceOnlyController guiclass="OnceOnlyControllerGui" testclass="OnceOnlyController" testname="添加库存-同步库存" enabled="true">
<stringProp name="TestPlan.comments">定时任务,每10分钟执行一次加库存操作</stringProp>
</OnceOnlyController>
<hashTree>
<UserParameters guiclass="UserParametersGui" testclass="UserParameters" testname="随机商品编号" enabled="false">
<collectionProp name="UserParameters.names">
<stringProp name="-1051830512">productNo</stringProp>
</collectionProp>
<collectionProp name="UserParameters.thread_values">
<collectionProp name="1909591592">
<stringProp name="-1033350992">A001001001</stringProp>
</collectionProp>
<collectionProp name="1909591556">
<stringProp name="-1033350991">A001001002</stringProp>
</collectionProp>
<collectionProp name="1909591520">
<stringProp name="-1033350990">A001001003</stringProp>
</collectionProp>
<collectionProp name="1909590707">
<stringProp name="-1033350989">A001001004</stringProp>
</collectionProp>
<collectionProp name="1909590671">
<stringProp name="-1033350988">A001001005</stringProp>
</collectionProp>
<collectionProp name="1909590635">
<stringProp name="-1033350987">A001001006</stringProp>
</collectionProp>
</collectionProp>
<boolProp name="UserParameters.per_iteration">true</boolProp>
</UserParameters>
<hashTree/>
<UserParameters guiclass="UserParametersGui" testclass="UserParameters" testname="单个商品编号" enabled="true">
<collectionProp name="UserParameters.names">
<stringProp name="-1051830512">productNo</stringProp>
</collectionProp>
<collectionProp name="UserParameters.thread_values">
<collectionProp name="1909591592">
<stringProp name="-1033350992">A001001001</stringProp>
</collectionProp>
</collectionProp>
<boolProp name="UserParameters.per_iteration">false</boolProp>
</UserParameters>
<hashTree/>
<UserParameters guiclass="UserParametersGui" testclass="UserParameters" testname="随机添加库存" enabled="true">
<collectionProp name="UserParameters.names">
<stringProp name="109446">num</stringProp>
</collectionProp>
<collectionProp name="UserParameters.thread_values">
<collectionProp name="85106">
<stringProp name="49">1</stringProp>
</collectionProp>
<collectionProp name="85921">
<stringProp name="50">2</stringProp>
</collectionProp>
<collectionProp name="85959">
<stringProp name="51">3</stringProp>
</collectionProp>
</collectionProp>
<boolProp name="UserParameters.per_iteration">true</boolProp>
</UserParameters>
<hashTree/>
<HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="添加库存" enabled="true">
<elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" testname="用户定义的变量" enabled="true">
<collectionProp name="Arguments.arguments">
<elementProp name="shopCode" elementType="HTTPArgument">
<boolProp name="HTTPArgument.always_encode">false</boolProp>
<stringProp name="Argument.value">${shopCode}</stringProp>
<stringProp name="Argument.metadata">=</stringProp>
<boolProp name="HTTPArgument.use_equals">true</boolProp>
<stringProp name="Argument.name">shopCode</stringProp>
</elementProp>
<elementProp name="num" elementType="HTTPArgument">
<boolProp name="HTTPArgument.always_encode">false</boolProp>
<stringProp name="Argument.value">${num}</stringProp>
<stringProp name="Argument.metadata">=</stringProp>
<boolProp name="HTTPArgument.use_equals">true</boolProp>
<stringProp name="Argument.name">num</stringProp>
</elementProp>
<elementProp name="productNo" elementType="HTTPArgument">
<boolProp name="HTTPArgument.always_encode">false</boolProp>
<stringProp name="Argument.value">${productNo}</stringProp>
<stringProp name="Argument.metadata">=</stringProp>
<boolProp name="HTTPArgument.use_equals">true</boolProp>
<stringProp name="Argument.name">productNo</stringProp>
</elementProp>
</collectionProp>
</elementProp>
<stringProp name="HTTPSampler.domain"></stringProp>
<stringProp name="HTTPSampler.port"></stringProp>
<stringProp name="HTTPSampler.protocol"></stringProp>
<stringProp name="HTTPSampler.contentEncoding"></stringProp>
<stringProp name="HTTPSampler.path">/stock/addStock</stringProp>
<stringProp name="HTTPSampler.method">POST</stringProp>
<boolProp name="HTTPSampler.follow_redirects">true</boolProp>
<boolProp name="HTTPSampler.auto_redirects">false</boolProp>
<boolProp name="HTTPSampler.use_keepalive">true</boolProp>
<boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
<stringProp name="HTTPSampler.embedded_url_re"></stringProp>
<stringProp name="HTTPSampler.connect_timeout"></stringProp>
<stringProp name="HTTPSampler.response_timeout"></stringProp>
</HTTPSamplerProxy>
<hashTree>
<ConstantTimer guiclass="ConstantTimerGui" testclass="ConstantTimer" testname="每30S执行一次加库存动作-固定定时器" enabled="false">
<stringProp name="ConstantTimer.delay">30000</stringProp>
</ConstantTimer>
<hashTree/>
</hashTree>
</hashTree>
<ResultCollector guiclass="ViewResultsFullVisualizer" testclass="ResultCollector" testname="察看结果树" enabled="false">
<boolProp name="ResultCollector.error_logging">false</boolProp>
<objProp>
<name>saveConfig</name>
<value class="SampleSaveConfiguration">
<time>true</time>
<latency>true</latency>
<timestamp>true</timestamp>
<success>true</success>
<label>true</label>
<code>true</code>
<message>true</message>
<threadName>true</threadName>
<dataType>true</dataType>
<encoding>false</encoding>
<assertions>true</assertions>
<subresults>true</subresults>
<responseData>false</responseData>
<samplerData>false</samplerData>
<xml>false</xml>
<fieldNames>true</fieldNames>
<responseHeaders>false</responseHeaders>
<requestHeaders>false</requestHeaders>
<responseDataOnError>false</responseDataOnError>
<saveAssertionResultsFailureMessage>true</saveAssertionResultsFailureMessage>
<assertionsResultsToSave>0</assertionsResultsToSave>
<bytes>true</bytes>
<sentBytes>true</sentBytes>
<url>true</url>
<threadCounts>true</threadCounts>
<idleTime>true</idleTime>
<connectTime>true</connectTime>
</value>
</objProp>
<stringProp name="filename"></stringProp>
</ResultCollector>
<hashTree/>
<ResultCollector guiclass="StatVisualizer" testclass="ResultCollector" testname="聚合报告" enabled="true">
<boolProp name="ResultCollector.error_logging">false</boolProp>
<objProp>
<name>saveConfig</name>
<value class="SampleSaveConfiguration">
<time>true</time>
<latency>true</latency>
<timestamp>true</timestamp>
<success>true</success>
<label>true</label>
<code>true</code>
<message>true</message>
<threadName>true</threadName>
<dataType>true</dataType>
<encoding>false</encoding>
<assertions>true</assertions>
<subresults>true</subresults>
<responseData>false</responseData>
<samplerData>false</samplerData>
<xml>false</xml>
<fieldNames>true</fieldNames>
<responseHeaders>false</responseHeaders>
<requestHeaders>false</requestHeaders>
<responseDataOnError>false</responseDataOnError>
<saveAssertionResultsFailureMessage>true</saveAssertionResultsFailureMessage>
<assertionsResultsToSave>0</assertionsResultsToSave>
<bytes>true</bytes>
<sentBytes>true</sentBytes>
<url>true</url>
<threadCounts>true</threadCounts>
<idleTime>true</idleTime>
<connectTime>true</connectTime>
</value>
</objProp>
<stringProp name="filename"></stringProp>
</ResultCollector>
<hashTree/>
</hashTree>
</hashTree>
</hashTree>
</jmeterTestPlan>
================================================
FILE: SpringBoot-Stock-Demo/pom.xml
================================================
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.purcotton.stock.demo</groupId>
<artifactId>stock-demo</artifactId>
<version>1.0-SNAPSHOT</version>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.9.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
<spring-cloud.version>Dalston.RC1</spring-cloud.version>
<github.pagehelper>5.1.2</github.pagehelper>
<fstseriazle.version>2.04</fstseriazle.version>
<redission.version>3.11.4</redission.version>
<hutool.version>4.6.8</hutool.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<!--排除这个slf4j-log4j12-->
<exclusions>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>com.zaxxer</groupId>
<artifactId>HikariCP</artifactId>
<version>3.3.1</version>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.3.1</version>
</dependency>
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper-spring-boot-starter</artifactId>
<version>1.2.5</version>
</dependency>
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper</artifactId>
<version>5.1.4</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.4</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.83</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-collections4</artifactId>
<version>4.1</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.6</version>
</dependency>
<!-- for Redisson 3.x -->
<dependency>
<groupId>org.redisson</groupId>
<artifactId>redisson</artifactId>
<version>${redission.version}</version>
</dependency>
<!--工具类 -->
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-core</artifactId>
<version>${hutool.version}</version>
</dependency>
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-captcha</artifactId>
<version>${hutool.version}</version>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<build>
<finalName>stock-demo</finalName>
<resources>
<resource>
<targetPath>${project.build.directory}/classes</targetPath>
<directory>src/main/resources</directory>
<filtering>true</filtering>
<includes>
<include>**/*.xml</include>
<include>**/*.yml</include>
<include>**/*.properties</include>
<include>META-INF/**</include>
</includes>
</resource>
</resources>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
================================================
FILE: SpringBoot-Stock-Demo/readme.md
================================================
**Jmeter+Springboot+Redisson分布式锁并发订单操作(下单、取消单、完成单、加库存)**<br>
涉及知识点:<br>
> java+springboot+mybatis开发<br>
> redis分布式锁+Redisson客户端<br>
> Jmeter各种骚操作:用户变量、随机取值、jdbc操作、if else操作、循环、控制器、beanshell断言等等<br>
1. 环境工具:<br>
idea、jmeter<br>
jdk1.8、maven、mysql、redis<br>
三台服务器:两个4C16G服务节点+一个台nginx(淘宝的tengine-2.3.0)节点<br>
2. 思路概要:<br>
>(1) 主要提供四个接口:下单、取消、出库、添加库存,四种操作在操作库存表t_stock_demo行的时候都需要添加Redis的锁,使用:``Future<Boolean> res = fairLock.tryLockAsync(50, 10, TimeUnit.SECONDS);``<br>
>(2) 另外取消和出库,因为是用Jmeter直接查询数据库获取可用的订单数量,为防止统一订单重复操作在RestSevice层使用订单号orderNo做了一层Redis分布式锁,订单已在操作直接返回结果。<br>
>(3) 使用jmeter的jdbc操作+函数、随机数获取已确认的订单结合if控制器判断结果,进行取消和出库操作<br>
>(4) 划重点:使用分布式锁和本地事物,一定要**先提交事物再释放锁、先提交事物再放锁、先提交事物再放锁**<br>
3. SQL、jmeter脚本、jar包启动脚本请到[doc](https://github.com/Xlinlin/SpringCloud-Demo/tree/master/SpringBoot-Stock-Demo/doc)目录查看。
4. 操作指南:
>(1) git clone https://github.com/Xlinlin/SpringCloud-Demo <br>
>(2) cd SpringCloud-Demo/SpringBoot-Stock-Demo <br>
>(3) 配置数据mysql和redis配置,application.yml文件,(自行准备mysql、redis环境) <br>
>(4) mvn install <br>
>(5) 拷贝stock_demo.jar和doc/bootstrap.sh到 linux服务器(自行准备java环境)上 <br>
>(6) 适当修改bootstrap.sh脚本目录,保持与springboot包在同一目录,直接执行脚本:``./bootstrap start`` <br>
>(7) 查看进程、端口是否启动:``jps 或 ps -ef|grep stock_demo 或 lsof -i:7878``<br>
>(8) 配好nginx跳转
>(9) 下载[jmeter](http://jmeter.apache.org/download_jmeter.cgi) ,解压进入jmeter目录,双击:ApacheJMeter<br>
>(10) 文件->打开->找到doc下的[.jmx](https://github.com/Xlinlin/SpringCloud-Demo/blob/master/SpringBoot-Stock-Demo/doc/stock_demo_jmeter.jmx)文件,大概的画面:<br>
<br>
>(11) 修改远程服务器地址信息为你的nginx服务<br>
>(12) 修改你的数据地址,此处需要将mysql的驱动jar包引入jmeter/lib目录下<br>
>(13) 线程、参数、请求调整好后,然后点击启动(Ctrl+R)<br>
部分截图:
>
gitextract_ftqt9i7b/ ├── .gitattributes ├── .gitignore ├── CODE_OF_CONDUCT.md ├── LICENSE.txt ├── README.md ├── SpringBoot-Admin/ │ ├── pom.xml │ ├── readme.md │ └── src/ │ └── main/ │ ├── java/ │ │ └── com/ │ │ └── xiao/ │ │ └── spring/ │ │ └── boot/ │ │ └── admin/ │ │ └── SpringBootAdminApplication.java │ └── resources/ │ ├── application.yml │ └── bootstrap.yml ├── SpringBoot-Custom-Elasticsearch-Starter/ │ ├── Custom-Elasticsearch-Starter/ │ │ └── pom.xml │ ├── Custom-Elasticsearch-Starter-Autoconfig/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── com/ │ │ │ └── xiao/ │ │ │ └── custom/ │ │ │ └── elasticsearch/ │ │ │ └── start/ │ │ │ └── autoconfig/ │ │ │ ├── ElasticsearchAutoConfiguration.java │ │ │ └── properties/ │ │ │ ├── ElasticsearchProperties.java │ │ │ └── HostInfo.java │ │ └── resources/ │ │ └── META-INF/ │ │ └── spring.factories │ ├── Custom-Elasticsearch-Starter-Example/ │ │ ├── pom.xml │ │ └── src/ │ │ ├── main/ │ │ │ ├── java/ │ │ │ │ └── com/ │ │ │ │ └── xiao/ │ │ │ │ └── custom/ │ │ │ │ └── elasticsearch/ │ │ │ │ └── starter/ │ │ │ │ └── example/ │ │ │ │ └── ElasticsearchApplication.java │ │ │ └── resources/ │ │ │ ├── application.properties │ │ │ ├── application.yml │ │ │ ├── bootstrap.yml │ │ │ └── logback-spring.xml │ │ └── test/ │ │ └── java/ │ │ └── com/ │ │ └── xiao/ │ │ └── custom/ │ │ └── elasticsearch/ │ │ └── starter/ │ │ └── example/ │ │ └── ElasticsearchApplicationTest.java │ ├── Readme.md │ └── pom.xml ├── SpringBoot-Custom-Rest-Starter/ │ ├── Readme.md │ ├── SpringBoot-Custom-Rest-Autconfigure/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── com/ │ │ │ └── xiao/ │ │ │ └── custom/ │ │ │ └── rest/ │ │ │ └── starter/ │ │ │ └── autoconfigure/ │ │ │ ├── config/ │ │ │ │ ├── RestTemplateConfiguration.java │ │ │ │ └── properties/ │ │ │ │ ├── HttpPoolProperties.java │ │ │ │ └── OkHttpProperties.java │ │ │ ├── dto/ │ │ │ │ └── Request.java │ │ │ ├── interceptor/ │ │ │ │ └── RestInterceptor.java │ │ │ ├── log/ │ │ │ │ ├── annotation/ │ │ │ │ │ ├── RequestLog.java │ │ │ │ │ └── RequestLogAspect.java │ │ │ │ ├── dto/ │ │ │ │ │ └── HttpRequestLog.java │ │ │ │ └── service/ │ │ │ │ └── HttpRequestLogService.java │ │ │ ├── service/ │ │ │ │ ├── HttpClientService.java │ │ │ │ └── impl/ │ │ │ │ ├── HttpClientAsyncServiceImpl.java │ │ │ │ ├── HttpClientServiceImpl.java │ │ │ │ └── HttpRetryService.java │ │ │ └── util/ │ │ │ ├── RequestValidatorParamsUtil.java │ │ │ └── ThreadLocalUtil.java │ │ └── resources/ │ │ └── META-INF/ │ │ └── spring.factories │ ├── SpringBoot-Custom-Rest-Example/ │ │ ├── pom.xml │ │ └── src/ │ │ ├── main/ │ │ │ ├── java/ │ │ │ │ └── com/ │ │ │ │ └── xiao/ │ │ │ │ └── custom/ │ │ │ │ └── rest/ │ │ │ │ └── example/ │ │ │ │ ├── RestExampleApp.java │ │ │ │ └── log/ │ │ │ │ └── impl/ │ │ │ │ └── HttpLogServiceImpl.java │ │ │ └── resources/ │ │ │ ├── application.yml │ │ │ └── logback-spring.xml │ │ └── test/ │ │ └── java/ │ │ └── com/ │ │ └── xiao/ │ │ └── custom/ │ │ └── rest/ │ │ └── example/ │ │ ├── RestTemplateStarterAppTest.java │ │ ├── httpclient/ │ │ │ └── HttpClientTest.java │ │ └── template/ │ │ └── RestTemplateTest.java │ └── pom.xml ├── SpringBoot-Stock-Demo/ │ ├── doc/ │ │ ├── bootstrap.sh │ │ ├── stock.sql │ │ └── stock_demo_jmeter.jmx │ ├── pom.xml │ ├── readme.md │ └── src/ │ └── main/ │ ├── java/ │ │ └── com/ │ │ └── xiao/ │ │ └── stock/ │ │ └── demo/ │ │ ├── StockDemoApplication.java │ │ ├── common/ │ │ │ └── StockOptTypeEnum.java │ │ ├── configure/ │ │ │ ├── DataSourceConfiguration.java │ │ │ └── RedissonConfiguration.java │ │ ├── entity/ │ │ │ ├── OrderDemo.java │ │ │ ├── StockChangeLodDemo.java │ │ │ └── StockDemo.java │ │ ├── mapper/ │ │ │ ├── OrderDemoMapper.java │ │ │ ├── StockChangeLodDemoMapper.java │ │ │ └── StockDemoMapper.java │ │ ├── rest/ │ │ │ └── StockRestService.java │ │ ├── service/ │ │ │ ├── StockDemoService.java │ │ │ └── impl/ │ │ │ └── StockDemoServiceImpl.java │ │ └── util/ │ │ ├── OrderNoUtil.java │ │ └── StockUtil.java │ └── resources/ │ ├── application.yml │ ├── com/ │ │ └── xiao/ │ │ └── stock/ │ │ └── demo/ │ │ └── mapper/ │ │ ├── OrderDemoMapper.xml │ │ ├── StockChangeLodDemoMapper.xml │ │ └── StockDemoMapper.xml │ └── logback-spring.xml ├── SpringCloud-Canal/ │ ├── doc/ │ │ └── ServerRunningMonitor源码注解.md │ ├── pom.xml │ ├── readme.md │ └── src/ │ └── main/ │ ├── java/ │ │ └── com/ │ │ ├── alibaba/ │ │ │ └── canal/ │ │ │ └── simple/ │ │ │ └── ClientSample.java │ │ └── xiao/ │ │ └── springcloud/ │ │ ├── CanalSimpleApplication.java │ │ ├── canal/ │ │ │ ├── CanalClientService.java │ │ │ └── CanalConfig.java │ │ └── disruptor/ │ │ ├── DataEvent.java │ │ ├── DataEventFactory.java │ │ ├── DisruptorConsumer.java │ │ ├── DisruptorExceptionHandler.java │ │ ├── DisruptorProducer.java │ │ ├── DisruptorThreadFactory.java │ │ ├── TableData.java │ │ └── service/ │ │ ├── DisruptorService.java │ │ └── impl/ │ │ └── DisruptorServiceImpl.java │ └── resources/ │ └── application.properties ├── SpringCloud-Common/ │ ├── README.md │ ├── pom.xml │ ├── script/ │ │ ├── auto_deploy.sh │ │ ├── bootstrap.sh │ │ └── remote_deploy.sh │ └── src/ │ └── main/ │ └── java/ │ └── com/ │ └── xiao/ │ └── springcloud/ │ └── demo/ │ └── common/ │ ├── SkywalkingService.java │ ├── cache/ │ │ ├── README.md │ │ ├── code/ │ │ │ ├── FastJsonCodec.java │ │ │ └── SerializerObject.java │ │ ├── conf/ │ │ │ └── RedissonConfig.java │ │ ├── dto/ │ │ │ └── EntryDto.java │ │ ├── local/ │ │ │ └── SpringGuavaCacheConfig.java │ │ └── service/ │ │ ├── CacheService.java │ │ ├── DistributedService.java │ │ └── impl/ │ │ ├── CacheServiceRedisImpl.java │ │ └── DistributedServiceRedissonImpl.java │ ├── conf/ │ │ └── FeignConfiguration.java │ ├── disruptor/ │ │ ├── DataEventFactory.java │ │ ├── DisruptorConsumer.java │ │ ├── DisruptorExceptionHandler.java │ │ ├── DisruptorProducer.java │ │ ├── DisruptorThreadFactory.java │ │ ├── data/ │ │ │ ├── BasisData.java │ │ │ ├── DataEvent.java │ │ │ └── EventEnum.java │ │ ├── event/ │ │ │ └── ServiceEvent.java │ │ ├── readme.md │ │ └── service/ │ │ ├── DisruptorService.java │ │ └── impl/ │ │ └── DisruptorServiceImpl.java │ ├── eureka/ │ │ └── LoadBalancerAspect.java │ ├── exception/ │ │ ├── AbstractServiceException.java │ │ ├── CommonException.java │ │ └── CommonExceptionEnum.java │ ├── forkjoin/ │ │ ├── ForkjoinConfiguration.java │ │ ├── ForkjoinService.java │ │ └── task/ │ │ └── ForkjoinTask.java │ ├── gloab/ │ │ ├── interceptor/ │ │ │ ├── README.md │ │ │ ├── advice/ │ │ │ │ └── DefaultControllerAdvice.java │ │ │ ├── config/ │ │ │ │ ├── FastjsonConfig.java │ │ │ │ └── FeignConfig.java │ │ │ └── fegin/ │ │ │ ├── CommonFeignErrorDecoder.java │ │ │ ├── CommonFeignHeaderProcessInterceptor.java │ │ │ ├── DefaultCommonErrorAttributes.java │ │ │ ├── FeignBeanFactoryPostProcessor.java │ │ │ └── HttpContext.java │ │ └── response/ │ │ ├── ErrorResponseData.java │ │ ├── ResponseData.java │ │ └── SuccessResponseData.java │ ├── logaspect/ │ │ ├── LogAnnotation.java │ │ ├── LogAspect.java │ │ ├── LogInfo.java │ │ ├── LogService.java │ │ ├── README.md │ │ └── Slf4jLogService.java │ ├── sign/ │ │ ├── SignConstants.java │ │ ├── annotation/ │ │ │ ├── DisposeSign.java │ │ │ └── DisposeSignService.java │ │ ├── filter/ │ │ │ └── WrapperRequestFilter.java │ │ ├── readme.md │ │ ├── request/ │ │ │ └── BodyReaderHttpServletRequestWrapper.java │ │ ├── service/ │ │ │ ├── AppManagerService.java │ │ │ └── impl/ │ │ │ └── AppManagerServiceConfigImpl.java │ │ └── util/ │ │ ├── AsciiSortUtil.java │ │ ├── HttpRequestUtils.java │ │ └── SignUtil.java │ ├── util/ │ │ ├── CodeFormatConstants.java │ │ ├── DateUtils.java │ │ ├── ListPageUtil.java │ │ ├── StringLengthUtils.java │ │ ├── encode/ │ │ │ ├── AESEncryption.java │ │ │ ├── AESType.java │ │ │ ├── BinaryHelper.java │ │ │ ├── ByteUtils.java │ │ │ ├── HMACUtil.java │ │ │ └── Md5DigestUtil.java │ │ └── image/ │ │ ├── ImageDHashUtil.java │ │ └── ImagePHashUtil.java │ └── validator/ │ ├── CodePrefix.java │ ├── ParamAspect.java │ ├── ParamValidator.java │ ├── ParamVerify.java │ ├── Validator.java │ └── VerifyConstants.java ├── SpringCloud-ConfigCenter/ │ ├── Readme.txt │ ├── pom.xml │ └── src/ │ └── main/ │ ├── java/ │ │ └── com/ │ │ └── xiao/ │ │ └── springcloud/ │ │ └── configure/ │ │ └── ConfigureApplication.java │ └── resources/ │ └── application.yml ├── SpringCloud-Configure/ │ ├── README.txt │ ├── consumer/ │ │ ├── springcloud-dev.properties │ │ ├── springcloud-dev.yml │ │ ├── springcloud-prod.properties │ │ ├── springcloud-prod.yml │ │ ├── springcloud-test.properties │ │ └── springcloud-test.yml │ ├── eureka-server/ │ │ ├── eureka-server-dev.properties │ │ ├── eureka-server-dev.yml │ │ ├── eureka-server-test.properties │ │ └── eureka-server-test.yml │ ├── pom.xml │ └── redisson/ │ ├── redission-dev.yml │ ├── redission-sentinel-dev.yml │ ├── redisson-cloud.yml │ ├── redisson-cluster-dev.yml │ └── redisson-cluster-test.yml ├── SpringCloud-Consumer/ │ ├── pom.xml │ └── src/ │ └── main/ │ ├── java/ │ │ └── com/ │ │ └── xiao/ │ │ └── skywalking/ │ │ └── consumer/ │ │ ├── ConsumerApp.java │ │ ├── common/ │ │ │ ├── CommonConstants.java │ │ │ ├── CommonException.java │ │ │ ├── ExceptionEnum.java │ │ │ ├── advice/ │ │ │ │ ├── GlobalExceptionAdvice.java │ │ │ │ └── UnifiedReturnAdvice.java │ │ │ └── response/ │ │ │ ├── ErrorResponseData.java │ │ │ ├── ResponseData.java │ │ │ └── SuccessResponseData.java │ │ ├── controller/ │ │ │ └── FeignContoller.java │ │ ├── feign/ │ │ │ ├── FeignService.java │ │ │ └── impl/ │ │ │ ├── FQA │ │ │ └── FeignServiceImpl.java │ │ └── ribbon/ │ │ └── RibbonService.java │ └── resources/ │ ├── application.yml │ └── bootstrap.yml ├── SpringCloud-Custom-ConfigCenter/ │ ├── README.MD │ ├── custom-config-client/ │ │ ├── README.md │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── com/ │ │ │ └── xiao/ │ │ │ └── custom/ │ │ │ └── config/ │ │ │ └── client/ │ │ │ ├── configuration/ │ │ │ │ ├── ConfigClientAutoConfiguration.java │ │ │ │ ├── ConfigClientHealthProperties.java │ │ │ │ ├── ConfigClientProperties.java │ │ │ │ ├── ConfigClientStateHolder.java │ │ │ │ ├── ConfigClientWatch.java │ │ │ │ ├── ConfigServerHealthIndicator.java │ │ │ │ ├── ConfigServiceBootstrapConfiguration.java │ │ │ │ ├── ConfigServicePropertySourceLocator.java │ │ │ │ ├── DiscoveryClientConfigServiceBootstrapConfiguration.java │ │ │ │ └── RetryProperties.java │ │ │ ├── environment/ │ │ │ │ ├── Environment.java │ │ │ │ └── PropertySource.java │ │ │ ├── netty/ │ │ │ │ ├── client/ │ │ │ │ │ └── NettyClient.java │ │ │ │ ├── coder/ │ │ │ │ │ ├── ProtoDecoder.java │ │ │ │ │ └── ProtoEncoder.java │ │ │ │ ├── dto/ │ │ │ │ │ ├── CommandEnum.java │ │ │ │ │ └── Message.java │ │ │ │ ├── factory/ │ │ │ │ │ ├── CoderFactory.java │ │ │ │ │ └── NamedThreadFactory.java │ │ │ │ ├── handler/ │ │ │ │ │ └── ServiceHandler.java │ │ │ │ └── util/ │ │ │ │ ├── ProtostuffUtil.java │ │ │ │ └── RemotingUtil.java │ │ │ └── refresh/ │ │ │ ├── api/ │ │ │ │ └── RefreshController.java │ │ │ ├── component/ │ │ │ │ └── RefreshBeanConfig.java │ │ │ └── service/ │ │ │ ├── ConfigRefreshService.java │ │ │ └── impl/ │ │ │ └── ConfigRefreshServiceImpl.java │ │ └── resources/ │ │ └── META-INF/ │ │ └── spring.factories │ ├── custom-config-dependencies/ │ │ └── pom.xml │ ├── custom-config-pojo/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── com/ │ │ │ └── xiao/ │ │ │ └── custom/ │ │ │ └── config/ │ │ │ └── pojo/ │ │ │ ├── common/ │ │ │ │ └── BaseQuery.java │ │ │ ├── dto/ │ │ │ │ ├── ApplicationConfigDto.java │ │ │ │ ├── ApplicationDto.java │ │ │ │ ├── ClientHostInfoDto.java │ │ │ │ ├── ConfigItemDto.java │ │ │ │ ├── ConfigItemGroupDto.java │ │ │ │ ├── RegionDto.java │ │ │ │ └── ServerHostConfigDto.java │ │ │ ├── entity/ │ │ │ │ ├── Application.java │ │ │ │ ├── ApplicationConfig.java │ │ │ │ ├── ApplicationItemGroupRelation.java │ │ │ │ ├── AuthUser.java │ │ │ │ ├── ClientApplication.java │ │ │ │ ├── ClientHostInfo.java │ │ │ │ ├── ClientInfo.java │ │ │ │ ├── ConfigItem.java │ │ │ │ ├── ConfigItemGroup.java │ │ │ │ ├── ConfigItemGroupRelation.java │ │ │ │ ├── Region.java │ │ │ │ ├── Role.java │ │ │ │ └── ServerHostConfig.java │ │ │ ├── mapper/ │ │ │ │ ├── ApplicationConfigMapper.java │ │ │ │ ├── ApplicationItemGroupRelationMapper.java │ │ │ │ ├── ApplicationMapper.java │ │ │ │ ├── AuthMapper.java │ │ │ │ ├── ClientApplicationMapper.java │ │ │ │ ├── ClientHostInfoMapper.java │ │ │ │ ├── ConfigItemGroupMapper.java │ │ │ │ ├── ConfigItemGroupRelationMapper.java │ │ │ │ ├── ConfigItemMapper.java │ │ │ │ ├── RegionMapper.java │ │ │ │ └── ServerHostConfigMapper.java │ │ │ └── query/ │ │ │ ├── AppQuery.java │ │ │ ├── ApplicationConfigQuery.java │ │ │ ├── ClientHostInfoQuery.java │ │ │ ├── ConfigItemGroupQuery.java │ │ │ ├── ConfigItemQuery.java │ │ │ ├── RegionQuery.java │ │ │ └── ServerHostConfigQuery.java │ │ └── resources/ │ │ └── com/ │ │ └── xiao/ │ │ └── custom/ │ │ └── config/ │ │ └── pojo/ │ │ └── mapper/ │ │ ├── ApplicationConfigMapper.xml │ │ ├── ApplicationItemGroupRelationMapper.xml │ │ ├── ApplicationMapper.xml │ │ ├── AuthMapper.xml │ │ ├── ClientApplicationMapper.xml │ │ ├── ClientHostInfoMapper.xml │ │ ├── ConfigItemGroupMapper.xml │ │ ├── ConfigItemGroupRelationMapper.xml │ │ ├── ConfigItemMapper.xml │ │ ├── RegionMapper.xml │ │ └── ServerHostConfigMapper.xml │ ├── custom-config-server/ │ │ ├── README.md │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── com/ │ │ │ └── xiao/ │ │ │ └── custom/ │ │ │ └── config/ │ │ │ └── server/ │ │ │ ├── ConfigerCenterApplication.java │ │ │ ├── annotation/ │ │ │ │ └── CustomEnableConfigServer.java │ │ │ ├── config/ │ │ │ │ └── CustomEnvironmentRepositoryConfiguration.java │ │ │ ├── controller/ │ │ │ │ └── RefreshController.java │ │ │ ├── environment/ │ │ │ │ └── CustomEnvironmentRepository.java │ │ │ ├── manager/ │ │ │ │ ├── ClientManagerService.java │ │ │ │ ├── SqlConstants.java │ │ │ │ └── impl/ │ │ │ │ └── ClientManagerServiceDbImpl.java │ │ │ ├── netty/ │ │ │ │ ├── coder/ │ │ │ │ │ ├── ProtoDecoder.java │ │ │ │ │ └── ProtoEncoder.java │ │ │ │ ├── dto/ │ │ │ │ │ ├── CommandEnum.java │ │ │ │ │ └── Message.java │ │ │ │ ├── factory/ │ │ │ │ │ ├── CoderFactory.java │ │ │ │ │ └── NamedThreadFactory.java │ │ │ │ ├── handler/ │ │ │ │ │ └── ServiceHandler.java │ │ │ │ ├── manager/ │ │ │ │ │ ├── Connection.java │ │ │ │ │ └── ConnectionManager.java │ │ │ │ ├── server/ │ │ │ │ │ └── NettyServer.java │ │ │ │ └── util/ │ │ │ │ ├── NettyConfig.java │ │ │ │ ├── NettyEventLoopUtil.java │ │ │ │ ├── ProtostuffUtil.java │ │ │ │ └── RemotingUtil.java │ │ │ └── service/ │ │ │ ├── RefreshService.java │ │ │ ├── RepositoryService.java │ │ │ └── impl/ │ │ │ ├── JdbcRepositoryServiceImpl.java │ │ │ └── RefreshServiceImpl.java │ │ └── resources/ │ │ └── application.yml │ ├── custom-config-service/ │ │ ├── README.md │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── com/ │ │ │ └── xiao/ │ │ │ └── custom/ │ │ │ └── config/ │ │ │ └── service/ │ │ │ ├── ConfigServiceApplication.java │ │ │ ├── api/ │ │ │ │ ├── ApplicationApi.java │ │ │ │ ├── AuthApi.java │ │ │ │ ├── ClientHostApi.java │ │ │ │ ├── ConfigItemApi.java │ │ │ │ ├── ConfigItemGroupApi.java │ │ │ │ ├── RegionApi.java │ │ │ │ └── ServerHostConfigApi.java │ │ │ ├── feign/ │ │ │ │ └── RefreshFeign.java │ │ │ └── service/ │ │ │ ├── ApplicationItemGroupRelationService.java │ │ │ ├── ApplicationService.java │ │ │ ├── AuthService.java │ │ │ ├── ClientHostService.java │ │ │ ├── ConfigItemGroupRelationService.java │ │ │ ├── ConfigItemGroupService.java │ │ │ ├── ConfigItemService.java │ │ │ ├── RegionService.java │ │ │ ├── ServerHostConfigService.java │ │ │ └── impl/ │ │ │ ├── ApplicationItemGroupRelationServiceImpl.java │ │ │ ├── ApplicationServiceImpl.java │ │ │ ├── AuthServiceImpl.java │ │ │ ├── ClientHostServiceImpl.java │ │ │ ├── ConfigItemGroupRelationServiceImpl.java │ │ │ ├── ConfigItemGroupServiceImpl.java │ │ │ ├── ConfigItemServiceImpl.java │ │ │ ├── RegionServiceImpl.java │ │ │ └── ServerHostConfigServiceImpl.java │ │ └── resources/ │ │ ├── application.yml │ │ └── bootstrap.yml │ ├── custom-config-simple/ │ │ ├── README.md │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── com/ │ │ │ └── xiao/ │ │ │ └── custom/ │ │ │ └── config/ │ │ │ └── simple/ │ │ │ ├── ConfigClientApplication.java │ │ │ ├── datasource/ │ │ │ │ └── DataSourceConfigure.java │ │ │ └── demo/ │ │ │ └── ControllerDemo.java │ │ └── resources/ │ │ ├── bootstrap.yml │ │ └── logback-spring.xml │ ├── custom-config-web/ │ │ ├── README.md │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── com/ │ │ │ └── xiao/ │ │ │ └── custom/ │ │ │ └── config/ │ │ │ └── web/ │ │ │ ├── ConfigCenterWebApplication.java │ │ │ ├── auth/ │ │ │ │ ├── AuthContants.java │ │ │ │ ├── config/ │ │ │ │ │ ├── HttpSessionConfig.java │ │ │ │ │ ├── JwtAuthenticationEntryPoint.java │ │ │ │ │ ├── JwtAuthenticationTokenFilter.java │ │ │ │ │ ├── RestAccessDeniedHandler.java │ │ │ │ │ └── WebSecurityConfig.java │ │ │ │ ├── controller/ │ │ │ │ │ └── AuthController.java │ │ │ │ ├── entity/ │ │ │ │ │ ├── ResponseUserToken.java │ │ │ │ │ ├── User.java │ │ │ │ │ └── UserDetail.java │ │ │ │ ├── exception/ │ │ │ │ │ ├── CustomException.java │ │ │ │ │ └── DefaultExceptionHandler.java │ │ │ │ ├── service/ │ │ │ │ │ ├── AuthUserService.java │ │ │ │ │ └── impl/ │ │ │ │ │ ├── AuthUserServiceImpl.java │ │ │ │ │ └── ConfigUserDetailsServiceImpl.java │ │ │ │ └── util/ │ │ │ │ ├── JwtUtils.java │ │ │ │ ├── PageResult.java │ │ │ │ ├── ResultCode.java │ │ │ │ └── ResultJson.java │ │ │ ├── commo/ │ │ │ │ └── Constants.java │ │ │ ├── config/ │ │ │ │ └── AppControllerAdvice.java │ │ │ ├── controller/ │ │ │ │ ├── ClientInfoController.java │ │ │ │ ├── ConfigGroupController.java │ │ │ │ ├── ConfigItemController.java │ │ │ │ ├── IndexController.java │ │ │ │ ├── RegionController.java │ │ │ │ ├── ServerHostConfigController.java │ │ │ │ └── app/ │ │ │ │ ├── AppManagerController.java │ │ │ │ └── vo/ │ │ │ │ ├── ApplicationVo.java │ │ │ │ └── RegionVo.java │ │ │ ├── dto/ │ │ │ │ └── ServerHostConfigDto.java │ │ │ ├── exception/ │ │ │ │ └── ExceptionEnum.java │ │ │ └── feign/ │ │ │ ├── app/ │ │ │ │ └── ApplicationFeign.java │ │ │ ├── auth/ │ │ │ │ └── AuthFeign.java │ │ │ ├── client/ │ │ │ │ └── ClientInfoFeign.java │ │ │ ├── config/ │ │ │ │ ├── ConfigGroupFeign.java │ │ │ │ └── ConfigItemFeign.java │ │ │ ├── region/ │ │ │ │ └── RegionFeign.java │ │ │ └── server/ │ │ │ └── ServerHostConfigFeign.java │ │ └── resources/ │ │ ├── application.properties │ │ ├── application.yml │ │ ├── bootstrap.yml │ │ └── static/ │ │ ├── mock/ │ │ │ ├── index.js │ │ │ └── mock.js │ │ ├── pages/ │ │ │ ├── app/ │ │ │ │ ├── add.html │ │ │ │ ├── add.js │ │ │ │ ├── app.html │ │ │ │ ├── app.js │ │ │ │ ├── configgroup.html │ │ │ │ ├── configgroup.js │ │ │ │ ├── detail.html │ │ │ │ ├── detail.js │ │ │ │ ├── refconfiggroup.html │ │ │ │ └── refconfiggroup.js │ │ │ ├── client/ │ │ │ │ ├── client.html │ │ │ │ └── client.js │ │ │ ├── config/ │ │ │ │ ├── configitem.html │ │ │ │ └── configitem.js │ │ │ ├── configgroup/ │ │ │ │ ├── configgroup.html │ │ │ │ ├── configgroup.js │ │ │ │ ├── detail.html │ │ │ │ ├── detail.js │ │ │ │ ├── refdetail.html │ │ │ │ └── refdetail.js │ │ │ ├── error/ │ │ │ │ ├── 401.html │ │ │ │ ├── 404.html │ │ │ │ └── 500.html │ │ │ ├── home/ │ │ │ │ ├── home.html │ │ │ │ └── home.js │ │ │ ├── index/ │ │ │ │ ├── compents.js │ │ │ │ ├── index.css │ │ │ │ ├── index.html │ │ │ │ └── index.js │ │ │ ├── login/ │ │ │ │ └── login.html │ │ │ ├── region/ │ │ │ │ ├── region.html │ │ │ │ └── region.js │ │ │ ├── server/ │ │ │ │ ├── server.js │ │ │ │ └── serverlist.html │ │ │ ├── support/ │ │ │ │ ├── code_check.html │ │ │ │ └── support.html │ │ │ └── template/ │ │ │ ├── detail.html │ │ │ ├── detail.js │ │ │ ├── template.html │ │ │ └── template.js │ │ └── plugin/ │ │ ├── common/ │ │ │ ├── common.js │ │ │ └── env.js │ │ ├── element/ │ │ │ ├── js/ │ │ │ │ └── index.js │ │ │ └── styles/ │ │ │ ├── fonts/ │ │ │ │ ├── iconfont.css │ │ │ │ └── iconfont.js │ │ │ └── index.css │ │ ├── iview/ │ │ │ ├── js/ │ │ │ │ └── iview-editor.js │ │ │ └── styles/ │ │ │ ├── iview-editor.css │ │ │ └── iview.css │ │ ├── jquery/ │ │ │ ├── 3.3.1/ │ │ │ │ └── jquery.js │ │ │ └── jquery.history.js │ │ └── mock/ │ │ └── mock-min.js │ ├── custom-starter-config/ │ │ ├── README.md │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ └── resources/ │ │ └── META-INF/ │ │ └── spring.provides │ ├── doc/ │ │ └── configMysql.sql │ └── pom.xml ├── SpringCloud-Custom-RestTemplate-Stater/ │ ├── Readme.md │ ├── SpringCloud-RestTemplate-Stater/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── com/ │ │ │ └── xiao/ │ │ │ └── springcloud/ │ │ │ └── rest/ │ │ │ └── stater/ │ │ │ └── autoconfig/ │ │ │ ├── common/ │ │ │ │ ├── dto/ │ │ │ │ │ └── Request.java │ │ │ │ ├── interceptor/ │ │ │ │ │ └── RestInterceptor.java │ │ │ │ ├── log/ │ │ │ │ │ ├── annotation/ │ │ │ │ │ │ ├── RequestLog.java │ │ │ │ │ │ └── RequestLogAspect.java │ │ │ │ │ ├── dto/ │ │ │ │ │ │ └── HttpRequestLog.java │ │ │ │ │ └── service/ │ │ │ │ │ └── HttpRequestLogService.java │ │ │ │ ├── service/ │ │ │ │ │ ├── HttpClientService.java │ │ │ │ │ └── impl/ │ │ │ │ │ └── HttpClientServiceImpl.java │ │ │ │ └── util/ │ │ │ │ └── ThreadLocalUtil.java │ │ │ └── config/ │ │ │ ├── RestTemplateConfiguration.java │ │ │ └── properties/ │ │ │ ├── HttpPoolProperties.java │ │ │ └── OkHttpProperties.java │ │ └── resources/ │ │ └── META-INF/ │ │ └── spring.factories │ ├── SpringCloud-RestTemplate-Stater-Example/ │ │ ├── pom.xml │ │ └── src/ │ │ ├── main/ │ │ │ ├── java/ │ │ │ │ └── com/ │ │ │ │ └── xiao/ │ │ │ │ └── springcloud/ │ │ │ │ └── rest/ │ │ │ │ ├── RestTemplateStaterApp.java │ │ │ │ └── log/ │ │ │ │ └── impl/ │ │ │ │ └── HttpLogServiceiImpl.java │ │ │ └── resources/ │ │ │ ├── application.yml │ │ │ └── logback-spring.xml │ │ └── test/ │ │ └── java/ │ │ └── com/ │ │ └── xiao/ │ │ └── springcloud/ │ │ └── rest/ │ │ ├── RestTemplateStarterAppTest.java │ │ └── httpclient/ │ │ └── HttpClientTest.java │ └── pom.xml ├── SpringCloud-Demo-Doc/ │ ├── ES/ │ │ ├── ElasticSearch后台操作(使用)手册1.0.docx │ │ ├── ElasticSearch安装手册1.0.docx │ │ ├── Elasticsearch IK分词器扩展说明.docx │ │ └── es索引创建1.1.jmx │ ├── docker/ │ │ ├── batch_del.sh │ │ ├── docker-build.sh │ │ ├── docker-monitor.json │ │ ├── docker-monitor.yml │ │ └── docker-swarm-springcloud.md │ ├── gitlab/ │ │ ├── Gitlab使用手册.docx │ │ ├── Gitlab安装手册.docx │ │ ├── gitlab-ci.yml │ │ ├── sonar_analyze.sh │ │ └── sonar_preview.sh │ ├── k8s/ │ │ ├── CronJob.yaml │ │ ├── DaemonSet.yaml │ │ ├── Job.yaml │ │ ├── K8S Linux Centos 7安装.docx │ │ ├── Pod.yaml │ │ ├── ReplicaSet.yaml │ │ ├── ReplicationController.yaml │ │ ├── k8s-master-bootstrap.sh │ │ └── k8s-node-bootstrap.sh │ ├── kafka+elk/ │ │ ├── ELK安装文档.docx │ │ ├── ELK日志logstash解析JSON嵌套.md │ │ ├── ElasticSearch安装手册1.0.docx │ │ ├── Kafka安装指导手册.docx │ │ ├── elk+springboot+kafka日志跟踪配置.docx │ │ └── 使用logback-kafka导致服务之间调用多1分钟之坑.md │ ├── linux/ │ │ └── Linux-netstat命令.md │ ├── pom.xml │ ├── rxjava/ │ │ └── RxJavaHelloWorld.MD │ ├── spring-cloud/ │ │ ├── README.md │ │ ├── SpringCloud-FQA.md │ │ ├── 源码解析专栏/ │ │ │ ├── Spring Cloud Config Client加载配置源码分析.md │ │ │ ├── Spring Cloud Config 是如何实现热更新的 │ │ │ ├── Spring Cloud Netflix Eureka多网卡环境下Eureka服务注册IP选择问题.md │ │ │ ├── Spring Cloud Netflix Eureka源码导读与原理分析.md │ │ │ ├── eureka分区的深入讲解.md │ │ │ └── spring-cloud-feign源码深度解析.md │ │ └── 链路跟踪/ │ │ └── spring-cloud+skywalking链路跟踪.docx │ ├── sql/ │ │ └── 行政区域带经纬度.sql │ ├── 其他个人总结/ │ │ ├── Jmeter分布式压测.docx │ │ ├── openresty.conf │ │ ├── stock.lua │ │ ├── 参数校验注解使用指南.docx │ │ ├── 微信小程序MQTT协议通信.docx │ │ └── 聊一聊微服务.pptx │ └── 持续集成/ │ ├── Gitlab+P3C-PMD(Aliyun)标准化你团队的代码.docx │ ├── Gitlab安装手册.docx │ ├── Gitlab的Hooks(钩子)做Push代码检测.docx │ ├── auto_deploy.sh │ ├── bootstrap.sh │ ├── example-gitlab-ci.yml │ ├── gitlab-hooks/ │ │ ├── checkStyle模板 │ │ ├── pre-receive │ │ ├── pre-receive(checkstyle版本,使用请更名为pre-receive) │ │ └── pre-receive(p3c-pmd版,使用请更名为pre-receive) │ ├── monitor-jstat.sh │ ├── remote_deploy.sh │ ├── 代码质量监控体系方案.pptx │ ├── 代码质量监控平台.docx │ ├── 代码质量监控平台安装使用手册.docx │ ├── 持续集成之Jenkins安装和使用指导手册.docx │ └── 持续集成之Sonarqube安装和使用指导手册.docx ├── SpringCloud-Docker/ │ ├── Dockerfile │ ├── README.md │ ├── docker-build.sh │ ├── pom.xml │ ├── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── com/ │ │ │ └── xiao/ │ │ │ └── springboot/ │ │ │ └── docker/ │ │ │ ├── OmniZipkinServerApplication.java │ │ │ └── controller/ │ │ │ └── DockerDemo.java │ │ └── resources/ │ │ └── application.yml │ └── zipkin-server-docker.sh ├── SpringCloud-Eureka/ │ ├── pom.xml │ ├── readme.txt │ ├── sql/ │ │ └── config.sql │ └── src/ │ └── main/ │ ├── java/ │ │ └── com/ │ │ └── xiao/ │ │ └── skywalking/ │ │ └── center/ │ │ └── Application.java │ └── resources/ │ ├── application.yml │ └── bootstrap.yml ├── SpringCloud-Gateway/ │ ├── README.txt │ ├── pom.xml │ └── src/ │ └── main/ │ ├── java/ │ │ └── com/ │ │ └── xiao/ │ │ └── skywalking/ │ │ └── gateway/ │ │ └── zuul/ │ │ └── GatewayApplication.java │ └── resources/ │ └── application.yml ├── SpringCloud-Hystrix-Demo/ │ ├── README.MD │ ├── SpringCloud-Hystrix-Consumer/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── com/ │ │ │ └── xiao/ │ │ │ └── hystrix/ │ │ │ └── demo/ │ │ │ └── consumer/ │ │ │ ├── ConsumerApplication.java │ │ │ ├── api/ │ │ │ │ └── ConsumerRestService.java │ │ │ ├── common/ │ │ │ │ └── CacheConstants.java │ │ │ ├── config/ │ │ │ │ ├── CaffeineCacheConfiguration.java │ │ │ │ ├── FeignConfiguration.java │ │ │ │ └── HystrixCacheConfiguration.java │ │ │ ├── dynamic/ │ │ │ │ ├── DynamicConfigSource.java │ │ │ │ └── InitHystrixConfiguration.java │ │ │ ├── feign/ │ │ │ │ ├── ProducerFeign.java │ │ │ │ └── impl/ │ │ │ │ ├── ProducerFeignFactory.java │ │ │ │ └── ProducerFeignFallBack.java │ │ │ └── filter/ │ │ │ └── HystrixCacheFilter.java │ │ └── resources/ │ │ ├── application.properties │ │ ├── application.yml │ │ └── bootstrap.yml │ ├── SpringCloud-Hystrix-Eureka/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── com/ │ │ │ └── xiao/ │ │ │ └── hystrix/ │ │ │ └── demo/ │ │ │ └── eureka/ │ │ │ └── EurekaApplication.java │ │ └── resources/ │ │ └── bootstrap.yml │ ├── SpringCloud-Hystrix-Producer/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── com/ │ │ │ └── xiao/ │ │ │ └── hystrix/ │ │ │ └── demo/ │ │ │ └── producer/ │ │ │ ├── ProducerApplication.java │ │ │ ├── api/ │ │ │ │ └── ProducerRestService.java │ │ │ └── service/ │ │ │ ├── ProducerService.java │ │ │ └── impl/ │ │ │ └── ProducerServiceImpl.java │ │ └── resources/ │ │ ├── application.properties │ │ ├── application.yml │ │ └── bootstrap.yml │ └── pom.xml ├── SpringCloud-Kafka-Elk/ │ ├── README.md │ ├── pom.xml │ └── src/ │ └── main/ │ ├── java/ │ │ └── com/ │ │ └── xiao/ │ │ └── springcloud/ │ │ └── demo/ │ │ └── kafka/ │ │ └── elk/ │ │ ├── ElkKafkaApplication.java │ │ └── kafka/ │ │ ├── KafkaProducerTest.java │ │ └── LogCompent.java │ └── resources/ │ ├── application.yml │ ├── bootstrap.yml │ └── logback-spring.xml ├── SpringCloud-MQTT/ │ ├── Readme.MD │ ├── doc/ │ │ ├── mqtt.conf │ │ ├── nginx.conf │ │ └── wss.conf │ ├── pom.xml │ └── src/ │ └── main/ │ ├── java/ │ │ └── com/ │ │ └── skywalking/ │ │ └── mqtt/ │ │ ├── ClientCallback.java │ │ ├── MqttServiceApp.java │ │ ├── MqttTestClient.java │ │ ├── MvcController.java │ │ ├── PurTrustManager.java │ │ └── TopicProducerTest.java │ ├── resources/ │ │ └── application.yml │ └── webapp/ │ └── WEB-INF/ │ ├── js/ │ │ ├── crypto-js.js │ │ ├── layer/ │ │ │ ├── layer.js │ │ │ ├── mobile/ │ │ │ │ ├── layer.js │ │ │ │ └── need/ │ │ │ │ └── layer.css │ │ │ └── skin/ │ │ │ └── default/ │ │ │ └── layer.css │ │ └── mqttws31-min.js │ └── jsp/ │ └── mqtt_client.jsp ├── SpringCloud-Mybatis/ │ ├── pom.xml │ └── src/ │ └── main/ │ ├── java/ │ │ └── com/ │ │ └── xiao/ │ │ └── springcloud/ │ │ └── mybatis/ │ │ └── generator/ │ │ └── plugin/ │ │ └── LombokPlugin.java │ └── resources/ │ └── generatorConfig.xml ├── SpringCloud-Provider/ │ ├── pom.xml │ └── src/ │ └── main/ │ ├── java/ │ │ └── com/ │ │ └── xiao/ │ │ └── skywalking/ │ │ └── provider/ │ │ ├── ProviderApp.java │ │ ├── controller/ │ │ │ └── SkywalkingController.java │ │ └── local/ │ │ └── cache/ │ │ └── SpringGuavaCacheConfig.java │ └── resources/ │ └── application.yml ├── SpringCloud-Quartz-JobService/ │ ├── README.md │ ├── pom.xml │ └── src/ │ └── main/ │ ├── java/ │ │ └── com/ │ │ └── xiao/ │ │ └── springcloud/ │ │ └── job/ │ │ ├── JobServiceApplication.java │ │ ├── config/ │ │ │ ├── JobConfig.java │ │ │ └── TaskSchedulerFactory.java │ │ ├── entity/ │ │ │ └── TaskConfigDocument.java │ │ ├── job/ │ │ │ └── ServiceTaskExecuteJob.java │ │ ├── quartz/ │ │ │ └── JobManager.java │ │ └── util/ │ │ └── CronExpUtil.java │ └── resources/ │ ├── application.yml │ └── bootstrap.yml ├── SpringCloud-Redisson/ │ ├── README.md │ ├── pom.xml │ └── src/ │ ├── main/ │ │ ├── java/ │ │ │ └── com/ │ │ │ └── xiao/ │ │ │ └── spring/ │ │ │ └── cloud/ │ │ │ └── redisson/ │ │ │ ├── SpringDataRedissonApplication.java │ │ │ └── config/ │ │ │ └── SpringDataRedissonConfig.java │ │ └── resources/ │ │ ├── application.yml │ │ └── redisson.yml │ └── test/ │ └── java/ │ └── com/ │ └── xiao/ │ └── spring/ │ └── cloud/ │ └── redisson/ │ └── SpringDataRedissonApplicationTest.java ├── SpringCloud-SearchService/ │ ├── pom.xml │ └── src/ │ ├── main/ │ │ ├── java/ │ │ │ └── com/ │ │ │ └── xiao/ │ │ │ └── spring/ │ │ │ └── cloud/ │ │ │ └── search/ │ │ │ ├── SearchApplication.java │ │ │ ├── dto/ │ │ │ │ ├── ElasticSearchDoc.java │ │ │ │ ├── PaginationDo.java │ │ │ │ ├── SearchBrandDo.java │ │ │ │ ├── SearchCategoryDo.java │ │ │ │ ├── SearchCommoPropOptionDto.java │ │ │ │ ├── SearchCommodityPropertyDo.java │ │ │ │ ├── SearchCommodityResultDo.java │ │ │ │ ├── SearchLogDo.java │ │ │ │ ├── SearchMenusDo.java │ │ │ │ ├── SearchRequestDo.java │ │ │ │ ├── SearchResultDo.java │ │ │ │ ├── SearchShopWeightDto.java │ │ │ │ └── ShopPriceRangeDto.java │ │ │ ├── es/ │ │ │ │ ├── client/ │ │ │ │ │ └── ElasticSearchClient.java │ │ │ │ ├── common/ │ │ │ │ │ ├── AnalyzeType.java │ │ │ │ │ ├── ESConstants.java │ │ │ │ │ ├── OrderField.java │ │ │ │ │ └── SearchException.java │ │ │ │ ├── log/ │ │ │ │ │ ├── ISearchLogService.java │ │ │ │ │ ├── impl/ │ │ │ │ │ │ └── SearchLogServiceImpl.java │ │ │ │ │ └── thread/ │ │ │ │ │ ├── BatchSaveSearchLogThread.java │ │ │ │ │ ├── SearchLogThread.java │ │ │ │ │ ├── SearchLogThreadPool.java │ │ │ │ │ └── SearchThreadFactory.java │ │ │ │ └── service/ │ │ │ │ ├── SearchManagerEsImpl.java │ │ │ │ └── SearchServiceEsImpl.java │ │ │ ├── rest/ │ │ │ │ ├── SearchManagerRestService.java │ │ │ │ └── SearchRestService.java │ │ │ └── service/ │ │ │ ├── SearchManangerService.java │ │ │ └── SearchService.java │ │ └── resources/ │ │ ├── application.yml │ │ ├── bootstrap.yml │ │ └── logback-spring.xml │ └── test/ │ └── java/ │ └── com/ │ └── xiao/ │ └── springcloud/ │ └── test/ │ ├── SearchApplicationTest.java │ ├── SearchManagerTest.java │ ├── SearchTest.java │ └── cache/ │ └── RedisCacheTest.java ├── SpringCloud-Sentinel/ │ ├── Readme.MD │ ├── SpringCloud-Sentinel-Consumer/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── com/ │ │ │ └── xiao/ │ │ │ └── springcloud/ │ │ │ └── sentinel/ │ │ │ └── consumer/ │ │ │ ├── ConsumerApplication.java │ │ │ ├── api/ │ │ │ │ └── ConsumerRestService.java │ │ │ ├── config/ │ │ │ │ └── FeignConfiguration.java │ │ │ └── feign/ │ │ │ ├── ProducerFeign.java │ │ │ └── fallback/ │ │ │ └── ProducerFeignFallBack.java │ │ └── resources/ │ │ ├── application.properties │ │ ├── application.yml │ │ └── bootstrap.yml │ ├── SpringCloud-Sentinel-Eureka/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── com.xiao.springcloud.sentinel.eureka/ │ │ │ └── EurekaApplication.java │ │ └── resources/ │ │ └── bootstrap.yml │ ├── SpringCloud-Sentinel-Producer/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── com/ │ │ │ └── xiao/ │ │ │ └── springcloud/ │ │ │ └── sentinel/ │ │ │ └── producer/ │ │ │ ├── ProducerApplication.java │ │ │ ├── api/ │ │ │ │ └── ProducerRestService.java │ │ │ └── service/ │ │ │ ├── ProducerService.java │ │ │ └── impl/ │ │ │ └── ProducerServiceImpl.java │ │ └── resources/ │ │ ├── application.properties │ │ ├── application.yml │ │ └── bootstrap.yml │ ├── dashbord/ │ │ └── readme.md │ └── pom.xml ├── SpringCloud-Sharding-Sphere/ │ ├── pom.xml │ └── src/ │ └── main/ │ ├── java/ │ │ └── com/ │ │ └── purcotton/ │ │ └── sharding/ │ │ └── sphere/ │ │ └── demo/ │ │ ├── SpringBootStarterExample.java │ │ ├── entity/ │ │ │ ├── Order.java │ │ │ └── OrderItem.java │ │ ├── repository/ │ │ │ ├── CommonRepository.java │ │ │ ├── OrderItemRepository.java │ │ │ └── OrderRepository.java │ │ └── service/ │ │ ├── BasisCommonService.java │ │ ├── CommonService.java │ │ └── impl/ │ │ └── SpringPojoServiceImpl.java │ └── resources/ │ ├── META-INF/ │ │ ├── mappers/ │ │ │ ├── OrderItemMapper.xml │ │ │ └── OrderMapper.xml │ │ └── mybatis-config.xml │ ├── application-sharding-databases.properties │ ├── application.properties │ └── logback.xml ├── SpringCloud-ZipkinServer/ │ ├── README.md │ ├── pom.xml │ └── src/ │ └── main/ │ ├── java/ │ │ └── com/ │ │ └── xiao/ │ │ └── springcloud/ │ │ └── zs/ │ │ └── ZipkinServerApplication.java │ └── resources/ │ ├── application.properties │ └── application.yml ├── SpringCloud-Zookeeper/ │ ├── pom.xml │ └── readme.md └── pom.xml
Showing preview only (225K chars total). Download the full file or copy to clipboard to get everything.
SYMBOL INDEX (2405 symbols across 439 files)
FILE: SpringBoot-Admin/src/main/java/com/xiao/spring/boot/admin/SpringBootAdminApplication.java
class SpringBootAdminApplication (line 16) | @Configuration
method main (line 21) | public static void main(String[] args)
FILE: SpringBoot-Custom-Elasticsearch-Starter/Custom-Elasticsearch-Starter-Autoconfig/src/main/java/com/xiao/custom/elasticsearch/start/autoconfig/ElasticsearchAutoConfiguration.java
class ElasticsearchAutoConfiguration (line 34) | @Configuration
method restHighLevelClient (line 41) | @Bean
method destroy (line 123) | @Override
FILE: SpringBoot-Custom-Elasticsearch-Starter/Custom-Elasticsearch-Starter-Autoconfig/src/main/java/com/xiao/custom/elasticsearch/start/autoconfig/properties/ElasticsearchProperties.java
class ElasticsearchProperties (line 18) | @Data
FILE: SpringBoot-Custom-Elasticsearch-Starter/Custom-Elasticsearch-Starter-Autoconfig/src/main/java/com/xiao/custom/elasticsearch/start/autoconfig/properties/HostInfo.java
class HostInfo (line 13) | @Data
FILE: SpringBoot-Custom-Elasticsearch-Starter/Custom-Elasticsearch-Starter-Example/src/main/java/com/xiao/custom/elasticsearch/starter/example/ElasticsearchApplication.java
class ElasticsearchApplication (line 14) | @SpringBootApplication
method main (line 17) | public static void main(String[] args)
FILE: SpringBoot-Custom-Elasticsearch-Starter/Custom-Elasticsearch-Starter-Example/src/test/java/com/xiao/custom/elasticsearch/starter/example/ElasticsearchApplicationTest.java
class ElasticsearchApplicationTest (line 73) | @RunWith(SpringRunner.class)
method testQuery (line 87) | @Test
method testBulkRequest (line 127) | public void testBulkRequest()
method testBulkProcessor (line 184) | @Test
method testInsert (line 256) | @Test
method testGetIndex (line 332) | @Test
method testUpdate (line 388) | @Test
method testDel (line 481) | @Test
method testCreateIndex (line 521) | @Test
method testIndexExist (line 569) | @Test
method testDelIndex (line 587) | @Test
method testOpenAndCloseIndex (line 640) | @Test
method setOptionParams (line 658) | private void setOptionParams(AcknowledgedRequest request)
method testAnalysis (line 679) | @Test
FILE: SpringBoot-Custom-Rest-Starter/SpringBoot-Custom-Rest-Autconfigure/src/main/java/com/xiao/custom/rest/starter/autoconfigure/config/RestTemplateConfiguration.java
class RestTemplateConfiguration (line 51) | @Configuration
method okHttpHttpRequestFactory (line 66) | @Bean
method httpPoolRequestFactory (line 91) | @Bean
method restTemplate (line 136) | @Bean
method retryService (line 160) | @Bean
method httpClientService (line 175) | @Bean
method asyncHttpClientService (line 192) | @Bean
method buildOkHttpsClient (line 208) | private OkHttpClient.Builder buildOkHttpsClient()
method buildSslContext (line 222) | private SSLContext buildSslContext()
method buildTrustManagers (line 238) | private TrustManager[] buildTrustManagers()
FILE: SpringBoot-Custom-Rest-Starter/SpringBoot-Custom-Rest-Autconfigure/src/main/java/com/xiao/custom/rest/starter/autoconfigure/config/properties/HttpPoolProperties.java
class HttpPoolProperties (line 16) | @Component
FILE: SpringBoot-Custom-Rest-Starter/SpringBoot-Custom-Rest-Autconfigure/src/main/java/com/xiao/custom/rest/starter/autoconfigure/config/properties/OkHttpProperties.java
class OkHttpProperties (line 16) | @Component
FILE: SpringBoot-Custom-Rest-Starter/SpringBoot-Custom-Rest-Autconfigure/src/main/java/com/xiao/custom/rest/starter/autoconfigure/dto/Request.java
class Request (line 14) | @Data
FILE: SpringBoot-Custom-Rest-Starter/SpringBoot-Custom-Rest-Autconfigure/src/main/java/com/xiao/custom/rest/starter/autoconfigure/interceptor/RestInterceptor.java
class RestInterceptor (line 31) | @Slf4j
method intercept (line 58) | @Override
method filtrationHeaders (line 80) | private Map<String, Object> filtrationHeaders(HttpHeaders httpHeaders)
FILE: SpringBoot-Custom-Rest-Starter/SpringBoot-Custom-Rest-Autconfigure/src/main/java/com/xiao/custom/rest/starter/autoconfigure/log/annotation/RequestLogAspect.java
class RequestLogAspect (line 27) | @Aspect
method logAnnotatison (line 49) | @Pointcut("@annotation(com.xiao.custom.rest.starter.autoconfigure.log....
method execute (line 63) | @Around("logAnnotatison()")
method subParams (line 134) | private String subParams(String toJsonString)
FILE: SpringBoot-Custom-Rest-Starter/SpringBoot-Custom-Rest-Autconfigure/src/main/java/com/xiao/custom/rest/starter/autoconfigure/log/dto/HttpRequestLog.java
class HttpRequestLog (line 15) | @Data
FILE: SpringBoot-Custom-Rest-Starter/SpringBoot-Custom-Rest-Autconfigure/src/main/java/com/xiao/custom/rest/starter/autoconfigure/log/service/HttpRequestLogService.java
type HttpRequestLogService (line 13) | public interface HttpRequestLogService
method saveRequestLog (line 22) | void saveRequestLog(HttpRequestLog requestLog);
FILE: SpringBoot-Custom-Rest-Starter/SpringBoot-Custom-Rest-Autconfigure/src/main/java/com/xiao/custom/rest/starter/autoconfigure/service/HttpClientService.java
type HttpClientService (line 14) | public interface HttpClientService
method doForObject (line 24) | <T> T doForObject(Request request);
method doRequest (line 26) | <T> T doRequest(Request request);
method getForObject (line 28) | <T> T getForObject(Request request);
method postFormData (line 38) | <T> ResponseEntity<T> postFormData(Request request);
FILE: SpringBoot-Custom-Rest-Starter/SpringBoot-Custom-Rest-Autconfigure/src/main/java/com/xiao/custom/rest/starter/autoconfigure/service/impl/HttpClientAsyncServiceImpl.java
class HttpClientAsyncServiceImpl (line 22) | @Slf4j
method HttpClientAsyncServiceImpl (line 27) | public HttpClientAsyncServiceImpl(HttpRetryService retryService)
method doForObject (line 40) | @Override
method doRequest (line 53) | @Override
method getForObject (line 74) | @Override
method postFormData (line 94) | @Override
method futureResult (line 107) | private <T> T futureResult(CompletableFuture<T> tCompletableFuture, Re...
FILE: SpringBoot-Custom-Rest-Starter/SpringBoot-Custom-Rest-Autconfigure/src/main/java/com/xiao/custom/rest/starter/autoconfigure/service/impl/HttpClientServiceImpl.java
class HttpClientServiceImpl (line 26) | @Slf4j
method HttpClientServiceImpl (line 38) | public HttpClientServiceImpl(HttpRetryService retryService)
method doForObject (line 51) | @Override
method doRequest (line 100) | @Override
method getForObject (line 119) | @Override
method postFormData (line 138) | @Override
FILE: SpringBoot-Custom-Rest-Starter/SpringBoot-Custom-Rest-Autconfigure/src/main/java/com/xiao/custom/rest/starter/autoconfigure/service/impl/HttpRetryService.java
class HttpRetryService (line 51) | public class HttpRetryService
method HttpRetryService (line 55) | public HttpRetryService(RestTemplate restTemplate)
method postForObject (line 71) | @Retryable(value = SocketTimeoutException.class, maxAttempts = 3, back...
method postFormData (line 92) | @Retryable(value = SocketTimeoutException.class, maxAttempts = 3, back...
method getForObject (line 112) | @Retryable(value = SocketTimeoutException.class, maxAttempts = 3, back...
method doRequest (line 141) | @Retryable(value = SocketTimeoutException.class, maxAttempts = 3, back...
FILE: SpringBoot-Custom-Rest-Starter/SpringBoot-Custom-Rest-Autconfigure/src/main/java/com/xiao/custom/rest/starter/autoconfigure/util/RequestValidatorParamsUtil.java
class RequestValidatorParamsUtil (line 16) | @Slf4j
method validateParams (line 19) | public static boolean validateParams(Request request)
FILE: SpringBoot-Custom-Rest-Starter/SpringBoot-Custom-Rest-Autconfigure/src/main/java/com/xiao/custom/rest/starter/autoconfigure/util/ThreadLocalUtil.java
class ThreadLocalUtil (line 14) | public class ThreadLocalUtil
method getThreadLocal (line 18) | public static Map<String, Object> getThreadLocal()
method get (line 31) | public static Object get(String key)
method put (line 49) | public static void put(String key, Object value)
method remove (line 68) | public static void remove(String key)
method remove (line 83) | public static void remove()
FILE: SpringBoot-Custom-Rest-Starter/SpringBoot-Custom-Rest-Example/src/main/java/com/xiao/custom/rest/example/RestExampleApp.java
class RestExampleApp (line 14) | @SpringBootApplication
method main (line 17) | public static void main(String[] args)
FILE: SpringBoot-Custom-Rest-Starter/SpringBoot-Custom-Rest-Example/src/main/java/com/xiao/custom/rest/example/log/impl/HttpLogServiceImpl.java
class HttpLogServiceImpl (line 17) | @Service
method saveRequestLog (line 28) | @Override
FILE: SpringBoot-Custom-Rest-Starter/SpringBoot-Custom-Rest-Example/src/test/java/com/xiao/custom/rest/example/RestTemplateStarterAppTest.java
class RestTemplateStarterAppTest (line 15) | @RunWith(SpringRunner.class)
FILE: SpringBoot-Custom-Rest-Starter/SpringBoot-Custom-Rest-Example/src/test/java/com/xiao/custom/rest/example/httpclient/HttpClientTest.java
class HttpClientTest (line 17) | public class HttpClientTest extends RestTemplateStarterAppTest
method testHttpGet (line 22) | @Test
FILE: SpringBoot-Custom-Rest-Starter/SpringBoot-Custom-Rest-Example/src/test/java/com/xiao/custom/rest/example/template/RestTemplateTest.java
class RestTemplateTest (line 16) | public class RestTemplateTest extends RestTemplateStarterAppTest
method testRest (line 21) | @Test
FILE: SpringBoot-Stock-Demo/doc/stock.sql
type `t_stock_demo` (line 1) | CREATE TABLE `t_stock_demo`(
type `t_order_demo` (line 12) | CREATE TABLE `t_order_demo`(
type `t_stock_change_log_demo` (line 23) | CREATE TABLE `t_stock_change_log_demo`(
FILE: SpringBoot-Stock-Demo/src/main/java/com/xiao/stock/demo/StockDemoApplication.java
class StockDemoApplication (line 16) | @SpringBootApplication(scanBasePackages = "com.purcotton.stock.demo", ex...
method main (line 20) | public static void main(String[] args)
FILE: SpringBoot-Stock-Demo/src/main/java/com/xiao/stock/demo/common/StockOptTypeEnum.java
type StockOptTypeEnum (line 11) | public enum StockOptTypeEnum
method StockOptTypeEnum (line 21) | StockOptTypeEnum(String optType, String optName)
method getOptType (line 27) | public String getOptType()
method getOptName (line 32) | public String getOptName()
FILE: SpringBoot-Stock-Demo/src/main/java/com/xiao/stock/demo/configure/DataSourceConfiguration.java
class DataSourceConfiguration (line 10) | @Configuration
method dataSource (line 26) | @Bean(name = "dataSource")
FILE: SpringBoot-Stock-Demo/src/main/java/com/xiao/stock/demo/configure/RedissonConfiguration.java
class RedissonConfiguration (line 19) | @Configuration
method config (line 34) | @Bean
method redissonClient (line 43) | @Bean
method threadPoolTaskExecutor (line 49) | @Bean
FILE: SpringBoot-Stock-Demo/src/main/java/com/xiao/stock/demo/entity/OrderDemo.java
class OrderDemo (line 11) | @Data
FILE: SpringBoot-Stock-Demo/src/main/java/com/xiao/stock/demo/entity/StockChangeLodDemo.java
class StockChangeLodDemo (line 11) | @Data
FILE: SpringBoot-Stock-Demo/src/main/java/com/xiao/stock/demo/entity/StockDemo.java
class StockDemo (line 11) | @Data
FILE: SpringBoot-Stock-Demo/src/main/java/com/xiao/stock/demo/mapper/OrderDemoMapper.java
type OrderDemoMapper (line 9) | public interface OrderDemoMapper
method deleteByPrimaryKey (line 15) | int deleteByPrimaryKey(Long id);
method insert (line 21) | int insert(OrderDemo record);
method insertSelective (line 27) | int insertSelective(OrderDemo record);
method selectByPrimaryKey (line 33) | OrderDemo selectByPrimaryKey(Long id);
method updateByPrimaryKeySelective (line 39) | int updateByPrimaryKeySelective(OrderDemo record);
method updateByPrimaryKey (line 45) | int updateByPrimaryKey(OrderDemo record);
method getOrderByNo (line 48) | OrderDemo getOrderByNo(String orderNo);
method updateByOrderNo (line 51) | int updateByOrderNo(@Param("orderNo") String orderNo, @Param("status")...
FILE: SpringBoot-Stock-Demo/src/main/java/com/xiao/stock/demo/mapper/StockChangeLodDemoMapper.java
type StockChangeLodDemoMapper (line 9) | public interface StockChangeLodDemoMapper
method deleteByPrimaryKey (line 15) | int deleteByPrimaryKey(Long id);
method insert (line 21) | int insert(StockChangeLodDemo record);
method insertSelective (line 27) | int insertSelective(StockChangeLodDemo record);
method selectByPrimaryKey (line 33) | StockChangeLodDemo selectByPrimaryKey(Long id);
method updateByPrimaryKeySelective (line 39) | int updateByPrimaryKeySelective(StockChangeLodDemo record);
method updateByPrimaryKey (line 45) | int updateByPrimaryKey(StockChangeLodDemo record);
method selectByOrderNo (line 55) | StockChangeLodDemo selectByOrderNo(@Param("orderNo") String orderNo, @...
FILE: SpringBoot-Stock-Demo/src/main/java/com/xiao/stock/demo/mapper/StockDemoMapper.java
type StockDemoMapper (line 9) | public interface StockDemoMapper
method deleteByPrimaryKey (line 15) | int deleteByPrimaryKey(Long id);
method insert (line 21) | int insert(StockDemo record);
method insertSelective (line 27) | int insertSelective(StockDemo record);
method selectByPrimaryKey (line 33) | StockDemo selectByPrimaryKey(Long id);
method updateByPrimaryKeySelective (line 39) | int updateByPrimaryKeySelective(StockDemo record);
method updateByPrimaryKey (line 45) | int updateByPrimaryKey(StockDemo record);
method queryByProduct (line 56) | StockDemo queryByProduct(@Param("productNo") String productNo, @Param(...
method preStock (line 65) | int preStock(StockDemo tempStock);
FILE: SpringBoot-Stock-Demo/src/main/java/com/xiao/stock/demo/rest/StockRestService.java
class StockRestService (line 24) | @RestController
method preStock (line 45) | @RequestMapping("/preStock")
method releaseStock (line 58) | @RequestMapping("/releaseStock")
method warehouse (line 86) | @RequestMapping("/warehouse")
method addStock (line 106) | @RequestMapping("/addStock")
method optStock (line 121) | public int optStock(String productNo, String shopCode, int num, StockO...
FILE: SpringBoot-Stock-Demo/src/main/java/com/xiao/stock/demo/service/StockDemoService.java
type StockDemoService (line 17) | public interface StockDemoService
method preStock (line 25) | long preStock(StockDemo stockDemo);
method releaseStock (line 33) | long releaseStock(StockDemo stockDemo);
method outHourse (line 41) | long outHourse(StockDemo stockDemo);
method addStock (line 51) | long addStock(StockDemo stockDemo);
method getOrderByNo (line 58) | OrderDemo getOrderByNo(String orderNo);
FILE: SpringBoot-Stock-Demo/src/main/java/com/xiao/stock/demo/service/impl/StockDemoServiceImpl.java
class StockDemoServiceImpl (line 39) | @Service
method preStock (line 61) | @Override
method addOrder (line 181) | @Transactional(rollbackFor = Exception.class)
method updateOrderStatus (line 194) | @Transactional(rollbackFor = Exception.class)
method releaseStock (line 206) | @Override
method outHourse (line 335) | @Override
method addStock (line 467) | @Override
method getOrderByNo (line 583) | @Override
method optStock (line 589) | @Transactional(rollbackFor = Exception.class, propagation = Propagatio...
method checkStock (line 595) | private boolean checkStock(StockDemo stockDemo, String optType)
method saveChangeLog (line 615) | @Transactional(rollbackFor = Exception.class, propagation = Propagatio...
method saveStockChangeLog (line 634) | private Long saveStockChangeLog(StockDemo stockDemo, StockOptTypeEnum ...
FILE: SpringBoot-Stock-Demo/src/main/java/com/xiao/stock/demo/util/OrderNoUtil.java
class OrderNoUtil (line 12) | @Component
method snowflakeId (line 37) | public synchronized long snowflakeId()
method snowflakeId (line 42) | public synchronized long snowflakeId(long workerId, long dataCenterId)
method buildOrderNo (line 53) | public String buildOrderNo()
method buildOrderItemNo (line 58) | public String buildOrderItemNo()
method buildDeliveryNo (line 68) | public String buildDeliveryNo()
method buildAdvanceSaleOrderNo (line 78) | public String buildAdvanceSaleOrderNo()
method buildHaitaoOrderNo (line 88) | public String buildHaitaoOrderNo()
method buildInOrderNo (line 100) | public String buildInOrderNo()
method buildPintuanOrderNo (line 110) | public String buildPintuanOrderNo()
method buildPintuanOrderItemNo (line 120) | public String buildPintuanOrderItemNo()
method buildTuanNo (line 130) | public String buildTuanNo()
FILE: SpringBoot-Stock-Demo/src/main/java/com/xiao/stock/demo/util/StockUtil.java
class StockUtil (line 16) | public class StockUtil
method getLockPath (line 26) | public static String getLockPath(String productNo, String shopCode)
method getOrderLockPath (line 37) | public static String getOrderLockPath(String orderNo)
FILE: SpringCloud-Canal/src/main/java/com/alibaba/canal/simple/ClientSample.java
class ClientSample (line 20) | public class ClientSample
method main (line 22) | public static void main(String[] args)
method printEntry (line 70) | private static void printEntry(List<CanalEntry.Entry> entrys)
method printColumns (line 161) | private static void printColumns(List<CanalEntry.Column> columns)
FILE: SpringCloud-Canal/src/main/java/com/xiao/springcloud/CanalSimpleApplication.java
class CanalSimpleApplication (line 14) | @SpringBootApplication
method main (line 17) | public static void main(String[] args)
FILE: SpringCloud-Canal/src/main/java/com/xiao/springcloud/canal/CanalClientService.java
class CanalClientService (line 33) | @Component
method CanalClientService (line 62) | @Autowired
method destroy (line 69) | @Override
method onApplicationEvent (line 88) | @Override
method start (line 101) | private void start()
method processBinlog (line 122) | private void processBinlog()
method processData (line 163) | private void processData(List<CanalEntry.Entry> entrys)
method parseKey (line 252) | private Long parseKey(List<CanalEntry.Column> columns)
method check (line 264) | private void check()
method init (line 277) | private void init()
method close (line 301) | private void close()
FILE: SpringCloud-Canal/src/main/java/com/xiao/springcloud/canal/CanalConfig.java
class CanalConfig (line 15) | @Configuration
FILE: SpringCloud-Canal/src/main/java/com/xiao/springcloud/disruptor/DataEvent.java
class DataEvent (line 13) | @Data
FILE: SpringCloud-Canal/src/main/java/com/xiao/springcloud/disruptor/DataEventFactory.java
class DataEventFactory (line 16) | public class DataEventFactory implements EventFactory<DataEvent>
method newInstance (line 18) | @Override
FILE: SpringCloud-Canal/src/main/java/com/xiao/springcloud/disruptor/DisruptorConsumer.java
class DisruptorConsumer (line 29) | @Slf4j
method DisruptorConsumer (line 40) | public DisruptorConsumer(DisruptorService disruptorService, Executor e...
method onEvent (line 46) | @Override
method onEvent (line 60) | @Override
FILE: SpringCloud-Canal/src/main/java/com/xiao/springcloud/disruptor/DisruptorExceptionHandler.java
class DisruptorExceptionHandler (line 15) | @Slf4j
method DisruptorExceptionHandler (line 20) | public DisruptorExceptionHandler(DisruptorService disruptorService)
method handleEventException (line 28) | @Override
method handleOnStartException (line 42) | @Override
method handleOnShutdownException (line 53) | @Override
FILE: SpringCloud-Canal/src/main/java/com/xiao/springcloud/disruptor/DisruptorProducer.java
class DisruptorProducer (line 29) | @Component
method DisruptorProducer (line 60) | @Autowired
method send (line 93) | public void send(List<TableData> dataList)
method translator (line 111) | private void translator(TableData tableData)
method destroy (line 118) | @Override
method onApplicationEvent (line 129) | @Override
method doStart (line 136) | private void doStart()
FILE: SpringCloud-Canal/src/main/java/com/xiao/springcloud/disruptor/DisruptorThreadFactory.java
class DisruptorThreadFactory (line 14) | public class DisruptorThreadFactory implements ThreadFactory
method DisruptorThreadFactory (line 24) | private DisruptorThreadFactory(final String namePrefix, final boolean ...
method newThread (line 38) | @Override
method create (line 58) | public static ThreadFactory create(final String namePrefix, final bool...
FILE: SpringCloud-Canal/src/main/java/com/xiao/springcloud/disruptor/TableData.java
class TableData (line 13) | @Data
FILE: SpringCloud-Canal/src/main/java/com/xiao/springcloud/disruptor/service/DisruptorService.java
type DisruptorService (line 13) | public interface DisruptorService
method execute (line 22) | void execute(TableData tableData);
FILE: SpringCloud-Canal/src/main/java/com/xiao/springcloud/disruptor/service/impl/DisruptorServiceImpl.java
class DisruptorServiceImpl (line 18) | @Service
method execute (line 31) | @Override
method initAllCacheService (line 47) | private void initAllCacheService()
method onApplicationEvent (line 53) | @Override
FILE: SpringCloud-Common/src/main/java/com/xiao/springcloud/demo/common/SkywalkingService.java
type SkywalkingService (line 18) | public interface SkywalkingService
method skywalking (line 20) | String skywalking(String test);
FILE: SpringCloud-Common/src/main/java/com/xiao/springcloud/demo/common/cache/code/FastJsonCodec.java
class FastJsonCodec (line 25) | @Slf4j
method FastJsonCodec (line 35) | public FastJsonCodec()
method getMapValueDecoder (line 98) | @Override
method getMapValueEncoder (line 104) | @Override
method getMapKeyDecoder (line 110) | @Override
method getMapKeyEncoder (line 116) | @Override
method getValueDecoder (line 122) | @Override
method getValueEncoder (line 128) | @Override
FILE: SpringCloud-Common/src/main/java/com/xiao/springcloud/demo/common/cache/code/SerializerObject.java
class SerializerObject (line 18) | @Data
FILE: SpringCloud-Common/src/main/java/com/xiao/springcloud/demo/common/cache/conf/RedissonConfig.java
class RedissonConfig (line 20) | @Configuration
method getYamlFromConfig (line 39) | private String getYamlFromConfig() throws IOException
method config (line 57) | @Bean
method redissonClient (line 70) | @Bean(destroyMethod = "shutdown")
FILE: SpringCloud-Common/src/main/java/com/xiao/springcloud/demo/common/cache/dto/EntryDto.java
class EntryDto (line 13) | @Data
FILE: SpringCloud-Common/src/main/java/com/xiao/springcloud/demo/common/cache/local/SpringGuavaCacheConfig.java
class SpringGuavaCacheConfig (line 19) | @Configuration
method cacheManager (line 22) | @Bean
FILE: SpringCloud-Common/src/main/java/com/xiao/springcloud/demo/common/cache/service/CacheService.java
type CacheService (line 17) | public interface CacheService
method get (line 28) | String get(String key);
method set (line 38) | void set(String key, String value);
method batchSet (line 47) | void batchSet(List<EntryDto<String>> list);
method set (line 58) | void set(String key, String value, long leaseTime);
method getObject (line 68) | <T> T getObject(String key);
method setObject (line 78) | <T> void setObject(String key, T value);
method batchSetObj (line 87) | <T> void batchSetObj(List<EntryDto<Object>> objs);
method setObject (line 98) | <T> void setObject(String key, T value, long leaseTime);
method hget (line 109) | <T> T hget(String key, String field);
method hset (line 120) | <T> void hset(String key, String field, T value);
method hgetAll (line 130) | <T> Map<String, T> hgetAll(String key);
method hsetAll (line 140) | <T> void hsetAll(String key, Map<String, T> maps);
method batchHset (line 149) | <T> void batchHset(List<EntryDto<Map<String, Object>>> maps);
method addSet (line 159) | <T> void addSet(String key, T value);
method getSet (line 169) | <T> Set<T> getSet(String key);
method removeSet (line 179) | <T> void removeSet(String key, T value);
method batchGet (line 189) | <T> List<T> batchGet(List<String> keys);
method batchGetMap (line 199) | <T> List<Map<String, T>> batchGetMap(List<String> keys);
method delObject (line 208) | void delObject(String key);
method delMap (line 217) | void delMap(String key);
FILE: SpringCloud-Common/src/main/java/com/xiao/springcloud/demo/common/cache/service/DistributedService.java
type DistributedService (line 20) | public interface DistributedService
method getRLock (line 33) | RLock getRLock(String lockKey);
method autoReleaseRLock (line 45) | RLock autoReleaseRLock(String lockKey, long leaseTime, TimeUnit unit);
method tryLock (line 56) | RLock tryLock(String lockKey, long timeout);
method tryLockAutoRelease (line 69) | RLock tryLockAutoRelease(String lockKey, long timeout, long leaseTime,...
method getFairRLock (line 79) | RLock getFairRLock(String lockKey);
method autoReleaseRFairLock (line 91) | RLock autoReleaseRFairLock(String lockKey, long leaseTime, TimeUnit un...
method tryFairLock (line 102) | RLock tryFairLock(String lockKey, long timeout);
method tryFairLockAutoRelease (line 115) | RLock tryFairLockAutoRelease(String lockKey, long timeout, long leaseT...
method getReadWriteLock (line 126) | RLock getReadWriteLock(String lockKey, boolean isWrite);
method autoReleaseReadWriteLock (line 139) | RLock autoReleaseReadWriteLock(String lockKey, boolean isWrite, Long l...
method tryReadWriteLock (line 151) | RLock tryReadWriteLock(String lockKey, boolean isWrite, long timeout);
method tryReadWriteLockAutoRelease (line 165) | RLock tryReadWriteLockAutoRelease(String lockKey, boolean isWrite, lon...
method getRCountDownLatch (line 176) | RCountDownLatch getRCountDownLatch(String key, int count);
method countDown (line 185) | void countDown(String key);
method unRLock (line 194) | void unRLock(String lockKey);
method unRLock (line 203) | void unRLock(RLock rLock);
FILE: SpringCloud-Common/src/main/java/com/xiao/springcloud/demo/common/cache/service/impl/CacheServiceRedisImpl.java
class CacheServiceRedisImpl (line 26) | @Service
method get (line 45) | @Override
method set (line 65) | @Override
method batchSet (line 82) | @Override
method set (line 105) | @Override
method getObject (line 120) | @Override
method setObject (line 135) | @Override
method batchSetObj (line 149) | @Override
method setObject (line 172) | @Override
method hget (line 188) | @Override
method hset (line 204) | @Override
method hgetAll (line 219) | @Override
method hsetAll (line 233) | @Override
method batchHset (line 247) | @Override
method addSet (line 269) | @Override
method getSet (line 284) | @Override
method removeSet (line 297) | @Override
method batchGet (line 311) | @Override
method batchGetMap (line 331) | @Override
method delObject (line 350) | @Override
method delMap (line 364) | @Override
FILE: SpringCloud-Common/src/main/java/com/xiao/springcloud/demo/common/cache/service/impl/DistributedServiceRedissonImpl.java
class DistributedServiceRedissonImpl (line 24) | @Service
method getRLock (line 45) | @Override
method autoReleaseRLock (line 63) | @Override
method tryLock (line 80) | @Override
method tryLockAutoRelease (line 112) | @Override
method getFairRLock (line 137) | @Override
method autoReleaseRFairLock (line 155) | @Override
method tryFairLock (line 172) | @Override
method tryFairLockAutoRelease (line 204) | @Override
method getReadWriteLock (line 231) | @Override
method autoReleaseReadWriteLock (line 259) | @Override
method tryReadWriteLock (line 286) | @Override
method tryReadWriteLockAutoRelease (line 324) | @Override
method getRCountDownLatch (line 352) | @Override
method countDown (line 367) | @Override
method unRLock (line 381) | @Override
method unRLock (line 395) | @Override
FILE: SpringCloud-Common/src/main/java/com/xiao/springcloud/demo/common/conf/FeignConfiguration.java
class FeignConfiguration (line 22) | @Configuration
method feignWebRegistrations (line 26) | @Bean
class FeignRequestMappingHandlerMapping (line 39) | private static class FeignRequestMappingHandlerMapping extends Request...
method isHandler (line 41) | @Override
FILE: SpringCloud-Common/src/main/java/com/xiao/springcloud/demo/common/disruptor/DataEventFactory.java
class DataEventFactory (line 17) | public class DataEventFactory implements EventFactory<DataEvent>
method newInstance (line 19) | @Override
FILE: SpringCloud-Common/src/main/java/com/xiao/springcloud/demo/common/disruptor/DisruptorConsumer.java
class DisruptorConsumer (line 30) | @Slf4j
method DisruptorConsumer (line 41) | public DisruptorConsumer(DisruptorService disruptorService, Executor e...
method onEvent (line 47) | @Override
method onEvent (line 61) | @Override
FILE: SpringCloud-Common/src/main/java/com/xiao/springcloud/demo/common/disruptor/DisruptorExceptionHandler.java
class DisruptorExceptionHandler (line 16) | @Slf4j
method DisruptorExceptionHandler (line 21) | public DisruptorExceptionHandler(DisruptorService disruptorService)
method handleEventException (line 29) | @Override
method handleOnStartException (line 43) | @Override
method handleOnShutdownException (line 54) | @Override
FILE: SpringCloud-Common/src/main/java/com/xiao/springcloud/demo/common/disruptor/DisruptorProducer.java
class DisruptorProducer (line 30) | @Component
method DisruptorProducer (line 61) | @Autowired
method send (line 94) | public void send(BasisData basisData)
method translator (line 109) | private void translator(BasisData basisData)
method destroy (line 121) | @Override
method doStart (line 132) | public void doStart()
method onApplicationEvent (line 157) | @Override
FILE: SpringCloud-Common/src/main/java/com/xiao/springcloud/demo/common/disruptor/DisruptorThreadFactory.java
class DisruptorThreadFactory (line 14) | public class DisruptorThreadFactory implements ThreadFactory
method DisruptorThreadFactory (line 24) | private DisruptorThreadFactory(final String namePrefix, final boolean ...
method newThread (line 38) | @Override
method create (line 58) | public static ThreadFactory create(final String namePrefix, final bool...
FILE: SpringCloud-Common/src/main/java/com/xiao/springcloud/demo/common/disruptor/data/BasisData.java
class BasisData (line 14) | @Setter
FILE: SpringCloud-Common/src/main/java/com/xiao/springcloud/demo/common/disruptor/data/DataEvent.java
class DataEvent (line 13) | @Data
FILE: SpringCloud-Common/src/main/java/com/xiao/springcloud/demo/common/disruptor/data/EventEnum.java
type EventEnum (line 11) | public enum EventEnum
method EventEnum (line 20) | EventEnum(String event)
method getEvent (line 25) | public String getEvent()
FILE: SpringCloud-Common/src/main/java/com/xiao/springcloud/demo/common/disruptor/event/ServiceEvent.java
class ServiceEvent (line 15) | @Setter
method ServiceEvent (line 27) | public ServiceEvent(Object source, String event)
FILE: SpringCloud-Common/src/main/java/com/xiao/springcloud/demo/common/disruptor/service/DisruptorService.java
type DisruptorService (line 13) | public interface DisruptorService
method execute (line 22) | void execute(BasisData data);
FILE: SpringCloud-Common/src/main/java/com/xiao/springcloud/demo/common/disruptor/service/impl/DisruptorServiceImpl.java
class DisruptorServiceImpl (line 18) | @Service
method execute (line 31) | @Override
FILE: SpringCloud-Common/src/main/java/com/xiao/springcloud/demo/common/eureka/LoadBalancerAspect.java
class LoadBalancerAspect (line 28) | @Slf4j
method reconstructURIAround (line 36) | @Around(value = "execution (* org.springframework.cloud.client.loadbal...
FILE: SpringCloud-Common/src/main/java/com/xiao/springcloud/demo/common/exception/AbstractServiceException.java
type AbstractServiceException (line 8) | public interface AbstractServiceException {
method getCode (line 13) | Integer getCode();
method getMessage (line 18) | String getMessage();
FILE: SpringCloud-Common/src/main/java/com/xiao/springcloud/demo/common/exception/CommonException.java
class CommonException (line 10) | public class CommonException extends RuntimeException {
method CommonException (line 31) | public CommonException(Integer code, String errorMessage) {
method CommonException (line 37) | public CommonException(AbstractServiceException exception) {
method getCode (line 43) | public Integer getCode() {
method setCode (line 47) | public void setCode(Integer code) {
method getErrorMessage (line 51) | public String getErrorMessage() {
method setErrorMessage (line 55) | public void setErrorMessage(String errorMessage) {
method throwEx (line 59) | public static CommonException throwEx(AbstractServiceException e) {
FILE: SpringCloud-Common/src/main/java/com/xiao/springcloud/demo/common/exception/CommonExceptionEnum.java
type CommonExceptionEnum (line 8) | public enum CommonExceptionEnum implements AbstractServiceException
method CommonExceptionEnum (line 20) | CommonExceptionEnum(Integer code, String message)
method getCode (line 30) | @Override
method getMessage (line 36) | @Override
FILE: SpringCloud-Common/src/main/java/com/xiao/springcloud/demo/common/forkjoin/ForkjoinConfiguration.java
class ForkjoinConfiguration (line 17) | @Configuration
method forkJoinPool (line 22) | @Bean
method destroy (line 37) | @Override
FILE: SpringCloud-Common/src/main/java/com/xiao/springcloud/demo/common/forkjoin/ForkjoinService.java
class ForkjoinService (line 18) | @Service
method addNumbers (line 24) | public Integer addNumbers(List<Integer> numbers)
FILE: SpringCloud-Common/src/main/java/com/xiao/springcloud/demo/common/forkjoin/task/ForkjoinTask.java
class ForkjoinTask (line 15) | public class ForkjoinTask extends RecursiveTask<Integer>
method ForkjoinTask (line 30) | public ForkjoinTask(List<Integer> arrayList, int start, int end)
method compute (line 42) | @Override
method add (line 61) | private Integer add(CopyOnWriteArrayList<Integer> arrayList)
FILE: SpringCloud-Common/src/main/java/com/xiao/springcloud/demo/common/gloab/interceptor/advice/DefaultControllerAdvice.java
class DefaultControllerAdvice (line 26) | @Slf4j
method serviceException (line 37) | @ExceptionHandler(CommonException.class)
method hystrixRuntimeException (line 49) | @ExceptionHandler(HystrixRuntimeException.class)
method retryableException (line 82) | @ExceptionHandler(RetryableException.class)
method notFount (line 95) | @ExceptionHandler(Exception.class)
FILE: SpringCloud-Common/src/main/java/com/xiao/springcloud/demo/common/gloab/interceptor/config/FastjsonConfig.java
class FastjsonConfig (line 23) | @Configuration("defaultFastjsonConfig")
method fastJsonHttpMessageConverter (line 30) | @Bean
method fastjsonConfig (line 43) | public FastJsonConfig fastjsonConfig()
method getSupportedMediaType (line 65) | public List<MediaType> getSupportedMediaType()
FILE: SpringCloud-Common/src/main/java/com/xiao/springcloud/demo/common/gloab/interceptor/config/FeignConfig.java
class FeignConfig (line 17) | @Configuration
method errorDecoder (line 28) | @Bean
method requestInterceptor (line 36) | @Bean
method defaultRosesErrorAttributes (line 44) | @Bean
FILE: SpringCloud-Common/src/main/java/com/xiao/springcloud/demo/common/gloab/interceptor/fegin/CommonFeignErrorDecoder.java
class CommonFeignErrorDecoder (line 19) | @Slf4j
method decode (line 23) | @Override
FILE: SpringCloud-Common/src/main/java/com/xiao/springcloud/demo/common/gloab/interceptor/fegin/CommonFeignHeaderProcessInterceptor.java
class CommonFeignHeaderProcessInterceptor (line 14) | public class CommonFeignHeaderProcessInterceptor implements RequestInter...
method apply (line 17) | @Override
FILE: SpringCloud-Common/src/main/java/com/xiao/springcloud/demo/common/gloab/interceptor/fegin/DefaultCommonErrorAttributes.java
class DefaultCommonErrorAttributes (line 17) | public class DefaultCommonErrorAttributes extends DefaultErrorAttributes
method getErrorAttributes (line 20) | @Override
FILE: SpringCloud-Common/src/main/java/com/xiao/springcloud/demo/common/gloab/interceptor/fegin/FeignBeanFactoryPostProcessor.java
class FeignBeanFactoryPostProcessor (line 20) | @Component
method postProcessBeanFactory (line 23) | @Override
method containsBeanDefinition (line 33) | private boolean containsBeanDefinition(ConfigurableListableBeanFactory...
FILE: SpringCloud-Common/src/main/java/com/xiao/springcloud/demo/common/gloab/interceptor/fegin/HttpContext.java
class HttpContext (line 14) | public class HttpContext
method getIp (line 17) | public static String getIp()
method getResponse (line 22) | public static HttpServletResponse getResponse() throws NullPointerExce...
method getRequest (line 27) | public static HttpServletRequest getRequest() throws NullPointerException
FILE: SpringCloud-Common/src/main/java/com/xiao/springcloud/demo/common/gloab/response/ErrorResponseData.java
class ErrorResponseData (line 10) | public class ErrorResponseData extends ResponseData {
method ErrorResponseData (line 12) | public ErrorResponseData() {
method ErrorResponseData (line 15) | public ErrorResponseData(String message) {
method ErrorResponseData (line 19) | public ErrorResponseData(Integer code, String message) {
method ErrorResponseData (line 23) | public ErrorResponseData(Integer code, String message, Object object) {
FILE: SpringCloud-Common/src/main/java/com/xiao/springcloud/demo/common/gloab/response/ResponseData.java
class ResponseData (line 12) | public class ResponseData implements Serializable {
method ResponseData (line 42) | public ResponseData() {
method ResponseData (line 45) | public ResponseData(Boolean success, Integer code, String message, Obj...
method getSuccess (line 52) | public Boolean getSuccess() {
method setSuccess (line 56) | public void setSuccess(Boolean success) {
method getMessage (line 60) | public String getMessage() {
method setMessage (line 64) | public void setMessage(String message) {
method getData (line 68) | public Object getData() {
method setData (line 72) | public void setData(Object data) {
method getCode (line 76) | public Integer getCode() {
method setCode (line 80) | public void setCode(Integer code) {
method success (line 84) | public static SuccessResponseData success() {
method success (line 88) | public static SuccessResponseData success(Object data) {
method success (line 92) | public static SuccessResponseData success(Integer code, String message...
method error (line 96) | public static ErrorResponseData error(String message) {
method error (line 100) | public static ErrorResponseData error(Integer code, String message) {
method error (line 104) | public static ErrorResponseData error(Integer code, String message, Ob...
FILE: SpringCloud-Common/src/main/java/com/xiao/springcloud/demo/common/gloab/response/SuccessResponseData.java
class SuccessResponseData (line 9) | public class SuccessResponseData extends ResponseData {
method SuccessResponseData (line 11) | public SuccessResponseData() {
method SuccessResponseData (line 14) | public SuccessResponseData(Object object) {
method SuccessResponseData (line 18) | public SuccessResponseData(Integer code, String message, Object object) {
FILE: SpringCloud-Common/src/main/java/com/xiao/springcloud/demo/common/logaspect/LogAspect.java
class LogAspect (line 32) | @Aspect
method logAnnotatison (line 47) | @Pointcut("@annotation(com.xiao.springcloud.demo.common.logaspect.LogA...
method execute (line 54) | @Around("logAnnotatison()")
method setHostInfo (line 112) | private void setHostInfo(LogInfo logInfo)
method setResultAndError (line 154) | private boolean setResultAndError(ProceedingJoinPoint joinPoint, LogIn...
FILE: SpringCloud-Common/src/main/java/com/xiao/springcloud/demo/common/logaspect/LogInfo.java
class LogInfo (line 18) | @Data
method toString (line 62) | @Override
FILE: SpringCloud-Common/src/main/java/com/xiao/springcloud/demo/common/logaspect/LogService.java
type LogService (line 11) | public interface LogService
method debug (line 21) | void debug(String debugMsg);
method info (line 31) | void info(String message);
method error (line 42) | void error(String errorMsg, Throwable e);
method warn (line 49) | void warn(String message);
FILE: SpringCloud-Common/src/main/java/com/xiao/springcloud/demo/common/logaspect/Slf4jLogService.java
class Slf4jLogService (line 14) | @Service
method debug (line 25) | @Override
method info (line 41) | @Override
method warn (line 55) | @Override
method error (line 69) | @Override
FILE: SpringCloud-Common/src/main/java/com/xiao/springcloud/demo/common/sign/SignConstants.java
type SignConstants (line 11) | public interface SignConstants
FILE: SpringCloud-Common/src/main/java/com/xiao/springcloud/demo/common/sign/annotation/DisposeSignService.java
class DisposeSignService (line 31) | @Slf4j
method requestAnnotation (line 40) | @Pointcut("@annotation(omni.purcotton.omni.inface.center.common.sign.a...
method execute (line 45) | @Around("requestAnnotation() && @annotation(disposeSign)")
method assembleHeader (line 105) | private Map<String, String> assembleHeader(HttpServletRequest request)
FILE: SpringCloud-Common/src/main/java/com/xiao/springcloud/demo/common/sign/filter/WrapperRequestFilter.java
class WrapperRequestFilter (line 26) | @Component
method init (line 52) | @Override
method doFilter (line 88) | @Override
method destroy (line 133) | @Override
FILE: SpringCloud-Common/src/main/java/com/xiao/springcloud/demo/common/sign/request/BodyReaderHttpServletRequestWrapper.java
class BodyReaderHttpServletRequestWrapper (line 23) | @Slf4j
method BodyReaderHttpServletRequestWrapper (line 34) | public BodyReaderHttpServletRequestWrapper(HttpServletRequest request)
method getBodyString (line 48) | public String getBodyString(final ServletRequest request)
method cloneInputStream (line 77) | public InputStream cloneInputStream(ServletInputStream inputStream)
method getReader (line 97) | @Override
method getInputStream (line 103) | @Override
FILE: SpringCloud-Common/src/main/java/com/xiao/springcloud/demo/common/sign/service/AppManagerService.java
type AppManagerService (line 11) | public interface AppManagerService
method exist (line 21) | boolean exist(String appId);
method getAppKey (line 31) | String getAppKey(String appId);
method addApp (line 42) | boolean addApp(String appId, String appKey);
FILE: SpringCloud-Common/src/main/java/com/xiao/springcloud/demo/common/sign/service/impl/AppManagerServiceConfigImpl.java
class AppManagerServiceConfigImpl (line 19) | @Service
method exist (line 42) | @Override
method getAppKey (line 56) | @Override
method addApp (line 71) | @Override
method afterPropertiesSet (line 88) | @Override
FILE: SpringCloud-Common/src/main/java/com/xiao/springcloud/demo/common/sign/util/AsciiSortUtil.java
class AsciiSortUtil (line 13) | public class AsciiSortUtil
method sort (line 23) | public static String sort(String str)
method sort (line 40) | public static char[] sort(char[] arr)
method sort (line 48) | private static void sort(char[] arr, int left, int right, char[] temp)
method merge (line 63) | private static void merge(char[] arr, int left, int mid, int right, ch...
method main (line 98) | public static void main(String[] args)
FILE: SpringCloud-Common/src/main/java/com/xiao/springcloud/demo/common/sign/util/HttpRequestUtils.java
class HttpRequestUtils (line 25) | @Slf4j
method getAllParams (line 36) | public static String getAllParams(HttpServletRequest request) throws I...
method getFormParams (line 69) | private static String getFormParams(HttpServletRequest request)
method getJsonParams (line 91) | public static String getJsonParams(final HttpServletRequest request) t...
method getUrlParams (line 112) | public static String getUrlParams(HttpServletRequest request)
FILE: SpringCloud-Common/src/main/java/com/xiao/springcloud/demo/common/sign/util/SignUtil.java
class SignUtil (line 28) | public class SignUtil
method generateSign (line 46) | public static String generateSign(Map<String, String> kvParams, String...
method generateSign (line 66) | public static String generateSign(Map<String, String> kvParams, String...
method generateSignByJson (line 102) | public static String generateSignByJson(String jsonParams, String key)
method generateSign (line 129) | public static String generateSign(String content, String key)
method hmacEncode (line 147) | private static String hmacEncode(String plainText, String key)
method main (line 167) | public static void main(String[] args)
FILE: SpringCloud-Common/src/main/java/com/xiao/springcloud/demo/common/util/CodeFormatConstants.java
type CodeFormatConstants (line 18) | public interface CodeFormatConstants
FILE: SpringCloud-Common/src/main/java/com/xiao/springcloud/demo/common/util/DateUtils.java
class DateUtils (line 14) | public class DateUtils
method getNextDay (line 23) | public static Date getNextDay()
method getDayEnd (line 39) | public static Date getDayEnd()
FILE: SpringCloud-Common/src/main/java/com/xiao/springcloud/demo/common/util/ListPageUtil.java
class ListPageUtil (line 15) | public final class ListPageUtil<T>
method ListPageUtil (line 31) | public ListPageUtil(List<T> list, int pageSize)
method getFistPage (line 67) | public List<T> getFistPage()
method getLastPage (line 79) | public List<T> getLastPage()
method nextPage (line 91) | public List<T> nextPage()
method hasNext (line 113) | public boolean hasNext()
method getPageCount (line 125) | public int getPageCount()
method getPageSize (line 137) | public int getPageSize()
method getIndex (line 149) | public int getIndex()
method getListSize (line 161) | public int getListSize()
method main (line 166) | public static void main(String[] args)
FILE: SpringCloud-Common/src/main/java/com/xiao/springcloud/demo/common/util/StringLengthUtils.java
class StringLengthUtils (line 16) | @Slf4j
method getLength (line 40) | public static int getLength(String st, String code)
method getLengthByUtf (line 73) | public static int getLengthByUtf(String st)
method getLengthByGbk (line 86) | public static int getLengthByGbk(String str)
method subByUtf8 (line 104) | public static String subByUtf8(String str, int length)
method subByGbk (line 169) | public static String subByGbk(String str, int length)
method main (line 221) | public static void main(String[] args) throws Exception
FILE: SpringCloud-Common/src/main/java/com/xiao/springcloud/demo/common/util/encode/AESEncryption.java
class AESEncryption (line 32) | @Slf4j
method createAESKey (line 75) | public static String createAESKey(AESType type)
method encryptAES (line 99) | public static String encryptAES(String key, String plaintext)
method decryptAES (line 126) | public static String decryptAES(String key, String ciphertext)
method main (line 146) | public static void main(String[] args)
FILE: SpringCloud-Common/src/main/java/com/xiao/springcloud/demo/common/util/encode/AESType.java
type AESType (line 18) | public enum AESType
method AESType (line 29) | AESType(int value)
method getValue (line 34) | public int getValue()
method setValue (line 39) | public void setValue(int value)
FILE: SpringCloud-Common/src/main/java/com/xiao/springcloud/demo/common/util/encode/BinaryHelper.java
class BinaryHelper (line 20) | public class BinaryHelper
method array2Str (line 30) | public static String array2Str(byte[] array)
method array2Base64Str (line 52) | public static String array2Base64Str(byte[] array)
method base642Array (line 65) | public static byte[] base642Array(String base64Str)
FILE: SpringCloud-Common/src/main/java/com/xiao/springcloud/demo/common/util/encode/ByteUtils.java
class ByteUtils (line 18) | public class ByteUtils
method parseHexStr2Byte (line 26) | public static byte[] parseHexStr2Byte(String hexStr)
method parseByte2HexStr (line 48) | public static String parseByte2HexStr(byte buf[])
FILE: SpringCloud-Common/src/main/java/com/xiao/springcloud/demo/common/util/encode/HMACUtil.java
class HMACUtil (line 28) | @Slf4j
method hmacSHA1Encode (line 50) | public static String hmacSHA1Encode(String plainText, String key)
method hmacSHA256Encode (line 63) | public static String hmacSHA256Encode(String plainText, String key)
method hmacEncode (line 77) | private static String hmacEncode(String plainText, String key, String ...
FILE: SpringCloud-Common/src/main/java/com/xiao/springcloud/demo/common/util/encode/Md5DigestUtil.java
class Md5DigestUtil (line 26) | @Slf4j
method md5Encoding2Base64 (line 42) | public static String md5Encoding2Base64(String plaintext)
method md5Encoding (line 54) | public static String md5Encoding(String plaintext)
method md5Encoding (line 67) | public static String md5Encoding(String plaintext, boolean isBase64)
FILE: SpringCloud-Common/src/main/java/com/xiao/springcloud/demo/common/util/image/ImageDHashUtil.java
class ImageDHashUtil (line 23) | public class ImageDHashUtil
method getDHash (line 31) | private static String getDHash(File file)
method getHammingDistance (line 88) | private static long getHammingDistance(String str1, String str2)
method main (line 110) | public static void main(String[] args)
FILE: SpringCloud-Common/src/main/java/com/xiao/springcloud/demo/common/util/image/ImagePHashUtil.java
class ImagePHashUtil (line 33) | @Slf4j
method ImagePHashUtil (line 51) | public ImagePHashUtil()
method ImagePHashUtil (line 64) | public ImagePHashUtil(int matchThreshold, boolean check)
method main (line 71) | public static void main(String[] args)
method matchImage4Url (line 95) | public boolean matchImage4Url(String img1Url, String img2Url)
method matchImage4Path (line 121) | public boolean matchImage4Path(String img1Path, String img2Path)
method matchImage4Stream (line 148) | public boolean matchImage4Stream(InputStream image1, InputStream image2)
method isImage (line 190) | private static boolean isImage(InputStream inputStream)
method distance (line 209) | private int distance(String s1, String s2)
method getHash (line 229) | private String getHash(InputStream is) throws Exception
method resize (line 286) | private BufferedImage resize(BufferedImage image, int width, int height)
method grayscale (line 295) | private BufferedImage grayscale(BufferedImage img)
method getBlue (line 301) | private static int getBlue(BufferedImage img, int x, int y)
method initCoefficients (line 309) | private void initCoefficients()
method applyDCT (line 319) | private double[][] applyDCT(double[][] f)
FILE: SpringCloud-Common/src/main/java/com/xiao/springcloud/demo/common/validator/ParamAspect.java
class ParamAspect (line 17) | @Aspect
method paramValidator (line 26) | @Pointcut("@annotation(com.purcotton.omni.common.annotation.param.aop....
method execute (line 33) | @Around("paramValidator()")
FILE: SpringCloud-Common/src/main/java/com/xiao/springcloud/demo/common/validator/ParamValidator.java
class ParamValidator (line 25) | @Slf4j
method validator (line 34) | public static void validator(Object object)
method generateCode (line 115) | private static int generateCode(int moduleCode, String serviceCode)
FILE: SpringCloud-Common/src/main/java/com/xiao/springcloud/demo/common/validator/VerifyConstants.java
type VerifyConstants (line 18) | public interface VerifyConstants
FILE: SpringCloud-ConfigCenter/src/main/java/com/xiao/springcloud/configure/ConfigureApplication.java
class ConfigureApplication (line 22) | @SpringBootApplication
method main (line 35) | public static void main(String[] args)
FILE: SpringCloud-Consumer/src/main/java/com/xiao/skywalking/consumer/ConsumerApp.java
class ConsumerApp (line 26) | @SpringBootApplication
method resTemplate (line 43) | @Bean
method main (line 50) | public static void main(String[] args)
FILE: SpringCloud-Consumer/src/main/java/com/xiao/skywalking/consumer/common/CommonConstants.java
type CommonConstants (line 11) | public interface CommonConstants
FILE: SpringCloud-Consumer/src/main/java/com/xiao/skywalking/consumer/common/CommonException.java
class CommonException (line 11) | public class CommonException extends RuntimeException
method CommonException (line 17) | public CommonException(Integer code, String errorMessage)
method CommonException (line 24) | public CommonException(ExceptionEnum exceptionEnum)
method getCode (line 31) | public Integer getCode()
method setCode (line 36) | public void setCode(Integer code)
method getErrorMessage (line 41) | public String getErrorMessage()
method setErrorMessage (line 46) | public void setErrorMessage(String errorMessage)
FILE: SpringCloud-Consumer/src/main/java/com/xiao/skywalking/consumer/common/ExceptionEnum.java
type ExceptionEnum (line 16) | public enum ExceptionEnum
method ExceptionEnum (line 41) | ExceptionEnum(int errorCode, String errorMsg)
method getErrorCode (line 47) | public int getErrorCode()
method getErrorMsg (line 52) | public String getErrorMsg()
FILE: SpringCloud-Consumer/src/main/java/com/xiao/skywalking/consumer/common/advice/GlobalExceptionAdvice.java
class GlobalExceptionAdvice (line 24) | @ControllerAdvice
method serviceException (line 31) | @ExceptionHandler(CommonException.class)
method notFount (line 42) | @ExceptionHandler(Exception.class)
method printRequestUrl (line 55) | private void printRequestUrl()
FILE: SpringCloud-Consumer/src/main/java/com/xiao/skywalking/consumer/common/advice/UnifiedReturnAdvice.java
class UnifiedReturnAdvice (line 22) | @Configuration
class CommonResultAdvice (line 26) | @RestControllerAdvice
method supports (line 39) | @Override
method beforeBodyWrite (line 57) | @Override
FILE: SpringCloud-Consumer/src/main/java/com/xiao/skywalking/consumer/common/response/ErrorResponseData.java
class ErrorResponseData (line 8) | @NoArgsConstructor
method ErrorResponseData (line 11) | public ErrorResponseData(String message) {
method ErrorResponseData (line 15) | public ErrorResponseData(Integer code, String message) {
method ErrorResponseData (line 19) | public ErrorResponseData(Integer code, String message, T data) {
FILE: SpringCloud-Consumer/src/main/java/com/xiao/skywalking/consumer/common/response/ResponseData.java
class ResponseData (line 14) | @Data
method ResponseData (line 51) | public ResponseData(T data)
method ResponseData (line 58) | public ResponseData(int code, String message)
method success (line 65) | public static SuccessResponseData success()
method success (line 70) | public static SuccessResponseData<Object> success(Object data)
method success (line 75) | public static SuccessResponseData success(Integer code, String message...
method error (line 80) | public static ErrorResponseData error(String message)
method error (line 85) | public static ErrorResponseData error(Integer code, String message)
method error (line 90) | public static ErrorResponseData error(Integer code, String message, Ob...
method error (line 95) | public static ErrorResponseData error(ExceptionEnum exceptionEnum)
FILE: SpringCloud-Consumer/src/main/java/com/xiao/skywalking/consumer/common/response/SuccessResponseData.java
class SuccessResponseData (line 8) | @NoArgsConstructor
method SuccessResponseData (line 11) | public SuccessResponseData(T data) {
method SuccessResponseData (line 15) | public SuccessResponseData(Integer code, String message, T data) {
FILE: SpringCloud-Consumer/src/main/java/com/xiao/skywalking/consumer/controller/FeignContoller.java
class FeignContoller (line 25) | @RestController
method feign (line 38) | @RequestMapping(path = "/feign")
method ribbon (line 45) | @RequestMapping(path = "/ribbon")
FILE: SpringCloud-Consumer/src/main/java/com/xiao/skywalking/consumer/feign/FeignService.java
type FeignService (line 23) | @FeignClient(value = "provider-1112", fallback = FeignServiceImpl.class)
method helloSkywalking (line 26) | @RequestMapping(value = "/skywalking")
FILE: SpringCloud-Consumer/src/main/java/com/xiao/skywalking/consumer/feign/impl/FeignServiceImpl.java
class FeignServiceImpl (line 22) | @Component
method helloSkywalking (line 31) | @Override
FILE: SpringCloud-Consumer/src/main/java/com/xiao/skywalking/consumer/ribbon/RibbonService.java
class RibbonService (line 24) | @Service
method helloSkywalking (line 36) | @HystrixCommand(fallbackMethod = "fallback")
method fallback (line 42) | public String fallback(String hello)
FILE: SpringCloud-Custom-ConfigCenter/custom-config-client/src/main/java/com/xiao/custom/config/client/configuration/ConfigClientAutoConfiguration.java
class ConfigClientAutoConfiguration (line 39) | @Configuration
method configClientProperties (line 42) | @Bean
method configClientHealthProperties (line 54) | @Bean
class ConfigServerHealthIndicatorConfiguration (line 60) | @Configuration
method configServerHealthIndicator (line 67) | @Bean
class ConfigClientWatchConfiguration (line 75) | @Configuration
method configClientWatch (line 81) | @Bean
method nettyClient (line 88) | @Bean
FILE: SpringCloud-Custom-ConfigCenter/custom-config-client/src/main/java/com/xiao/custom/config/client/configuration/ConfigClientHealthProperties.java
class ConfigClientHealthProperties (line 25) | @ConfigurationProperties("health.config")
method isEnabled (line 37) | public boolean isEnabled() {
method setEnabled (line 41) | public void setEnabled(boolean enabled) {
method getTimeToLive (line 45) | public long getTimeToLive() {
method setTimeToLive (line 49) | public void setTimeToLive(long timeToLive) {
FILE: SpringCloud-Custom-ConfigCenter/custom-config-client/src/main/java/com/xiao/custom/config/client/configuration/ConfigClientProperties.java
class ConfigClientProperties (line 32) | @ConfigurationProperties(ConfigClientProperties.PREFIX)
method ConfigClientProperties (line 116) | private ConfigClientProperties()
method ConfigClientProperties (line 120) | public ConfigClientProperties(Environment environment)
method isCustom (line 130) | public boolean isCustom()
method setCustom (line 135) | public void setCustom(boolean custom)
method getNettyPort (line 140) | public int getNettyPort()
method setNettyPort (line 145) | public void setNettyPort(int nettyPort)
method isEnabled (line 150) | public boolean isEnabled()
method setEnabled (line 155) | public void setEnabled(boolean enabled)
method getRawUri (line 160) | public String getRawUri()
method getUri (line 165) | public String getUri()
method setUri (line 170) | public void setUri(String url)
method getName (line 175) | public String getName()
method setName (line 180) | public void setName(String name)
method getProfile (line 185) | public String getProfile()
method setProfile (line 190) | public void setProfile(String env)
method getLabel (line 195) | public String getLabel()
method setLabel (line 200) | public void setLabel(String label)
method getUsername (line 205) | public String getUsername()
method setUsername (line 210) | public void setUsername(String username)
method getPassword (line 215) | public String getPassword()
method setPassword (line 220) | public void setPassword(String password)
method getDiscovery (line 225) | public Discovery getDiscovery()
method setDiscovery (line 230) | public void setDiscovery(Discovery discovery)
method isFailFast (line 235) | public boolean isFailFast()
method setFailFast (line 240) | public void setFailFast(boolean failFast)
method getToken (line 245) | public String getToken()
method setToken (line 250) | public void setToken(String token)
method getAuthorization (line 255) | public String getAuthorization()
method setAuthorization (line 260) | public void setAuthorization(String authorization)
method getServerPort (line 265) | public int getServerPort()
method setServerPort (line 270) | public void setServerPort(int serverPort)
method extractCredentials (line 275) | private Credentials extractCredentials()
method getUsernamePassword (line 324) | private Credentials getUsernamePassword()
class Credentials (line 344) | private static class Credentials
class Discovery (line 351) | public static class Discovery
method isEnabled (line 365) | public boolean isEnabled()
method setEnabled (line 370) | public void setEnabled(boolean enabled)
method getServiceId (line 375) | public String getServiceId()
method setServiceId (line 380) | public void setServiceId(String serviceId)
method override (line 387) | public ConfigClientProperties override(Environment environment)
method toString (line 404) | @Override
FILE: SpringCloud-Custom-ConfigCenter/custom-config-client/src/main/java/com/xiao/custom/config/client/configuration/ConfigClientStateHolder.java
class ConfigClientStateHolder (line 6) | public class ConfigClientStateHolder {
method resetState (line 9) | public static void resetState() {
method setState (line 13) | public static void setState(String newState) {
method getState (line 21) | public static String getState() {
FILE: SpringCloud-Custom-ConfigCenter/custom-config-client/src/main/java/com/xiao/custom/config/client/configuration/ConfigClientWatch.java
class ConfigClientWatch (line 35) | public class ConfigClientWatch implements Closeable, EnvironmentAware
method ConfigClientWatch (line 44) | public ConfigClientWatch(ContextRefresher refresher)
method setEnvironment (line 49) | @Override
method start (line 55) | @PostConstruct
method watchConfigServer (line 61) | @Scheduled(initialDelayString = "${spring.cloud.config.watch.initialDe...
method stateChanged (line 78) | boolean stateChanged(String oldState, String newState)
method close (line 83) | @Override
FILE: SpringCloud-Custom-ConfigCenter/custom-config-client/src/main/java/com/xiao/custom/config/client/configuration/ConfigServerHealthIndicator.java
class ConfigServerHealthIndicator (line 16) | public class ConfigServerHealthIndicator extends AbstractHealthIndicator
method ConfigServerHealthIndicator (line 27) | public ConfigServerHealthIndicator(ConfigServicePropertySourceLocator ...
method doHealthCheck (line 35) | @Override
method getPropertySource (line 59) | private PropertySource<?> getPropertySource()
method isCacheStale (line 70) | private boolean isCacheStale(long accessTime)
FILE: SpringCloud-Custom-ConfigCenter/custom-config-client/src/main/java/com/xiao/custom/config/client/configuration/ConfigServiceBootstrapConfiguration.java
class ConfigServiceBootstrapConfiguration (line 38) | @Configuration
method configClientProperties (line 46) | @Bean
method configServicePropertySource (line 53) | @Bean
class RetryConfiguration (line 61) | @ConditionalOnProperty(value = "spring.cloud.config.failFast", matchIf...
method configServerRetryInterceptor (line 70) | @Bean
FILE: SpringCloud-Custom-ConfigCenter/custom-config-client/src/main/java/com/xiao/custom/config/client/configuration/ConfigServicePropertySourceLocator.java
class ConfigServicePropertySourceLocator (line 51) | @Order(0)
method ConfigServicePropertySourceLocator (line 63) | public ConfigServicePropertySourceLocator(ConfigClientProperties defau...
method locate (line 68) | @Override
method putValue (line 144) | private void putValue(HashMap<String, Object> map, String key, String ...
method getRemoteEnvironment (line 152) | private Environment getRemoteEnvironment(RestTemplate restTemplate, Co...
method setRestTemplate (line 199) | public void setRestTemplate(RestTemplate restTemplate)
method getSecureRestTemplate (line 204) | private RestTemplate getSecureRestTemplate(ConfigClientProperties client)
class BasicAuthorizationInterceptor (line 240) | private static class BasicAuthorizationInterceptor implements ClientHt...
method BasicAuthorizationInterceptor (line 247) | public BasicAuthorizationInterceptor(String username, String password)
method intercept (line 253) | @Override
class GenericAuthorization (line 264) | private static class GenericAuthorization implements ClientHttpRequest...
method GenericAuthorization (line 269) | public GenericAuthorization(String authorizationToken)
method intercept (line 274) | @Override
FILE: SpringCloud-Custom-ConfigCenter/custom-config-client/src/main/java/com/xiao/custom/config/client/configuration/DiscoveryClientConfigServiceBootstrapConfiguration.java
class DiscoveryClientConfigServiceBootstrapConfiguration (line 42) | @ConditionalOnProperty(value = "spring.cloud.config.discovery.enabled", ...
method startup (line 59) | @EventListener(ContextRefreshedEvent.class)
method heartbeat (line 65) | @EventListener(HeartbeatEvent.class)
method refresh (line 74) | private void refresh()
method getHomePage (line 113) | private String getHomePage(ServiceInstance server)
FILE: SpringCloud-Custom-ConfigCenter/custom-config-client/src/main/java/com/xiao/custom/config/client/configuration/RetryProperties.java
class RetryProperties (line 25) | @ConfigurationProperties("spring.cloud.config.retry")
method getInitialInterval (line 45) | public long getInitialInterval() {
method setInitialInterval (line 49) | public void setInitialInterval(long initialInterval) {
method getMultiplier (line 53) | public double getMultiplier() {
method setMultiplier (line 57) | public void setMultiplier(double multiplier) {
method getMaxInterval (line 61) | public long getMaxInterval() {
method setMaxInterval (line 65) | public void setMaxInterval(long maxInterval) {
method getMaxAttempts (line 69) | public int getMaxAttempts() {
method setMaxAttempts (line 73) | public void setMaxAttempts(int maxAttempts) {
FILE: SpringCloud-Custom-ConfigCenter/custom-config-client/src/main/java/com/xiao/custom/config/client/environment/Environment.java
class Environment (line 35) | public class Environment {
method Environment (line 49) | public Environment(String name, String... profiles) {
method Environment (line 57) | public Environment(Environment env) {
method Environment (line 61) | @JsonCreator
method add (line 75) | public void add(PropertySource propertySource) {
method addAll (line 79) | public void addAll(List<PropertySource> propertySources) {
method addFirst (line 83) | public void addFirst(PropertySource propertySource) {
method getPropertySources (line 87) | public List<PropertySource> getPropertySources() {
method getName (line 91) | public String getName() {
method setName (line 95) | public void setName(String name) {
method getLabel (line 99) | public String getLabel() {
method setLabel (line 103) | public void setLabel(String label) {
method getProfiles (line 107) | public String[] getProfiles() {
method setProfiles (line 111) | public void setProfiles(String[] profiles) {
method getVersion (line 115) | public String getVersion() {
method setVersion (line 119) | public void setVersion(String version) {
method getState (line 123) | public String getState() {
method setState (line 127) | public void setState(String state) {
method toString (line 131) | @Override
FILE: SpringCloud-Custom-ConfigCenter/custom-config-client/src/main/java/com/xiao/custom/config/client/environment/PropertySource.java
class PropertySource (line 32) | public class PropertySource {
method PropertySource (line 38) | @JsonCreator
method getName (line 45) | public String getName() {
method getSource (line 49) | public Map<?, ?> getSource() {
method toString (line 53) | @Override
FILE: SpringCloud-Custom-ConfigCenter/custom-config-client/src/main/java/com/xiao/custom/config/client/netty/client/NettyClient.java
class NettyClient (line 38) | @Slf4j
method NettyClient (line 61) | public NettyClient()
method destroy (line 66) | @Override
method onApplicationEvent (line 71) | @Override
method pushMessage (line 94) | public void pushMessage(Message message)
method login (line 102) | private void login()
method parseHost (line 118) | private String parseHost(String uri)
method init (line 132) | private void init()
method connect (line 159) | private void connect()
method check (line 175) | private void check()
FILE: SpringCloud-Custom-ConfigCenter/custom-config-client/src/main/java/com/xiao/custom/config/client/netty/coder/ProtoDecoder.java
class ProtoDecoder (line 18) | public class ProtoDecoder extends ByteToMessageDecoder
method ProtoDecoder (line 24) | public ProtoDecoder(Class cls)
method decode (line 29) | @Override
FILE: SpringCloud-Custom-ConfigCenter/custom-config-client/src/main/java/com/xiao/custom/config/client/netty/coder/ProtoEncoder.java
class ProtoEncoder (line 17) | @ChannelHandler.Sharable
method ProtoEncoder (line 22) | public ProtoEncoder(Class cls)
method encode (line 27) | @Override
FILE: SpringCloud-Custom-ConfigCenter/custom-config-client/src/main/java/com/xiao/custom/config/client/netty/dto/CommandEnum.java
type CommandEnum (line 11) | public enum CommandEnum
method CommandEnum (line 28) | CommandEnum(int status)
method getStatus (line 33) | public int getStatus()
FILE: SpringCloud-Custom-ConfigCenter/custom-config-client/src/main/java/com/xiao/custom/config/client/netty/dto/Message.java
class Message (line 13) | @Data
FILE: SpringCloud-Custom-ConfigCenter/custom-config-client/src/main/java/com/xiao/custom/config/client/netty/factory/CoderFactory.java
class CoderFactory (line 15) | public class CoderFactory
method newDecoder (line 17) | public static ProtoDecoder newDecoder()
method newEncoder (line 22) | public static ProtoEncoder newEncoder()
FILE: SpringCloud-Custom-ConfigCenter/custom-config-client/src/main/java/com/xiao/custom/config/client/netty/factory/NamedThreadFactory.java
class NamedThreadFactory (line 28) | public class NamedThreadFactory implements ThreadFactory
method NamedThreadFactory (line 37) | public NamedThreadFactory()
method NamedThreadFactory (line 42) | public NamedThreadFactory(String name)
method NamedThreadFactory (line 47) | public NamedThreadFactory(String preffix, boolean daemon)
method newThread (line 60) | @Override
method create (line 79) | public static ThreadFactory create(final String namePrefix, final bool...
FILE: SpringCloud-Custom-ConfigCenter/custom-config-client/src/main/java/com/xiao/custom/config/client/netty/handler/ServiceHandler.java
class ServiceHandler (line 25) | @ChannelHandler.Sharable
method ServiceHandler (line 35) | public ServiceHandler(AtomicBoolean stated, ContextRefresher refresher)
method channelRead0 (line 43) | @Override
method exceptionCaught (line 65) | @Override
method userEventTriggered (line 73) | @Override
method channelActive (line 113) | @Override
method channelInactive (line 121) | @Override
FILE: SpringCloud-Custom-ConfigCenter/custom-config-client/src/main/java/com/xiao/custom/config/client/netty/util/ProtostuffUtil.java
class ProtostuffUtil (line 28) | public class ProtostuffUtil
method getSchema (line 40) | @SuppressWarnings("unchecked")
method serialize (line 62) | @SuppressWarnings("unchecked")
method deserialize (line 90) | public static <T> T deserialize(byte[] data, Class<T> cls)
FILE: SpringCloud-Custom-ConfigCenter/custom-config-client/src/main/java/com/xiao/custom/config/client/netty/util/RemotingUtil.java
class RemotingUtil (line 32) | @Slf4j
method parseRemoteAddress (line 42) | public static String parseRemoteAddress(final Channel channel)
method parseLocalAddress (line 58) | public static String parseLocalAddress(final Channel channel)
method parseRemoteIP (line 74) | public static String parseRemoteIP(final Channel channel)
method parseRemoteHostName (line 96) | public static String parseRemoteHostName(final Channel channel)
method parseLocalIP (line 116) | public static String parseLocalIP(final Channel channel)
method parseRemotePort (line 136) | public static int parseRemotePort(final Channel channel)
method parseLocalPort (line 156) | public static int parseLocalPort(final Channel channel)
method parseSocketAddressToString (line 179) | public static String parseSocketAddressToString(SocketAddress socketAd...
method parseSocketAddressToHostIp (line 196) | public static String parseSocketAddressToHostIp(SocketAddress socketAd...
method getHost (line 216) | public static String getHost(String url)
method getLocalHost (line 242) | public static String getLocalHost()
method getLocalHostLANAddress (line 262) | public static InetAddress getLocalHostLANAddress()
method doParse (line 319) | private static String doParse(String addr)
FILE: SpringCloud-Custom-ConfigCenter/custom-config-client/src/main/java/com/xiao/custom/config/client/refresh/api/RefreshController.java
class RefreshController (line 19) | public class RefreshController
method refresh (line 35) | @RequestMapping(value = "/refresh", method = RequestMethod.POST)
FILE: SpringCloud-Custom-ConfigCenter/custom-config-client/src/main/java/com/xiao/custom/config/client/refresh/component/RefreshBeanConfig.java
class RefreshBeanConfig (line 17) | public class RefreshBeanConfig
FILE: SpringCloud-Custom-ConfigCenter/custom-config-client/src/main/java/com/xiao/custom/config/client/refresh/service/ConfigRefreshService.java
type ConfigRefreshService (line 11) | public interface ConfigRefreshService
method refresh (line 19) | void refresh();
FILE: SpringCloud-Custom-ConfigCenter/custom-config-client/src/main/java/com/xiao/custom/config/client/refresh/service/impl/ConfigRefreshServiceImpl.java
class ConfigRefreshServiceImpl (line 18) | @Slf4j
method refresh (line 30) | @Override
FILE: SpringCloud-Custom-ConfigCenter/custom-config-pojo/src/main/java/com/xiao/custom/config/pojo/common/BaseQuery.java
class BaseQuery (line 13) | @Data
FILE: SpringCloud-Custom-ConfigCenter/custom-config-pojo/src/main/java/com/xiao/custom/config/pojo/dto/ApplicationConfigDto.java
class ApplicationConfigDto (line 13) | @Data
FILE: SpringCloud-Custom-ConfigCenter/custom-config-pojo/src/main/java/com/xiao/custom/config/pojo/dto/ApplicationDto.java
class ApplicationDto (line 14) | @Data
method convertToEntity (line 49) | public static Application convertToEntity(ApplicationDto applicationCo...
FILE: SpringCloud-Custom-ConfigCenter/custom-config-pojo/src/main/java/com/xiao/custom/config/pojo/dto/ClientHostInfoDto.java
class ClientHostInfoDto (line 15) | @Data
FILE: SpringCloud-Custom-ConfigCenter/custom-config-pojo/src/main/java/com/xiao/custom/config/pojo/dto/ConfigItemDto.java
class ConfigItemDto (line 14) | @Data
method convertToEntity (line 44) | public static ConfigItem convertToEntity(ConfigItemDto configItemDto)
method convertToDto (line 62) | public static ConfigItemDto convertToDto(ConfigItem configItem)
FILE: SpringCloud-Custom-ConfigCenter/custom-config-pojo/src/main/java/com/xiao/custom/config/pojo/dto/ConfigItemGroupDto.java
class ConfigItemGroupDto (line 14) | @Data
method convertToEntity (line 35) | public static ConfigItemGroup convertToEntity(ConfigItemGroupDto confi...
method convertToDto (line 50) | public static ConfigItemGroupDto convertToDto(ConfigItemGroup configIt...
FILE: SpringCloud-Custom-ConfigCenter/custom-config-pojo/src/main/java/com/xiao/custom/config/pojo/dto/RegionDto.java
class RegionDto (line 13) | @Data
FILE: SpringCloud-Custom-ConfigCenter/custom-config-pojo/src/main/java/com/xiao/custom/config/pojo/dto/ServerHostConfigDto.java
class ServerHostConfigDto (line 13) | @Data
FILE: SpringCloud-Custom-ConfigCenter/custom-config-pojo/src/main/java/com/xiao/custom/config/pojo/entity/Application.java
class Application (line 13) | @Data
FILE: SpringCloud-Custom-ConfigCenter/custom-config-pojo/src/main/java/com/xiao/custom/config/pojo/entity/ApplicationConfig.java
class ApplicationConfig (line 13) | @Data
FILE: SpringCloud-Custom-ConfigCenter/custom-config-pojo/src/main/java/com/xiao/custom/config/pojo/entity/ApplicationItemGroupRelation.java
class ApplicationItemGroupRelation (line 11) | @Data
FILE: SpringCloud-Custom-ConfigCenter/custom-config-pojo/src/main/java/com/xiao/custom/config/pojo/entity/AuthUser.java
class AuthUser (line 11) | @Data
FILE: SpringCloud-Custom-ConfigCenter/custom-config-pojo/src/main/java/com/xiao/custom/config/pojo/entity/ClientApplication.java
class ClientApplication (line 11) | @Data
FILE: SpringCloud-Custom-ConfigCenter/custom-config-pojo/src/main/java/com/xiao/custom/config/pojo/entity/ClientHostInfo.java
class ClientHostInfo (line 11) | @Data
FILE: SpringCloud-Custom-ConfigCenter/custom-config-pojo/src/main/java/com/xiao/custom/config/pojo/entity/ClientInfo.java
class ClientInfo (line 15) | @Data
FILE: SpringCloud-Custom-ConfigCenter/custom-config-pojo/src/main/java/com/xiao/custom/config/pojo/entity/ConfigItem.java
class ConfigItem (line 13) | @Data
FILE: SpringCloud-Custom-ConfigCenter/custom-config-pojo/src/main/java/com/xiao/custom/config/pojo/entity/ConfigItemGroup.java
class ConfigItemGroup (line 13) | @Data
FILE: SpringCloud-Custom-ConfigCenter/custom-config-pojo/src/main/java/com/xiao/custom/config/pojo/entity/ConfigItemGroupRelation.java
class ConfigItemGroupRelation (line 11) | @Data
FILE: SpringCloud-Custom-ConfigCenter/custom-config-pojo/src/main/java/com/xiao/custom/config/pojo/entity/Region.java
class Region (line 13) | @Data
FILE: SpringCloud-Custom-ConfigCenter/custom-config-pojo/src/main/java/com/xiao/custom/config/pojo/entity/Role.java
class Role (line 12) | @Data
FILE: SpringCloud-Custom-ConfigCenter/custom-config-pojo/src/main/java/com/xiao/custom/config/pojo/entity/ServerHostConfig.java
class ServerHostConfig (line 13) | @Data
FILE: SpringCloud-Custom-ConfigCenter/custom-config-pojo/src/main/java/com/xiao/custom/config/pojo/mapper/ApplicationConfigMapper.java
type ApplicationConfigMapper (line 13) | public interface ApplicationConfigMapper
method deleteByPrimaryKey (line 15) | int deleteByPrimaryKey(Long id);
method insert (line 17) | int insert(ApplicationConfig record);
method insertSelective (line 19) | int insertSelective(ApplicationConfig record);
method selectByPrimaryKey (line 21) | ApplicationConfig selectByPrimaryKey(Long id);
method updateByPrimaryKeySelective (line 23) | int updateByPrimaryKeySelective(ApplicationConfig record);
method updateByPrimaryKey (line 25) | int updateByPrimaryKey(ApplicationConfig record);
method pageQuery (line 35) | List<ApplicationConfigDto> pageQuery(ApplicationConfigQuery query);
FILE: SpringCloud-Custom-ConfigCenter/custom-config-pojo/src/main/java/com/xiao/custom/config/pojo/mapper/ApplicationItemGroupRelationMapper.java
type ApplicationItemGroupRelationMapper (line 9) | public interface ApplicationItemGroupRelationMapper
method deleteByPrimaryKey (line 11) | int deleteByPrimaryKey(Long id);
method insert (line 13) | int insert(ApplicationItemGroupRelation record);
method insertSelective (line 15) | int insertSelective(ApplicationItemGroupRelation record);
method selectByPrimaryKey (line 17) | ApplicationItemGroupRelation selectByPrimaryKey(Long id);
method updateByPrimaryKeySelective (line 19) | int updateByPrimaryKeySelective(ApplicationItemGroupRelation record);
method updateByPrimaryKey (line 21) | int updateByPrimaryKey(ApplicationItemGroupRelation record);
method batchSave (line 32) | int batchSave(@Param("groupIdArr") String[] groupIdArr, @Param("appId"...
method batchDelete (line 43) | int batchDelete(@Param("groupIdArr") String[] groupIdArr, @Param("appI...
method deleteByAppId (line 53) | int deleteByAppId(@Param("appId") Long appId);
method countByGroupId (line 63) | int countByGroupId(String groupId);
FILE: SpringCloud-Custom-ConfigCenter/custom-config-pojo/src/main/java/com/xiao/custom/config/pojo/mapper/ApplicationMapper.java
type ApplicationMapper (line 12) | public interface ApplicationMapper
method deleteByPrimaryKey (line 14) | int deleteByPrimaryKey(Long id);
method insert (line 16) | int insert(Application record);
method insertSelective (line 18) | int insertSelective(Application record);
method selectByPrimaryKey (line 20) | Application selectByPrimaryKey(Long id);
method updateByPrimaryKeySelective (line 22) | int updateByPrimaryKeySelective(Application record);
method updateByPrimaryKey (line 24) | int updateByPrimaryKey(Application record);
method pageApplicationConfig (line 34) | List<ApplicationDto> pageApplicationConfig(AppQuery appQuery);
method countByRegionId (line 44) | Integer countByRegionId(Long regionId);
FILE: SpringCloud-Custom-ConfigCenter/custom-config-pojo/src/main/java/com/xiao/custom/config/pojo/mapper/AuthMapper.java
type AuthMapper (line 12) | @Repository
method findByUsername (line 21) | AuthUser findByUsername(@Param("username") String username);
method insert (line 28) | void insert(AuthUser userDetail);
method insertRole (line 37) | int insertRole(@Param("userId") long userId, @Param("roleId") long rol...
method findRoleById (line 45) | Role findRoleById(@Param("roleId") long roleId);
method findRoleByUserId (line 53) | Role findRoleByUserId(@Param("userId") long userId);
FILE: SpringCloud-Custom-ConfigCenter/custom-config-pojo/src/main/java/com/xiao/custom/config/pojo/mapper/ClientApplicationMapper.java
type ClientApplicationMapper (line 9) | public interface ClientApplicationMapper
method deleteByPrimaryKey (line 11) | int deleteByPrimaryKey(Long id);
method insert (line 13) | int insert(ClientApplication record);
method insertSelective (line 15) | int insertSelective(ClientApplication record);
method selectByPrimaryKey (line 17) | ClientApplication selectByPrimaryKey(Long id);
method updateByPrimaryKeySelective (line 19) | int updateByPrimaryKeySelective(ClientApplication record);
method updateByPrimaryKey (line 21) | int updateByPrimaryKey(ClientApplication record);
method updateStatus (line 33) | void updateStatus(@Param("application") String application, @Param("pr...
FILE: SpringCloud-Custom-ConfigCenter/custom-config-pojo/src/main/java/com/xiao/custom/config/pojo/mapper/ClientHostInfoMapper.java
type ClientHostInfoMapper (line 13) | public interface ClientHostInfoMapper
method deleteByPrimaryKey (line 15) | int deleteByPrimaryKey(Long id);
method insert (line 17) | int insert(ClientHostInfo record);
method insertSelective (line 19) | int insertSelective(ClientHostInfo record);
method selectByPrimaryKey (line 21) | ClientHostInfo selectByPrimaryKey(Long id);
method updateByPrimaryKeySelective (line 23) | int updateByPrimaryKeySelective(ClientHostInfo record);
method updateByPrimaryKey (line 25) | int updateByPrimaryKey(ClientHostInfo record);
method queryByApplication (line 36) | List<ClientHostInfo> queryByApplication(@Param("application") String a...
method updateStatus (line 47) | int updateStatus(@Param("id") Long id, @Param("status") int status);
method pageQuery (line 57) | List<ClientHostInfoDto> pageQuery(ClientHostInfoQuery query);
FILE: SpringCloud-Custom-ConfigCenter/custom-config-pojo/src/main/java/com/xiao/custom/config/pojo/mapper/ConfigItemGroupMapper.java
type ConfigItemGroupMapper (line 13) | public interface ConfigItemGroupMapper {
method deleteByPrimaryKey (line 14) | int deleteByPrimaryKey(Long id);
method insert (line 16) | int insert(ConfigItemGroup record);
method insertSelective (line 18) | int insertSelective(ConfigItemGroup record);
method selectByPrimaryKey (line 20) | ConfigItemGroup selectByPrimaryKey(Long id);
method updateByPrimaryKeySelective (line 22) | int updateByPrimaryKeySelective(ConfigItemGroup record);
method updateByPrimaryKey (line 24) | int updateByPrimaryKey(ConfigItemGroup record);
method pageConfigItemGroup (line 34) | List<ConfigItemGroupDto> pageConfigItemGroup(ConfigItemGroupQuery conf...
method pageRefGroupWithApp (line 44) | List<ConfigItemGroupDto> pageRefGroupWithApp(ConfigItemGroupQuery conf...
method pageNotRefGroupWithApp (line 54) | List<ConfigItemGroupDto> pageNotRefGroupWithApp(ConfigItemGroupQuery c...
method batchDelete (line 64) | int batchDelete(@Param("idArr") String[] idArr);
FILE: SpringCloud-Custom-ConfigCenter/custom-config-pojo/src/main/java/com/xiao/custom/config/pojo/mapper/ConfigItemGroupRelationMapper.java
type ConfigItemGroupRelationMapper (line 9) | public interface ConfigItemGroupRelationMapper
method deleteByPrimaryKey (line 11) | int deleteByPrimaryKey(Long id);
method insert (line 13) | int insert(ConfigItemGroupRelation record);
method insertSelective (line 15) | int insertSelective(ConfigItemGroupRelation record);
method selectByPrimaryKey (line 17) | ConfigItemGroupRelation selectByPrimaryKey(Long id);
method updateByPrimaryKeySelective (line 19) | int updateByPrimaryKeySelective(ConfigItemGroupRelation record);
method updateByPrimaryKey (line 21) | int updateByPrimaryKey(ConfigItemGroupRelation record);
method batchSave (line 32) | int batchSave(@Param("itemIdArr") String[] itemIdArr, @Param("groupId"...
method batchDelete (line 43) | int batchDelete(@Param("itemIdArr") String[] itemIdArr, @Param("groupI...
method batchDeleteByItemId (line 53) | int batchDeleteByItemId(@Param("idArr") String[] idArr);
method batchDeleteByGroupId (line 63) | int batchDeleteByGroupId(@Param("idArr") String[] idArr);
method countByItemId (line 73) | int countByItemId(String itemId);
FILE: SpringCloud-Custom-ConfigCenter/custom-config-pojo/src/main/java/com/xiao/custom/config/pojo/mapper/ConfigItemMapper.java
type ConfigItemMapper (line 13) | public interface ConfigItemMapper {
method deleteByPrimaryKey (line 14) | int deleteByPrimaryKey(Long id);
method insert (line 16) | int insert(ConfigItem record);
method insertSelective (line 18) | int insertSelective(ConfigItem record);
method selectByPrimaryKey (line 20) | ConfigItem selectByPrimaryKey(Long id);
method updateByPrimaryKeySelective (line 22) | int updateByPrimaryKeySelective(ConfigItem record);
method updateByPrimaryKey (line 24) | int updateByPrimaryKey(ConfigItem record);
method pageConfigItem (line 34) | List<ConfigItemDto> pageConfigItem(ConfigItemQuery configItemQuery);
method pageRefConfigItemWithGroup (line 44) | List<ConfigItemDto> pageRefConfigItemWithGroup(ConfigItemQuery configI...
method pageNotRefConfigItemWithGroup (line 54) | List<ConfigItemDto> pageNotRefConfigItemWithGroup(ConfigItemQuery conf...
method batchDelete (line 64) | int batchDelete(@Param("idArr") String[] idArr);
FILE: SpringCloud-Custom-ConfigCenter/custom-config-pojo/src/main/java/com/xiao/custom/config/pojo/mapper/RegionMapper.java
type RegionMapper (line 13) | public interface RegionMapper
method deleteByPrimaryKey (line 15) | int deleteByPrimaryKey(Long id);
method insert (line 17) | int insert(Region record);
method insertSelective (line 19) | int insertSelective(Region record);
method selectByPrimaryKey (line 21) | Region selectByPrimaryKey(Long id);
method updateByPrimaryKeySelective (line 23) | int updateByPrimaryKeySelective(Region record);
method updateByPrimaryKey (line 25) | int updateByPrimaryKey(Region record);
method pageRegion (line 35) | List<RegionDto> pageRegion(RegionQuery regionQuery);
method selectRegion (line 44) | List<RegionDto> selectRegion();
method batchDelete (line 54) | int batchDelete(@Param("idArr") String[] idArr);
FILE: SpringCloud-Custom-ConfigCenter/custom-config-pojo/src/main/java/com/xiao/custom/config/pojo/mapper/ServerHostConfigMapper.java
type ServerHostConfigMapper (line 12) | public interface ServerHostConfigMapper {
method deleteByPrimaryKey (line 13) | int deleteByPrimaryKey(Long id);
method insert (line 15) | int insert(ServerHostConfig record);
method insertSelective (line 17) | int insertSelective(ServerHostConfig record);
method selectByPrimaryKey (line 19) | ServerHostConfig selectByPrimaryKey(Long id);
method updateByPrimaryKeySelective (line 21) | int updateByPrimaryKeySelective(ServerHostConfig record);
method updateByPrimaryKey (line 23) | int updateByPrimaryKey(ServerHostConfig record);
method pageServerHostConfig (line 33) | List<ServerHostConfigDto> pageServerHostConfig(ServerHostConfigQuery s...
FILE: SpringCloud-Custom-ConfigCenter/custom-config-pojo/src/main/java/com/xiao/custom/config/pojo/query/AppQuery.java
class AppQuery (line 14) | @Data
FILE: SpringCloud-Custom-ConfigCenter/custom-config-pojo/src/main/java/com/xiao/custom/config/pojo/query/ApplicationConfigQuery.java
class ApplicationConfigQuery (line 14) | @Data
FILE: SpringCloud-Custom-ConfigCenter/custom-config-pojo/src/main/java/com/xiao/custom/config/pojo/query/ClientHostInfoQuery.java
class ClientHostInfoQuery (line 14) | @Data
FILE: SpringCloud-Custom-ConfigCenter/custom-config-pojo/src/main/java/com/xiao/custom/config/pojo/query/ConfigItemGroupQuery.java
class ConfigItemGroupQuery (line 14) | @Data
FILE: SpringCloud-Custom-ConfigCenter/custom-config-pojo/src/main/java/com/xiao/custom/config/pojo/query/ConfigItemQuery.java
class ConfigItemQuery (line 14) | @Data
FILE: SpringCloud-Custom-ConfigCenter/custom-config-pojo/src/main/java/com/xiao/custom/config/pojo/query/RegionQuery.java
class RegionQuery (line 16) | @Data
FILE: SpringCloud-Custom-ConfigCenter/custom-config-pojo/src/main/java/com/xiao/custom/config/pojo/query/ServerHostConfigQuery.java
class ServerHostConfigQuery (line 14) | @Data
FILE: SpringCloud-Custom-ConfigCenter/custom-config-server/src/main/java/com/xiao/custom/config/server/ConfigerCenterApplication.java
class ConfigerCenterApplication (line 16) | @SpringBootApplication(scanBasePackages = "com.xiao.custom.config")
method main (line 21) | public static void main(String[] args)
FILE: SpringCloud-Custom-ConfigCenter/custom-config-server/src/main/java/com/xiao/custom/config/server/config/CustomEnvironmentRepositoryConfiguration.java
class CustomEnvironmentRepositoryConfiguration (line 21) | @Configuration
method environmentRepository (line 30) | @Bean
method namedParameterJdbcTemplate (line 36) | @Bean
FILE: SpringCloud-Custom-ConfigCenter/custom-config-server/src/main/java/com/xiao/custom/config/server/controller/RefreshController.java
class RefreshController (line 17) | @RestController
method refresh (line 24) | @RequestMapping("/client")
FILE: SpringCloud-Custom-ConfigCenter/custom-config-server/src/main/java/com/xiao/custom/config/server/environment/CustomEnvironmentRepository.java
class CustomEnvironmentRepository (line 28) | @Slf4j
method CustomEnvironmentRepository (line 69) | public CustomEnvironmentRepository(RepositoryService repositoryService...
method findOne (line 75) | @Override
method saveClientInfo (line 119) | private String saveClientInfo(String application, String profile)
method getClientIp (line 146) | private String getClientIp(HttpServletRequest request)
method getOrder (line 186) | @Override
FILE: SpringCloud-Custom-ConfigCenter/custom-config-server/src/main/java/com/xiao/custom/config/server/manager/ClientManagerService.java
type ClientManagerService (line 11) | public interface ClientManagerService
method setClientHost (line 32) | void setClientHost(String serviceName, String profile, String hostIp, ...
method updateStatus (line 43) | void updateStatus(String hostIp, int nettyPort, int status);
method updateNettyInfo (line 56) | void updateNettyInfo(String hostIp, int hostPort, int nettyPort, Strin...
FILE: SpringCloud-Custom-ConfigCenter/custom-config-server/src/main/java/com/xiao/custom/config/server/manager/SqlConstants.java
type SqlConstants (line 11) | public interface SqlConstants
FILE: SpringCloud-Custom-ConfigCenter/custom-config-server/src/main/java/com/xiao/custom/config/server/manager/impl/ClientManagerServiceDbImpl.java
class ClientManagerServiceDbImpl (line 29) | @Service
method setClientHost (line 48) | @Override
method updateStatus (line 74) | @Override
method updateNettyInfo (line 95) | @Override
method processApplication (line 114) | private Long processApplication(String serviceName, String profile)
method getPriKey (line 134) | private Long getPriKey(String sql, Map<String, Object> params)
method processHost (line 155) | private void processHost(String hostIp, int hostPort, Long id)
method updateApplicationStatus (line 177) | private void updateApplicationStatus(Long id)
method insertApplication (line 184) | private Long insertApplication(String serviceName, String profile)
method insertReId (line 207) | private Long insertReId(PreparedStatementCreator preparedStatementCrea...
method insertReKey (line 223) | private Long insertReKey(String sql, SqlParameterSource params)
FILE: SpringCloud-Custom-ConfigCenter/custom-config-server/src/main/java/com/xiao/custom/config/server/netty/coder/ProtoDecoder.java
class ProtoDecoder (line 18) | public class ProtoDecoder extends ByteToMessageDecoder
method ProtoDecoder (line 24) | public ProtoDecoder(Class cls)
method decode (line 29) | @Override
FILE: SpringCloud-Custom-ConfigCenter/custom-config-server/src/main/java/com/xiao/custom/config/server/netty/coder/ProtoEncoder.java
class ProtoEncoder (line 17) | @ChannelHandler.Sharable
method ProtoEncoder (line 22) | public ProtoEncoder(Class cls)
method encode (line 27) | @Override
FILE: SpringCloud-Custom-ConfigCenter/custom-config-server/src/main/java/com/xiao/custom/config/server/netty/dto/CommandEnum.java
type CommandEnum (line 11) | public enum CommandEnum
method CommandEnum (line 28) | CommandEnum(int status)
method getStatus (line 33) | public int getStatus()
FILE: SpringCloud-Custom-ConfigCenter/custom-config-server/src/main/java/com/xiao/custom/config/server/netty/dto/Message.java
class Message (line 13) | @Data
FILE: SpringCloud-Custom-ConfigCenter/custom-config-server/src/main/java/com/xiao/custom/config/server/netty/factory/CoderFactory.java
class CoderFactory (line 15) | public class CoderFactory
method newDecoder (line 17) | public static ProtoDecoder newDecoder()
method newEncoder (line 22) | public static ProtoEncoder newEncoder()
FILE: SpringCloud-Custom-ConfigCenter/custom-config-server/src/main/java/com/xiao/custom/config/server/netty/factory/NamedThreadFactory.java
class NamedThreadFactory (line 28) | public class NamedThreadFactory implements ThreadFactory
method NamedThreadFactory (line 37) | public NamedThreadFactory()
method NamedThreadFactory (line 42) | public NamedThreadFactory(String name)
method NamedThreadFactory (line 47) | public NamedThreadFactory(String preffix, boolean daemon)
method newThread (line 60) | @Override
method create (line 79) | public static ThreadFactory create(final String namePrefix, final bool...
FILE: SpringCloud-Custom-ConfigCenter/custom-config-server/src/main/java/com/xiao/custom/config/server/netty/handler/ServiceHandler.java
class ServiceHandler (line 25) | @Slf4j
method ServiceHandler (line 33) | public ServiceHandler(ClientManagerService clientManagerService, Conne...
method channelActive (line 40) | @Override
method channelRead0 (line 48) | @Override
method exceptionCaught (line 79) | @Override
method userEventTriggered (line 94) | @Override
method channelInactive (line 129) | @Override
FILE: SpringCloud-Custom-ConfigCenter/custom-config-server/src/main/java/com/xiao/custom/config/server/netty/manager/Connection.java
class Connection (line 15) | @Data
method Connection (line 27) | public Connection()
method Connection (line 32) | public Connection(Channel channel)
method Connection (line 40) | public Connection(Channel channel, String serverIp, int serverPort)
FILE: SpringCloud-Custom-ConfigCenter/custom-config-server/src/main/java/com/xiao/custom/config/server/netty/manager/ConnectionManager.java
class ConnectionManager (line 19) | @Component("connectionManager")
method addConnection (line 40) | public void addConnection(Connection connection)
method getConnection (line 62) | public Connection getConnection(String uniqueKey)
method getConnection (line 81) | public Connection getConnection(String nettyIp, int nettyPot)
method getChannel (line 100) | public Channel getChannel(String nettyIp, int nettyPot)
method getChannel (line 122) | public Channel getChannel(String uniqueKey)
method remove (line 144) | public void remove(String uniqueKey)
method remove (line 170) | public void remove(String nettyIp, int nettyPort)
method getCurrentConnectNum (line 186) | public long getCurrentConnectNum()
FILE: SpringCloud-Custom-ConfigCenter/custom-config-server/src/main/java/com/xiao/custom/config/server/netty/server/NettyServer.java
class NettyServer (line 36) | @Component
method destroy (line 92) | @Override
method onApplicationEvent (line 98) | @Override
method check (line 108) | private void check()
method setHandler (line 117) | private void setHandler()
method start (line 140) | private void start()
method initNetty (line 156) | private void initNetty()
method stop (line 177) | private void stop()
FILE: SpringCloud-Custom-ConfigCenter/custom-config-server/src/main/java/com/xiao/custom/config/server/netty/util/NettyConfig.java
class NettyConfig (line 11) | public class NettyConfig
FILE: SpringCloud-Custom-ConfigCenter/custom-config-server/src/main/java/com/xiao/custom/config/server/netty/util/NettyEventLoopUtil.java
class NettyEventLoopUtil (line 36) | public class NettyEventLoopUtil
method newEventLoopGroup (line 51) | public static EventLoopGroup newEventLoopGroup(int nThreads, ThreadFac...
method getClientSocketChannelClass (line 61) | public static Class<? extends SocketChannel> getClientSocketChannelCla...
method getServerSocketChannelClass (line 69) | public static Class<? extends ServerSocketChannel> getServerSocketChan...
method enableTriggeredMode (line 80) | public static void enableTriggeredMode(ServerBootstrap serverBootstrap)
FILE: SpringCloud-Custom-ConfigCenter/custom-config-server/src/main/java/com/xiao/custom/config/server/netty/util/ProtostuffUtil.java
class ProtostuffUtil (line 28) | public class ProtostuffUtil
method getSchema (line 40) | @SuppressWarnings("unchecked")
method serialize (line 64) | @SuppressWarnings("unchecked")
method deserialize (line 95) | public static <T> T deserialize(byte[] data, Class<T> cls)
FILE: SpringCloud-Custom-ConfigCenter/custom-config-server/src/main/java/com/xiao/custom/config/server/netty/util/RemotingUtil.java
class RemotingUtil (line 30) | public class RemotingUtil
method parseRemoteAddress (line 39) | public static String parseRemoteAddress(final Channel channel)
method parseLocalAddress (line 55) | public static String parseLocalAddress(final Channel channel)
method parseRemoteIP (line 71) | public static String parseRemoteIP(final Channel channel)
method parseRemoteHostName (line 93) | public static String parseRemoteHostName(final Channel channel)
method parseLocalIP (line 113) | public static String parseLocalIP(final Channel channel)
method parseRemotePort (line 133) | public static int parseRemotePort(final Channel channel)
method parseLocalPort (line 153) | public static int parseLocalPort(final Channel channel)
method parseSocketAddressToString (line 176) | public static String parseSocketAddressToString(SocketAddress socketAd...
method parseSocketAddressToHostIp (line 193) | public static String parseSocketAddressToHostIp(SocketAddress socketAd...
method getHost (line 213) | public static String getHost(String url)
method doParse (line 237) | private static String doParse(String addr)
FILE: SpringCloud-Custom-ConfigCenter/custom-config-server/src/main/java/com/xiao/custom/config/server/service/RefreshService.java
type RefreshService (line 11) | public interface RefreshService
method refresh (line 22) | boolean refresh(String ip, int port);
FILE: SpringCloud-Custom-ConfigCenter/custom-config-server/src/main/java/com/xiao/custom/config/server/service/RepositoryService.java
type RepositoryService (line 13) | public interface RepositoryService
method getPropertySource (line 26) | Map<String, Object> getPropertySource(String ip, String application, S...
FILE: SpringCloud-Custom-ConfigCenter/custom-config-server/src/main/java/com/xiao/custom/config/server/service/impl/JdbcRepositoryServiceImpl.java
class JdbcRepositoryServiceImpl (line 23) | @Slf4j
method getPropertySource (line 83) | @Override
method queryItems (line 121) | private Map<String, Object> queryItems(List<Long> itemIds)
method queryPrivateItems (line 130) | private Map<String, Object> queryPrivateItems(String ip, String applic...
method queryItemsForGroups (line 145) | private List<Long> queryItemsForGroups(List<Long> itemGroupIds)
method queryIds (line 154) | private List<Long> queryIds(String sql, String ip, String application,...
FILE: SpringCloud-Custom-ConfigCenter/custom-config-server/src/main/java/com/xiao/custom/config/server/service/impl/RefreshServiceImpl.java
class RefreshServiceImpl (line 23) | @Service
method refresh (line 39) | @Override
FILE: SpringCloud-Custom-ConfigCenter/custom-config-service/src/main/java/com/xiao/custom/config/service/ConfigServiceApplication.java
class ConfigServiceApplication (line 20) | @SpringBootApplication(scanBasePackages = "com.xiao.custom.config")
method main (line 25) | public static void main(String[] args)
method restTemplate (line 35) | @Bean
FILE: SpringCloud-Custom-ConfigCenter/custom-config-service/src/main/java/com/xiao/custom/config/service/api/ApplicationApi.java
class ApplicationApi (line 30) | @RestController
method pageApplicationConfig (line 50) | @RequestMapping(value = "/page")
method save (line 64) | @RequestMapping(value = "/save")
method update (line 95) | @RequestMapping(value = "/update")
method delete (line 134) | @RequestMapping(value = "/delete/{id}")
method refresh (line 158) | @RequestMapping("/refresh")
method batchRefresh (line 172) | @RequestMapping("/batchRefresh")
method pageRefGroupWithApp (line 186) | @RequestMapping(value = "/isRefApp")
method pageNotRefGroupWithApp (line 207) | @RequestMapping(value = "/notRefApp")
method batchSave (line 229) | @RequestMapping(value = "/batchSaveRef")
method batchDelete (line 261) | @RequestMapping(value = "/batchDeleteRef")
method queryPrivateConfig (line 286) | @RequestMapping("/queryPrivateConfig")
method savePrivateConfig (line 300) | @RequestMapping("/savePrivateConfig")
method updatePrivateConfig (line 315) | @RequestMapping("/updatePrivateConfig")
method delPrivateConfig (line 330) | @RequestMapping("/delPrivateConfig")
method convertPrivateConf (line 341) | private ApplicationConfig convertPrivateConf(ApplicationConfigDto appl...
FILE: SpringCloud-Custom-ConfigCenter/custom-config-service/src/main/java/com/xiao/custom/config/service/api/AuthApi.java
class AuthApi (line 21) | @RestController
method findByUsername (line 35) | @RequestMapping("/findByUsername")
method insert (line 46) | @RequestMapping("/insert")
method insertRole (line 59) | @RequestMapping("/insertRole")
method findRoleById (line 71) | @RequestMapping("/findRoleById")
method findRoleByUserId (line 83) | @RequestMapping("/findRoleByUserId")
FILE: SpringCloud-Custom-ConfigCenter/custom-config-service/src/main/java/com/xiao/custom/config/service/api/ClientHostApi.java
class ClientHostApi (line 22) | @RestController
method pageQuery (line 36) | @RequestMapping("/page")
method deleteById (line 50) | @RequestMapping("/del")
FILE: SpringCloud-Custom-ConfigCenter/custom-config-service/src/main/java/com/xiao/custom/config/service/api/ConfigItemApi.java
class ConfigItemApi (line 26) | @RestController
method pageConfigItem (line 42) | @RequestMapping(value = "/page")
method save (line 57) | @RequestMapping(value = "/save")
method update (line 82) | @RequestMapping(value = "/update")
method enableOrDisable (line 119) | @RequestMapping(value = "/batchDelete/{ids}")
FILE: SpringCloud-Custom-ConfigCenter/custom-config-service/src/main/java/com/xiao/custom/config/service/api/ConfigItemGroupApi.java
class ConfigItemGroupApi (line 30) | @RestController
method pageConfigItemGroup (line 50) | @RequestMapping(value = "/page")
method save (line 66) | @RequestMapping(value = "/save")
method getConfigItemGroupById (line 91) | @RequestMapping(value = "/select/{id}")
method update (line 110) | @RequestMapping(value = "/update")
method delete (line 144) | @RequestMapping(value = "/delete/{ids}")
method pageRefConfigItemWithGroup (line 166) | @RequestMapping(value = "/isRefGroup")
method pageNotRefConfigItemWithGroup (line 187) | @RequestMapping(value = "/notRefGroup")
method batchSave (line 207) | @RequestMapping(value = "/batchSave/{groupId}/{itemIds}")
method batchDelete (line 233) | @RequestMapping(value = "/batchDelete/{groupId}/{itemIds}")
FILE: SpringCloud-Custom-ConfigCenter/custom-config-service/src/main/java/com/xiao/custom/config/service/api/RegionApi.java
class RegionApi (line 23) | @RestController
method queryRegion (line 32) | @RequestMapping(value = "/queryRegion")
method selectRgion (line 45) | @RequestMapping(value = "/selectRgion")
method delectRegion (line 52) | @PostMapping(value = "/delectRegion/{ids}")
method updateRegion (line 70) | @PostMapping(value = "/updateRegion")
method addRegion (line 91) | @PostMapping(value = "/addRegion")
method selectRegionById (line 110) | @RequestMapping(value = "selectRegionById/{id}")
method RegionToDto (line 123) | public RegionDto RegionToDto(Region region)
FILE: SpringCloud-Custom-ConfigCenter/custom-config-service/src/main/java/com/xiao/custom/config/service/api/ServerHostConfigApi.java
class ServerHostConfigApi (line 21) | @RestController
method queryServerHost (line 31) | @RequestMapping(value = "/queryServerHost")
method delectServerHostConfig (line 41) | @RequestMapping(value = "/delectServerHostConfig/{id}")
method updateServerHostConfig (line 53) | @PostMapping(value = "/updateServerHostConfig")
method addServerHostConfig (line 74) | @PostMapping(value = "/addServerHostConfig")
method selectServerHostConfigById (line 93) | @RequestMapping(value = "/selectServerHostConfigById/{id}")
method serverHostConfigToDto (line 107) | public ServerHostConfigDto serverHostConfigToDto(ServerHostConfig serv...
FILE: SpringCloud-Custom-ConfigCenter/custom-config-service/src/main/java/com/xiao/custom/config/service/feign/RefreshFeign.java
type RefreshFeign (line 15) | @FeignClient(value = "winner-config-server")
method refresh (line 19) | @RequestMapping("/client")
FILE: SpringCloud-Custom-ConfigCenter/custom-config-service/src/main/java/com/xiao/custom/config/service/service/ApplicationItemGroupRelationService.java
type ApplicationItemGroupRelationService (line 13) | public interface ApplicationItemGroupRelationService
method save (line 15) | Integer save(ApplicationItemGroupRelation applicationItemGroupRelation);
method update (line 17) | Integer update(ApplicationItemGroupRelation applicationItemGroupRelati...
method delete (line 19) | void delete(Long id);
method batchSave (line 30) | int batchSave(String[] groupIdArr, Long appId);
method batchDelete (line 41) | int batchDelete(String[] groupIdArr, Long appId);
FILE: SpringCloud-Custom-ConfigCenter/custom-config-service/src/main/java/com/xiao/custom/config/service/service/ApplicationService.java
type ApplicationService (line 19) | public interface ApplicationService
method save (line 29) | Integer save(Application applicationConfig, String[] groupIdArr);
method update (line 31) | Integer update(Application applicationConfig);
method delete (line 33) | Integer delete(Long id);
method pageApplicationConfig (line 35) | PageInfo<ApplicationDto> pageApplicationConfig(AppQuery appQuery, Inte...
method selectApplicationConfigById (line 45) | Application selectApplicationConfigById(Long id);
method pageQuery (line 55) | PageInfo<ApplicationConfigDto> pageQuery(ApplicationConfigQuery query);
method saveApplicationConfig (line 65) | boolean saveApplicationConfig(ApplicationConfig applicationConfig);
method updateApplicationConfig (line 75) | boolean updateApplicationConfig(ApplicationConfig applicationConfig);
method delPrivateConfig (line 85) | boolean delPrivateConfig(Long id);
method refresh (line 95) | boolean refresh(Long id);
method batchRefresh (line 105) | boolean batchRefresh(Long... hostInfoIds);
FILE: SpringCloud-Custom-ConfigCenter/custom-config-service/src/main/java/com/xiao/custom/config/service/service/AuthService.java
type AuthService (line 14) | public interface AuthService
method findByUsername (line 22) | AuthUser findByUsername(String username);
method insert (line 29) | void insert(AuthUser userDetail);
method insertRole (line 38) | int insertRole(long userId, long roleId);
method findRoleById (line 46) | Role findRoleById(long roleId);
method findRoleByUserId (line 54) | Role findRoleByUserId(long userId);
FILE: SpringCloud-Custom-ConfigCenter/custom-config-service/src/main/java/com/xiao/custom/config/service/service/ClientHostService.java
type ClientHostService (line 15) | public interface ClientHostService
method pageQuery (line 23) | PageInfo<ClientHostInfoDto> pageQuery(ClientHostInfoQuery query);
method delete (line 30) | void delete(long id);
FILE: SpringCloud-Custom-ConfigCenter/custom-config-service/src/main/java/com/xiao/custom/config/service/service/ConfigItemGroupRelationService.java
type ConfigItemGroupRelationService (line 13) | public interface ConfigItemGroupRelationService
method save (line 15) | Integer save(ConfigItemGroupRelation configItemGroupRelation);
method update (line 17) | Integer update(ConfigItemGroupRelation configItemGroupRelation);
method delete (line 19) | void delete(Long id);
method batchSave (line 30) | int batchSave(String[] itemIdArr, Long groupId);
method batchDelete (line 41) | int batchDelete(String[] itemIdArr, Long groupId);
FILE: SpringCloud-Custom-ConfigCenter/custom-config-service/src/main/java/com/xiao/custom/config/service/service/ConfigItemGroupService.java
type ConfigItemGroupService (line 16) | public interface ConfigItemGroupService
method save (line 18) | Integer save(ConfigItemGroup configItemGroup);
method update (line 20) | Integer update(ConfigItemGroup configItemGroup);
method delete (line 22) | Integer delete(Long id);
method pageConfigItemGroup (line 24) | PageInfo<ConfigItemGroupDto> pageConfigItemGroup(ConfigItemGroupQuery ...
method getConfigItemGroupById (line 35) | ConfigItemGroup getConfigItemGroupById(Long id);
method pageRefGroupWithApp (line 47) | PageInfo<ConfigItemGroupDto> pageRefGroupWithApp(ConfigItemGroupQuery ...
method pageNotRefGroupWithApp (line 60) | PageInfo<ConfigItemGroupDto> pageNotRefGroupWithApp(ConfigItemGroupQue...
method batchDelete (line 71) | int batchDelete(String[] idArr);
FILE: SpringCloud-Custom-ConfigCenter/custom-config-service/src/main/java/com/xiao/custom/config/service/service/ConfigItemService.java
type ConfigItemService (line 16) | public interface ConfigItemService
method save (line 18) | Integer save(ConfigItem configItem);
method update (line 20) | Integer update(ConfigItem configItem);
method delete (line 22) | void delete(Long id);
method pageConfigItem (line 24) | PageInfo<ConfigItemDto> pageConfigItem(ConfigItemQuery configItemQuery...
method getConfigItemById (line 34) | ConfigItem getConfigItemById(Long id);
method pageRefConfigItemWithGroup (line 46) | PageInfo<ConfigItemDto> pageRefConfigItemWithGroup(ConfigItemQuery con...
method pageNotRefConfigItemWithGroup (line 58) | PageInfo<ConfigItemDto> pageNotRefConfigItemWithGroup(ConfigItemQuery ...
method batchDelete (line 68) | int batchDelete(String[] idArr);
FILE: SpringCloud-Custom-ConfigCenter/custom-config-service/src/main/java/com/xiao/custom/config/service/service/RegionService.java
type RegionService (line 18) | public interface RegionService
method save (line 20) | int save(RegionDto regionDto);
method update (line 22) | int update(RegionDto regionDto);
method delete (line 24) | int delete(Long id);
method selectRegionById (line 25) | Region selectRegionById(Long id);
method pageRegion (line 27) | PageInfo<RegionDto> pageRegion(RegionQuery regionQuery, Integer pageNu...
method selectRegion (line 29) | List<RegionDto> selectRegion();
method batchDelete (line 31) | int batchDelete(String[] idArr);
FILE: SpringCloud-Custom-ConfigCenter/custom-config-service/src/main/java/com/xiao/custom/config/service/service/ServerHostConfigService.java
type ServerHostConfigService (line 16) | public interface ServerHostConfigService
method save (line 18) | int save(ServerHostConfigDto serverHostConfigDto);
method update (line 20) | int update(ServerHostConfigDto serverHostConfigDto);
method selectServerHostConfigById (line 29) | ServerHostConfig selectServerHostConfigById(Long id);
method delete (line 30) | int delete(Long id);
method pageServerHostConfig (line 32) | PageInfo<ServerHostConfigDto> pageServerHostConfig(ServerHostConfigQue...
FILE: SpringCloud-Custom-ConfigCenter/custom-config-service/src/main/java/com/xiao/custom/config/service/service/impl/ApplicationItemGroupRelationServiceImpl.java
class ApplicationItemGroupRelationServiceImpl (line 17) | @Service
method save (line 23) | @Override
method update (line 29) | @Override
method delete (line 35) | @Override
method batchSave (line 41) | @Override
method batchDelete (line 47) | @Override
FILE: SpringCloud-Custom-ConfigCenter/custom-config-service/src/main/java/com/xiao/custom/config/service/service/impl/ApplicationServiceImpl.java
class ApplicationServiceImpl (line 33) | @Service
method save (line 65) | @Override
method update (line 78) | @Override
method delete (line 85) | @Override
method pageApplicationConfig (line 98) | @Override
method selectApplicationConfigById (line 105) | @Override
method pageQuery (line 119) | @Override
method saveApplicationConfig (line 139) | @Override
method updateApplicationConfig (line 159) | @Override
method delPrivateConfig (line 179) | @Override
method refresh (line 197) | @Override
method batchRefresh (line 242) | @Override
FILE: SpringCloud-Custom-ConfigCenter/custom-config-service/src/main/java/com/xiao/custom/config/service/service/impl/AuthServiceImpl.java
class AuthServiceImpl (line 20) | @Service
method findByUsername (line 32) | @Override
method insert (line 51) | @Override
method insertRole (line 69) | @Override
method findRoleById (line 82) | @Override
method findRoleByUserId (line 94) | @Override
FILE: SpringCloud-Custom-ConfigCenter/custom-config-service/src/main/java/com/xiao/custom/config/service/service/impl/ClientHostServiceImpl.java
class ClientHostServiceImpl (line 23) | @Service
method pageQuery (line 35) | @Override
method delete (line 52) | @Override
FILE: SpringCloud-Custom-ConfigCenter/custom-config-service/src/main/java/com/xiao/custom/config/service/service/impl/ConfigItemGroupRelationServiceImpl.java
class ConfigItemGroupRelationServiceImpl (line 17) | @Service
method save (line 23) | @Override
method update (line 29) | @Override
method delete (line 35) | @Override
method batchSave (line 41) | @Override
method batchDelete (line 47) | @Override
FILE: SpringCloud-Custom-ConfigCenter/custom-config-service/src/main/java/com/xiao/custom/config/service/service/impl/ConfigItemGroupServiceImpl.java
class ConfigItemGroupServiceImpl (line 27) | @Service
method save (line 38) | @Override
method update (line 44) | @Override
method delete (line 50) | @Override
method pageConfigItemGroup (line 56) | @Override
method getConfigItemGroupById (line 65) | @Override
method pageRefGroupWithApp (line 71) | @Override
method pageNotRefGroupWithApp (line 80) | @Override
method batchDelete (line 89) | @Override
FILE: SpringCloud-Custom-ConfigCenter/custom-config-service/src/main/java/com/xiao/custom/config/service/service/impl/ConfigItemServiceImpl.java
class ConfigItemServiceImpl (line 27) | @Service
method save (line 35) | @Override
method update (line 41) | @Override
method delete (line 47) | @Override
method pageConfigItem (line 53) | @Override
method getConfigItemById (line 61) | @Override
method pageRefConfigItemWithGroup (line 67) | @Override
method pageNotRefConfigItemWithGroup (line 76) | @Override
method batchDelete (line 85) | @Override
FILE: SpringCloud-Custom-ConfigCenter/custom-config-service/src/main/java/com/xiao/custom/config/service/service/impl/RegionServiceImpl.java
class RegionServiceImpl (line 25) | @Service
method save (line 37) | @Override
method update (line 53) | @Override
method delete (line 68) | @Override
method pageRegion (line 81) | @Override
method selectRegion (line 96) | @Override
method batchDelete (line 110) | @Override
method regionDtoconvertRegion (line 122) | public Region regionDtoconvertRegion(RegionDto regionDto)
method selectRegionById (line 142) | @Override
FILE: SpringCloud-Custom-ConfigCenter/custom-config-service/src/main/java/com/xiao/custom/config/service/service/impl/ServerHostConfigServiceImpl.java
class ServerHostConfigServiceImpl (line 27) | @Service
method save (line 36) | @Override
method update (line 45) | @Override
method delete (line 61) | @Override
method pageServerHostConfig (line 72) | @Override
method serverHostConfigDtoconvertserverHostConfig (line 87) | public ServerHostConfig serverHostConfigDtoconvertserverHostConfig(Ser...
method selectServerHostConfigById (line 100) | @Override
FILE: SpringCloud-Custom-ConfigCenter/custom-config-simple/src/main/java/com/xiao/custom/config/simple/ConfigClientApplication.java
class ConfigClientApplication (line 14) | @SpringBootApplication()
method main (line 17) | public static void main(String[] args)
FILE: SpringCloud-Custom-ConfigCenter/custom-config-simple/src/main/java/com/xiao/custom/config/simple/datasource/DataSourceConfigure.java
class DataSourceConfigure (line 15) | @Slf4j
FILE: SpringCloud-Custom-ConfigCenter/custom-config-simple/src/main/java/com/xiao/custom/config/simple/demo/ControllerDemo.java
class ControllerDemo (line 16) | @RestController
method getDbUrl (line 24) | @RequestMapping("/getDbUrl")
FILE: SpringCloud-Custom-ConfigCenter/custom-config-web/src/main/java/com/xiao/custom/config/web/ConfigCenterWebApplication.java
class ConfigCenterWebApplication (line 16) | @SpringBootApplication(scanBasePackages = "com.xiao.custom.config")
method main (line 24) | public static void main(String[] args)
FILE: SpringCloud-Custom-ConfigCenter/custom-config-web/src/main/java/com/xiao/custom/config/web/auth/AuthContants.java
type AuthContants (line 11) | public interface AuthContants
FILE: SpringCloud-Custom-ConfigCenter/custom-config-web/src/main/java/com/xiao/custom/config/web/auth/config/HttpSessionConfig.java
class HttpSessionConfig (line 16) | @Configuration
method httpSessionStrategy (line 28) | @Bean
method requestCache (line 38) | @Bean
FILE: SpringCloud-Custom-ConfigCenter/custom-config-web/src/main/java/com/xiao/custom/config/web/auth/config/JwtAuthenticationEntryPoint.java
class JwtAuthenticationEntryPoint (line 27) | @Component
method commence (line 40) | @Override
method cookiesStrategy (line 51) | private void cookiesStrategy(HttpServletRequest request, HttpServletRe...
method headerStategy (line 91) | private void headerStategy(HttpServletRequest request, HttpServletResp...
FILE: SpringCloud-Custom-ConfigCenter/custom-config-web/src/main/java/com/xiao/custom/config/web/auth/config/JwtAuthenticationTokenFilter.java
class JwtAuthenticationTokenFilter (line 24) | @Component
method doFilterInternal (line 32) | @Override
method accessToken (line 47) | private void accessToken(HttpServletRequest request, String authToken)
FILE: SpringCloud-Custom-ConfigCenter/custom-config-web/src/main/java/com/xiao/custom/config/web/auth/config/RestAccessDeniedHandler.java
class RestAccessDeniedHandler (line 21) | @Component("restAuthenticationAccessDeniedHandler")
method handle (line 34) | @Override
method api (line 45) | private void api(HttpServletResponse response, AccessDeniedException e...
method webBrowser (line 57) | private void webBrowser(HttpServletResponse response) throws IOException
FILE: SpringCloud-Custom-ConfigCenter/custom-config-web/src/main/java/com/xiao/custom/config/web/auth/config/WebSecurityConfig.java
class WebSecurityConfig (line 28) | @Configuration
method configureAuthentication (line 49) | @Autowired
method passwordEncoder (line 64) | @Bean
method configure (line 70) | @Override
method sessionConfig (line 92) | private void sessionConfig(HttpSecurity httpSecurity) throws Exception
method tokenConfigure (line 103) | private void tokenConfigure(HttpSecurity httpSecurity) throws Exception
method configure (line 112) | @Override
method authenticationManagerBean (line 119) | @Bean
FILE: SpringCloud-Custom-ConfigCenter/custom-config-web/src/main/java/com/xiao/custom/config/web/auth/controller/AuthController.java
class AuthController (line 27) | @RestController
method login (line 37) | @PostMapping(value = "/login")
method logout (line 46) | @GetMapping(value = "/logout")
method getUser (line 68) | @GetMapping(value = "/getInfo")
method sign (line 78) | @PostMapping(value = "/sign")
method refreshAndGetAuthenticationToken (line 96) | @GetMapping(value = "/refresh")
FILE: SpringCloud-Custom-ConfigCenter/custom-config-web/src/main/java/com/xiao/custom/config/web/auth/entity/ResponseUserToken.java
class ResponseUserToken (line 12) | @Data
FILE: SpringCloud-Custom-ConfigCenter/custom-config-web/src/main/java/com/xiao/custom/config/web/auth/entity/User.java
class User (line 12) | @Data
FILE: SpringCloud-Custom-ConfigCenter/custom-config-web/src/main/java/com/xiao/custom/config/web/auth/entity/UserDetail.java
class UserDetail (line 18) | public class UserDetail implements UserDetails
method UserDetail (line 27) | public UserDetail(AuthUser user)
method UserDetail (line 36) | public UserDetail(AuthUser user, Role role)
method UserDetail (line 44) | public UserDetail(long id, String username, Role role,
method UserDetail (line 55) | public UserDetail(String username, String password, Role role)
method UserDetail (line 62) | public UserDetail(long id, String username, String password)
method getAuthorities (line 70) | @Override
method getId (line 78) | public long getId()
method getPassword (line 83) | @Override
method getUsername (line 89) | @Override
method isAccountNonExpired (line 98) | @Override
method isAccountNonLocked (line 107) | @Override
method isCredentialsNonExpired (line 116) | @Override
method isEnabled (line 125) | @Override
method getLastPasswordResetDate (line 131) | public Date getLastPasswordResetDate()
method getRole (line 140) | public Role getRole()
method setRole (line 145) | public void setRole(Role role)
method setId (line 150) | public void setId(long id)
method setUsername (line 155) | public void setUsername(String username)
method setPassword (line 160) | public void setPassword(String password)
method setLastPasswordResetDate (line 165) | public void setLastPasswordResetDate(Date lastPasswordResetDate)
method getNickname (line 170) | public String getNickname()
FILE: SpringCloud-Custom-ConfigCenter/custom-config-web/src/main/java/com/xiao/custom/config/web/auth/exception/CustomException.java
class CustomException (line 10) | @Getter
method CustomException (line 15) | public CustomException(ResultJson resultJson)
FILE: SpringCloud-Custom-ConfigCenter/custom-config-web/src/main/java/com/xiao/custom/config/web/auth/exception/DefaultExceptionHandler.java
class DefaultExceptionHandler (line 16) | @RestControllerAdvice
method handleCustomException (line 27) | @ExceptionHandler(CustomException.class)
method handleMethodArgumentNotValidException (line 40) | @ExceptionHandler(MethodArgumentNotValidException.class)
FILE: SpringCloud-Custom-ConfigCenter/custom-config-web/src/main/java/com/xiao/custom/config/web/auth/service/AuthUserService.java
type AuthUserService (line 15) | public interface AuthUserService
method register (line 23) | UserDetail register(AuthUser userDetail);
method login (line 32) | ResponseUserToken login(String username, String password);
method logout (line 39) | void logout(String token);
method refresh (line 47) | ResponseUserToken refresh(String oldToken);
method getUserByToken (line 55) | UserDetail getUserByToken(String token);
method getByToken (line 65) | UserDetail getByToken(String token);
method getByUsername (line 75) | UserDetail getByUsername(String username);
FILE: SpringCloud-Custom-ConfigCenter/custom-config-web/src/main/java/com/xiao/custom/config/web/auth/service/impl/AuthUserServiceImpl.java
class AuthUserServiceImpl (line 36) | @Service
method register (line 52) | @Override
method login (line 72) | @Override
method logout (line 88) | @Override
method refresh (line 96) | @Override
method getUserByToken (line 110) | @Override
method getByToken (line 125) | @Override
method getByUsername (line 141) | @Override
method authenticate (line 147) | private Authentication authenticate(String username, String password)
FILE: SpringCloud-Custom-ConfigCenter/custom-config-web/src/main/java/com/xiao/custom/config/web/auth/service/impl/ConfigUserDetailsServiceImpl.java
class ConfigUserDetailsServiceImpl (line 20) | @Service("configUserDetailsService")
method loadUserByUsername (line 38) | @Override
FILE: SpringCloud-Custom-ConfigCenter/custom-config-web/src/main/java/com/xiao/custom/config/web/auth/util/JwtUtils.java
class JwtUtils (line 24) | @Component
method getUserFromToken (line 46) | public UserDetail getUserFromToken(String token)
method getUserIdFromToken (line 66) | public long getUserIdFromToken(String token)
method getUsernameFromToken (line 82) | public String getUsernameFromToken(String token)
method getCreatedDateFromToken (line 98) | public Date getCreatedDateFromToken(String token)
method generateAccessToken (line 114) | public String generateAccessToken(UserDetail userDetail)
method getExpirationDateFromToken (line 121) | public Date getExpirationDateFromToken(String token)
method canTokenBeRefreshed (line 137) | public Boolean canTokenBeRefreshed(String token, Date lastPasswordReset)
method refreshToken (line 143) | public String refreshToken(String token)
method validateToken (line 159) | public Boolean validateToken(String token, UserDetails userDetails)
method generateRefreshToken (line 170) | public String generateRefreshToken(UserDetail userDetail)
method putToken (line 179) | public void putToken(String userName, String token)
method deleteToken (line 184) | public void deleteToken(String userName)
method containToken (line 189) | public boolean containToken(String userName, String token)
method getClaimsFromToken (line 198) | private Claims getClaimsFromToken(String token)
method generateExpirationDate (line 212) | private Date generateExpirationDate(long expiration)
method isTokenExpired (line 217) | private Boolean isTokenExpired(String token)
method isCreatedBeforeLastPasswordReset (line 223) | private Boolean isCreatedBeforeLastPasswordReset(Date created, Date la...
method generateClaims (line 228) | private Map<String, Object> generateClaims(UserDetail userDetail)
method generateAccessToken (line 235) | private String generateAccessToken(String subject, Map<String, Object>...
method authoritiesToArray (line 240) | private List authoritiesToArray(Collection<? extends GrantedAuthority>...
method generateRefreshToken (line 250) | private String generateRefreshToken(String subject, Map<String, Object...
method generateToken (line 255) | private String generateToken(String subject, Map<String, Object> claim...
FILE: SpringCloud-Custom-ConfigCenter/custom-config-web/src/main/java/com/xiao/custom/config/web/auth/util/PageResult.java
class PageResult (line 13) | @Data
FILE: SpringCloud-Custom-ConfigCenter/custom-config-web/src/main/java/com/xiao/custom/config/web/auth/util/ResultCode.java
type ResultCode (line 8) | public enum ResultCode
method ResultCode (line 28) | ResultCode(int code, String msg)
method getCode (line 34) | public int getCode()
method getMsg (line 39) | public String getMsg()
FILE: SpringCloud-Custom-ConfigCenter/custom-config-web/src/main/java/com/xiao/custom/config/web/auth/util/ResultJson.java
class ResultJson (line 14) | @Data
method ok (line 23) | public static ResultJson ok()
method ok (line 28) | public static ResultJson ok(Object o)
method failure (line 33) | public static ResultJson failure(ResultCode code)
method failure (line 38) | public static ResultJson failure(ResultCode code, Object o)
method ResultJson (line 43) | public ResultJson(ResultCode resultCode)
method ResultJson (line 48) | public ResultJson(ResultCode resultCode, T data)
method setResultCode (line 54) | public void setResultCode(ResultCode resultCode)
method toString (line 60) | @Override
method main (line 66) | public static void main(String[] args)
FILE: SpringCloud-Custom-ConfigCenter/custom-config-web/src/main/java/com/xiao/custom/config/web/commo/Constants.java
type Constants (line 11) | public interface Constants
FILE: SpringCloud-Custom-ConfigCenter/custom-config-web/src/main/java/com/xiao/custom/config/web/config/AppControllerAdvice.java
class AppControllerAdvice (line 29) | @Slf4j
method hystrixRuntimeException (line 37) | @ExceptionHandler(HystrixRuntimeException.class)
method supports (line 55) | @Override
method beforeBodyWrite (line 72) | @Override
FILE: SpringCloud-Custom-ConfigCenter/custom-config-web/src/main/java/com/xiao/custom/config/web/controller/ClientInfoController.java
class ClientInfoController (line 21) | @RestController
method pageQuery (line 35) | @RequestMapping("/page")
method deleteById (line 49) | @RequestMapping("/del")
FILE: SpringCloud-Custom-ConfigCenter/custom-config-web/src/main/java/com/xiao/custom/config/web/controller/ConfigGroupController.java
class ConfigGroupController (line 23) | @RestController
method page (line 30) | @RequestMapping(value = "/page")
method delete (line 36) | @RequestMapping(value = "/delete/{ids}")
method save (line 42) | @RequestMapping(value = "/save")
method update (line 48) | @RequestMapping(value = "/update")
method pageRefConfigItemWithGroup (line 54) | @RequestMapping(value = "/isRefGroup")
method batchDelete (line 60) | @RequestMapping(value = "/batchDelete/{groupId}/{itemIds}")
method pageNotRefConfigItemWithGroup (line 66) | @RequestMapping(value = "/notRefGroup")
method batchSave (line 72) | @RequestMapping(value = "/batchSave/{groupId}/{itemIds}")
FILE: SpringCloud-Custom-ConfigCenter/custom-config-web/src/main/java/com/xiao/custom/config/web/controller/ConfigItemController.java
class ConfigItemController (line 21) | @RestController
method pageConfigItem (line 28) | @RequestMapping(value = "/page")
method enableOrDisable (line 34) | @RequestMapping(value = "/batchDelete/{ids}")
method save (line 40) | @RequestMapping(value = "/save")
method update (line 46) | @RequestMapping(value = "/update")
FILE: SpringCloud-Custom-ConfigCenter/custom-config-web/src/main/java/com/xiao/custom/config/web/controller/IndexController.java
class IndexController (line 25) | @Controller
method index (line 32) | @RequestMapping(value = "/")
method index2 (line 38) | @RequestMapping(value = "/index")
FILE: SpringCloud-Custom-ConfigCenter/custom-config-web/src/main/java/com/xiao/custom/config/web/controller/RegionController.java
class RegionController (line 20) | @RestController
method pageConfigItem (line 36) | @RequestMapping(value = "/queryRegion")
method delectRegion (line 49) | @RequestMapping(value = "/delectRegion/{ids}")
method addRegion (line 85) | @PostMapping(value = "/addRegion")
FILE: SpringCloud-Custom-ConfigCenter/custom-config-web/src/main/java/com/xiao/custom/config/web/controller/ServerHostConfigController.java
class ServerHostConfigController (line 22) | @RestController
method pageConfigItem (line 31) | @RequestMapping(value = "/page")
method updateServerHostConfig (line 38) | @RequestMapping(value = "/updateServerHostConfig")
method addServerHostConfig (line 46) | @RequestMapping(value = "/addServerHostConfig")
method delectServerHostConfig (line 53) | @RequestMapping(value = "/delectServerHostConfig/{id}")
FILE: SpringCloud-Custom-ConfigCenter/custom-config-web/src/main/java/com/xiao/custom/config/web/controller/app/AppManagerController.java
class AppManagerController (line 33) | @RestController
method pageQuery (line 44) | @PostMapping("/pageQuery")
method queryAllRegion (line 50) | @RequestMapping("/queryAllRegion")
method saveApplication (line 70) | @RequestMapping("/save")
method update (line 76) | @RequestMapping("/update")
method deleteApplication (line 90) | @RequestMapping("/delete")
method refresh (line 108) | @RequestMapping("/refresh")
method pageRefGroupWithApp (line 118) | @RequestMapping("/queryItemGroup")
method delItemGroup (line 138) | @RequestMapping("delItemGroup")
method pageNotRefGroupWithApp (line 156) | @RequestMapping(value = "/notRefApp")
method batchSave (line 175) | @RequestMapping(value = "/batchSaveRef")
method pageQuery (line 193) | @RequestMapping("/queryPrivateConfig")
method savePrivateConfig (line 204) | @RequestMapping("/addPrivateItem")
method updatePrivateConfig (line 215) | @RequestMapping("/updatePrivateItem")
method delPrivateConfig (line 226) | @RequestMapping("/delPrivateItem")
method convertDto (line 236) | private ApplicationDto convertDto(ApplicationVo applicationVo)
method convertVo (line 251) | private RegionVo convertVo(RegionDto regionDto)
FILE: SpringCloud-Custom-ConfigCenter/custom-config-web/src/main/java/com/xiao/custom/config/web/controller/app/vo/ApplicationVo.java
class ApplicationVo (line 13) | @Data
FILE: SpringCloud-Custom-ConfigCenter/custom-config-web/src/main/java/com/xiao/custom/config/web/controller/app/vo/RegionVo.java
class RegionVo (line 13) | @Data
FILE: SpringCloud-Custom-ConfigCenter/custom-config-web/src/main/java/com/xiao/custom/config/web/dto/ServerHostConfigDto.java
class ServerHostConfigDto (line 13) | @Data
FILE: SpringCloud-Custom-ConfigCenter/custom-config-web/src/main/java/com/xiao/custom/config/web/exception/ExceptionEnum.java
type ExceptionEnum (line 9) | public enum ExceptionEnum implements AbstractServiceException
method ExceptionEnum (line 19) | ExceptionEnum(Integer code, String message) {
method getCode (line 28) | @Override
method getMessage (line 33) | @Override
FILE: SpringCloud-Custom-ConfigCenter/custom-config-web/src/main/java/com/xiao/custom/config/web/feign/app/ApplicationFeign.java
type ApplicationFeign (line 25) | @FeignClient(value = Constants.CONFIG_SERVICE)
method pageApplicationConfig (line 37) | @RequestMapping(value = "page")
method save (line 48) | @RequestMapping(value = "/save")
method delete (line 59) | @RequestMapping(value = "/delete/{id}")
method refresh (line 70) | @RequestMapping("/refresh")
method update (line 81) | @RequestMapping(value = "/update")
method pageRefGroupWithApp (line 92) | @RequestMapping(value = "/isRefApp")
method batchUnBind (line 104) | @RequestMapping(value = "/batchDeleteRef")
method pageNotRefGroupWithApp (line 115) | @RequestMapping(value = "/notRefApp")
method batchSave (line 127) | @RequestMapping(value = "/batchSaveRef")
method queryPrivateConfig (line 138) | @RequestMapping("/queryPrivateConfig")
method savePrivateConfig (line 149) | @RequestMapping("/savePrivateConfig")
method updatePrivateConfig (line 160) | @RequestMapping("/updatePrivateConfig")
method delPrivateConfig (line 171) | @RequestMapping("/delPrivateConfig")
FILE: SpringCloud-Custom-ConfigCenter/custom-config-web/src/main/java/com/xiao/custom/config/web/feign/auth/AuthFeign.java
type AuthFeign (line 19) | @FeignClient(value = Constants.CONFIG_SERVICE)
method findByUsername (line 29) | @RequestMapping("/findByUsername")
method insert (line 37) | @RequestMapping("/insert")
method insertRole (line 47) | @RequestMapping("/insertRole")
method findRoleById (line 56) | @RequestMapping("/findRoleById")
method findRoleByUserId (line 65) | @RequestMapping("/findRoleByUserId")
FILE: SpringCloud-Custom-ConfigCenter/custom-config-web/src/main/java/com/xiao/custom/config/web/feign/client/ClientInfoFeign.java
type ClientInfoFeign (line 20) | @FeignClient(value = Constants.CONFIG_SERVICE)
method pageQuery (line 30) | @RequestMapping("/page")
method deleteById (line 41) | @RequestMapping("/del")
FILE: SpringCloud-Custom-ConfigCenter/custom-config-web/src/main/java/com/xiao/custom/config/web/feign/config/ConfigGroupFeign.java
type ConfigGroupFeign (line 22) | @FeignClient(value = Constants.CONFIG_SERVICE)
method page (line 26) | @RequestMapping(value = "/page")
method delete (line 29) | @RequestMapping(value = "/delete/{ids}")
method save (line 32) | @RequestMapping(value = "/save")
method update (line 35) | @RequestMapping(value = "/update")
method pageRefConfigItemWithGroup (line 38) | @RequestMapping(value = "/isRefGroup")
method batchDelete (line 41) | @RequestMapping(value = "/batchDelete/{groupId}/{itemIds}")
method pageNotRefConfigItemWithGroup (line 44) | @RequestMapping(value = "/notRefGroup")
method batchSave (line 47) | @RequestMapping(value = "/batchSave/{groupId}/{itemIds}")
FILE: SpringCloud-Custom-ConfigCenter/custom-config-web/src/main/java/com/xiao/custom/config/web/feign/config/ConfigItemFeign.java
type ConfigItemFeign (line 20) | @FeignClient(value = Constants.CONFIG_SERVICE)
method pageConfigItem (line 24) | @RequestMapping(value = "/page")
method enableOrDisable (line 27) | @RequestMapping(value = "/batchDelete/{ids}")
method save (line 30) | @RequestMapping(value = "/save")
method update (line 33) | @RequestMapping(value = "/update")
FILE: SpringCloud-Custom-ConfigCenter/custom-config-web/src/main/java/com/xiao/custom/config/web/feign/region/RegionFeign.java
type RegionFeign (line 23) | @FeignClient(value = Constants.CONFIG_SERVICE)
method queryRegion (line 28) | @RequestMapping(value = "/queryRegion")
method delete (line 32) | @PostMapping(value="/delectRegion/{ids}")
method updateRegion (line 36) | @PostMapping(value="/updateRegion")
method addRegion (line 40) | @PostMapping(value="/addRegion")
method selectRgion (line 44) | @RequestMapping(value = "/selectRgion")
FILE: SpringCloud-Custom-ConfigCenter/custom-config-web/src/main/java/com/xiao/custom/config/web/feign/server/ServerHostConfigFeign.java
type ServerHostConfigFeign (line 20) | @FeignClient(value = Constants.CONFIG_SERVICE)
method pageServerHostConfig (line 25) | @RequestMapping(value = "/queryServerHost")
method addServerHostConfig (line 29) | @RequestMapping(value = "/addServerHostConfig")
method updateServerHostConfig (line 33) | @RequestMapping(value = "/updateServerHostConfig")
method delectServerHostConfig (line 37) | @RequestMapping(value = "/delectServerHostConfig/{id}")
FILE: SpringCloud-Custom-ConfigCenter/custom-config-web/src/main/resources/static/pages/app/add.js
method activated (line 34) | activated() {
method submit (line 42) | submit(formName) {
method relation (line 63) | relation() {
FILE: SpringCloud-Custom-ConfigCenter/custom-config-web/src/main/resources/static/pages/app/app.js
method selectChange (line 19) | selectChange(v) {
method search (line 22) | search() {
method deleteBatch (line 27) | deleteBatch() {
method confirmDelete (line 51) | confirmDelete() {
method edit (line 69) | edit(row) {
method relation (line 76) | relation(row) {
method del (line 81) | del(row) {
method refresh (line 102) | refresh(row) {
method create (line 119) | create() {
FILE: SpringCloud-Custom-ConfigCenter/custom-config-web/src/main/resources/static/pages/app/configgroup.js
method handleClick (line 57) | handleClick(tab, event) {
method findApi (line 61) | findApi() {
method configDetail (line 72) | configDetail(data) {
method selectChagne (line 85) | selectChagne(v) {
method del (line 88) | del(datas) {
method open (line 121) | open(title, data) {
method addConfGroup (line 132) | addConfGroup() {
method updateConfig (line 137) | updateConfig(data) {
method addPrivateConf (line 144) | addPrivateConf() {
method findPrivateConf (line 149) | findPrivateConf() {
method editPrivate (line 159) | editPrivate(row) {
method delPrivate (line 170) | delPrivate(row) {
method selPrivateChange (line 190) | selPrivateChange(v) {
method submitPrivate (line 194) | submitPrivate() {
method cleanPriTab (line 225) | cleanPriTab() {
FILE: SpringCloud-Custom-ConfigCenter/custom-config-web/src/main/resources/static/pages/app/detail.js
method activated (line 34) | activated() {
method submit (line 54) | submit(formName) {
method relation (line 78) | relation() {
FILE: SpringCloud-Custom-ConfigCenter/custom-config-web/src/main/resources/static/pages/app/refconfiggroup.js
method findApi (line 32) | findApi() {
method configDetail (line 43) | configDetail(data) {
method selectChagne (line 55) | selectChagne(v) {
method ref (line 58) | ref(datas) {
method open (line 82) | open(title, data) {
method batchRef (line 94) | batchRef() {
method updateConfig (line 99) | updateConfig(data) {
FILE: SpringCloud-Custom-ConfigCenter/custom-config-web/src/main/resources/static/pages/client/client.js
method statusFormatter (line 35) | statusFormatter(v) {
method findApi (line 43) | findApi() {
method onSubmit (line 54) | onSubmit() {
method resetForm (line 59) | resetForm() {
method handleSizeChange (line 66) | handleSizeChange(val) {
method handleCurrentChange (line 71) | handleCurrentChange(val) {
method selectChagne (line 76) | selectChagne(v) {
method deleteBatch (line 79) | deleteBatch() {
method confirmDelete (line 87) | confirmDelete() {
method del (line 95) | del(row) {
FILE: SpringCloud-Custom-ConfigCenter/custom-config-web/src/main/resources/static/pages/config/configitem.js
method findApi (line 55) | findApi() {
method onSubmit (line 65) | onSubmit() {
method resetForm (line 70) | resetForm() {
method handleSizeChange (line 77) | handleSizeChange(val) {
method handleCurrentChange (line 82) | handleCurrentChange(val) {
method fomatterStatus (line 87) | fomatterStatus(v) {
method fomatterItemType (line 94) | fomatterItemType(v) {
method selectChagne (line 107) | selectChagne(v) {
method del (line 110) | del(datas) {
method open (line 137) | open(title, data) {
method submit (line 148) | submit(formName) {
FILE: SpringCloud-Custom-ConfigCenter/custom-config-web/src/main/resources/static/pages/configgroup/configgroup.js
method findApi (line 48) | findApi() {
method onSubmit (line 58) | onSubmit() {
method resetForm (line 63) | resetForm() {
method handleSizeChange (line 70) | handleSizeChange(val) {
method handleCurrentChange (line 75) | handleCurrentChange(val) {
method selectChagne (line 80) | selectChagne(v) {
method del (line 83) | del(datas) {
method create (line 111) | create(formName) {
method open (line 148) | open(title, data) {
method refItem (line 159) | refItem(group) {
FILE: SpringCloud-Custom-ConfigCenter/custom-config-web/src/main/resources/static/pages/configgroup/detail.js
method activated (line 46) | activated() {
method findApi (line 55) | findApi() {
method selectChagne (line 65) | selectChagne(v) {
method fomatterStatus (line 68) | fomatterStatus(v) {
method fomatterItemType (line 75) | fomatterItemType(v) {
method onSubmit (line 89) | onSubmit() {
method resetForm (line 94) | resetForm() {
method handleSizeChange (line 101) | handleSizeChange(val) {
method handleCurrentChange (line 106) | handleCurrentChange(val) {
method del (line 111) | del(datas) {
method refItem (line 139) | refItem() {
FILE: SpringCloud-Custom-ConfigCenter/custom-config-web/src/main/resources/static/pages/configgroup/refdetail.js
method activated (line 46) | activated() {
method findApi (line 55) | findApi() {
method selectChagne (line 65) | selectChagne(v) {
method fomatterStatus (line 68) | fomatterStatus(v) {
method fomatterItemType (line 75) | fomatterItemType(v) {
method onSubmit (line 89) | onSubmit() {
method resetForm (line 94) | resetForm() {
method handleSizeChange (line 101) | handleSizeChange(val) {
method handleCurrentChange (line 106) | handleCurrentChange(val) {
method refItem (line 111) | refItem(datas) {
FILE: SpringCloud-Custom-ConfigCenter/custom-config-web/src/main/resources/static/pages/home/home.js
method onClick (line 11) | onClick(){
method handleClose (line 14) | handleClose(done) {
method onSubmit (line 21) | onSubmit(){
FILE: SpringCloud-Custom-ConfigCenter/custom-config-web/src/main/resources/static/pages/index/compents.js
method data (line 85) | data () {
method mounted (line 106) | mounted() {
method getUEContent (line 114) | getUEContent() { // 获取内容方法
method destroyed (line 118) | destroyed() {
FILE: SpringCloud-Custom-ConfigCenter/custom-config-web/src/main/resources/static/pages/index/index.js
method created (line 8) | created(){
method created (line 33) | created(){
method mounted (line 46) | mounted(){
method closeMenu (line 69) | closeMenu(){
method initHash (line 79) | initHash (hash) {
method convertToComp (line 197) | convertToComp(url){
method closeNav (line 277) | closeNav(item){
method handTags (line 309) | handTags(item){
method menuSelect (line 312) | menuSelect(n){
method openedNames (line 317) | openedNames(v){
FILE: SpringCloud-Custom-ConfigCenter/custom-config-web/src/main/resources/static/pages/region/region.js
method findApi (line 53) | findApi() {
method handleSizeChange (line 64) | handleSizeChange(val) {
method handleCurrentChange (line 68) | handleCurrentChange(val) {
method addRegionFrom (line 74) | addRegionFrom() {
method addRegionClose (line 102) | addRegionClose() {
method onSubmit (line 113) | onSubmit() {
method resetForm (line 118) | resetForm() {
method selectChagne (line 125) | selectChagne(v) {
method deleteRow (line 129) | deleteRow(row) {
FILE: SpringCloud-Custom-ConfigCenter/custom-config-web/src/main/resources/static/pages/server/server.js
method findApi (line 56) | findApi() {
method onSubmit (line 66) | onSubmit() {
method resetForm (line 71) | resetForm() {
method handleSizeChange (line 78) | handleSizeChange(val) {
method handleCurrentChange (line 83) | handleCurrentChange(val) {
method selectChagne (line 88) | selectChagne(v){
method deleteBatch (line 91) | deleteBatch(){
method confirmDelete (line 99) | confirmDelete(){
method del (line 107) | del(row) {
method open (line 131) | open(title, data) {
method submit (line 142) | submit(formName) {
FILE: SpringCloud-Custom-ConfigCenter/custom-config-web/src/main/resources/static/pages/template/detail.js
method activated (line 10) | activated(){
method submit (line 20) | submit(){
FILE: SpringCloud-Custom-ConfigCenter/custom-config-web/src/main/resources/static/pages/template/template.js
method selectChagne (line 14) | selectChagne(v){
method deleteBatch (line 17) | deleteBatch(){
method confirmDelete (line 25) | confirmDelete(){
method edit (line 33) | edit(row){
method del (line 38) | del(row){
method create (line 42) | create(){
FILE: SpringCloud-Custom-ConfigCenter/custom-config-web/src/main/resources/static/plugin/common/common.js
method setLoadArea (line 269) | setLoadArea(area) {
function NavObject (line 465) | function NavObject(menuId, url, name, iconCls) {
function JS_UUID (line 472) | function JS_UUID() {
FILE: SpringCloud-Custom-ConfigCenter/custom-config-web/src/main/resources/static/plugin/element/js/index.js
function t (line 1) | function t(n){if(i[n])return i[n].exports;var s=i[n]={i:n,l:!1,exports:{...
function n (line 1) | function n(e,t,i){this.$children.forEach(function(s){s.$options.componen...
function n (line 1) | function n(){for(var e=arguments.length,t=Array(e),i=0;i<e;i++)t[i]=argu...
function s (line 1) | function s(e){return"string"===e||"url"===e||"hex"===e||"email"===e||"pa...
function r (line 1) | function r(e,t){return void 0===e||null===e||(!("array"!==t||!Array.isAr...
function o (line 1) | function o(e,t,i){function n(e){s.push.apply(s,e),++r===o&&i(s)}var s=[]...
function a (line 1) | function a(e,t,i){function n(o){if(o&&o.length)return void i(o);var a=s;...
function l (line 1) | function l(e){var t=[];return Object.keys(e).forEach(function(i){t.push....
function u (line 1) | function u(e,t,i,n){if(t.first){return a(l(e),i,n)}var s=t.firstFields||...
function c (line 1) | function c(e){return function(t){return t&&t.message?(t.field=t.field||e...
function d (line 1) | function d(e,t){if(t)for(var i in t)if(t.hasOwnProperty(i)){var n=t[i];"...
function n (line 1) | function n(){}
function s (line 1) | function s(e,t){return c.call(e,t)}
function r (line 1) | function r(e,t){for(var i in t)e[i]=t[i];return e}
function o (line 1) | function o(e){for(var t={},i=0;i<e.length;i++)e[i]&&r(t,e[i]);return t}
function a (line 1) | function a(e,t,i){var n=e;t=t.replace(/\[(\w+)\]/g,".$1"),t=t.replace(/^...
function n (line 1) | function n(e,t){if(!e||!t)return!1;if(-1!==t.indexOf(" "))throw new Erro...
function s (line 1) | function s(e,t){if(e){for(var i=e.className,s=(t||"").split(" "),r=0,o=s...
function r (line 1) | function r(e,t){if(e&&t){for(var i=t.split(" "),s=" "+e.className+" ",r=...
function o (line 1) | function o(e,t,i){if(e&&t)if("object"===(void 0===t?"undefined":a(t)))fo...
function n (line 1) | function n(e,t,i){return function(){var n=arguments.length>0&&void 0!==a...
function n (line 1) | function n(e,t,i,n){for(var s=t;s<i;s++)e[s]=n}
function n (line 1) | function n(e){return e&&e.__esModule?e:{default:e}}
function n (line 1) | function n(e){return e&&e.__esModule?e:{default:e}}
function n (line 1) | function n(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a ...
function e (line 1) | function e(){n(this,e)}
function n (line 1) | function n(e){return null!==e&&"object"===(void 0===e?"undefined":r(e))&...
function s (line 1) | function s(e){return e&&e.filter(function(e){return e&&e.tag})[0]}
function n (line 1) | function n(e){return e&&e.__esModule?e:{default:e}}
function n (line 1) | function n(e){return void 0!==e&&null!==e}
function s (line 1) | function s(e){return/([(\uAC00-\uD7AF)|(\u3130-\u318F)])+/gi.test(e)}
function n (line 1) | function n(e,t){if(!r.default.prototype.$isServer){if(!t)return void(e.s...
function s (line 1) | function s(){function s(){o=Number(new Date),i.apply(l,c)}function a(){r...
function n (line 1) | function n(e,t,i,n,r,o){!e.required||i.hasOwnProperty(e.field)&&!s.e(t,o...
function i (line 1) | function i(e,t){return function(){e.apply(this,arguments),t.apply(this,a...
function n (line 1) | function n(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a ...
function e (line 1) | function e(t){n(this,e),this._hue=0,this._saturation=100,this._value=100...
function n (line 1) | function n(e){return e&&e.__esModule?e:{default:e}}
function n (line 1) | function n(e){return e&&e.__esModule?e:{default:e}}
function n (line 1) | function n(e){return e&&e.__esModule?e:{default:e}}
function e (line 1) | function e(e){return e&&"object"==typeof e&&"[object RegExp]"!==Object.p...
function t (line 1) | function t(e){return Array.isArray(e)?[]:{}}
function i (line 1) | function i(i,n){return n&&!0===n.clone&&e(i)?r(t(i),i,n):i}
function n (line 1) | function n(t,n,s){var o=t.slice();return n.forEach(function(n,a){void 0=...
function s (line 1) | function s(t,n,s){var o={};return e(t)&&Object.keys(t).forEach(function(...
function r (line 1) | function r(e,t,r){var o=Array.isArray(t),a=r||{arrayMerge:n},l=a.arrayMe...
function t (line 1) | function t(e){for(var t=arguments.length,i=Array(t>1?t-1:0),o=1;o<t;o++)...
function n (line 1) | function n(e){return e&&e.__esModule?e:{default:e}}
function n (line 1) | function n(e){var t=window.getComputedStyle(e),i=t.getPropertyValue("box...
function s (line 1) | function s(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[...
function e (line 1) | function e(e,t,i){this._reference=e.jquery?e[0]:e,this.state={};var n=vo...
function t (line 1) | function t(e){var t=e.style.display,i=e.style.visibility;e.style.display...
function i (line 1) | function i(e){var t={left:"right",right:"left",bottom:"top",top:"bottom"...
function n (line 1) | function n(e){var t=Object.assign({},e);return t.right=t.left+t.width,t....
function s (line 1) | function s(e,t){var i,n=0;for(i in e){if(e[i]===t)return n;n++}return null}
function r (line 1) | function r(e,t){return m.getComputedStyle(e,null)[t]}
function o (line 1) | function o(e){var t=e.offsetParent;return t!==m.document.body&&t?t:m.doc...
function a (line 1) | function a(e){var t=e.parentNode;return t?t===m.document?m.document.body...
function l (line 1) | function l(e){return e!==m.document.body&&("fixed"===r(e,"position")||(e...
function u (line 1) | function u(e,t){function i(e){return""!==e&&!isNaN(parseFloat(e))&&isFin...
function c (line 1) | function c(e){var t={};return e&&"[object Function]"===t.toString.call(e)}
function d (line 1) | function d(e){var t={width:e.offsetWidth,height:e.offsetHeight,left:e.of...
function h (line 1) | function h(e){var t=e.getBoundingClientRect(),i=-1!=navigator.userAgent....
function f (line 1) | function f(e,t,i){var n=h(e),s=h(t);if(i){var r=a(t);s.top+=r.scrollTop,...
function p (line 1) | function p(e){for(var t=["","ms","webkit","moz","o"],i=0;i<t.length;i++)...
function t (line 1) | function t(e,t){t.forEach(function(t){e.classList.add(t)})}
function i (line 1) | function i(e,t){t.forEach(function(t){e.setAttribute(t.split(":")[0],t.s...
function n (line 1) | function n(e){return e&&e.__esModule?e:{default:e}}
function i (line 1) | function i(e){return parseFloat(e)||0}
function n (line 1) | function n(e){for(var t=[],n=arguments.length-1;n-- >0;)t[n]=arguments[n...
function s (line 1) | function s(e){for(var t=["top","right","bottom","left"],n={},s=0,r=t;s<r...
function r (line 1) | function r(e){var t=e.getBBox();return c(0,0,t.width,t.height)}
function o (line 1) | function o(e){var t=e.clientWidth,r=e.clientHeight;if(!t&&!r)return x;va...
function a (line 1) | function a(e){return e===C(e).document.documentElement}
function l (line 1) | function l(e){return h?w(e)?r(e):o(e):x}
function u (line 1) | function u(e){var t=e.x,i=e.y,n=e.width,s=e.height,r="undefined"!=typeof...
function c (line 1) | function c(e,t,i,n){return{x:e,y:t,width:i,height:n}}
function e (line 1) | function e(e,t){var i=-1;return e.some(function(e,n){return e[0]===t&&(i...
function t (line 1) | function t(){this.__entries__=[]}
function i (line 1) | function i(){r&&(r=!1,e()),o&&s()}
function n (line 1) | function n(){p(i)}
function s (line 1) | function s(){var e=Date.now();if(r){if(e-a<m)return;o=!0}else r=!0,o=!1,...
function n (line 1) | function n(e){var t=e.move,i=e.size,n=e.bar,s={},r="translate"+n.axis+"(...
function n (line 1) | function n(e){return e&&e.__esModule?e:{default:e}}
function n (line 1) | function n(e){return e&&e.__esModule?e:{default:e}}
function n (line 1) | function n(e){return e&&e.__esModule?e:{default:e}}
function n (line 1) | function n(e){return e&&e.__esModule?e:{default:e}}
function n (line 1) | function n(e){return e&&e.__esModule?e:{default:e}}
function n (line 1) | function n(e){return e&&e.__esModule?e:{default:e}}
function n (line 1) | function n(e){return e&&e.__esModule?e:{default:e}}
function n (line 1) | function n(e){return e&&e.__esModule?e:{default:e}}
function n (line 1) | function n(e){return e&&e.__esModule?e:{default:e}}
function n (line 1) | function n(e){return e&&e.__esModule?e:{default:e}}
function n (line 1) | function n(e){return e&&e.__esModule?e:{default:e}}
function n (line 1) | function n(e){return e&&e.__esModule?e:{default:e}}
function n (line 1) | function n(e){var t=0,i=0,n=0,s=0;return"detail"in e&&(i=e.detail),"whee...
function i (line 1) | function i(){if(!b){b=!0;var e=navigator.userAgent,t=/(?:MSIE.(\d+\.\d+)...
function n (line 1) | function n(e,t){if(!r.canUseDOM||t&&!("addEventListener"in document))ret...
function n (line 1) | function n(e){return e&&e.__esModule?e:{default:e}}
function n (line 1) | function n(e){return e&&e.__esModule?e:{default:e}}
function s (line 1) | function s(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a ...
function e (line 1) | function e(t){s(this,e),this.observers=[],this.table=null,this.store=nul...
function n (line 1) | function n(e){return e&&e.__esModule?e:{default:e}}
function n (line 1) | function n(e){return e&&e.__esModule?e:{default:e}}
function n (line 1) | function n(e){return e&&e.__esModule?e:{default:e}}
function n (line 1) | function n(e){return e&&e.__esModule?e:{default:e}}
function n (line 1) | function n(e){return e&&e.__esModule?e:{default:e}}
function n (line 1) | function n(e){return e&&e.__esModule?e:{default:e}}
function r (line 1) | function r(e,t){for(var i=[],n=0,s=e.length;n<s;n++)i.push(e[n].substr(0...
function o (line 1) | function o(e){return function(t,i,n){var s=n[e].indexOf(i.charAt(0).toUp...
function a (line 1) | function a(e,t){for(e=String(e),t=t||2;e.length<t;)e="0"+e;return e}
function n (line 1) | function n(e){return e&&e.__esModule?e:{default:e}}
function n (line 1) | function n(e){return e&&e.__esModule?e:{default:e}}
function n (line 1) | function n(e){return e&&e.__esModule?e:{default:e}}
function n (line 1) | function n(e){return e&&e.__esModule?e:{default:e}}
function n (line 1) | function n(e){return e&&e.__esModule?e:{default:e}}
function n (line 1) | function n(e){return e&&e.__esModule?e:{default:e}}
function n (line 1) | function n(e){return e&&e.__esModule?e:{default:e}}
function n (line 1) | function n(e){return e&&e.__esModule?e:{default:e}}
function n (line 1) | function n(e){return e&&e.__esModule?e:{default:e}}
function n (line 1) | function n(e){return e&&e.__esModule?e:{default:e}}
function n (line 1) | function n(e){return e&&e.__esModule?e:{default:e}}
function n (line 1) | function n(e){return e&&e.__esModule?e:{default:e}}
function n (line 1) | function n(e){this.rules=null,this._messages=c.a,this.define(e)}
function t (line 1) | function t(e){var t=void 0,i=void 0,n=[],s={};for(t=0;t<e.length;t++)!fu...
function i (line 1) | function i(e,t){return r()({},t,{fullField:o.fullField+"."+e})}
function s (line 1) | function s(){var s=arguments.length>0&&void 0!==arguments[0]?arguments[0...
function n (line 1) | function n(e,t,i,n,o){var a=[];if(e.required||!e.required&&n.hasOwnPrope...
function n (line 1) | function n(e,t,i,n,r){(/^\s+$/.test(t)||""===t)&&n.push(s.d(r.messages.w...
function n (line 1) | function n(e,t,i,n,s){if(e.required&&void 0===t)return void Object(a.a)(...
function n (line 1) | function n(e,t,i,n,r){var o="number"==typeof e.len,a="number"==typeof e....
function n (line 1) | function n(e,t,i,n,o){e[r]=Array.isArray(e[r])?e[r]:[],-1===e[r].indexOf...
function n (line 1) | function n(e,t,i,n,r){if(e.pattern)if(e.pattern instanceof RegExp)e.patt...
function n (line 1) | function n(e,t,i,n,o){var a=[];if(e.required||!e.required&&n.hasOwnPrope...
function n (line 1) | function n(e,t,i,n,o){var a=[];if(e.required||!e.required&&n.hasOwnPrope...
function n (line 1) | function n(e,t,i,n,o){var a=[];if(e.required||!e.required&&n.hasOwnPrope...
function n (line 1) | function n(e,t,i,n,o){var a=[];if(e.required||!e.required&&n.hasOwnPrope...
function n (line 1) | function n(e,t,i,n,o){var a=[];if(e.required||!e.required&&n.hasOwnPrope...
function n (line 1) | function n(e,t,i,n,o){var a=[];if(e.required||!e.required&&n.hasOwnPrope...
function n (line 1) | function n(e,t,i,n,o){var a=[];if(e.required||!e.required&&n.hasOwnPrope...
function n (line 1) | function n(e,t,i,n,o){var a=[];if(e.required||!e.required&&n.hasOwnPrope...
function n (line 1) | function n(e,t,i,n,a){var l=[];if(e.required||!e.required&&n.hasOwnPrope...
function n (line 1) | function n(e,t,i,n,o){var a=[];if(e.required||!e.required&&n.hasOwnPrope...
function n (line 1) | function n(e,t,i,n,o){var a=[];if(e.required||!e.required&&n.hasOwnPrope...
function n (line 1) | function n(e,t,i,n,s){var a=[],l=Array.isArray(t)?"array":void 0===t?"un...
function n (line 1) | function n(e,t,i,n,o){var a=e.type,l=[];if(e.required||!e.required&&n.ha...
function n (line 1) | function n(){return{default:"Validation error on field %s",required:"%s ...
function n (line 1) | function n(){}
function n (line 1) | function n(e){return e&&e.__esModule?e:{default:e}}
function n (line 1) | function n(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a ...
function e (line 1) | function e(t){var i=this;n(this,e),this.currentNode=null,this.currentNod...
function n (line 1) | function n(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a ...
function e (line 1) | function e(e,t){for(var i=0;i<t.length;i++){var n=t[i];n.enumerable=n.en...
function e (line 1) | function e(t){n(this,e),this.id=h++,this.text=null,this.checked=!1,this....
function n (line 1) | function n(e){return e&&e.__esModule?e:{default:e}}
function n (line 1) | function n(e){return e&&e.__esModule?e:{default:e}}
function n (line 1) | function n(e){return e&&e.__esModule?e:{default:e}}
function n (line 1) | function n(e){return e&&e.__esModule?e:{default:e}}
function n (line 1) | function n(e){return e&&e.__esModule?e:{default:e}}
function n (line 1) | function n(e){return e&&e.__esModule?e:{default:e}}
function n (line 1) | function n(e){return e&&e.__esModule?e:{default:e}}
function s (line 1) | function s(){}
function n (line 1) | function n(e){return e&&e.__esModule?e:{default:e}}
function n (line 1) | function n(e){return e&&e.__esModule?e:{default:e}}
function n (line 1) | function n(e,t,i){var n=void 0;n=i.response?""+(i.response.error||i.resp...
function s (line 1) | function s(e){var t=e.responseText||e.response;if(!t)return t;try{return...
function r (line 1) | function r(e){if("undefined"!=typeof XMLHttpRequest){var t=new XMLHttpRe...
function n (line 1) | function n(e){return e&&e.__esModule?e:{default:e}}
function n (line 1) | function n(e){return e&&e.__esModule?e:{default:e}}
function n (line 1) | function n(e){return e&&e.__esModule?e:{default:e}}
function n (line 1) | function n(e){return e&&e.__esModule?e:{default:e}}
function n (line 1) | function n(e){return e&&e.__esModule?e:{default:e}}
function n (line 1) | function n(e){return e&&e.__esModule?e:{default:e}}
function n (line 1) | function n(e){return e&&e.__esModule?e:{default:e}}
function n (line 1) | function n(e){return e&&e.__esModule?e:{default:e}}
FILE: SpringCloud-Custom-ConfigCenter/custom-config-web/src/main/resources/static/plugin/iview/js/iview-editor.js
function t (line 1) | function t(Z){if(Y[Z])return Y[Z].exports;var n=Y[Z]={i:Z,l:!1,exports:{...
function Z (line 1) | function Z(e){return e&&e.__esModule?e:{default:e}}
function Z (line 1) | function Z(e){return e&&e.__esModule?e:{default:e}}
function Y (line 1) | function Y(e){this.tokens=[],this.tokens.links={},this.options=e||C.defa...
function Z (line 1) | function Z(e,t){if(this.options=t||C.defaults,this.links=e,this.rules=a....
function n (line 1) | function n(e){this.options=e||{}}
function L (line 1) | function L(){}
function X (line 1) | function X(e){this.tokens=[],this.token=null,this.options=e||C.defaults,...
function J (line 1) | function J(e,t){return e.replace(t?/&/g:/&(?!#?\w+;)/g,"&").replace(...
function S (line 1) | function S(e){return e.replace(/&(#(?:\d+)|(?:#x[0-9A-Fa-f]+)|(?:\w+));?...
function r (line 1) | function r(e,t){return e=e.source,t=t||"",{replace:function(t,Y){return ...
function i (line 1) | function i(e,t){return T[" "+e]||(/^[^:]+:\/*[^\/]*$/.test(e)?T[" "+e]=e...
function s (line 1) | function s(){}
function o (line 1) | function o(e){for(var t,Y,Z=1;Z<arguments.length;Z++){t=arguments[Z];for...
function C (line 1) | function C(e,t,Z){if(void 0===e||null===e)throw new Error("marked(): inp...
function Z (line 1) | function Z(e,t,Y){t=t||"";for(var Z=[""],n=[],X=0;X<e.length;X++){n=[];f...
function n (line 1) | function n(e,t,Y,Z){var n=window.pinyin_dict_polyphone,L=n[e];if(L){L=L....
function L (line 1) | function L(e){for(var t=[],Y={},Z=0;Z<e.length;Z++){var n=X(e[Z])+e[Z];Y...
function Z (line 1) | function Z(e,t,Y){return t in e?Object.defineProperty(e,t,{value:Y,enume...
FILE: SpringCloud-Custom-ConfigCenter/custom-config-web/src/main/resources/static/plugin/jquery/3.3.1/jquery.js
function DOMEval (line 97) | function DOMEval( code, doc, node ) {
function toType (line 115) | function toType( obj ) {
function isArrayLike (line 483) | function isArrayLike( obj ) {
function Sizzle (line 715) | function Sizzle( selector, context, results, seed ) {
function createCache (line 854) | function createCache() {
function markFunction (line 872) | function markFunction( fn ) {
function assert (line 881) | function assert( fn ) {
function addHandle (line 903) | function addHandle( attrs, handler ) {
function siblingCheck (line 918) | function siblingCheck( a, b ) {
function createInputPseudo (line 944) | function createInputPseudo( type ) {
function createButtonPseudo (line 955) | function createButtonPseudo( type ) {
function createDisabledPseudo (line 966) | function createDisabledPseudo( disabled ) {
function createPositionalPseudo (line 1022) | function createPositionalPseudo( fn ) {
function testContext (line 1045) | function testContext( context ) {
function setFilters (line 2127) | function setFilters() {}
function toSelector (line 2198) | function toSelector( tokens ) {
function addCombinator (line 2208) | function addCombinator( matcher, combinator, base ) {
function elementMatcher (line 2272) | function elementMatcher( matchers ) {
function multipleContexts (line 2286) | function multipleContexts( selector, contexts, results ) {
function condense (line 2295) | function condense( unmatched, map, filter, context, xml ) {
function setMatcher (line 2316) | function setMatcher( preFilter, selector, matcher, postFilter, postFinde...
function matcherFromTokens (line 2409) | function matcherFromTokens( tokens ) {
function matcherFromGroupMatchers (line 2467) | function matcherFromGroupMatchers( elementMatchers, setMatchers ) {
function nodeName (line 2803) | function nodeName( elem, name ) {
function winnow (line 2813) | function winnow( elements, qualifier, not ) {
function sibling (line 3108) | function sibling( cur, dir ) {
function createOptions (line 3195) | function createOptions( options ) {
function Identity (line 3420) | function Identity( v ) {
function Thrower (line 3423) | function Thrower( ex ) {
function adoptValue (line 3427) | function adoptValue( value, resolve, reject, noValue ) {
function resolve (line 3520) | function resolve( depth, deferred, handler, special ) {
function completed (line 3885) | function completed() {
function fcamelCase (line 3980) | function fcamelCase( all, letter ) {
function camelCase (line 3987) | function camelCase( string ) {
function Data (line 4004) | function Data() {
function getData (line 4173) | function getData( data ) {
function dataAttr (line 4198) | function dataAttr( elem, key, data ) {
function adjustCSS (line 4511) | function adjustCSS( elem, prop, valueParts, tween ) {
function getDefaultDisplay (line 4578) | function getDefaultDisplay( elem ) {
function showHide (line 4601) | function showHide( elements, show ) {
function getAll (line 4702) | function getAll( context, tag ) {
function setGlobalEval (line 4727) | function setGlobalEval( elems, refElements ) {
function buildFragment (line 4743) | function buildFragment( elems, context, scripts, selection, ignored ) {
function returnTrue (line 4866) | function returnTrue() {
function returnFalse (line 4870) | function returnFalse() {
function safeActiveElement (line 4876) | function safeActiveElement() {
function on (line 4882) | function on( elem, types, selector, data, fn, one ) {
function manipulationTarget (line 5610) | function manipulationTarget( elem, content ) {
function disableScript (line 5621) | function disableScript( elem ) {
function restoreScript (line 5625) | function restoreScript( elem ) {
function cloneCopyEvent (line 5635) | function cloneCopyEvent( src, dest ) {
function fixInput (line 5670) | function fixInput( src, dest ) {
function domManip (line 5683) | function domManip( collection, args, callback, ignored ) {
function remove (line 5773) | function remove( elem, selector, keepData ) {
function computeStyleTests (line 6066) | function computeStyleTests() {
function roundPixelMeasures (line 6108) | function roundPixelMeasures( measure ) {
function curCSS (line 6153) | function curCSS( elem, name, computed ) {
function addGetHookIf (line 6206) | function addGetHookIf( conditionFn, hookFn ) {
function vendorPropName (line 6243) | function vendorPropName( name ) {
function finalPropName (line 6264) | function finalPropName( name ) {
function setPositiveNumber (line 6272) | function setPositiveNumber( elem, value, subtract ) {
function boxModelAdjustment (line 6284) | function boxModelAdjustment( elem, dimension, box, isBorderBox, styles, ...
function getWidthOrHeight (line 6349) | function getWidthOrHeight( elem, dimension, extra ) {
function Tween (line 6682) | function Tween( elem, options, prop, end, easing ) {
function schedule (line 6805) | function schedule() {
function createFxNow (line 6818) | function createFxNow() {
function genFx (line 6826) | function genFx( type, includeWidth ) {
function createTween (line 6846) | function createTween( value, prop, animation ) {
function defaultPrefilter (line 6860) | function defaultPrefilter( elem, props, opts ) {
function propFilter (line 7032) | function propFilter( props, specialEasing ) {
function Animation (line 7069) | function Animation( elem, properties, options ) {
function stripAndCollapse (line 7784) | function stripAndCollapse( value ) {
function getClass (line 7790) | function getClass( elem ) {
function classesToArray (line 7794) | function classesToArray( value ) {
function buildParams (line 8416) | function buildParams( prefix, obj, traditional, add ) {
function addToPrefiltersOrTransports (line 8566) | function addToPrefiltersOrTransports( structure ) {
function inspectPrefiltersOrTransports (line 8600) | function inspectPrefiltersOrTransports( structure, options, originalOpti...
function ajaxExtend (line 8629) | function ajaxExtend( target, src ) {
function ajaxHandleResponses (line 8649) | function ajaxHandleResponses( s, jqXHR, responses ) {
function ajaxConvert (line 8707) | function ajaxConvert( s, response, jqXHR, isSuccess ) {
function done (line 9220) | function done( status, nativeStatusText, responses, headers ) {
FILE: SpringCloud-Custom-ConfigCenter/custom-config-web/src/main/resources/static/plugin/jquery/jquery.history.js
function initObjects (line 67) | function initObjects(options) {
FILE: SpringCloud-Custom-ConfigCenter/custom-config-web/src/main/resources/static/plugin/mock/mock-min.js
function e (line 1) | function e(r){if(n[r])return n[r].exports;var a=n[r]={exports:{},id:r,lo...
function r (line 6) | function r(t,e,n,r){return void 0===n?a.natural(t,e):void 0===r?n:a.natu...
function n (line 6) | function n(t){for(var e,n={},r=0;r<t.length;r++)e=t[r],e&&e.id&&(n[e.id]...
function n (line 8) | function n(t){this.type=t,this.offset=n.offset(),this.text=n.text()}
function r (line 8) | function r(t,e){n.call(this,"alternate"),this.left=t,this.right=e}
function a (line 8) | function a(t){n.call(this,"match"),this.body=t.filter(Boolean)}
function o (line 8) | function o(t,e){n.call(this,t),this.body=e}
function u (line 8) | function u(t){o.call(this,"capture-group"),this.index=y[this.offset]||(y...
function l (line 8) | function l(t,e){n.call(this,"quantified"),this.body=t,this.quantifier=e}
function i (line 8) | function i(t,e){n.call(this,"quantifier"),this.min=t,this.max=e,this.gre...
function s (line 8) | function s(t,e){n.call(this,"charset"),this.invert=t,this.body=e}
function c (line 8) | function c(t,e){n.call(this,"range"),this.start=t,this.end=e}
function h (line 8) | function h(t){n.call(this,"literal"),this.body=t,this.escaped=this.body!...
function p (line 8) | function p(t){n.call(this,"unicode"),this.code=t.toUpperCase()}
function f (line 8) | function f(t){n.call(this,"hex"),this.code=t.toUpperCase()}
function d (line 8) | function d(t){n.call(this,"octal"),this.code=t.toUpperCase()}
function m (line 8) | function m(t){n.call(this,"back-reference"),this.code=t.toUpperCase()}
function g (line 8) | function g(t){n.call(this,"control-character"),this.code=t.toUpperCase()}
function t (line 8) | function t(t,e){function n(){this.constructor=t}n.prototype=e.prototype,...
function e (line 8) | function e(t,e,n,r,a){function o(t,e){function n(t){function e(t){return...
function v (line 8) | function v(t){function v(){return t.substring(Qn,Zn)}function x(){return...
function r (line 9) | function r(t,e){for(var n="",r=t;e>=r;r++)n+=String.fromCharCode(r);retu...
function r (line 9) | function r(t,e,n){n=n||[];var l={name:"string"==typeof e?e.replace(a.RE_...
function r (line 9) | function r(t,e){for(var n=o(t),r=u.diff(n,e),a=0;a<r.length;a++);return r}
function r (line 9) | function r(){this.custom={events:{},requestHeaders:{},responseHeaders:{}}}
function a (line 9) | function a(){function t(){try{return new window._XMLHttpRequest}catch(t)...
function o (line 9) | function o(t){function e(t,e){return"string"===l.type(t)?t===e:"regexp"=...
function u (line 9) | function u(t,e){return l.isFunction(t.template)?t.template(e):r.Mock.moc...
function s (line 9) | function s(t){for(var e=0,n=h.length;n>e;e++)try{p[h[e]]=d[h[e]]}catch(r...
function e (line 9) | function e(){n.readyState=r.HEADERS_RECEIVED,n.dispatchEvent(new Event("...
FILE: SpringCloud-Custom-ConfigCenter/doc/configMysql.sql
type `t_application` (line 2) | CREATE TABLE `t_application` (
type `t_application_config` (line 20) | CREATE TABLE `t_application_config` (
type `t_application_item_group_relation` (line 33) | CREATE TABLE `t_application_item_group_relation` (
type `t_client_application` (line 42) | CREATE TABLE `t_client_application` (
type `t_client_host_info` (line 56) | CREATE TABLE `t_client_host_info` (
type `t_config_item` (line 74) | CREATE TABLE `t_config_item` (
type `t_config_item_group` (line 88) | CREATE TABLE `t_config_item_group` (
type `t_config_item_group_relation` (line 99) | CREATE TABLE `t_config_item_group_relation` (
type `t_region` (line 108) | CREATE TABLE `t_region` (
type `t_server_host_config` (line 118) | CREATE TABLE `t_server_host_config` (
FILE: SpringCloud-Custom-RestTemplate-Stater/SpringCloud-RestTemplate-Stater-Example/src/main/java/com/xiao/springcloud/rest/RestTemplateStaterApp.java
class RestTemplateStaterApp (line 14) | @SpringBootApplication
method main (line 17) | public static void main(String[] args)
FILE: SpringCloud-Custom-RestTemplate-Stater/SpringCloud-RestTemplate-Stater-Example/src/main/java/com/xiao/springcloud/rest/log/impl/HttpLogServiceiImpl.java
class HttpLogServiceiImpl (line 17) | @Service
method saveRequestLog (line 28) | @Override
FILE: SpringCloud-Custom-RestTemplate-Stater/SpringCloud-RestTemplate-Stater-Example/src/test/java/com/xiao/springcloud/rest/RestTemplateStarterAppTest.java
class RestTemplateStarterAppTest (line 15) | @RunWith(SpringRunner.class)
FILE: SpringCloud-Custom-RestTemplate-Stater/SpringCloud-RestTemplate-Stater-Example/src/test/java/com/xiao/springcloud/rest/httpclient/HttpClientTest.java
class HttpClientTest (line 17) | public class HttpClientTest extends RestTemplateStarterAppTest
method testHttpGet (line 22) | @Test
FILE: SpringCloud-Custom-RestTemplate-Stater/SpringCloud-RestTemplate-Stater/src/main/java/com/xiao/springcloud/rest/stater/autoconfig/common/dto/Request.java
class Request (line 14) | @Data
FILE: SpringCloud-Custom-RestTemplate-Stater/SpringCloud-RestTemplate-Stater/src/main/java/com/xiao/springcloud/rest/stater/autoconfig/common/interceptor/RestInterceptor.java
class RestInterceptor (line 23) | @Slf4j
method intercept (line 50) | @Override
FILE: SpringCloud-Custom-RestTemplate-Stater/SpringCloud-RestTemplate-Stater/src/main/java/com/xiao/springcloud/rest/stater/autoconfig/common/log/annotation/RequestLogAspect.java
class RequestLogAspect (line 27) | @Aspect
method logAnnotatison (line 49) | @Pointcut("@annotation(com.xiao.springcloud.rest.stater.autoconfig.com...
method execute (line 63) | @Around("logAnnotatison()")
method subParams (line 134) | private String subParams(String toJsonString)
FILE: SpringCloud-Custom-RestTemplate-Stater/SpringCloud-RestTemplate-Stater/src/main/java/com/xiao/springcloud/rest/stater/autoconfig/common/log/dto/HttpRequestLog.java
class HttpRequestLog (line 15) | @Data
FILE: SpringCloud-Custom-RestTemplate-Stater/SpringCloud-RestTemplate-Stater/src/main/java/com/xiao/springcloud/rest/stater/autoconfig/common/log/service/HttpRequestLogService.java
type HttpRequestLogService (line 13) | public interface HttpRequestLogService
method saveRequestLog (line 22) | void saveRequestLog(HttpRequestLog requestLog);
FILE: SpringCloud-Custom-RestTemplate-Stater/SpringCloud-RestTemplate-Stater/src/main/java/com/xiao/springcloud/rest/stater/autoconfig/common/service/HttpClientService.java
type HttpClientService (line 14) | public interface HttpClientService
method doForObject (line 24) | <T> T doForObject(Request request);
method doRequest (line 26) | <T> T doRequest(Request request);
method getForObject (line 28) | <T> T getForObject(Request request);
method postFormData (line 38) | <T> ResponseEntity<T> postFormData(Request request);
FILE: SpringCloud-Custom-RestTemplate-Stater/SpringCloud-RestTemplate-Stater/src/main/java/com/xiao/springcloud/rest/stater/autoconfig/common/service/impl/HttpClientServiceImpl.java
class HttpClientServiceImpl (line 57) | @Service
method doForObject (line 75) | @Override
method doRequest (line 112) | @Override
method getForObject (line 127) | @Override
method postFormData (line 143) | @Override
FILE: SpringCloud-Custom-RestTemplate-Stater/SpringCloud-RestTemplate-Stater/src/main/java/com/xiao/springcloud/rest/stater/autoconfig/common/util/ThreadLocalUtil.java
class ThreadLocalUtil (line 14) | public class ThreadLocalUtil
method getThreadLocal (line 18) | public static Map<String, Object> getThreadLocal()
method get (line 31) | public static Object get(String key)
method put (line 49) | public static void put(String key, Object value)
method remove (line 68) | public static void remove(String key)
method remove (line 83) | public static void remove()
FILE: SpringCloud-Custom-RestTemplate-Stater/SpringCloud-RestTemplate-Stater/src/main/java/com/xiao/springcloud/rest/stater/autoconfig/config/RestTemplateConfiguration.java
class RestTemplateConfiguration (line 46) | @Configuration
method okHttpHttpRequestFactory (line 52) | @Bean
method httpPoolRequestFactory (line 70) | @Bean
method restTemplate (line 94) | @Bean
FILE: SpringCloud-Custom-RestTemplate-Stater/SpringCloud-RestTemplate-Stater/src/main/java/com/xiao/springcloud/rest/stater/autoconfig/config/properties/HttpPoolProperties.java
class HttpPoolProperties (line 16) | @Component
FILE: SpringCloud-Custom-RestTemplate-Stater/SpringCloud-RestTemplate-Stater/src/main/java/com/xiao/springcloud/rest/stater/autoconfig/config/properties/OkHttpProperties.java
class OkHttpProperties (line 16) | @Component
FILE: SpringCloud-Demo-Doc/sql/行政区域带经纬度.sql
type `t_sys_areas` (line 2) | CREATE TABLE `t_sys_areas` (
FILE: SpringCloud-Docker/src/main/java/com/xiao/springboot/docker/OmniZipkinServerApplication.java
class OmniZipkinServerApplication (line 8) | @EnableZipkinStreamServer
method main (line 13) | public static void main(String[] args)
FILE: SpringCloud-Docker/src/main/java/com/xiao/springboot/docker/controller/DockerDemo.java
class DockerDemo (line 14) | @RestController
method helloDocker (line 18) | @RequestMapping("/hello")
FILE: SpringCloud-Eureka/sql/config.sql
type `properties` (line 1) | CREATE TABLE `properties` (
FILE: SpringCloud-Eureka/src/main/java/com/xiao/skywalking/center/Application.java
class Application (line 22) | @SpringBootApplication
method main (line 27) | public static void main(String[] args)
FILE: SpringCloud-Gateway/src/main/java/com/xiao/skywalking/gateway/zuul/GatewayApplication.java
class GatewayApplication (line 22) | @SpringBootApplication
method main (line 27) | public static void main(String[] args)
FILE: SpringCloud-Hystrix-Demo/SpringCloud-Hystrix-Consumer/src/main/java/com/xiao/hystrix/demo/consumer/ConsumerApplication.java
class ConsumerApplication (line 23) | @SpringBootApplication
method main (line 28) | public static void main(String[] args)
method restTemplate (line 33) | @Bean
FILE: SpringCloud-Hystrix-Demo/SpringCloud-Hystrix-Consumer/src/main/java/com/xiao/hystrix/demo/consumer/api/ConsumerRestService.java
class ConsumerRestService (line 16) | @RestController
method timeout (line 23) | @RequestMapping("/timeout")
method normal (line 29) | @RequestMapping("/normal")
FILE: SpringCloud-Hystrix-Demo/SpringCloud-Hystrix-Consumer/src/main/java/com/xiao/hystrix/demo/consumer/common/CacheConstants.java
type CacheConstants (line 11) | public interface CacheConstants
FILE: SpringCloud-Hystrix-Demo/SpringCloud-Hystrix-Consumer/src/main/java/com/xiao/hystrix/demo/consumer/config/CaffeineCacheConfiguration.java
class CaffeineCacheConfiguration (line 25) | @Configuration
method cacheManager (line 30) | @Bean
method getNames (line 47) | private Collection<String> getNames()
FILE: SpringCloud-Hystrix-Demo/SpringCloud-Hystrix-Consumer/src/main/java/com/xiao/hystrix/demo/consumer/config/FeignConfiguration.java
class FeignConfiguration (line 14) | public class FeignConfiguration
method feignFallBack (line 17) | public ProducerFeignFallBack feignFallBack()
FILE: SpringCloud-Hystrix-Demo/SpringCloud-Hystrix-Consumer/src/main/java/com/xiao/hystrix/demo/consumer/config/HystrixCacheConfiguration.java
class HystrixCacheConfiguration (line 14) | @ServletComponentScan(basePackages = "com.purcotton.pref.consumer.filter")
FILE: SpringCloud-Hystrix-Demo/SpringCloud-Hystrix-Consumer/src/main/java/com/xiao/hystrix/demo/consumer/dynamic/DynamicConfigSource.java
class DynamicConfigSource (line 28) | @Component
method poll (line 57) | @Override
method getFromConfigCenter (line 71) | private Map<String, Object> getFromConfigCenter()
method getRemoteEnvironment (line 88) | private Environment getRemoteEnvironment()
FILE: SpringCloud-Hystrix-Demo/SpringCloud-Hystrix-Consumer/src/main/java/com/xiao/hystrix/demo/consumer/dynamic/InitHystrixConfiguration.java
class InitHystrixConfiguration (line 19) | @Configuration
method dynamicConfiguration (line 24) | @Bean
FILE: SpringCloud-Hystrix-Demo/SpringCloud-Hystrix-Consumer/src/main/java/com/xiao/hystrix/demo/consumer/feign/ProducerFeign.java
type ProducerFeign (line 17) | @FeignClient(name = "pref-producer-service", fallbackFactory = ProducerF...
method timeout (line 20) | @CacheResult
method normal (line 25) | @CacheResult
FILE: SpringCloud-Hystrix-Demo/SpringCloud-Hystrix-Consumer/src/main/java/com/xiao/hystrix/demo/consumer/feign/impl/ProducerFeignFactory.java
class ProducerFeignFactory (line 17) | @Component
method ProducerFeignFactory (line 22) | public ProducerFeignFactory(ProducerFeignFallBack producerFeignFallBack)
method create (line 30) | @Override
FILE: SpringCloud-Hystrix-Demo/SpringCloud-Hystrix-Consumer/src/main/java/com/xiao/hystrix/demo/consumer/feign/impl/ProducerFeignFallBack.java
class ProducerFeignFallBack (line 14) | @Component
method timeout (line 17) | @Override
method normal (line 23) | @Override
FILE: SpringCloud-Hystrix-Demo/SpringCloud-Hystrix-Consumer/src/main/java/com/xiao/hystrix/demo/consumer/filter/HystrixCacheFilter.java
class HystrixCacheFilter (line 22) | @WebFilter(urlPatterns = "/*")
method init (line 43) | @Override
method doFilter (line 79) | @Override
method destroy (line 109) | @Override
FILE: SpringCloud-Hystrix-Demo/SpringCloud-Hystrix-Eureka/src/main/java/com/xiao/hystrix/demo/eureka/EurekaApplication.java
class EurekaApplication (line 15) | @SpringBootApplication
method main (line 19) | public static void main(String[] args)
FILE: SpringCloud-Hystrix-Demo/SpringCloud-Hystrix-Producer/src/main/java/com/xiao/hystrix/demo/producer/ProducerApplication.java
class ProducerApplication (line 15) | @SpringBootApplication
method main (line 19) | public static void main(String[] args)
FILE: SpringCloud-Hystrix-Demo/SpringCloud-Hystrix-Producer/src/main/java/com/xiao/hystrix/demo/producer/api/ProducerRestService.java
class ProducerRestService (line 16) | @RestController
method timeout (line 23) | @RequestMapping("/timeout")
method normal (line 29) | @RequestMapping("/normal")
FILE: SpringCloud-Hystrix-Demo/SpringCloud-Hystrix-Producer/src/main/java/com/xiao/hystrix/demo/producer/service/ProducerService.java
type ProducerService (line 11) | public interface ProducerService
method timeout (line 21) | String timeout(String input);
method normal (line 31) | String normal(String input);
FILE: SpringCloud-Hystrix-Demo/SpringCloud-Hystrix-Producer/src/main/java/com/xiao/hystrix/demo/producer/service/impl/ProducerServiceImpl.java
class ProducerServiceImpl (line 16) | @Service
method timeout (line 27) | @Override
method normal (line 50) | @Override
FILE: SpringCloud-Kafka-Elk/src/main/java/com/xiao/springcloud/demo/kafka/elk/ElkKafkaApplication.java
class ElkKafkaApplication (line 36) | @SpringBootApplication
method main (line 53) | public static void main(String[] args)
method testKafka (line 59) | @Scheduled(fixedRate = 1000 * 60)
method listen (line 67) | @KafkaListener(topics = "kafkaTest", id = "member-service")
FILE: SpringCloud-Kafka-Elk/src/main/java/com/xiao/springcloud/demo/kafka/elk/kafka/KafkaProducerTest.java
class KafkaProducerTest (line 28) | @Component
method sendTest (line 38) | @LogAnnotation
FILE: SpringCloud-Kafka-Elk/src/main/java/com/xiao/springcloud/demo/kafka/elk/kafka/LogCompent.java
class LogCompent (line 22) | @Component
method testLog (line 27) | public void testLog()
FILE: SpringCloud-MQTT/src/main/java/com/skywalking/mqtt/ClientCallback.java
class ClientCallback (line 26) | public class ClientCallback implements MqttCallback
method ClientCallback (line 31) | public ClientCallback(MqttClient client, MqttConnectOptions options)
method connectionLost (line 37) | @Override
method messageArrived (line 68) | @Override
method deliveryComplete (line 82) | @Override
FILE: SpringCloud-MQTT/src/main/java/com/skywalking/mqtt/MqttServiceApp.java
class MqttServiceApp (line 24) | @SpringBootApplication
method configure (line 38) | @Override
method main (line 44) | public static void main(String[] args) throws Exception
FILE: SpringCloud-MQTT/src/main/java/com/skywalking/mqtt/MqttTestClient.java
class MqttTestClient (line 32) | public class MqttTestClient
method MqttTestClient (line 44) | public MqttTestClient(String clientId)
method start (line 49) | private void start() throws MqttException
method setSSLSocketFactory (line 93) | private SocketFactory setSSLSocketFactory()
method sslTrustManagers (line 110) | private TrustManager[] sslTrustManagers()
method getTrustManagers (line 136) | private TrustManager[] getTrustManagers()
method main (line 143) | public static void main(String[] args) throws MqttException
FILE: SpringCloud-MQTT/src/main/java/com/skywalking/mqtt/MvcController.java
class MvcController (line 15) | @Controller()
method mqtt (line 18) | @RequestMapping("/mqtt")
FILE: SpringCloud-MQTT/src/main/java/com/skywalking/mqtt/PurTrustManager.java
class PurTrustManager (line 16) | public class PurTrustManager implements TrustManager, X509TrustManager
method checkClientTrusted (line 18) | @Override
method checkServerTrusted (line 23) | @Override
method getAcceptedIssuers (line 29) | @Override
FILE: SpringCloud-MQTT/src/main/java/com/skywalking/mqtt/TopicProducerTest.java
class TopicProducerTest (line 31) | public class TopicProducerTest
method main (line 33) | public static void main(String[] args) throws JMSException
FILE: SpringCloud-MQTT/src/main/webapp/WEB-INF/js/crypto-js.js
function F (line 24) | function F() {}
function parseLoop (line 859) | function parseLoop(base64Str, base64StrLength, reverseMap) {
function FF (line 1071) | function FF(a, b, c, d, x, s, t) {
function GG (line 1076) | function GG(a, b, c, d, x, s, t) {
function HH (line 1081) | function HH(a, b, c, d, x, s, t) {
function II (line 1086) | function II(a, b, c, d, x, s, t) {
function isPrime (line 1271) | function isPrime(n) {
function getFractionalBits (line 1282) | function getFractionalBits(n) {
function swapEndian (line 1563) | function swapEndian(word) {
function f1 (line 1815) | function f1(x, y, z) {
function f2 (line 1820) | function f2(x, y, z) {
function f3 (line 1824) | function f3(x, y, z) {
function f4 (line 1828) | function f4(x, y, z) {
function f5 (line 1832) | function f5(x, y, z) {
function rotl (line 1837) | function rotl(x,n) {
function X64Word_create (line 2907) | function X64Word_create() {
function selectCipherStrategy (line 3441) | function selectCipherStrategy(key) {
function xorBlock (line 3604) | function xorBlock(words, offset, blockSize) {
function generateKeystreamAndEncrypt (line 4161) | function generateKeystreamAndEncrypt(words, offset, blockSize, cipher) {
function exchangeLR (line 5281) | function exchangeLR(offset, mask) {
function exchangeRL (line 5287) | function exchangeRL(offset, mask) {
function generateKeystreamWord (line 5398) | function generateKeystreamWord() {
function incWord (line 5478) | function incWord(word)
function incCounter (line 5522) | function incCounter(counter)
function nextState (line 5682) | function nextState() {
function nextState (line 5894) | function nextState() {
FILE: SpringCloud-MQTT/src/main/webapp/WEB-INF/js/layer/layer.js
function t (line 3) | function t(e){e=s.find(e),e.height(f[1]-c-u-2*(0|parseFloat(e.css("paddi...
function e (line 3) | function e(){var e=a.cancel&&a.cancel(t.index,n);e===!1||r.close(t.index)}
function o (line 3) | function o(e,t,i){var n=new Image;return n.src=e,n.complete?t(n):(n.onlo...
FILE: SpringCloud-MQTT/src/main/webapp/WEB-INF/js/mqttws31-min.js
function x (line 16) | function x(a,b,c){b[c++]=a>>8;b[c++]=a%256;return c}
function r (line 16) | function r(a,b,c,h){h=x(b,c,h);E(a,c,h);return h+b}
function m (line 16) | function m(a){for(var b=0,c=0;c<a.length;c++){var h=a.charCodeAt(c);2047...
function E (line 16) | function E(a,b,c){for(var h=0;h<a.length;h++){var e=a.charCodeAt(h);if(5...
function F (line 17) | function F(a,b,c){for(var h="",e,d=b;d<b+c;){e=a[d++];if(!(128>e)){var p...
method host (line 68) | get host(){return this._getHost()}
method host (line 68) | set host(a){this._setHost(a)}
method port (line 68) | get port(){return this._getPort()}
method port (line 68) | set port(a){this._setPort(a)}
method path (line 68) | get path(){return this._getPath()}
method path (line 68) | set path(a){this._setPath(a)}
method clientId (line 68) | get clientId(){return this._getClientId()}
method clientId (line 68) | set clientId(a){this._setClientId(a)}
method onConnectionLost (line 68) | get onConnectionLost(){return this._getOnConnectionLost()}
method onConnectionLost (line 68) | set onConnectionLost(a){this._setOnConnectionLost(a)}
method onMessageDelivered (line 68) | get onMessageDelivered(){return this._getOnMessageDelivered()}
method onMessageDelivered (line 68) | set onMessageDelivered(a){this._setOnMessageDelivered(a)}
method onMessageArrived (line 69) | get onMessageArrived(){return this._getOnMessageArrived()}
method onMessageArrived (line 69) | set onMessageArrived(a){this._setOnMessageArrived(a)}
method trace (line 69) | get trace(){return this._getTrace()}
method trace (line 69) | set trace(a){this._setTrace(a)}
method payloadString (line 71) | get payloadString(){return this._getPayloadString()}
method payloadBytes (line 71) | get payloadBytes(){return this._getPayloadBytes()}
method destinationName (line 71) | get destinationName(){return this._getDestinationName()}
method destinationName (line 71) | set destinationName(a){this._setDestinationName(a)}
method qos (line 71) | get qos(){return this._getQos()}
method qos (line 72) | set qos(a){this._setQos(a)}
method retained (line 72) | get retained(){return this._getRetained()}
method retained (line 72) | set retained(a){this._setRetained(a)}
method duplicate (line 72) | get duplicate(){return this._getDuplicate()}
method duplicate (line 72) | set duplicate(a){this._setDuplicate(a)}
FILE: SpringCloud-Mybatis/src/main/java/com/xiao/springcloud/mybatis/generator/plugin/LombokPlugin.java
class LombokPlugin (line 15) | public class LombokPlugin extends PluginAdapter
method validate (line 18) | @Override
method modelBaseRecordClassGenerated (line 24) | @Override
method clientGenerated (line 46) | @Override
method modelSetterMethodGenerated (line 57) | @Override
method modelGetterMethodGenerated (line 65) | @Override
method modelFieldGenerated (line 73) | @Override
method date2Str (line 81) | private String date2Str(Date date)
FILE: SpringCloud-Provider/src/main/java/com/xiao/skywalking/provider/ProviderApp.java
class ProviderApp (line 22) | @SpringBootApplication
method main (line 29) | public static void main(String[] args)
FILE: SpringCloud-Provider/src/main/java/com/xiao/skywalking/provider/controller/SkywalkingController.java
class SkywalkingController (line 22) | @RestController
method skywalking (line 26) | @RequestMapping(path = "/skywalking")
FILE: SpringCloud-Provider/src/main/java/com/xiao/skywalking/provider/local/cache/SpringGuavaCacheConfig.java
class SpringGuavaCacheConfig (line 19) | @Configuration
method cacheManager (line 22) | @Bean
FILE: SpringCloud-Quartz-JobService/src/main/java/com/xiao/springcloud/job/JobServiceApplication.java
class JobServiceApplication (line 13) | public class JobServiceApplication
method main (line 15) | public static void main(String[] args)
FILE: SpringCloud-Quartz-JobService/src/main/java/com/xiao/springcloud/job/config/JobConfig.java
class JobConfig (line 9) | @Configuration
method schedulerFactoryBean (line 16) | @Bean
method scheduler (line 24) | @Bean
FILE: SpringCloud-Quartz-JobService/src/main/java/com/xiao/springcloud/job/config/TaskSchedulerFactory.java
class TaskSchedulerFactory (line 14) | @Component
method createJobInstance (line 24) | @Override
FILE: SpringCloud-Quartz-JobService/src/main/java/com/xiao/springcloud/job/entity/TaskConfigDocument.java
class TaskConfigDocument (line 6) | @Data
FILE: SpringCloud-Quartz-JobService/src/main/java/com/xiao/springcloud/job/job/ServiceTaskExecuteJob.java
class ServiceTaskExecuteJob (line 15) | public class ServiceTaskExecuteJob implements Job
method execute (line 36) | @Override
FILE: SpringCloud-Quartz-JobService/src/main/java/com/xiao/springcloud/job/quartz/JobManager.java
class JobManager (line 19) | @Service
method addJob (line 35) | public void addJob(TaskConfigDocument task)
method pauseJob (line 94) | public void pauseJob(TaskConfigDocument task)
method resumeJob (line 115) | public void resumeJob(TaskConfigDocument task)
method deleteJob (line 135) | public void deleteJob(TaskConfigDocument task)
method runNow (line 154) | public void runNow(TaskConfigDocument
Condensed preview — 742 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (4,743K chars).
[
{
"path": ".gitattributes",
"chars": 87,
"preview": "*.js linguist-language=Java\n*.css linguist-language=Java\n*.html linguist-language=Java\n"
},
{
"path": ".gitignore",
"chars": 1565,
"preview": "## .gitignore for Grails 1.2 and 1.3\n\n# .gitignore for maven \ntarget/\n*.releaseBackup\n\n# web application files\n#/web-app"
},
{
"path": "CODE_OF_CONDUCT.md",
"chars": 3347,
"preview": "# Contributor Covenant Code of Conduct\n\n## Our Pledge\n\nIn the interest of fostering an open and welcoming environment, w"
},
{
"path": "LICENSE.txt",
"chars": 1068,
"preview": "MIT License\n\nCopyright (c) 2021 Linlin xiao\n\nPermission is hereby granted, free of charge, to any person obtaining a cop"
},
{
"path": "README.md",
"chars": 11759,
"preview": "# spring-cloud-demo\n## 不定期更新与记录在springcloud开发中所遇到的坑以及解决方法\n## 说明:由于版本不兼容,很多核心、重点的技术难题都以单独的项目形式提交,并同时更新到csdn,如有需要请关注:https"
},
{
"path": "SpringBoot-Admin/pom.xml",
"chars": 3913,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project xmlns=\"http://maven.apache.org/POM/4.0.0\"\n xmlns:xsi=\"http://www"
},
{
"path": "SpringBoot-Admin/readme.md",
"chars": 319,
"preview": "\nSpringboot-Admin 2.0服务端+Springboot-Admin 1.5.6客户端集成使用监控服务<br>\n原参考的[github地址](https://github.com/p555iii/spring-boot-adm"
},
{
"path": "SpringBoot-Admin/src/main/java/com/xiao/spring/boot/admin/SpringBootAdminApplication.java",
"chars": 645,
"preview": "package com.xiao.spring.boot.admin;\n\nimport de.codecentric.boot.admin.server.config.EnableAdminServer;\nimport org.spring"
},
{
"path": "SpringBoot-Admin/src/main/resources/application.yml",
"chars": 350,
"preview": "info:\n groupId: @project.groupId@\n artifactId: @project.artifactId@\n version: @project.version@\n###################\n#"
},
{
"path": "SpringBoot-Admin/src/main/resources/bootstrap.yml",
"chars": 934,
"preview": "server:\n port: 8080\nspring:\n application:\n name: omni-service-admin\n security:\n user:\n name: \"admin\"\n "
},
{
"path": "SpringBoot-Custom-Elasticsearch-Starter/Custom-Elasticsearch-Starter/pom.xml",
"chars": 913,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project xmlns=\"http://maven.apache.org/POM/4.0.0\"\n xmlns:xsi=\"http://www"
},
{
"path": "SpringBoot-Custom-Elasticsearch-Starter/Custom-Elasticsearch-Starter-Autoconfig/pom.xml",
"chars": 2627,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project xmlns=\"http://maven.apache.org/POM/4.0.0\"\n xmlns:xsi=\"http://www"
},
{
"path": "SpringBoot-Custom-Elasticsearch-Starter/Custom-Elasticsearch-Starter-Autoconfig/src/main/java/com/xiao/custom/elasticsearch/start/autoconfig/ElasticsearchAutoConfiguration.java",
"chars": 5072,
"preview": "package com.xiao.custom.elasticsearch.start.autoconfig;\n\nimport com.alibaba.fastjson.JSONObject;\nimport com.xiao.custom."
},
{
"path": "SpringBoot-Custom-Elasticsearch-Starter/Custom-Elasticsearch-Starter-Autoconfig/src/main/java/com/xiao/custom/elasticsearch/start/autoconfig/properties/ElasticsearchProperties.java",
"chars": 1707,
"preview": "package com.xiao.custom.elasticsearch.start.autoconfig.properties;\n\nimport lombok.Data;\nimport org.elasticsearch.client."
},
{
"path": "SpringBoot-Custom-Elasticsearch-Starter/Custom-Elasticsearch-Starter-Autoconfig/src/main/java/com/xiao/custom/elasticsearch/start/autoconfig/properties/HostInfo.java",
"chars": 301,
"preview": "package com.xiao.custom.elasticsearch.start.autoconfig.properties;\n\nimport lombok.Data;\n\n/**\n * [简要描述]:\n * [详细描述]:\n *\n *"
},
{
"path": "SpringBoot-Custom-Elasticsearch-Starter/Custom-Elasticsearch-Starter-Autoconfig/src/main/resources/META-INF/spring.factories",
"chars": 142,
"preview": "org.springframework.boot.autoconfigure.EnableAutoConfiguration=\\\ncom.xiao.custom.elasticsearch.start.autoconfig.Elastics"
},
{
"path": "SpringBoot-Custom-Elasticsearch-Starter/Custom-Elasticsearch-Starter-Example/pom.xml",
"chars": 2858,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project xmlns=\"http://maven.apache.org/POM/4.0.0\"\n xmlns:xsi=\"http://www"
},
{
"path": "SpringBoot-Custom-Elasticsearch-Starter/Custom-Elasticsearch-Starter-Example/src/main/java/com/xiao/custom/elasticsearch/starter/example/ElasticsearchApplication.java",
"chars": 468,
"preview": "package com.xiao.custom.elasticsearch.starter.example;\n\nimport org.springframework.boot.SpringApplication;\nimport org.sp"
},
{
"path": "SpringBoot-Custom-Elasticsearch-Starter/Custom-Elasticsearch-Starter-Example/src/main/resources/application.properties",
"chars": 482,
"preview": "#spring.elasticsearch.rest.clusterName=omni-dev-es\n#spring.elasticsearch.rest.hosts[0].hostname=192.168.206.210\n#spring."
},
{
"path": "SpringBoot-Custom-Elasticsearch-Starter/Custom-Elasticsearch-Starter-Example/src/main/resources/application.yml",
"chars": 729,
"preview": "spring:\n elasticsearch:\n rest:\n clusterName: omni-dev-es\n hosts:\n -\n hostname: 192.168.206"
},
{
"path": "SpringBoot-Custom-Elasticsearch-Starter/Custom-Elasticsearch-Starter-Example/src/main/resources/bootstrap.yml",
"chars": 0,
"preview": ""
},
{
"path": "SpringBoot-Custom-Elasticsearch-Starter/Custom-Elasticsearch-Starter-Example/src/main/resources/logback-spring.xml",
"chars": 2655,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<configuration scan=\"true\">\n\n <!-- 控制台Appender -->\n <appender name=\"STDOUT\""
},
{
"path": "SpringBoot-Custom-Elasticsearch-Starter/Custom-Elasticsearch-Starter-Example/src/test/java/com/xiao/custom/elasticsearch/starter/example/ElasticsearchApplicationTest.java",
"chars": 25316,
"preview": "package com.xiao.custom.elasticsearch.starter.example;\n\nimport com.alibaba.fastjson.JSONArray;\nimport com.alibaba.fastjs"
},
{
"path": "SpringBoot-Custom-Elasticsearch-Starter/Readme.md",
"chars": 4297,
"preview": "**定制SpringBoot Starter 之Elasticsearch Rest High Level Client Starter**\n\n**1. 自定义SpringBoot Starter 三要素:**\n>1.1.pom :\n```"
},
{
"path": "SpringBoot-Custom-Elasticsearch-Starter/pom.xml",
"chars": 1022,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project xmlns=\"http://maven.apache.org/POM/4.0.0\"\n xmlns:xsi=\"http://www"
},
{
"path": "SpringBoot-Custom-Rest-Starter/Readme.md",
"chars": 1861,
"preview": "Springboot Rest Template配置\n\n1. 支持Ok Http和Http连接池模式,内嵌包装成HttClientService服务,并提供完成的请求日志处理\n2. 引入pom:\n ```$xslt\n <depe"
},
{
"path": "SpringBoot-Custom-Rest-Starter/SpringBoot-Custom-Rest-Autconfigure/pom.xml",
"chars": 3440,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project xmlns=\"http://maven.apache.org/POM/4.0.0\"\n xmlns:xsi=\"http://www"
},
{
"path": "SpringBoot-Custom-Rest-Starter/SpringBoot-Custom-Rest-Autconfigure/src/main/java/com/xiao/custom/rest/starter/autoconfigure/config/RestTemplateConfiguration.java",
"chars": 10214,
"preview": "package com.xiao.custom.rest.starter.autoconfigure.config;\n\nimport com.xiao.custom.rest.starter.autoconfigure.config.pro"
},
{
"path": "SpringBoot-Custom-Rest-Starter/SpringBoot-Custom-Rest-Autconfigure/src/main/java/com/xiao/custom/rest/starter/autoconfigure/config/properties/HttpPoolProperties.java",
"chars": 1069,
"preview": "package com.xiao.custom.rest.starter.autoconfigure.config.properties;\n\nimport lombok.Data;\nimport org.springframework.bo"
},
{
"path": "SpringBoot-Custom-Rest-Starter/SpringBoot-Custom-Rest-Autconfigure/src/main/java/com/xiao/custom/rest/starter/autoconfigure/config/properties/OkHttpProperties.java",
"chars": 818,
"preview": "package com.xiao.custom.rest.starter.autoconfigure.config.properties;\n\nimport lombok.Data;\nimport org.springframework.bo"
},
{
"path": "SpringBoot-Custom-Rest-Starter/SpringBoot-Custom-Rest-Autconfigure/src/main/java/com/xiao/custom/rest/starter/autoconfigure/dto/Request.java",
"chars": 767,
"preview": "package com.xiao.custom.rest.starter.autoconfigure.dto;\n\nimport lombok.Data;\nimport org.springframework.http.HttpHeaders"
},
{
"path": "SpringBoot-Custom-Rest-Starter/SpringBoot-Custom-Rest-Autconfigure/src/main/java/com/xiao/custom/rest/starter/autoconfigure/interceptor/RestInterceptor.java",
"chars": 3887,
"preview": "package com.xiao.custom.rest.starter.autoconfigure.interceptor;\n\nimport com.alibaba.fastjson.JSONArray;\nimport com.aliba"
},
{
"path": "SpringBoot-Custom-Rest-Starter/SpringBoot-Custom-Rest-Autconfigure/src/main/java/com/xiao/custom/rest/starter/autoconfigure/log/annotation/RequestLog.java",
"chars": 540,
"preview": "package com.xiao.custom.rest.starter.autoconfigure.log.annotation;\n\nimport java.lang.annotation.*;\n\nimport static java.l"
},
{
"path": "SpringBoot-Custom-Rest-Starter/SpringBoot-Custom-Rest-Autconfigure/src/main/java/com/xiao/custom/rest/starter/autoconfigure/log/annotation/RequestLogAspect.java",
"chars": 4243,
"preview": "package com.xiao.custom.rest.starter.autoconfigure.log.annotation;\n\nimport com.alibaba.fastjson.JSONObject;\nimport com.x"
},
{
"path": "SpringBoot-Custom-Rest-Starter/SpringBoot-Custom-Rest-Autconfigure/src/main/java/com/xiao/custom/rest/starter/autoconfigure/log/dto/HttpRequestLog.java",
"chars": 1242,
"preview": "package com.xiao.custom.rest.starter.autoconfigure.log.dto;\n\nimport lombok.Data;\n\nimport java.sql.Timestamp;\n\n/**\n * [简要"
},
{
"path": "SpringBoot-Custom-Rest-Starter/SpringBoot-Custom-Rest-Autconfigure/src/main/java/com/xiao/custom/rest/starter/autoconfigure/log/service/HttpRequestLogService.java",
"chars": 480,
"preview": "package com.xiao.custom.rest.starter.autoconfigure.log.service;\n\nimport com.xiao.custom.rest.starter.autoconfigure.log.d"
},
{
"path": "SpringBoot-Custom-Rest-Starter/SpringBoot-Custom-Rest-Autconfigure/src/main/java/com/xiao/custom/rest/starter/autoconfigure/service/HttpClientService.java",
"chars": 851,
"preview": "package com.xiao.custom.rest.starter.autoconfigure.service;\n\nimport com.xiao.custom.rest.starter.autoconfigure.dto.Reque"
},
{
"path": "SpringBoot-Custom-Rest-Starter/SpringBoot-Custom-Rest-Autconfigure/src/main/java/com/xiao/custom/rest/starter/autoconfigure/service/impl/HttpClientAsyncServiceImpl.java",
"chars": 3676,
"preview": "package com.xiao.custom.rest.starter.autoconfigure.service.impl;\n\nimport com.alibaba.fastjson.JSONObject;\nimport com.xia"
},
{
"path": "SpringBoot-Custom-Rest-Starter/SpringBoot-Custom-Rest-Autconfigure/src/main/java/com/xiao/custom/rest/starter/autoconfigure/service/impl/HttpClientServiceImpl.java",
"chars": 5607,
"preview": "package com.xiao.custom.rest.starter.autoconfigure.service.impl;\n\nimport com.alibaba.fastjson.JSONObject;\nimport com.xia"
},
{
"path": "SpringBoot-Custom-Rest-Starter/SpringBoot-Custom-Rest-Autconfigure/src/main/java/com/xiao/custom/rest/starter/autoconfigure/service/impl/HttpRetryService.java",
"chars": 4974,
"preview": "package com.xiao.custom.rest.starter.autoconfigure.service.impl;\n\nimport org.apache.commons.lang3.StringUtils;\nimport or"
},
{
"path": "SpringBoot-Custom-Rest-Starter/SpringBoot-Custom-Rest-Autconfigure/src/main/java/com/xiao/custom/rest/starter/autoconfigure/util/RequestValidatorParamsUtil.java",
"chars": 753,
"preview": "package com.xiao.custom.rest.starter.autoconfigure.util;\n\nimport com.alibaba.fastjson.JSONObject;\nimport com.xiao.custom"
},
{
"path": "SpringBoot-Custom-Rest-Starter/SpringBoot-Custom-Rest-Autconfigure/src/main/java/com/xiao/custom/rest/starter/autoconfigure/util/ThreadLocalUtil.java",
"chars": 1797,
"preview": "package com.xiao.custom.rest.starter.autoconfigure.util;\n\nimport java.util.HashMap;\nimport java.util.Map;\n\n/**\n * [简要描述]"
},
{
"path": "SpringBoot-Custom-Rest-Starter/SpringBoot-Custom-Rest-Autconfigure/src/main/resources/META-INF/spring.factories",
"chars": 140,
"preview": "org.springframework.boot.autoconfigure.EnableAutoConfiguration=\\\ncom.xiao.custom.rest.starter.autoconfigure.config.RestT"
},
{
"path": "SpringBoot-Custom-Rest-Starter/SpringBoot-Custom-Rest-Example/pom.xml",
"chars": 2036,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project xmlns=\"http://maven.apache.org/POM/4.0.0\"\n xmlns:xsi=\"http://www"
},
{
"path": "SpringBoot-Custom-Rest-Starter/SpringBoot-Custom-Rest-Example/src/main/java/com/xiao/custom/rest/example/RestExampleApp.java",
"chars": 435,
"preview": "package com.xiao.custom.rest.example;\n\nimport org.springframework.boot.SpringApplication;\nimport org.springframework.boo"
},
{
"path": "SpringBoot-Custom-Rest-Starter/SpringBoot-Custom-Rest-Example/src/main/java/com/xiao/custom/rest/example/log/impl/HttpLogServiceImpl.java",
"chars": 819,
"preview": "package com.xiao.custom.rest.example.log.impl;\n\nimport com.alibaba.fastjson.JSONObject;\nimport com.xiao.custom.rest.star"
},
{
"path": "SpringBoot-Custom-Rest-Starter/SpringBoot-Custom-Rest-Example/src/main/resources/application.yml",
"chars": 397,
"preview": "rest:\n # okhttp 配置\n okhttp:\n enable: false\n connection-timeout: 12000\n read-timeout: 30000\n write-timeout:"
},
{
"path": "SpringBoot-Custom-Rest-Starter/SpringBoot-Custom-Rest-Example/src/main/resources/logback-spring.xml",
"chars": 2637,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<configuration scan=\"true\">\n\n <!-- 控制台Appender -->\n <appender name=\"STDOUT\""
},
{
"path": "SpringBoot-Custom-Rest-Starter/SpringBoot-Custom-Rest-Example/src/test/java/com/xiao/custom/rest/example/RestTemplateStarterAppTest.java",
"chars": 387,
"preview": "package com.xiao.custom.rest.example;\n\nimport org.junit.runner.RunWith;\nimport org.springframework.boot.test.context.Spr"
},
{
"path": "SpringBoot-Custom-Rest-Starter/SpringBoot-Custom-Rest-Example/src/test/java/com/xiao/custom/rest/example/httpclient/HttpClientTest.java",
"chars": 885,
"preview": "package com.xiao.custom.rest.example.httpclient;\n\nimport com.xiao.custom.rest.example.RestTemplateStarterAppTest;\nimport"
},
{
"path": "SpringBoot-Custom-Rest-Starter/SpringBoot-Custom-Rest-Example/src/test/java/com/xiao/custom/rest/example/template/RestTemplateTest.java",
"chars": 544,
"preview": "package com.xiao.custom.rest.example.template;\n\nimport com.xiao.custom.rest.example.RestTemplateStarterAppTest;\nimport o"
},
{
"path": "SpringBoot-Custom-Rest-Starter/pom.xml",
"chars": 721,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project xmlns=\"http://maven.apache.org/POM/4.0.0\"\n xmlns:xsi=\"http://www"
},
{
"path": "SpringBoot-Stock-Demo/doc/bootstrap.sh",
"chars": 2493,
"preview": "#!/bin/bash\n## 加载配置,避免获取不到java_home \nsource /etc/profile\n\nSERVICE_HOME=/home/admin/services\nSERVICE_NAME=omni-basis-serv"
},
{
"path": "SpringBoot-Stock-Demo/doc/stock.sql",
"chars": 1217,
"preview": "CREATE TABLE `t_stock_demo`(\n `id` bigint(64) NOT NULL AUTO_INCREMENT,\n `product_no` varchar(64) NULL,\n `shop_code` v"
},
{
"path": "SpringBoot-Stock-Demo/doc/stock_demo_jmeter.jmx",
"chars": 49453,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<jmeterTestPlan version=\"1.2\" properties=\"5.0\" jmeter=\"5.1.1 r1855137\">\n <hashTr"
},
{
"path": "SpringBoot-Stock-Demo/pom.xml",
"chars": 5293,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project xmlns=\"http://maven.apache.org/POM/4.0.0\"\n xmlns:xsi=\"http://www"
},
{
"path": "SpringBoot-Stock-Demo/readme.md",
"chars": 2500,
"preview": "**Jmeter+Springboot+Redisson分布式锁并发订单操作(下单、取消单、完成单、加库存)**<br>\n涉及知识点:<br>\n > java+springboot+mybatis开发<br>\n > redis分布式"
},
{
"path": "SpringBoot-Stock-Demo/src/main/java/com/xiao/stock/demo/StockDemoApplication.java",
"chars": 710,
"preview": "package com.xiao.stock.demo;\n\nimport org.mybatis.spring.annotation.MapperScan;\nimport org.springframework.boot.SpringApp"
},
{
"path": "SpringBoot-Stock-Demo/src/main/java/com/xiao/stock/demo/common/StockOptTypeEnum.java",
"chars": 679,
"preview": "package com.xiao.stock.demo.common;\n\n/**\n * [简要描述]: 库存操作记录\n * [详细描述]:\n *\n * @author llxiao\n * @version 1.0, 2019/10/17 1"
},
{
"path": "SpringBoot-Stock-Demo/src/main/java/com/xiao/stock/demo/configure/DataSourceConfiguration.java",
"chars": 1237,
"preview": "package com.xiao.stock.demo.configure;\n\nimport com.zaxxer.hikari.HikariDataSource;\nimport org.springframework.beans.fact"
},
{
"path": "SpringBoot-Stock-Demo/src/main/java/com/xiao/stock/demo/configure/RedissonConfiguration.java",
"chars": 1740,
"preview": "package com.xiao.stock.demo.configure;\n\nimport org.redisson.Redisson;\nimport org.redisson.api.RedissonClient;\nimport org"
},
{
"path": "SpringBoot-Stock-Demo/src/main/java/com/xiao/stock/demo/entity/OrderDemo.java",
"chars": 1657,
"preview": "package com.xiao.stock.demo.entity;\n\nimport lombok.*;\n\nimport java.util.Date;\n\n/**\n * t_order_demo\n * Created by Mybatis"
},
{
"path": "SpringBoot-Stock-Demo/src/main/java/com/xiao/stock/demo/entity/StockChangeLodDemo.java",
"chars": 2445,
"preview": "package com.xiao.stock.demo.entity;\n\nimport lombok.*;\n\nimport java.util.Date;\n\n/**\n * t_stock_change_log_demo\n * Created"
},
{
"path": "SpringBoot-Stock-Demo/src/main/java/com/xiao/stock/demo/entity/StockDemo.java",
"chars": 1770,
"preview": "package com.xiao.stock.demo.entity;\n\nimport lombok.*;\n\nimport java.util.Date;\n\n/**\n * t_stock_demo\n * Created by Mybatis"
},
{
"path": "SpringBoot-Stock-Demo/src/main/java/com/xiao/stock/demo/mapper/OrderDemoMapper.java",
"chars": 1462,
"preview": "package com.xiao.stock.demo.mapper;\n\nimport com.xiao.stock.demo.entity.OrderDemo;\nimport org.apache.ibatis.annotations.P"
},
{
"path": "SpringBoot-Stock-Demo/src/main/java/com/xiao/stock/demo/mapper/StockChangeLodDemoMapper.java",
"chars": 1720,
"preview": "package com.xiao.stock.demo.mapper;\n\nimport com.xiao.stock.demo.entity.StockChangeLodDemo;\nimport org.apache.ibatis.anno"
},
{
"path": "SpringBoot-Stock-Demo/src/main/java/com/xiao/stock/demo/mapper/StockDemoMapper.java",
"chars": 1757,
"preview": "package com.xiao.stock.demo.mapper;\n\nimport com.xiao.stock.demo.entity.StockDemo;\nimport org.apache.ibatis.annotations.P"
},
{
"path": "SpringBoot-Stock-Demo/src/main/java/com/xiao/stock/demo/rest/StockRestService.java",
"chars": 4427,
"preview": "package com.xiao.stock.demo.rest;\n\nimport com.xiao.stock.demo.common.StockOptTypeEnum;\nimport com.xiao.stock.demo.entity"
},
{
"path": "SpringBoot-Stock-Demo/src/main/java/com/xiao/stock/demo/service/StockDemoService.java",
"chars": 997,
"preview": "package com.xiao.stock.demo.service;\n\nimport com.xiao.stock.demo.entity.OrderDemo;\nimport com.xiao.stock.demo.entity.Sto"
},
{
"path": "SpringBoot-Stock-Demo/src/main/java/com/xiao/stock/demo/service/impl/StockDemoServiceImpl.java",
"chars": 24325,
"preview": "package com.xiao.stock.demo.service.impl;/**\n * [简要描述]:\n * [详细描述]:\n *\n * @since JDK 1.8\n */\n\nimport com.xiao.stock.demo."
},
{
"path": "SpringBoot-Stock-Demo/src/main/java/com/xiao/stock/demo/util/OrderNoUtil.java",
"chars": 2412,
"preview": "package com.xiao.stock.demo.util;\n\nimport cn.hutool.core.lang.Snowflake;\nimport cn.hutool.core.net.NetUtil;\nimport cn.hu"
},
{
"path": "SpringBoot-Stock-Demo/src/main/java/com/xiao/stock/demo/util/StockUtil.java",
"chars": 748,
"preview": "package com.xiao.stock.demo.util;/**\n * [简要描述]:\n * [详细描述]:\n *\n * @since JDK 1.8\n */\n\n/**\n * [简要描述]:\n * [详细描述]:\n *\n * @au"
},
{
"path": "SpringBoot-Stock-Demo/src/main/resources/application.yml",
"chars": 617,
"preview": "spring:\n application:\n name: stock-demo\nserver:\n port: 7878\n ## tomcat 最大线程池配置\n tomcat:\n # 最大连接数\n max-conne"
},
{
"path": "SpringBoot-Stock-Demo/src/main/resources/com/xiao/stock/demo/mapper/OrderDemoMapper.xml",
"chars": 6907,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n<!DOCTYPE mapper PUBLIC \"-//mybatis.org//DTD Mapper 3.0//EN\" \"http://mybatis.org"
},
{
"path": "SpringBoot-Stock-Demo/src/main/resources/com/xiao/stock/demo/mapper/StockChangeLodDemoMapper.xml",
"chars": 10128,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n<!DOCTYPE mapper PUBLIC \"-//mybatis.org//DTD Mapper 3.0//EN\" \"http://mybatis.org"
},
{
"path": "SpringBoot-Stock-Demo/src/main/resources/com/xiao/stock/demo/mapper/StockDemoMapper.xml",
"chars": 8016,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n<!DOCTYPE mapper PUBLIC \"-//mybatis.org//DTD Mapper 3.0//EN\" \"http://mybatis.org"
},
{
"path": "SpringBoot-Stock-Demo/src/main/resources/logback-spring.xml",
"chars": 3038,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<configuration scan=\"true\">\n <!-- logback加载优先于application.yml文件,因此需要从bootstrap"
},
{
"path": "SpringCloud-Canal/doc/ServerRunningMonitor源码注解.md",
"chars": 3392,
"preview": "设计到主要知识点:\n 1. Zookeeper 临时节点创建\n 2. CAS 操作\n 3. MDC 线程安全的存放诊断日志的容器\n\n```html\npublic ServerRunningMonitor(){\n // 创建父节"
},
{
"path": "SpringCloud-Canal/pom.xml",
"chars": 1510,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project xmlns=\"http://maven.apache.org/POM/4.0.0\"\n xmlns:xsi=\"http://www"
},
{
"path": "SpringCloud-Canal/readme.md",
"chars": 4072,
"preview": "1. 本DEMO主要实现:Canal+disruptor+springboot,订阅mysql binlog日志,实现数据同步,比如缓存,ES等。<br>\n\n2. 组件简介:<br>\n [Canal](https://github.c"
},
{
"path": "SpringCloud-Canal/src/main/java/com/alibaba/canal/simple/ClientSample.java",
"chars": 5435,
"preview": "package com.alibaba.canal.simple;\n\nimport com.alibaba.otter.canal.client.CanalConnector;\nimport com.alibaba.otter.canal."
},
{
"path": "SpringCloud-Canal/src/main/java/com/xiao/springcloud/CanalSimpleApplication.java",
"chars": 472,
"preview": "package com.xiao.springcloud;\n\nimport org.springframework.boot.SpringApplication;\nimport org.springframework.boot.autoco"
},
{
"path": "SpringCloud-Canal/src/main/java/com/xiao/springcloud/canal/CanalClientService.java",
"chars": 9431,
"preview": "package com.xiao.springcloud.canal;\n\nimport cn.hutool.core.collection.CollectionUtil;\nimport com.alibaba.otter.canal.cli"
},
{
"path": "SpringCloud-Canal/src/main/java/com/xiao/springcloud/canal/CanalConfig.java",
"chars": 977,
"preview": "package com.xiao.springcloud.canal;\n\nimport lombok.Data;\nimport org.springframework.beans.factory.annotation.Value;\nimpo"
},
{
"path": "SpringCloud-Canal/src/main/java/com/xiao/springcloud/disruptor/DataEvent.java",
"chars": 253,
"preview": "package com.xiao.springcloud.disruptor;\n\nimport lombok.Data;\n\n/**\n * [简要描述]: 定义事件\n * [详细描述]:通过 Disruptor 进行交换的数据类型\n *\n *"
},
{
"path": "SpringCloud-Canal/src/main/java/com/xiao/springcloud/disruptor/DataEventFactory.java",
"chars": 581,
"preview": "package com.xiao.springcloud.disruptor;\n\nimport com.lmax.disruptor.EventFactory;\n\n/**\n * [简要描述]: 定义事件工厂\n * [详细描述]: 定义了如何"
},
{
"path": "SpringCloud-Canal/src/main/java/com/xiao/springcloud/disruptor/DisruptorConsumer.java",
"chars": 2152,
"preview": "package com.xiao.springcloud.disruptor;\n\nimport com.lmax.disruptor.EventHandler;\nimport com.lmax.disruptor.WorkHandler;\n"
},
{
"path": "SpringCloud-Canal/src/main/java/com/xiao/springcloud/disruptor/DisruptorExceptionHandler.java",
"chars": 1357,
"preview": "package com.xiao.springcloud.disruptor;\n\nimport com.lmax.disruptor.ExceptionHandler;\nimport com.xiao.springcloud.disrupt"
},
{
"path": "SpringCloud-Canal/src/main/java/com/xiao/springcloud/disruptor/DisruptorProducer.java",
"chars": 5178,
"preview": "package com.xiao.springcloud.disruptor;\n\nimport cn.hutool.core.collection.CollectionUtil;\nimport com.lmax.disruptor.Even"
},
{
"path": "SpringCloud-Canal/src/main/java/com/xiao/springcloud/disruptor/DisruptorThreadFactory.java",
"chars": 1724,
"preview": "package com.xiao.springcloud.disruptor;\n\nimport java.util.concurrent.ThreadFactory;\nimport java.util.concurrent.atomic.A"
},
{
"path": "SpringCloud-Canal/src/main/java/com/xiao/springcloud/disruptor/TableData.java",
"chars": 303,
"preview": "package com.xiao.springcloud.disruptor;\n\nimport lombok.Data;\n\n/**\n * [简要描述]:\n * [详细描述]:\n *\n * @author llxiao\n * @version"
},
{
"path": "SpringCloud-Canal/src/main/java/com/xiao/springcloud/disruptor/service/DisruptorService.java",
"chars": 413,
"preview": "package com.xiao.springcloud.disruptor.service;\n\nimport com.xiao.springcloud.disruptor.TableData;\n\n/**\n * [简要描述]: 异步队列服务"
},
{
"path": "SpringCloud-Canal/src/main/java/com/xiao/springcloud/disruptor/service/impl/DisruptorServiceImpl.java",
"chars": 1347,
"preview": "package com.xiao.springcloud.disruptor.service.impl;\n\nimport com.xiao.springcloud.disruptor.TableData;\nimport com.xiao.s"
},
{
"path": "SpringCloud-Canal/src/main/resources/application.properties",
"chars": 341,
"preview": "### canal config\n#是否集群,暂且支持zk的集群\nspring.canal.server.cluster=false\n #canal服务\nspring.canal.server.hostName=192.168.206.2"
},
{
"path": "SpringCloud-Common/README.md",
"chars": 102,
"preview": "公共包:<br>\n提供一些公共的组件:\n>feign的一些公共配置和一些坑的解决:requestmapping问题、服务内部交互异常和数据传输处理<br>\n>日志记录注解<br>\n>参数校验注解<br>\n"
},
{
"path": "SpringCloud-Common/pom.xml",
"chars": 3067,
"preview": "<project xmlns=\"http://maven.apache.org/POM/4.0.0\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n xsi:sc"
},
{
"path": "SpringCloud-Common/script/auto_deploy.sh",
"chars": 1274,
"preview": "#!/bin/bash\n\n## jenkins 自动部署脚本 jekins 项目 Post Steps设置 启动该脚本,配置如下:\n# BUILD_ID=DONTKILLME\n# bash /home/omni-services/r"
},
{
"path": "SpringCloud-Common/script/bootstrap.sh",
"chars": 5200,
"preview": "#!/bin/bash\n## 加载配置,避免获取不到java_home \nsource /etc/profile\n\nSERVICE_NAME=appname\nSERVICE_HOME=/home/admin/services\nPROG=$S"
},
{
"path": "SpringCloud-Common/script/remote_deploy.sh",
"chars": 1591,
"preview": "#!/bin/bash\n\n## jenkins 自动部远程署脚本,需要配置两个服务器之间免密登录\n## 免登陆配置参考:https://blog.csdn.net/u011186019/article/details/51737760?ut"
},
{
"path": "SpringCloud-Common/src/main/java/com/xiao/springcloud/demo/common/SkywalkingService.java",
"chars": 312,
"preview": "/*\n * Winner \n * 文件名 :SkywalkingService.java\n * 创建人 :llxiao\n * 创建时间:2018年3月29日\n*/\n\npackage com.xiao.springcloud.demo.c"
},
{
"path": "SpringCloud-Common/src/main/java/com/xiao/springcloud/demo/common/cache/README.md",
"chars": 759,
"preview": "1. redisson yml配置加载,支持单机、集群、云托管、sentinel模式<br>\n2. 配置文件中添加配置文件即可开启redisson的配置:<br>\n`` redisson.fileName: redission-cluste"
},
{
"path": "SpringCloud-Common/src/main/java/com/xiao/springcloud/demo/common/cache/code/FastJsonCodec.java",
"chars": 3663,
"preview": "package com.xiao.springcloud.demo.common.cache.code;\n\nimport com.alibaba.fastjson.JSON;\nimport com.alibaba.fastjson.seri"
},
{
"path": "SpringCloud-Common/src/main/java/com/xiao/springcloud/demo/common/cache/code/SerializerObject.java",
"chars": 449,
"preview": "package com.xiao.springcloud.demo.common.cache.code;\n\nimport lombok.AllArgsConstructor;\nimport lombok.Builder;\nimport lo"
},
{
"path": "SpringCloud-Common/src/main/java/com/xiao/springcloud/demo/common/cache/conf/RedissonConfig.java",
"chars": 2568,
"preview": "package com.xiao.springcloud.demo.common.cache.conf;\n\nimport com.xiao.springcloud.demo.common.cache.code.FastJsonCodec;\n"
},
{
"path": "SpringCloud-Common/src/main/java/com/xiao/springcloud/demo/common/cache/dto/EntryDto.java",
"chars": 257,
"preview": "package com.xiao.springcloud.demo.common.cache.dto;\n\nimport lombok.Data;\n\n/**\n * [简要描述]:\n * [详细描述]:\n *\n * @author llxiao"
},
{
"path": "SpringCloud-Common/src/main/java/com/xiao/springcloud/demo/common/cache/local/SpringGuavaCacheConfig.java",
"chars": 926,
"preview": "package com.xiao.springcloud.demo.common.cache.local;\n\nimport com.google.common.cache.CacheBuilder;\nimport org.springfra"
},
{
"path": "SpringCloud-Common/src/main/java/com/xiao/springcloud/demo/common/cache/service/CacheService.java",
"chars": 4444,
"preview": "package com.xiao.springcloud.demo.common.cache.service;\n\nimport com.xiao.springcloud.demo.common.cache.dto.EntryDto;\n\nim"
},
{
"path": "SpringCloud-Common/src/main/java/com/xiao/springcloud/demo/common/cache/service/DistributedService.java",
"chars": 5317,
"preview": "package com.xiao.springcloud.demo.common.cache.service;\n\nimport org.redisson.api.RCountDownLatch;\nimport org.redisson.ap"
},
{
"path": "SpringCloud-Common/src/main/java/com/xiao/springcloud/demo/common/cache/service/impl/CacheServiceRedisImpl.java",
"chars": 8748,
"preview": "package com.xiao.springcloud.demo.common.cache.service.impl;\n\nimport cn.hutool.core.collection.CollectionUtil;\nimport co"
},
{
"path": "SpringCloud-Common/src/main/java/com/xiao/springcloud/demo/common/cache/service/impl/DistributedServiceRedissonImpl.java",
"chars": 10347,
"preview": "package com.xiao.springcloud.demo.common.cache.service.impl;\n\nimport com.xiao.springcloud.demo.common.cache.conf.Redisso"
},
{
"path": "SpringCloud-Common/src/main/java/com/xiao/springcloud/demo/common/conf/FeignConfiguration.java",
"chars": 1694,
"preview": "package com.xiao.springcloud.demo.common.conf;\n\nimport feign.Feign;\nimport org.springframework.boot.autoconfigure.condit"
},
{
"path": "SpringCloud-Common/src/main/java/com/xiao/springcloud/demo/common/disruptor/DataEventFactory.java",
"chars": 660,
"preview": "package com.xiao.springcloud.demo.common.disruptor;\n\nimport com.lmax.disruptor.EventFactory;\nimport com.xiao.springcloud"
},
{
"path": "SpringCloud-Common/src/main/java/com/xiao/springcloud/demo/common/disruptor/DisruptorConsumer.java",
"chars": 2247,
"preview": "package com.xiao.springcloud.demo.common.disruptor;\n\nimport com.lmax.disruptor.EventHandler;\nimport com.lmax.disruptor.W"
},
{
"path": "SpringCloud-Common/src/main/java/com/xiao/springcloud/demo/common/disruptor/DisruptorExceptionHandler.java",
"chars": 1452,
"preview": "package com.xiao.springcloud.demo.common.disruptor;\n\nimport com.lmax.disruptor.ExceptionHandler;\nimport com.xiao.springc"
},
{
"path": "SpringCloud-Common/src/main/java/com/xiao/springcloud/demo/common/disruptor/DisruptorProducer.java",
"chars": 5349,
"preview": "package com.xiao.springcloud.demo.common.disruptor;\n\nimport com.lmax.disruptor.BlockingWaitStrategy;\nimport com.lmax.dis"
},
{
"path": "SpringCloud-Common/src/main/java/com/xiao/springcloud/demo/common/disruptor/DisruptorThreadFactory.java",
"chars": 1736,
"preview": "package com.xiao.springcloud.demo.common.disruptor;\n\nimport java.util.concurrent.ThreadFactory;\nimport java.util.concurr"
},
{
"path": "SpringCloud-Common/src/main/java/com/xiao/springcloud/demo/common/disruptor/data/BasisData.java",
"chars": 309,
"preview": "package com.xiao.springcloud.demo.common.disruptor.data;\n\nimport lombok.Getter;\nimport lombok.Setter;\n\n/**\n * [简要描述]: 数据"
},
{
"path": "SpringCloud-Common/src/main/java/com/xiao/springcloud/demo/common/disruptor/data/DataEvent.java",
"chars": 302,
"preview": "package com.xiao.springcloud.demo.common.disruptor.data;\n\nimport lombok.Data;\n\n/**\n * [简要描述]: 定义事件\n * [详细描述]:通过 Disrupto"
},
{
"path": "SpringCloud-Common/src/main/java/com/xiao/springcloud/demo/common/disruptor/data/EventEnum.java",
"chars": 404,
"preview": "package com.xiao.springcloud.demo.common.disruptor.data;\n\n/**\n * [简要描述]: 事件类型\n * [详细描述]:\n *\n * @author llxiao\n * @versio"
},
{
"path": "SpringCloud-Common/src/main/java/com/xiao/springcloud/demo/common/disruptor/event/ServiceEvent.java",
"chars": 576,
"preview": "package com.xiao.springcloud.demo.common.disruptor.event;\n\nimport lombok.Getter;\nimport lombok.Setter;\nimport org.spring"
},
{
"path": "SpringCloud-Common/src/main/java/com/xiao/springcloud/demo/common/disruptor/readme.md",
"chars": 2204,
"preview": "1. Disruptor: 开源的并发框架,能够在无锁的情况下实现网络的Queue并发操作,其他更多[详情介绍](http://ifeve.com/disruptor/)\n2. 本common包封装的``Disruptor``与``Spri"
},
{
"path": "SpringCloud-Common/src/main/java/com/xiao/springcloud/demo/common/disruptor/service/DisruptorService.java",
"chars": 437,
"preview": "package com.xiao.springcloud.demo.common.disruptor.service;\n\nimport com.xiao.springcloud.demo.common.disruptor.data.Basi"
},
{
"path": "SpringCloud-Common/src/main/java/com/xiao/springcloud/demo/common/disruptor/service/impl/DisruptorServiceImpl.java",
"chars": 1015,
"preview": "package com.xiao.springcloud.demo.common.disruptor.service.impl;\n\nimport com.xiao.springcloud.demo.common.disruptor.data"
},
{
"path": "SpringCloud-Common/src/main/java/com/xiao/springcloud/demo/common/eureka/LoadBalancerAspect.java",
"chars": 2720,
"preview": "package com.xiao.springcloud.demo.common.eureka;\n\nimport com.netflix.loadbalancer.Server;\nimport com.netflix.loadbalance"
},
{
"path": "SpringCloud-Common/src/main/java/com/xiao/springcloud/demo/common/exception/AbstractServiceException.java",
"chars": 249,
"preview": "package com.xiao.springcloud.demo.common.exception;\n\n/**\n * 异常规范接口\n * @author zhdong\n *\n */\npublic interface AbstractSer"
},
{
"path": "SpringCloud-Common/src/main/java/com/xiao/springcloud/demo/common/exception/CommonException.java",
"chars": 1339,
"preview": "package com.xiao.springcloud.demo.common.exception;\n\n\n/**\n * 异常公共类\n *\n * @author zhdong\n * @date 2018/8/1\n */\npublic cla"
},
{
"path": "SpringCloud-Common/src/main/java/com/xiao/springcloud/demo/common/exception/CommonExceptionEnum.java",
"chars": 806,
"preview": "package com.xiao.springcloud.demo.common.exception;\n\n/**\n * 异常公共类\n *\n * @author zhdong\n */\npublic enum CommonExceptionEn"
},
{
"path": "SpringCloud-Common/src/main/java/com/xiao/springcloud/demo/common/forkjoin/ForkjoinConfiguration.java",
"chars": 1103,
"preview": "package com.xiao.springcloud.demo.common.forkjoin;\n\nimport org.springframework.beans.factory.DisposableBean;\nimport org."
},
{
"path": "SpringCloud-Common/src/main/java/com/xiao/springcloud/demo/common/forkjoin/ForkjoinService.java",
"chars": 746,
"preview": "package com.xiao.springcloud.demo.common.forkjoin;\n\nimport com.xiao.springcloud.demo.common.forkjoin.task.ForkjoinTask;\n"
},
{
"path": "SpringCloud-Common/src/main/java/com/xiao/springcloud/demo/common/forkjoin/task/ForkjoinTask.java",
"chars": 1767,
"preview": "package com.xiao.springcloud.demo.common.forkjoin.task;\n\nimport java.util.List;\nimport java.util.concurrent.CopyOnWriteA"
},
{
"path": "SpringCloud-Common/src/main/java/com/xiao/springcloud/demo/common/gloab/interceptor/README.md",
"chars": 233,
"preview": "springcloud fegin内部交互异常统一处理\n\n原理:\n1. 服务端抛出统一异常,由DefaultControllerAdvice方法捕捉封装,期需要将http response的响应头设置为500\n2. 客户端自定义解码器,对异"
},
{
"path": "SpringCloud-Common/src/main/java/com/xiao/springcloud/demo/common/gloab/interceptor/advice/DefaultControllerAdvice.java",
"chars": 4967,
"preview": "package com.xiao.springcloud.demo.common.gloab.interceptor.advice;\n\nimport com.fasterxml.jackson.databind.ObjectMapper;\n"
},
{
"path": "SpringCloud-Common/src/main/java/com/xiao/springcloud/demo/common/gloab/interceptor/config/FastjsonConfig.java",
"chars": 3523,
"preview": "package com.xiao.springcloud.demo.common.gloab.interceptor.config;\n\nimport com.alibaba.fastjson.parser.ParserConfig;\nimp"
},
{
"path": "SpringCloud-Common/src/main/java/com/xiao/springcloud/demo/common/gloab/interceptor/config/FeignConfig.java",
"chars": 1390,
"preview": "package com.xiao.springcloud.demo.common.gloab.interceptor.config;\n\nimport com.xiao.springcloud.demo.common.gloab.interc"
},
{
"path": "SpringCloud-Common/src/main/java/com/xiao/springcloud/demo/common/gloab/interceptor/fegin/CommonFeignErrorDecoder.java",
"chars": 2279,
"preview": "package com.xiao.springcloud.demo.common.gloab.interceptor.fegin;\n\nimport cn.hutool.core.io.IoUtil;\nimport com.alibaba.f"
},
{
"path": "SpringCloud-Common/src/main/java/com/xiao/springcloud/demo/common/gloab/interceptor/fegin/CommonFeignHeaderProcessInterceptor.java",
"chars": 1216,
"preview": "package com.xiao.springcloud.demo.common.gloab.interceptor.fegin;\n\nimport feign.RequestInterceptor;\nimport feign.Request"
},
{
"path": "SpringCloud-Common/src/main/java/com/xiao/springcloud/demo/common/gloab/interceptor/fegin/DefaultCommonErrorAttributes.java",
"chars": 801,
"preview": "package com.xiao.springcloud.demo.common.gloab.interceptor.fegin;\n\nimport cn.hutool.core.bean.BeanUtil;\nimport com.xiao."
},
{
"path": "SpringCloud-Common/src/main/java/com/xiao/springcloud/demo/common/gloab/interceptor/fegin/FeignBeanFactoryPostProcessor.java",
"chars": 1405,
"preview": "package com.xiao.springcloud.demo.common.gloab.interceptor.fegin;\n\nimport org.springframework.beans.BeansException;\nimpo"
},
{
"path": "SpringCloud-Common/src/main/java/com/xiao/springcloud/demo/common/gloab/interceptor/fegin/HttpContext.java",
"chars": 964,
"preview": "package com.xiao.springcloud.demo.common.gloab.interceptor.fegin;\n\nimport org.springframework.web.context.request.Reques"
},
{
"path": "SpringCloud-Common/src/main/java/com/xiao/springcloud/demo/common/gloab/response/ErrorResponseData.java",
"chars": 563,
"preview": "package com.xiao.springcloud.demo.common.gloab.response;\n\n\n/**\n * 请求失败的返回\n *\n * @author zhdong\n * @Date 2018/8/1\n */\npub"
},
{
"path": "SpringCloud-Common/src/main/java/com/xiao/springcloud/demo/common/gloab/response/ResponseData.java",
"chars": 2266,
"preview": "package com.xiao.springcloud.demo.common.gloab.response;\n\n\nimport java.io.Serializable;\n\n/**\n * 返回给前台的通用包装\n *\n * @author"
},
{
"path": "SpringCloud-Common/src/main/java/com/xiao/springcloud/demo/common/gloab/response/SuccessResponseData.java",
"chars": 476,
"preview": "package com.xiao.springcloud.demo.common.gloab.response;\n\n/**\n * 请求成功的返回\n *\n * @author zhdong\n * @Date 2018/8/1\n */\npubl"
},
{
"path": "SpringCloud-Common/src/main/java/com/xiao/springcloud/demo/common/logaspect/LogAnnotation.java",
"chars": 693,
"preview": "package com.xiao.springcloud.demo.common.logaspect;\n\nimport java.lang.annotation.*;\n\nimport static java.lang.annotation."
},
{
"path": "SpringCloud-Common/src/main/java/com/xiao/springcloud/demo/common/logaspect/LogAspect.java",
"chars": 5673,
"preview": "package com.xiao.springcloud.demo.common.logaspect;\n\nimport com.alibaba.fastjson.JSON;\nimport com.xiao.springcloud.demo."
},
{
"path": "SpringCloud-Common/src/main/java/com/xiao/springcloud/demo/common/logaspect/LogInfo.java",
"chars": 1407,
"preview": "package com.xiao.springcloud.demo.common.logaspect;\n\nimport com.alibaba.fastjson.annotation.JSONField;\nimport lombok.Dat"
},
{
"path": "SpringCloud-Common/src/main/java/com/xiao/springcloud/demo/common/logaspect/LogService.java",
"chars": 887,
"preview": "package com.xiao.springcloud.demo.common.logaspect;\n\n/**\n * [简要描述]: 日志服务 <br/>\n * [详细描述]:\n *\n * @author llxiao\n * @versi"
},
{
"path": "SpringCloud-Common/src/main/java/com/xiao/springcloud/demo/common/logaspect/README.md",
"chars": 266,
"preview": "1. 在需要记录日志的方法上添加 ``@LogAnnotation`` 注解即可\n2. 实现原理:<br>\n > 主要利用annotation注解+aop方式 <br>\n > 具体实现见:``LogAspect``类 <br>\n3."
},
{
"path": "SpringCloud-Common/src/main/java/com/xiao/springcloud/demo/common/logaspect/Slf4jLogService.java",
"chars": 1305,
"preview": "package com.xiao.springcloud.demo.common.logaspect;\n\nimport lombok.extern.slf4j.Slf4j;\nimport org.springframework.stereo"
},
{
"path": "SpringCloud-Common/src/main/java/com/xiao/springcloud/demo/common/sign/SignConstants.java",
"chars": 536,
"preview": "package com.xiao.springcloud.demo.common.sign;\n\n/**\n * [简要描述]:\n * [详细描述]:\n *\n * @author xiaolinlin\n * @version 1.0, 2020"
},
{
"path": "SpringCloud-Common/src/main/java/com/xiao/springcloud/demo/common/sign/annotation/DisposeSign.java",
"chars": 518,
"preview": "package com.xiao.springcloud.demo.common.sign.annotation;\n\nimport java.lang.annotation.ElementType;\nimport java.lang.ann"
},
{
"path": "SpringCloud-Common/src/main/java/com/xiao/springcloud/demo/common/sign/annotation/DisposeSignService.java",
"chars": 3964,
"preview": "package com.xiao.springcloud.demo.common.sign.annotation;\n\nimport com.xiao.springcloud.demo.common.exception.CommonExcep"
},
{
"path": "SpringCloud-Common/src/main/java/com/xiao/springcloud/demo/common/sign/filter/WrapperRequestFilter.java",
"chars": 5613,
"preview": "package com.xiao.springcloud.demo.common.sign.filter;\n\nimport com.xiao.springcloud.demo.common.sign.SignConstants;\nimpor"
},
{
"path": "SpringCloud-Common/src/main/java/com/xiao/springcloud/demo/common/sign/readme.md",
"chars": 715,
"preview": "提供生成签名串工具类<br>\n依赖包:\n```html\ncommons-lang3\ncommons-collections\ncommons-codec\nslf4j-api\nfastjson\n```\n使用方法方法:<br>\n```html\nS"
},
{
"path": "SpringCloud-Common/src/main/java/com/xiao/springcloud/demo/common/sign/request/BodyReaderHttpServletRequestWrapper.java",
"chars": 3581,
"preview": "package com.xiao.springcloud.demo.common.sign.request;\n\nimport com.xiao.springcloud.demo.common.sign.SignConstants;\nimpo"
},
{
"path": "SpringCloud-Common/src/main/java/com/xiao/springcloud/demo/common/sign/service/AppManagerService.java",
"chars": 835,
"preview": "package com.xiao.springcloud.demo.common.sign.service;\n\n/**\n * [简要描述]: 第三方App权限管理\n * [详细描述]:\n *\n * @author xiaolinlin\n *"
},
{
"path": "SpringCloud-Common/src/main/java/com/xiao/springcloud/demo/common/sign/service/impl/AppManagerServiceConfigImpl.java",
"chars": 2740,
"preview": "package com.xiao.springcloud.demo.common.sign.service.impl;\n\nimport com.xiao.springcloud.demo.common.sign.service.AppMan"
},
{
"path": "SpringCloud-Common/src/main/java/com/xiao/springcloud/demo/common/sign/util/AsciiSortUtil.java",
"chars": 2351,
"preview": "package com.xiao.springcloud.demo.common.sign.util;\n\nimport org.apache.commons.lang3.StringUtils;\n\n/**\n * [简要描述]: ascii码"
},
{
"path": "SpringCloud-Common/src/main/java/com/xiao/springcloud/demo/common/sign/util/HttpRequestUtils.java",
"chars": 3923,
"preview": "package com.xiao.springcloud.demo.common.sign.util;\n\nimport com.alibaba.fastjson.JSONObject;\nimport com.xiao.springcloud"
},
{
"path": "SpringCloud-Common/src/main/java/com/xiao/springcloud/demo/common/sign/util/SignUtil.java",
"chars": 5125,
"preview": "package com.xiao.springcloud.demo.common.sign.util;\n\nimport com.alibaba.fastjson.JSONException;\nimport com.alibaba.fastj"
},
{
"path": "SpringCloud-Common/src/main/java/com/xiao/springcloud/demo/common/util/CodeFormatConstants.java",
"chars": 693,
"preview": "/*\n * Smile Software Technologies Co., Ltd. Copyright 2015-2017, All rights reserved.\n * 文件名 :CodeForamtConstants.java\n"
},
{
"path": "SpringCloud-Common/src/main/java/com/xiao/springcloud/demo/common/util/DateUtils.java",
"chars": 1116,
"preview": "package com.xiao.springcloud.demo.common.util;\n\nimport java.util.Calendar;\nimport java.util.Date;\n\n/**\n * [简要描述]: 日期工具类\n"
},
{
"path": "SpringCloud-Common/src/main/java/com/xiao/springcloud/demo/common/util/ListPageUtil.java",
"chars": 4251,
"preview": "package com.xiao.springcloud.demo.common.util;\n\nimport java.util.ArrayList;\nimport java.util.List;\nimport java.util.conc"
},
{
"path": "SpringCloud-Common/src/main/java/com/xiao/springcloud/demo/common/util/StringLengthUtils.java",
"chars": 5433,
"preview": "package com.xiao.springcloud.demo.common.util;\n\nimport lombok.extern.slf4j.Slf4j;\nimport org.apache.commons.lang3.String"
},
{
"path": "SpringCloud-Common/src/main/java/com/xiao/springcloud/demo/common/util/encode/AESEncryption.java",
"chars": 4142,
"preview": "/*\n * Smile Software Technologies Co., Ltd. Copyright 2015-2017, All rights reserved.\n * 文件名 :AESEncryption.java\n * 创建人"
},
{
"path": "SpringCloud-Common/src/main/java/com/xiao/springcloud/demo/common/util/encode/AESType.java",
"chars": 669,
"preview": "/*\n * Smile Software Technologies Co., Ltd. Copyright 2015-2017, All rights reserved.\n * 文件名 :AESType.java\n * 创建人 :xia"
},
{
"path": "SpringCloud-Common/src/main/java/com/xiao/springcloud/demo/common/util/encode/BinaryHelper.java",
"chars": 1581,
"preview": "/*\n * Smile Software Technologies Co., Ltd. Copyright 2015-2017, All rights reserved.\n * 文件名 :BinaryHelper.java\n * 创建人 "
},
{
"path": "SpringCloud-Common/src/main/java/com/xiao/springcloud/demo/common/util/encode/ByteUtils.java",
"chars": 1430,
"preview": "/*\n * Smile Software Technologies Co., Ltd. Copyright 2015-2017, All rights reserved.\n * 文件名 :ByteUtils.java\n * 创建人 :x"
},
{
"path": "SpringCloud-Common/src/main/java/com/xiao/springcloud/demo/common/util/encode/HMACUtil.java",
"chars": 2636,
"preview": "/*\n * Smile Software Technologies Co., Ltd. Copyright 2015-2017, All rights reserved.\n * 文件名 :HMACUtil.java\n * 创建人 :xi"
},
{
"path": "SpringCloud-Common/src/main/java/com/xiao/springcloud/demo/common/util/encode/Md5DigestUtil.java",
"chars": 2354,
"preview": "/*\n * Smile Software Technologies Co., Ltd. Copyright 2015-2017, All rights reserved.\n * 文件名 :Md5DigestUtil.java\n * 创建人"
},
{
"path": "SpringCloud-Common/src/main/java/com/xiao/springcloud/demo/common/util/image/ImageDHashUtil.java",
"chars": 3343,
"preview": "package com.xiao.springcloud.demo.common.util.image;\n\nimport javax.imageio.ImageIO;\nimport java.awt.*;\nimport java.awt.i"
},
{
"path": "SpringCloud-Common/src/main/java/com/xiao/springcloud/demo/common/util/image/ImagePHashUtil.java",
"chars": 8998,
"preview": "package com.xiao.springcloud.demo.common.util.image;\n\nimport lombok.extern.slf4j.Slf4j;\nimport org.apache.commons.lang3."
},
{
"path": "SpringCloud-Common/src/main/java/com/xiao/springcloud/demo/common/validator/CodePrefix.java",
"chars": 491,
"preview": "package com.xiao.springcloud.demo.common.validator;\n\nimport java.lang.annotation.Retention;\nimport java.lang.annotation."
},
{
"path": "SpringCloud-Common/src/main/java/com/xiao/springcloud/demo/common/validator/ParamAspect.java",
"chars": 1013,
"preview": "package com.xiao.springcloud.demo.common.validator;\n\nimport org.aspectj.lang.ProceedingJoinPoint;\nimport org.aspectj.lan"
},
{
"path": "SpringCloud-Common/src/main/java/com/xiao/springcloud/demo/common/validator/ParamValidator.java",
"chars": 3817,
"preview": "/*\n * Winner\n * 文件名 :Validator.java\n * 创建人 :llxiao\n * 创建时间:2017年12月27日\n */\n\npackage com.xiao.springcloud.demo.common.v"
},
{
"path": "SpringCloud-Common/src/main/java/com/xiao/springcloud/demo/common/validator/ParamVerify.java",
"chars": 725,
"preview": "/*\n * Winner \n * 文件名 :ParamVerify.java\n * 创建人 :llxiao\n * 创建时间:2017年12月27日\n*/\n\npackage com.xiao.springcloud.demo.common"
},
{
"path": "SpringCloud-Common/src/main/java/com/xiao/springcloud/demo/common/validator/Validator.java",
"chars": 516,
"preview": "package com.xiao.springcloud.demo.common.validator;\n\nimport java.lang.annotation.*;\n\nimport static java.lang.annotation."
},
{
"path": "SpringCloud-Common/src/main/java/com/xiao/springcloud/demo/common/validator/VerifyConstants.java",
"chars": 1224,
"preview": "/*\n * Winner\n * 文件名 :VerifyConstants.java\n * 创建人 :llxiao\n * 创建时间:2017年12月27日\n */\n\npackage com.xiao.springcloud.demo.co"
},
{
"path": "SpringCloud-ConfigCenter/Readme.txt",
"chars": 617,
"preview": "配置中心\r\n\r\n\r\n仓库中的配置文件会被转换成web接口,访问可以参照以下的规则:\r\n\r\n/{application}/{profile}[/{label}]\r\n/{application}-{profile}.yml\r\n/{label}/"
},
{
"path": "SpringCloud-ConfigCenter/pom.xml",
"chars": 1986,
"preview": "<project xmlns=\"http://maven.apache.org/POM/4.0.0\"\r\n\txmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\r\n\txsi:schemaL"
},
{
"path": "SpringCloud-ConfigCenter/src/main/java/com/xiao/springcloud/configure/ConfigureApplication.java",
"chars": 778,
"preview": "/*\r\n * Winner \r\n * 文件名 :ConfigureApplication.java\r\n * 创建人 :llxiao\r\n * 创建时间:2018年8月9日\r\n*/\r\n\r\npackage com.xiao.springclo"
},
{
"path": "SpringCloud-ConfigCenter/src/main/resources/application.yml",
"chars": 1218,
"preview": "server:\r\n port: 1110\r\nspring: \r\n application:\r\n name: config-server\r\n #数据库配置\r\n #datasource: \r\n #"
},
{
"path": "SpringCloud-Configure/README.txt",
"chars": 52,
"preview": "配置中心配置文件放置\r\n可按模块建文件夹放置\r\ndemo中放了consumer的配置和eureka的配置"
},
{
"path": "SpringCloud-Configure/consumer/springcloud-dev.properties",
"chars": 36,
"preview": "springcloud.configure.test=hello-dev"
},
{
"path": "SpringCloud-Configure/consumer/springcloud-dev.yml",
"chars": 0,
"preview": ""
},
{
"path": "SpringCloud-Configure/consumer/springcloud-prod.properties",
"chars": 37,
"preview": "springcloud.configure.test=hello-prod"
},
{
"path": "SpringCloud-Configure/consumer/springcloud-prod.yml",
"chars": 0,
"preview": ""
},
{
"path": "SpringCloud-Configure/consumer/springcloud-test.properties",
"chars": 0,
"preview": ""
},
{
"path": "SpringCloud-Configure/consumer/springcloud-test.yml",
"chars": 37,
"preview": "springcloud.configure.test=hello-test"
},
{
"path": "SpringCloud-Configure/eureka-server/eureka-server-dev.properties",
"chars": 0,
"preview": ""
},
{
"path": "SpringCloud-Configure/eureka-server/eureka-server-dev.yml",
"chars": 705,
"preview": "eureka:\n #集群配置\n #cluster:\n #node1: localhost:1110\n #node2: localhost:1109\n #node3: localhost:110"
},
{
"path": "SpringCloud-Configure/eureka-server/eureka-server-test.properties",
"chars": 0,
"preview": ""
},
{
"path": "SpringCloud-Configure/eureka-server/eureka-server-test.yml",
"chars": 0,
"preview": ""
},
{
"path": "SpringCloud-Configure/pom.xml",
"chars": 494,
"preview": "<project xmlns=\"http://maven.apache.org/POM/4.0.0\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xsi:schemaLocat"
},
{
"path": "SpringCloud-Configure/redisson/redission-dev.yml",
"chars": 977,
"preview": "# 线程池数量,默认值: 当前处理核数量 * 2\n##threads: 0\n# Netty线程池数量,默认值: 当前处理核数量 * 2\n##nettyThreads: 0\n# Redisson的对象编码类是用于将对象进行序列化和反序列化,默"
},
{
"path": "SpringCloud-Configure/redisson/redission-sentinel-dev.yml",
"chars": 1094,
"preview": "# 线程池数量,默认值: 当前处理核数量 * 2\n##threads: 0\n# Netty线程池数量,默认值: 当前处理核数量 * 2\n##nettyThreads: 0\n# Redisson的对象编码类是用于将对象进行序列化和反序列化,默"
},
{
"path": "SpringCloud-Configure/redisson/redisson-cloud.yml",
"chars": 1289,
"preview": "# 线程池数量,默认值: 当前处理核数量 * 2\n##threads: 0\n# Netty线程池数量,默认值: 当前处理核数量 * 2\n##nettyThreads: 0\n# Redisson的对象编码类是用于将对象进行序列化和反序列化,默"
},
{
"path": "SpringCloud-Configure/redisson/redisson-cluster-dev.yml",
"chars": 2011,
"preview": "# 线程池数量,默认值: 当前处理核数量 * 2\n##threads: 0\n# Netty线程池数量,默认值: 当前处理核数量 * 2\n##nettyThreads: 0\n# Redisson的对象编码类是用于将对象进行序列化和反序列化,默"
},
{
"path": "SpringCloud-Configure/redisson/redisson-cluster-test.yml",
"chars": 2010,
"preview": "# 线程池数量,默认值: 当前处理核数量 * 2\n##threads: 0\n# Netty线程池数量,默认值: 当前处理核数量 * 2\n##nettyThreads: 0\n# Redisson的对象编码类是用于将对象进行序列化和反序列化,默"
},
{
"path": "SpringCloud-Consumer/pom.xml",
"chars": 3349,
"preview": "<project xmlns=\"http://maven.apache.org/POM/4.0.0\"\r\n\txmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\r\n\txsi:schemaL"
},
{
"path": "SpringCloud-Consumer/src/main/java/com/xiao/skywalking/consumer/ConsumerApp.java",
"chars": 1289,
"preview": "/*\r\n * Winner \r\n * 文件名 :ConsumerApp.java\r\n * 创建人 :llxiao\r\n * 创建时间:2018年3月30日\r\n*/\r\n\r\npackage com.xiao.skywalking.consum"
}
]
// ... and 542 more files (download for full content)
About this extraction
This page contains the full source code of the Xlinlin/SpringCloud-Demo GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 742 files (22.6 MB), approximately 1.1M tokens, and a symbol index with 2405 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.
Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.