Showing preview only (2,354K chars total). Download the full file or copy to clipboard to get everything.
Repository: xkcoding/spring-boot-demo
Branch: master
Commit: 87a142f9604c
Files: 875
Total size: 2.0 MB
Directory structure:
gitextract_ajnuvaj3/
├── .codacy.yml
├── .editorconfig
├── .gitee/
│ ├── ISSUE_TEMPLATE/
│ │ ├── bug_report.md
│ │ └── feature_request.md
│ └── PULL_REQUEST_TEMPLATE.md
├── .github/
│ ├── FUNDING.yml
│ ├── ISSUE_TEMPLATE/
│ │ ├── bug_report.md
│ │ └── feature_request.md
│ ├── PULL_REQUEST_TEMPLATE.md
│ └── workflows/
│ └── maven.yml
├── .gitignore
├── .travis.yml
├── LICENSE
├── README.en.md
├── README.md
├── TODO.en.md
├── TODO.md
├── demo-activiti/
│ ├── .gitignore
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ ├── java/
│ │ │ └── com/
│ │ │ └── xkcoding/
│ │ │ └── activiti/
│ │ │ ├── SpringBootDemoActivitiApplication.java
│ │ │ ├── config/
│ │ │ │ └── SecurityConfiguration.java
│ │ │ └── util/
│ │ │ └── SecurityUtil.java
│ │ └── resources/
│ │ ├── application.yml
│ │ └── processes/
│ │ └── team01.bpmn
│ └── test/
│ └── java/
│ └── com/
│ └── xkcoding/
│ └── activiti/
│ └── SpringBootDemoActivitiApplicationTests.java
├── demo-actuator/
│ ├── .gitignore
│ ├── README.md
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ ├── java/
│ │ │ └── com/
│ │ │ └── xkcoding/
│ │ │ └── actuator/
│ │ │ └── SpringBootDemoActuatorApplication.java
│ │ └── resources/
│ │ └── application.yml
│ └── test/
│ └── java/
│ └── com/
│ └── xkcoding/
│ └── actuator/
│ └── SpringBootDemoActuatorApplicationTests.java
├── demo-admin/
│ ├── README.md
│ ├── admin-client/
│ │ ├── .gitignore
│ │ ├── README.md
│ │ ├── pom.xml
│ │ └── src/
│ │ ├── main/
│ │ │ ├── java/
│ │ │ │ └── com/
│ │ │ │ └── xkcoding/
│ │ │ │ └── admin/
│ │ │ │ └── client/
│ │ │ │ ├── SpringBootDemoAdminClientApplication.java
│ │ │ │ └── controller/
│ │ │ │ └── IndexController.java
│ │ │ └── resources/
│ │ │ └── application.yml
│ │ └── test/
│ │ └── java/
│ │ └── com/
│ │ └── xkcoding/
│ │ └── admin/
│ │ └── client/
│ │ └── SpringBootDemoAdminClientApplicationTests.java
│ ├── admin-server/
│ │ ├── .gitignore
│ │ ├── README.md
│ │ ├── pom.xml
│ │ └── src/
│ │ ├── main/
│ │ │ ├── java/
│ │ │ │ └── com/
│ │ │ │ └── xkcoding/
│ │ │ │ └── admin/
│ │ │ │ └── server/
│ │ │ │ └── SpringBootDemoAdminServerApplication.java
│ │ │ └── resources/
│ │ │ └── application.yml
│ │ └── test/
│ │ └── java/
│ │ └── com/
│ │ └── xkcoding/
│ │ └── admin/
│ │ └── server/
│ │ └── SpringBootDemoAdminServerApplicationTests.java
│ └── pom.xml
├── demo-async/
│ ├── .gitignore
│ ├── README.md
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ ├── java/
│ │ │ └── com/
│ │ │ └── xkcoding/
│ │ │ └── async/
│ │ │ ├── SpringBootDemoAsyncApplication.java
│ │ │ └── task/
│ │ │ └── TaskFactory.java
│ │ └── resources/
│ │ └── application.yml
│ └── test/
│ └── java/
│ └── com/
│ └── xkcoding/
│ └── async/
│ ├── SpringBootDemoAsyncApplicationTests.java
│ └── task/
│ └── TaskFactoryTest.java
├── demo-cache-ehcache/
│ ├── .gitignore
│ ├── README.md
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ ├── java/
│ │ │ └── com/
│ │ │ └── xkcoding/
│ │ │ └── cache/
│ │ │ └── ehcache/
│ │ │ ├── SpringBootDemoCacheEhcacheApplication.java
│ │ │ ├── entity/
│ │ │ │ └── User.java
│ │ │ └── service/
│ │ │ ├── UserService.java
│ │ │ └── impl/
│ │ │ └── UserServiceImpl.java
│ │ └── resources/
│ │ ├── application.yml
│ │ └── ehcache.xml
│ └── test/
│ └── java/
│ └── com/
│ └── xkcoding/
│ └── cache/
│ └── ehcache/
│ ├── SpringBootDemoCacheEhcacheApplicationTests.java
│ └── service/
│ └── UserServiceTest.java
├── demo-cache-redis/
│ ├── .gitignore
│ ├── README.md
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ ├── java/
│ │ │ └── com/
│ │ │ └── xkcoding/
│ │ │ └── cache/
│ │ │ └── redis/
│ │ │ ├── SpringBootDemoCacheRedisApplication.java
│ │ │ ├── config/
│ │ │ │ └── RedisConfig.java
│ │ │ ├── entity/
│ │ │ │ └── User.java
│ │ │ └── service/
│ │ │ ├── UserService.java
│ │ │ └── impl/
│ │ │ └── UserServiceImpl.java
│ │ └── resources/
│ │ └── application.yml
│ └── test/
│ └── java/
│ └── com/
│ └── xkcoding/
│ └── cache/
│ └── redis/
│ ├── RedisTest.java
│ ├── SpringBootDemoCacheRedisApplicationTests.java
│ └── service/
│ └── UserServiceTest.java
├── demo-codegen/
│ ├── .gitignore
│ ├── README.md
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ ├── java/
│ │ │ └── com/
│ │ │ └── xkcoding/
│ │ │ └── codegen/
│ │ │ ├── SpringBootDemoCodegenApplication.java
│ │ │ ├── common/
│ │ │ │ ├── IResultCode.java
│ │ │ │ ├── PageResult.java
│ │ │ │ ├── R.java
│ │ │ │ └── ResultCode.java
│ │ │ ├── constants/
│ │ │ │ └── GenConstants.java
│ │ │ ├── controller/
│ │ │ │ └── CodeGenController.java
│ │ │ ├── entity/
│ │ │ │ ├── ColumnEntity.java
│ │ │ │ ├── GenConfig.java
│ │ │ │ ├── TableEntity.java
│ │ │ │ └── TableRequest.java
│ │ │ ├── service/
│ │ │ │ ├── CodeGenService.java
│ │ │ │ └── impl/
│ │ │ │ └── CodeGenServiceImpl.java
│ │ │ └── utils/
│ │ │ ├── CodeGenUtil.java
│ │ │ └── DbUtil.java
│ │ └── resources/
│ │ ├── application.yml
│ │ ├── generator.properties
│ │ ├── jdbc_type.properties
│ │ ├── logback-spring.xml
│ │ ├── static/
│ │ │ ├── index.html
│ │ │ └── libs/
│ │ │ ├── datejs/
│ │ │ │ └── date-zh-CN.js
│ │ │ └── iview/
│ │ │ └── iview.css
│ │ └── template/
│ │ ├── Controller.java.vm
│ │ ├── Entity.java.vm
│ │ ├── Mapper.java.vm
│ │ ├── Mapper.xml.vm
│ │ ├── Service.java.vm
│ │ ├── ServiceImpl.java.vm
│ │ └── api.js.vm
│ └── test/
│ └── java/
│ └── com/
│ └── xkcoding/
│ └── codegen/
│ ├── CodeGenServiceTest.java
│ └── SpringBootDemoCodegenApplicationTests.java
├── demo-docker/
│ ├── .gitignore
│ ├── Dockerfile
│ ├── README.md
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ ├── java/
│ │ │ └── com/
│ │ │ └── xkcoding/
│ │ │ └── docker/
│ │ │ ├── SpringBootDemoDockerApplication.java
│ │ │ └── controller/
│ │ │ └── HelloController.java
│ │ └── resources/
│ │ └── application.yml
│ └── test/
│ └── java/
│ └── com/
│ └── xkcoding/
│ └── docker/
│ └── SpringBootDemoDockerApplicationTests.java
├── demo-dubbo/
│ ├── .gitignore
│ ├── README.md
│ ├── dubbo-common/
│ │ ├── .gitignore
│ │ ├── README.md
│ │ ├── pom.xml
│ │ └── src/
│ │ └── main/
│ │ └── java/
│ │ └── com/
│ │ └── xkcoding/
│ │ └── dubbo/
│ │ └── common/
│ │ └── service/
│ │ └── HelloService.java
│ ├── dubbo-consumer/
│ │ ├── .gitignore
│ │ ├── README.md
│ │ ├── pom.xml
│ │ └── src/
│ │ ├── main/
│ │ │ ├── java/
│ │ │ │ └── com/
│ │ │ │ └── xkcoding/
│ │ │ │ └── dubbo/
│ │ │ │ └── consumer/
│ │ │ │ ├── SpringBootDemoDubboConsumerApplication.java
│ │ │ │ └── controller/
│ │ │ │ └── HelloController.java
│ │ │ └── resources/
│ │ │ └── application.yml
│ │ └── test/
│ │ └── java/
│ │ └── com/
│ │ └── xkcoding/
│ │ └── dubbo/
│ │ └── consumer/
│ │ └── SpringBootDemoDubboConsumerApplicationTests.java
│ ├── dubbo-provider/
│ │ ├── .gitignore
│ │ ├── README.md
│ │ ├── pom.xml
│ │ └── src/
│ │ ├── main/
│ │ │ ├── java/
│ │ │ │ └── com/
│ │ │ │ └── xkcoding/
│ │ │ │ └── dubbo/
│ │ │ │ └── provider/
│ │ │ │ ├── SpringBootDemoDubboProviderApplication.java
│ │ │ │ └── service/
│ │ │ │ └── HelloServiceImpl.java
│ │ │ └── resources/
│ │ │ └── application.yml
│ │ └── test/
│ │ └── java/
│ │ └── com/
│ │ └── xkcoding/
│ │ └── dubbo/
│ │ └── provider/
│ │ └── SpringBootDemoDubboProviderApplicationTests.java
│ └── pom.xml
├── demo-dynamic-datasource/
│ ├── .gitignore
│ ├── README.md
│ ├── db/
│ │ ├── init.sql
│ │ └── user.sql
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ ├── java/
│ │ │ └── com/
│ │ │ └── xkcoding/
│ │ │ └── dynamic/
│ │ │ └── datasource/
│ │ │ ├── SpringBootDemoDynamicDatasourceApplication.java
│ │ │ ├── annotation/
│ │ │ │ └── DefaultDatasource.java
│ │ │ ├── aspect/
│ │ │ │ └── DatasourceSelectorAspect.java
│ │ │ ├── config/
│ │ │ │ ├── DatasourceConfiguration.java
│ │ │ │ ├── MyMapper.java
│ │ │ │ └── MybatisConfiguration.java
│ │ │ ├── controller/
│ │ │ │ ├── DatasourceConfigController.java
│ │ │ │ └── UserController.java
│ │ │ ├── datasource/
│ │ │ │ ├── DatasourceConfigCache.java
│ │ │ │ ├── DatasourceConfigContextHolder.java
│ │ │ │ ├── DatasourceHolder.java
│ │ │ │ ├── DatasourceManager.java
│ │ │ │ ├── DatasourceScheduler.java
│ │ │ │ └── DynamicDataSource.java
│ │ │ ├── mapper/
│ │ │ │ ├── DatasourceConfigMapper.java
│ │ │ │ └── UserMapper.java
│ │ │ ├── model/
│ │ │ │ ├── DatasourceConfig.java
│ │ │ │ └── User.java
│ │ │ └── utils/
│ │ │ └── SpringUtil.java
│ │ └── resources/
│ │ └── application.yml
│ └── test/
│ └── java/
│ └── com/
│ └── xkcoding/
│ └── dynamic/
│ └── datasource/
│ └── SpringBootDemoDynamicDatasourceApplicationTests.java
├── demo-elasticsearch/
│ ├── .gitignore
│ ├── README.md
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ ├── java/
│ │ │ └── com/
│ │ │ └── xkcoding/
│ │ │ └── elasticsearch/
│ │ │ ├── SpringBootDemoElasticsearchApplication.java
│ │ │ ├── constants/
│ │ │ │ └── EsConsts.java
│ │ │ ├── model/
│ │ │ │ └── Person.java
│ │ │ └── repository/
│ │ │ └── PersonRepository.java
│ │ └── resources/
│ │ └── application.yml
│ └── test/
│ └── java/
│ └── com/
│ └── xkcoding/
│ └── elasticsearch/
│ ├── SpringBootDemoElasticsearchApplicationTests.java
│ ├── repository/
│ │ └── PersonRepositoryTest.java
│ └── template/
│ └── TemplateTest.java
├── demo-elasticsearch-rest-high-level-client/
│ ├── .gitignore
│ ├── README.md
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ ├── java/
│ │ │ └── com/
│ │ │ └── xkcoding/
│ │ │ └── elasticsearch/
│ │ │ ├── ElasticsearchApplication.java
│ │ │ ├── common/
│ │ │ │ ├── Result.java
│ │ │ │ └── ResultCode.java
│ │ │ ├── config/
│ │ │ │ ├── ElasticsearchAutoConfiguration.java
│ │ │ │ └── ElasticsearchProperties.java
│ │ │ ├── contants/
│ │ │ │ └── ElasticsearchConstant.java
│ │ │ ├── exception/
│ │ │ │ └── ElasticsearchException.java
│ │ │ ├── model/
│ │ │ │ └── Person.java
│ │ │ └── service/
│ │ │ ├── PersonService.java
│ │ │ ├── base/
│ │ │ │ └── BaseElasticsearchService.java
│ │ │ └── impl/
│ │ │ └── PersonServiceImpl.java
│ │ └── resources/
│ │ └── application.yml
│ └── test/
│ └── java/
│ └── com/
│ └── xkcoding/
│ └── elasticsearch/
│ └── ElasticsearchApplicationTests.java
├── demo-email/
│ ├── .gitignore
│ ├── README.md
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ ├── java/
│ │ │ └── com/
│ │ │ └── xkcoding/
│ │ │ └── email/
│ │ │ ├── SpringBootDemoEmailApplication.java
│ │ │ └── service/
│ │ │ ├── MailService.java
│ │ │ └── impl/
│ │ │ └── MailServiceImpl.java
│ │ └── resources/
│ │ ├── application.yml
│ │ ├── email/
│ │ │ └── test.html
│ │ └── templates/
│ │ └── welcome.html
│ └── test/
│ └── java/
│ └── com/
│ └── xkcoding/
│ └── email/
│ ├── PasswordTest.java
│ ├── SpringBootDemoEmailApplicationTests.java
│ └── service/
│ └── MailServiceTest.java
├── demo-exception-handler/
│ ├── .gitignore
│ ├── README.md
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ ├── java/
│ │ │ └── com/
│ │ │ └── xkcoding/
│ │ │ └── exception/
│ │ │ └── handler/
│ │ │ ├── SpringBootDemoExceptionHandlerApplication.java
│ │ │ ├── constant/
│ │ │ │ └── Status.java
│ │ │ ├── controller/
│ │ │ │ └── TestController.java
│ │ │ ├── exception/
│ │ │ │ ├── BaseException.java
│ │ │ │ ├── JsonException.java
│ │ │ │ └── PageException.java
│ │ │ ├── handler/
│ │ │ │ └── DemoExceptionHandler.java
│ │ │ └── model/
│ │ │ └── ApiResponse.java
│ │ └── resources/
│ │ ├── application.yml
│ │ └── templates/
│ │ └── error.html
│ └── test/
│ └── java/
│ └── com/
│ └── xkcoding/
│ └── exception/
│ └── handler/
│ └── SpringBootDemoExceptionHandlerApplicationTests.java
├── demo-flyway/
│ ├── .gitignore
│ ├── README.md
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ ├── java/
│ │ │ └── com/
│ │ │ └── xkcoding/
│ │ │ └── flyway/
│ │ │ └── SpringBootDemoFlywayApplication.java
│ │ └── resources/
│ │ ├── application.yml
│ │ └── db/
│ │ └── migration/
│ │ ├── V1_0__INIT.sql
│ │ └── V1_1__ALTER.sql
│ └── test/
│ └── java/
│ └── com/
│ └── xkcoding/
│ └── AppTest.java
├── demo-graylog/
│ ├── .gitignore
│ ├── README.md
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ ├── java/
│ │ │ └── com/
│ │ │ └── xkcoding/
│ │ │ └── graylog/
│ │ │ └── SpringBootDemoGraylogApplication.java
│ │ └── resources/
│ │ ├── application.yml
│ │ └── logback-spring.xml
│ └── test/
│ └── java/
│ └── com/
│ └── xkcoding/
│ └── graylog/
│ └── SpringBootDemoGraylogApplicationTests.java
├── demo-helloworld/
│ ├── .gitignore
│ ├── README.md
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ ├── java/
│ │ │ └── com/
│ │ │ └── xkcoding/
│ │ │ └── helloworld/
│ │ │ └── SpringBootDemoHelloworldApplication.java
│ │ └── resources/
│ │ └── application.yml
│ └── test/
│ └── java/
│ └── com/
│ └── xkcoding/
│ └── helloworld/
│ └── SpringBootDemoHelloworldApplicationTests.java
├── demo-https/
│ ├── .gitignore
│ ├── README.md
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ ├── java/
│ │ │ └── com/
│ │ │ └── xkcoding/
│ │ │ └── https/
│ │ │ ├── SpringBootDemoHttpsApplication.java
│ │ │ └── config/
│ │ │ └── HttpsConfig.java
│ │ └── resources/
│ │ ├── application.yml
│ │ ├── server.keystore
│ │ └── static/
│ │ └── index.html
│ └── test/
│ └── java/
│ └── com/
│ └── xkcoding/
│ └── https/
│ └── SpringBootDemoHttpsApplicationTests.java
├── demo-ldap/
│ ├── .gitignore
│ ├── README.md
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ ├── java/
│ │ │ └── com/
│ │ │ └── xkcoding/
│ │ │ └── ldap/
│ │ │ ├── LdapDemoApplication.java
│ │ │ ├── api/
│ │ │ │ ├── Result.java
│ │ │ │ └── ResultCode.java
│ │ │ ├── entity/
│ │ │ │ └── Person.java
│ │ │ ├── exception/
│ │ │ │ └── ServiceException.java
│ │ │ ├── repository/
│ │ │ │ └── PersonRepository.java
│ │ │ ├── request/
│ │ │ │ └── LoginRequest.java
│ │ │ ├── service/
│ │ │ │ ├── PersonService.java
│ │ │ │ └── impl/
│ │ │ │ └── PersonServiceImpl.java
│ │ │ └── util/
│ │ │ └── LdapUtils.java
│ │ └── resources/
│ │ └── application.yml
│ └── test/
│ └── java/
│ └── com/
│ └── xkcoding/
│ └── ldap/
│ └── LdapDemoApplicationTests.java
├── demo-log-aop/
│ ├── .gitignore
│ ├── README.md
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ ├── java/
│ │ │ └── com/
│ │ │ └── xkcoding/
│ │ │ └── log/
│ │ │ └── aop/
│ │ │ ├── SpringBootDemoLogAopApplication.java
│ │ │ ├── aspectj/
│ │ │ │ └── AopLog.java
│ │ │ └── controller/
│ │ │ └── TestController.java
│ │ └── resources/
│ │ ├── application.yml
│ │ └── logback-spring.xml
│ └── test/
│ └── java/
│ └── com/
│ └── xkcoding/
│ └── log/
│ └── aop/
│ └── SpringBootDemoLogAopApplicationTests.java
├── demo-logback/
│ ├── .gitignore
│ ├── README.md
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ ├── java/
│ │ │ └── com/
│ │ │ └── xkcoding/
│ │ │ └── logback/
│ │ │ └── SpringBootDemoLogbackApplication.java
│ │ └── resources/
│ │ ├── application.yml
│ │ └── logback-spring.xml
│ └── test/
│ └── java/
│ └── com/
│ └── xkcoding/
│ └── logback/
│ └── SpringBootDemoLogbackApplicationTests.java
├── demo-mongodb/
│ ├── .gitignore
│ ├── README.md
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ ├── java/
│ │ │ └── com/
│ │ │ └── xkcoding/
│ │ │ └── mongodb/
│ │ │ ├── SpringBootDemoMongodbApplication.java
│ │ │ ├── model/
│ │ │ │ └── Article.java
│ │ │ └── repository/
│ │ │ └── ArticleRepository.java
│ │ └── resources/
│ │ └── application.yml
│ └── test/
│ └── java/
│ └── com/
│ └── xkcoding/
│ └── mongodb/
│ ├── SpringBootDemoMongodbApplicationTests.java
│ └── repository/
│ └── ArticleRepositoryTest.java
├── demo-mq-kafka/
│ ├── .gitignore
│ ├── README.md
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ ├── java/
│ │ │ └── com/
│ │ │ └── xkcoding/
│ │ │ └── mq/
│ │ │ └── kafka/
│ │ │ ├── SpringBootDemoMqKafkaApplication.java
│ │ │ ├── config/
│ │ │ │ └── KafkaConfig.java
│ │ │ ├── constants/
│ │ │ │ └── KafkaConsts.java
│ │ │ └── handler/
│ │ │ └── MessageHandler.java
│ │ └── resources/
│ │ └── application.yml
│ └── test/
│ └── java/
│ └── com/
│ └── xkcoding/
│ └── mq/
│ └── kafka/
│ └── SpringBootDemoMqKafkaApplicationTests.java
├── demo-mq-rabbitmq/
│ ├── .gitignore
│ ├── README.md
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ ├── java/
│ │ │ └── com/
│ │ │ └── xkcoding/
│ │ │ └── mq/
│ │ │ └── rabbitmq/
│ │ │ ├── SpringBootDemoMqRabbitmqApplication.java
│ │ │ ├── config/
│ │ │ │ └── RabbitMqConfig.java
│ │ │ ├── constants/
│ │ │ │ └── RabbitConsts.java
│ │ │ ├── handler/
│ │ │ │ ├── DelayQueueHandler.java
│ │ │ │ ├── DirectQueueOneHandler.java
│ │ │ │ ├── QueueThreeHandler.java
│ │ │ │ └── QueueTwoHandler.java
│ │ │ └── message/
│ │ │ └── MessageStruct.java
│ │ └── resources/
│ │ └── application.yml
│ └── test/
│ └── java/
│ └── com/
│ └── xkcoding/
│ └── mq/
│ └── rabbitmq/
│ └── SpringBootDemoMqRabbitmqApplicationTests.java
├── demo-mq-rocketmq/
│ ├── .gitignore
│ ├── README.md
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ ├── java/
│ │ │ └── com/
│ │ │ └── xkcoding/
│ │ │ └── mq/
│ │ │ └── rocketmq/
│ │ │ └── SpringBootDemoMqRocketmqApplication.java
│ │ └── resources/
│ │ └── application.properties
│ └── test/
│ └── java/
│ └── com/
│ └── xkcoding/
│ └── mq/
│ └── rocketmq/
│ └── SpringBootDemoMqRocketmqApplicationTests.java
├── demo-multi-datasource-jpa/
│ ├── .gitignore
│ ├── README.md
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ ├── java/
│ │ │ └── com/
│ │ │ └── xkcoding/
│ │ │ └── multi/
│ │ │ └── datasource/
│ │ │ └── jpa/
│ │ │ ├── SpringBootDemoMultiDatasourceJpaApplication.java
│ │ │ ├── config/
│ │ │ │ ├── PrimaryDataSourceConfig.java
│ │ │ │ ├── PrimaryJpaConfig.java
│ │ │ │ ├── SecondDataSourceConfig.java
│ │ │ │ ├── SecondJpaConfig.java
│ │ │ │ └── SnowflakeConfig.java
│ │ │ ├── entity/
│ │ │ │ ├── primary/
│ │ │ │ │ └── PrimaryMultiTable.java
│ │ │ │ └── second/
│ │ │ │ └── SecondMultiTable.java
│ │ │ └── repository/
│ │ │ ├── primary/
│ │ │ │ └── PrimaryMultiTableRepository.java
│ │ │ └── second/
│ │ │ └── SecondMultiTableRepository.java
│ │ └── resources/
│ │ └── application.yml
│ └── test/
│ └── java/
│ └── com/
│ └── xkcoding/
│ └── multi/
│ └── datasource/
│ └── jpa/
│ └── SpringBootDemoMultiDatasourceJpaApplicationTests.java
├── demo-multi-datasource-mybatis/
│ ├── .gitignore
│ ├── README.md
│ ├── pom.xml
│ ├── sql/
│ │ └── db.sql
│ └── src/
│ ├── main/
│ │ ├── java/
│ │ │ └── com/
│ │ │ └── xkcoding/
│ │ │ └── multi/
│ │ │ └── datasource/
│ │ │ └── mybatis/
│ │ │ ├── SpringBootDemoMultiDatasourceMybatisApplication.java
│ │ │ ├── mapper/
│ │ │ │ └── UserMapper.java
│ │ │ ├── model/
│ │ │ │ └── User.java
│ │ │ └── service/
│ │ │ ├── UserService.java
│ │ │ └── impl/
│ │ │ └── UserServiceImpl.java
│ │ └── resources/
│ │ └── application.yml
│ └── test/
│ └── java/
│ └── com/
│ └── xkcoding/
│ └── multi/
│ └── datasource/
│ └── mybatis/
│ ├── SpringBootDemoMultiDatasourceMybatisApplicationTests.java
│ └── service/
│ └── impl/
│ └── UserServiceImplTest.java
├── demo-neo4j/
│ ├── .gitignore
│ ├── README.md
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ ├── java/
│ │ │ └── com/
│ │ │ └── xkcoding/
│ │ │ └── neo4j/
│ │ │ ├── SpringBootDemoNeo4jApplication.java
│ │ │ ├── config/
│ │ │ │ └── CustomIdStrategy.java
│ │ │ ├── constants/
│ │ │ │ └── NeoConsts.java
│ │ │ ├── model/
│ │ │ │ ├── Class.java
│ │ │ │ ├── Lesson.java
│ │ │ │ ├── Student.java
│ │ │ │ └── Teacher.java
│ │ │ ├── payload/
│ │ │ │ ├── ClassmateInfoGroupByLesson.java
│ │ │ │ └── TeacherStudent.java
│ │ │ ├── repository/
│ │ │ │ ├── ClassRepository.java
│ │ │ │ ├── LessonRepository.java
│ │ │ │ ├── StudentRepository.java
│ │ │ │ └── TeacherRepository.java
│ │ │ └── service/
│ │ │ └── NeoService.java
│ │ └── resources/
│ │ └── application.yml
│ └── test/
│ └── java/
│ └── com/
│ └── xkcoding/
│ └── neo4j/
│ ├── Neo4jTest.java
│ └── SpringBootDemoNeo4jApplicationTests.java
├── demo-oauth/
│ ├── .gitignore
│ ├── README.md
│ ├── oauth-authorization-server/
│ │ ├── README.adoc
│ │ ├── pom.xml
│ │ └── src/
│ │ ├── main/
│ │ │ ├── java/
│ │ │ │ └── com/
│ │ │ │ └── xkcoding/
│ │ │ │ └── oauth/
│ │ │ │ ├── SpringBootDemoOauthApplication.java
│ │ │ │ ├── config/
│ │ │ │ │ ├── ClientLoginFailureHandler.java
│ │ │ │ │ ├── ClientLogoutSuccessHandler.java
│ │ │ │ │ ├── Oauth2AuthorizationServerConfig.java
│ │ │ │ │ ├── Oauth2AuthorizationTokenConfig.java
│ │ │ │ │ ├── WebSecurityConfig.java
│ │ │ │ │ └── package-info.java
│ │ │ │ ├── controller/
│ │ │ │ │ ├── AuthorizationController.java
│ │ │ │ │ ├── Oauth2Controller.java
│ │ │ │ │ └── package-info.java
│ │ │ │ ├── entity/
│ │ │ │ │ ├── SysClientDetails.java
│ │ │ │ │ ├── SysRole.java
│ │ │ │ │ └── SysUser.java
│ │ │ │ ├── repostiory/
│ │ │ │ │ ├── SysClientDetailsRepository.java
│ │ │ │ │ └── SysUserRepository.java
│ │ │ │ └── service/
│ │ │ │ ├── SysClientDetailsService.java
│ │ │ │ ├── SysUserService.java
│ │ │ │ ├── impl/
│ │ │ │ │ ├── SysClientDetailsServiceImpl.java
│ │ │ │ │ └── SysUserServiceImpl.java
│ │ │ │ └── package-info.java
│ │ │ └── resources/
│ │ │ ├── application.yml
│ │ │ ├── oauth2.jks
│ │ │ ├── public.txt
│ │ │ └── templates/
│ │ │ ├── authorization.html
│ │ │ ├── common/
│ │ │ │ └── common.html
│ │ │ ├── error.html
│ │ │ ├── login.html
│ │ │ ├── logout.html
│ │ │ └── registerTemplate.html
│ │ └── test/
│ │ ├── java/
│ │ │ └── com/
│ │ │ └── xkcoding/
│ │ │ └── oauth/
│ │ │ ├── PasswordEncodeTest.java
│ │ │ ├── oauth/
│ │ │ │ ├── AuthorizationCodeGrantTests.java
│ │ │ │ ├── AuthorizationServerInfo.java
│ │ │ │ └── ResourceOwnerPasswordGrantTests.java
│ │ │ └── repostiory/
│ │ │ ├── SysClientDetailsTest.java
│ │ │ └── SysUserRepositoryTest.java
│ │ └── resources/
│ │ ├── application.yml
│ │ ├── import.sql
│ │ └── schema.sql
│ ├── oauth-resource-server/
│ │ ├── README.adoc
│ │ ├── pom.xml
│ │ └── src/
│ │ ├── main/
│ │ │ ├── java/
│ │ │ │ └── com/
│ │ │ │ └── xkcoding/
│ │ │ │ └── oauth/
│ │ │ │ ├── SpringBootDemoResourceApplication.java
│ │ │ │ ├── config/
│ │ │ │ │ ├── OauthResourceServerConfig.java
│ │ │ │ │ └── OauthResourceTokenConfig.java
│ │ │ │ └── controller/
│ │ │ │ └── TestController.java
│ │ │ └── resources/
│ │ │ └── application.yml
│ │ └── test/
│ │ └── java/
│ │ └── com/
│ │ └── xkcoding/
│ │ └── oauth/
│ │ ├── AuthorizationTest.java
│ │ └── controller/
│ │ └── TestControllerTest.java
│ └── pom.xml
├── demo-orm-beetlsql/
│ ├── .gitignore
│ ├── README.md
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ ├── java/
│ │ │ └── com/
│ │ │ └── xkcoding/
│ │ │ └── orm/
│ │ │ └── beetlsql/
│ │ │ ├── SpringBootDemoOrmBeetlsqlApplication.java
│ │ │ ├── config/
│ │ │ │ └── BeetlConfig.java
│ │ │ ├── dao/
│ │ │ │ └── UserDao.java
│ │ │ ├── entity/
│ │ │ │ └── User.java
│ │ │ └── service/
│ │ │ ├── UserService.java
│ │ │ └── impl/
│ │ │ └── UserServiceImpl.java
│ │ └── resources/
│ │ ├── application.yml
│ │ └── db/
│ │ ├── data.sql
│ │ └── schema.sql
│ └── test/
│ └── java/
│ └── com/
│ └── xkcoding/
│ └── orm/
│ └── beetlsql/
│ ├── SpringBootDemoOrmBeetlsqlApplicationTests.java
│ └── service/
│ └── UserServiceTest.java
├── demo-orm-jdbctemplate/
│ ├── .gitignore
│ ├── README.md
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ ├── java/
│ │ │ └── com/
│ │ │ └── xkcoding/
│ │ │ └── orm/
│ │ │ └── jdbctemplate/
│ │ │ ├── SpringBootDemoOrmJdbctemplateApplication.java
│ │ │ ├── annotation/
│ │ │ │ ├── Column.java
│ │ │ │ ├── Ignore.java
│ │ │ │ ├── Pk.java
│ │ │ │ └── Table.java
│ │ │ ├── constant/
│ │ │ │ └── Const.java
│ │ │ ├── controller/
│ │ │ │ └── UserController.java
│ │ │ ├── dao/
│ │ │ │ ├── UserDao.java
│ │ │ │ └── base/
│ │ │ │ └── BaseDao.java
│ │ │ ├── entity/
│ │ │ │ └── User.java
│ │ │ └── service/
│ │ │ ├── IUserService.java
│ │ │ └── impl/
│ │ │ └── UserServiceImpl.java
│ │ └── resources/
│ │ ├── application.yml
│ │ └── db/
│ │ ├── data.sql
│ │ └── schema.sql
│ └── test/
│ └── java/
│ └── com/
│ └── xkcoding/
│ └── orm/
│ └── jdbctemplate/
│ └── SpringBootDemoOrmJdbctemplateApplicationTests.java
├── demo-orm-jpa/
│ ├── .gitignore
│ ├── README.md
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ ├── java/
│ │ │ └── com/
│ │ │ └── xkcoding/
│ │ │ └── orm/
│ │ │ └── jpa/
│ │ │ ├── SpringBootDemoOrmJpaApplication.java
│ │ │ ├── config/
│ │ │ │ └── JpaConfig.java
│ │ │ ├── entity/
│ │ │ │ ├── Department.java
│ │ │ │ ├── User.java
│ │ │ │ └── base/
│ │ │ │ └── AbstractAuditModel.java
│ │ │ └── repository/
│ │ │ ├── DepartmentDao.java
│ │ │ └── UserDao.java
│ │ └── resources/
│ │ ├── application.yml
│ │ └── db/
│ │ ├── data.sql
│ │ └── schema.sql
│ └── test/
│ └── java/
│ └── com/
│ └── xkcoding/
│ └── orm/
│ └── jpa/
│ ├── SpringBootDemoOrmJpaApplicationTests.java
│ └── repository/
│ ├── DepartmentDaoTest.java
│ └── UserDaoTest.java
├── demo-orm-mybatis/
│ ├── .gitignore
│ ├── README.md
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ ├── java/
│ │ │ └── com/
│ │ │ └── xkcoding/
│ │ │ └── orm/
│ │ │ └── mybatis/
│ │ │ ├── SpringBootDemoOrmMybatisApplication.java
│ │ │ ├── entity/
│ │ │ │ └── User.java
│ │ │ └── mapper/
│ │ │ └── UserMapper.java
│ │ └── resources/
│ │ ├── application.yml
│ │ ├── db/
│ │ │ ├── data.sql
│ │ │ └── schema.sql
│ │ └── mappers/
│ │ └── UserMapper.xml
│ └── test/
│ └── java/
│ └── com/
│ └── xkcoding/
│ └── orm/
│ └── mybatis/
│ ├── SpringBootDemoOrmMybatisApplicationTests.java
│ └── mapper/
│ └── UserMapperTest.java
├── demo-orm-mybatis-mapper-page/
│ ├── .gitignore
│ ├── README.md
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ ├── java/
│ │ │ └── com/
│ │ │ └── xkcoding/
│ │ │ └── orm/
│ │ │ └── mybatis/
│ │ │ └── MapperAndPage/
│ │ │ ├── SpringBootDemoOrmMybatisMapperPageApplication.java
│ │ │ ├── entity/
│ │ │ │ └── User.java
│ │ │ └── mapper/
│ │ │ └── UserMapper.java
│ │ └── resources/
│ │ ├── application.yml
│ │ └── db/
│ │ ├── data.sql
│ │ └── schema.sql
│ └── test/
│ └── java/
│ └── com/
│ └── xkcoding/
│ └── orm/
│ └── mybatis/
│ └── MapperAndPage/
│ ├── SpringBootDemoOrmMybatisMapperPageApplicationTests.java
│ └── mapper/
│ └── UserMapperTest.java
├── demo-orm-mybatis-plus/
│ ├── .gitignore
│ ├── README.md
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ ├── java/
│ │ │ └── com/
│ │ │ └── xkcoding/
│ │ │ └── orm/
│ │ │ └── mybatis/
│ │ │ └── plus/
│ │ │ ├── SpringBootDemoOrmMybatisPlusApplication.java
│ │ │ ├── config/
│ │ │ │ ├── CommonFieldHandler.java
│ │ │ │ └── MybatisPlusConfig.java
│ │ │ ├── entity/
│ │ │ │ ├── Role.java
│ │ │ │ └── User.java
│ │ │ ├── mapper/
│ │ │ │ ├── RoleMapper.java
│ │ │ │ └── UserMapper.java
│ │ │ └── service/
│ │ │ ├── UserService.java
│ │ │ └── impl/
│ │ │ └── UserServiceImpl.java
│ │ └── resources/
│ │ ├── application.yml
│ │ └── db/
│ │ ├── data.sql
│ │ └── schema.sql
│ └── test/
│ └── java/
│ └── com/
│ └── xkcoding/
│ └── orm/
│ └── mybatis/
│ └── plus/
│ ├── SpringBootDemoOrmMybatisPlusApplicationTests.java
│ ├── activerecord/
│ │ └── ActiveRecordTest.java
│ └── service/
│ └── UserServiceTest.java
├── demo-pay/
│ ├── .gitignore
│ ├── README.md
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ ├── java/
│ │ │ └── com/
│ │ │ └── xkcoding/
│ │ │ └── pay/
│ │ │ └── SpringBootDemoPayApplication.java
│ │ └── resources/
│ │ └── application.yml
│ └── test/
│ └── java/
│ └── com/
│ └── xkcoding/
│ └── pay/
│ └── SpringBootDemoPayApplicationTests.java
├── demo-properties/
│ ├── .gitignore
│ ├── README.md
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ ├── java/
│ │ │ └── com/
│ │ │ └── xkcoding/
│ │ │ └── properties/
│ │ │ ├── SpringBootDemoPropertiesApplication.java
│ │ │ ├── controller/
│ │ │ │ └── PropertyController.java
│ │ │ └── property/
│ │ │ ├── ApplicationProperty.java
│ │ │ └── DeveloperProperty.java
│ │ └── resources/
│ │ ├── META-INF/
│ │ │ └── additional-spring-configuration-metadata.json
│ │ ├── application-dev.yml
│ │ ├── application-prod.yml
│ │ └── application.yml
│ └── test/
│ └── java/
│ └── com/
│ └── xkcoding/
│ └── properties/
│ └── SpringBootDemoPropertiesApplicationTests.java
├── demo-ratelimit-guava/
│ ├── .gitignore
│ ├── README.md
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ ├── java/
│ │ │ └── com/
│ │ │ └── xkcoding/
│ │ │ └── ratelimit/
│ │ │ └── guava/
│ │ │ ├── SpringBootDemoRatelimitGuavaApplication.java
│ │ │ ├── annotation/
│ │ │ │ └── RateLimiter.java
│ │ │ ├── aspect/
│ │ │ │ └── RateLimiterAspect.java
│ │ │ ├── controller/
│ │ │ │ └── TestController.java
│ │ │ └── handler/
│ │ │ └── GlobalExceptionHandler.java
│ │ └── resources/
│ │ └── application.yml
│ └── test/
│ └── java/
│ └── com/
│ └── xkcoding/
│ └── ratelimit/
│ └── guava/
│ └── SpringBootDemoRatelimitGuavaApplicationTests.java
├── demo-ratelimit-redis/
│ ├── .gitignore
│ ├── README.md
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ ├── java/
│ │ │ └── com/
│ │ │ └── xkcoding/
│ │ │ └── ratelimit/
│ │ │ └── redis/
│ │ │ ├── SpringBootDemoRatelimitRedisApplication.java
│ │ │ ├── annotation/
│ │ │ │ └── RateLimiter.java
│ │ │ ├── aspect/
│ │ │ │ └── RateLimiterAspect.java
│ │ │ ├── config/
│ │ │ │ └── RedisConfig.java
│ │ │ ├── controller/
│ │ │ │ └── TestController.java
│ │ │ ├── handler/
│ │ │ │ └── GlobalExceptionHandler.java
│ │ │ └── util/
│ │ │ └── IpUtil.java
│ │ └── resources/
│ │ ├── application.yml
│ │ └── scripts/
│ │ └── redis/
│ │ └── limit.lua
│ └── test/
│ └── java/
│ └── com/
│ └── xkcoding/
│ └── ratelimit/
│ └── redis/
│ └── SpringBootDemoRatelimiterRedisApplicationTests.java
├── demo-rbac-security/
│ ├── .gitignore
│ ├── README.md
│ ├── pom.xml
│ ├── sql/
│ │ └── security.sql
│ └── src/
│ ├── main/
│ │ ├── java/
│ │ │ └── com/
│ │ │ └── xkcoding/
│ │ │ └── rbac/
│ │ │ └── security/
│ │ │ ├── SpringBootDemoRbacSecurityApplication.java
│ │ │ ├── common/
│ │ │ │ ├── ApiResponse.java
│ │ │ │ ├── BaseException.java
│ │ │ │ ├── Consts.java
│ │ │ │ ├── IStatus.java
│ │ │ │ ├── PageResult.java
│ │ │ │ └── Status.java
│ │ │ ├── config/
│ │ │ │ ├── CustomConfig.java
│ │ │ │ ├── IdConfig.java
│ │ │ │ ├── IgnoreConfig.java
│ │ │ │ ├── JwtAuthenticationFilter.java
│ │ │ │ ├── JwtConfig.java
│ │ │ │ ├── RbacAuthorityService.java
│ │ │ │ ├── RedisConfig.java
│ │ │ │ ├── SecurityConfig.java
│ │ │ │ ├── SecurityHandlerConfig.java
│ │ │ │ └── WebMvcConfig.java
│ │ │ ├── controller/
│ │ │ │ ├── AuthController.java
│ │ │ │ ├── MonitorController.java
│ │ │ │ └── TestController.java
│ │ │ ├── exception/
│ │ │ │ ├── SecurityException.java
│ │ │ │ └── handler/
│ │ │ │ └── GlobalExceptionHandler.java
│ │ │ ├── model/
│ │ │ │ ├── Permission.java
│ │ │ │ ├── Role.java
│ │ │ │ ├── RolePermission.java
│ │ │ │ ├── User.java
│ │ │ │ ├── UserRole.java
│ │ │ │ └── unionkey/
│ │ │ │ ├── RolePermissionKey.java
│ │ │ │ └── UserRoleKey.java
│ │ │ ├── payload/
│ │ │ │ ├── LoginRequest.java
│ │ │ │ └── PageCondition.java
│ │ │ ├── repository/
│ │ │ │ ├── PermissionDao.java
│ │ │ │ ├── RoleDao.java
│ │ │ │ ├── RolePermissionDao.java
│ │ │ │ ├── UserDao.java
│ │ │ │ └── UserRoleDao.java
│ │ │ ├── service/
│ │ │ │ ├── CustomUserDetailsService.java
│ │ │ │ └── MonitorService.java
│ │ │ ├── util/
│ │ │ │ ├── JwtUtil.java
│ │ │ │ ├── PageUtil.java
│ │ │ │ ├── RedisUtil.java
│ │ │ │ ├── ResponseUtil.java
│ │ │ │ └── SecurityUtil.java
│ │ │ └── vo/
│ │ │ ├── JwtResponse.java
│ │ │ ├── OnlineUser.java
│ │ │ └── UserPrincipal.java
│ │ └── resources/
│ │ └── application.yml
│ └── test/
│ └── java/
│ └── com/
│ └── xkcoding/
│ └── rbac/
│ └── security/
│ ├── SpringBootDemoRbacSecurityApplicationTests.java
│ ├── repository/
│ │ ├── DataInitTest.java
│ │ └── UserDaoTest.java
│ └── util/
│ └── RedisUtilTest.java
├── demo-rbac-shiro/
│ ├── .gitignore
│ ├── pom.xml
│ ├── sql/
│ │ └── shiro.sql
│ └── src/
│ ├── main/
│ │ ├── java/
│ │ │ └── com/
│ │ │ └── xkcoding/
│ │ │ └── rbac/
│ │ │ └── shiro/
│ │ │ ├── SpringBootDemoRbacShiroApplication.java
│ │ │ ├── common/
│ │ │ │ ├── IResultCode.java
│ │ │ │ ├── R.java
│ │ │ │ └── ResultCode.java
│ │ │ ├── config/
│ │ │ │ └── MybatisPlusConfig.java
│ │ │ └── controller/
│ │ │ └── TestController.java
│ │ └── resources/
│ │ ├── application.yml
│ │ └── spy.properties
│ └── test/
│ └── java/
│ └── com/
│ └── xkcoding/
│ └── rbac/
│ └── shiro/
│ └── SpringBootDemoRbacShiroApplicationTests.java
├── demo-session/
│ ├── .gitignore
│ ├── README.md
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ ├── java/
│ │ │ └── com/
│ │ │ └── xkcoding/
│ │ │ └── session/
│ │ │ ├── SpringBootDemoSessionApplication.java
│ │ │ ├── config/
│ │ │ │ └── WebMvcConfig.java
│ │ │ ├── constants/
│ │ │ │ └── Consts.java
│ │ │ ├── controller/
│ │ │ │ └── PageController.java
│ │ │ └── interceptor/
│ │ │ └── SessionInterceptor.java
│ │ └── resources/
│ │ ├── application.yml
│ │ └── templates/
│ │ ├── index.html
│ │ └── login.html
│ └── test/
│ └── java/
│ └── com/
│ └── xkcoding/
│ └── session/
│ └── SpringBootDemoSessionApplicationTests.java
├── demo-sharding-jdbc/
│ ├── .gitignore
│ ├── README.md
│ ├── pom.xml
│ ├── sql/
│ │ └── schema.sql
│ └── src/
│ ├── main/
│ │ ├── java/
│ │ │ └── com/
│ │ │ └── xkcoding/
│ │ │ └── sharding/
│ │ │ └── jdbc/
│ │ │ ├── SpringBootDemoShardingJdbcApplication.java
│ │ │ ├── config/
│ │ │ │ ├── CustomSnowflakeKeyGenerator.java
│ │ │ │ └── DataSourceShardingConfig.java
│ │ │ ├── mapper/
│ │ │ │ └── OrderMapper.java
│ │ │ └── model/
│ │ │ └── Order.java
│ │ └── resources/
│ │ └── application.yml
│ └── test/
│ └── java/
│ └── com/
│ └── xkcoding/
│ └── sharding/
│ └── jdbc/
│ └── SpringBootDemoShardingJdbcApplicationTests.java
├── demo-social/
│ ├── .gitignore
│ ├── README.md
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ ├── java/
│ │ │ └── com/
│ │ │ └── xkcoding/
│ │ │ └── social/
│ │ │ ├── SpringBootDemoSocialApplication.java
│ │ │ └── controller/
│ │ │ └── OauthController.java
│ │ └── resources/
│ │ └── application.yml
│ └── test/
│ └── java/
│ └── com/
│ └── xkcoding/
│ └── social/
│ └── SpringBootDemoSocialApplicationTests.java
├── demo-swagger/
│ ├── .gitignore
│ ├── README.md
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ ├── java/
│ │ │ └── com/
│ │ │ └── xkcoding/
│ │ │ └── swagger/
│ │ │ ├── SpringBootDemoSwaggerApplication.java
│ │ │ ├── common/
│ │ │ │ ├── ApiResponse.java
│ │ │ │ ├── DataType.java
│ │ │ │ └── ParamType.java
│ │ │ ├── config/
│ │ │ │ └── Swagger2Config.java
│ │ │ ├── controller/
│ │ │ │ └── UserController.java
│ │ │ └── entity/
│ │ │ └── User.java
│ │ └── resources/
│ │ └── application.yml
│ └── test/
│ └── java/
│ └── com/
│ └── xkcoding/
│ └── swagger/
│ └── SpringBootDemoSwaggerApplicationTests.java
├── demo-swagger-beauty/
│ ├── .gitignore
│ ├── README.md
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ ├── java/
│ │ │ └── com/
│ │ │ └── xkcoding/
│ │ │ └── swagger/
│ │ │ └── beauty/
│ │ │ ├── SpringBootDemoSwaggerBeautyApplication.java
│ │ │ ├── common/
│ │ │ │ └── ApiResponse.java
│ │ │ ├── controller/
│ │ │ │ └── UserController.java
│ │ │ └── entity/
│ │ │ └── User.java
│ │ └── resources/
│ │ └── application.yml
│ └── test/
│ └── java/
│ └── com/
│ └── xkcoding/
│ └── swagger/
│ └── beauty/
│ └── SpringBootDemoSwaggerBeautyApplicationTests.java
├── demo-task/
│ ├── .gitignore
│ ├── README.md
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ ├── java/
│ │ │ └── com/
│ │ │ └── xkcoding/
│ │ │ └── task/
│ │ │ ├── SpringBootDemoTaskApplication.java
│ │ │ ├── config/
│ │ │ │ └── TaskConfig.java
│ │ │ └── job/
│ │ │ └── TaskJob.java
│ │ └── resources/
│ │ └── application.yml
│ └── test/
│ └── java/
│ └── com/
│ └── xkcoding/
│ └── task/
│ └── SpringBootDemoTaskApplicationTests.java
├── demo-task-quartz/
│ ├── .gitignore
│ ├── README.md
│ ├── init/
│ │ └── dbTables/
│ │ ├── tables_cloudscape.sql
│ │ ├── tables_cubrid.sql
│ │ ├── tables_db2.sql
│ │ ├── tables_db2_v72.sql
│ │ ├── tables_db2_v8.sql
│ │ ├── tables_db2_v95.sql
│ │ ├── tables_derby.sql
│ │ ├── tables_derby_previous.sql
│ │ ├── tables_firebird.sql
│ │ ├── tables_h2.sql
│ │ ├── tables_hsqldb.sql
│ │ ├── tables_hsqldb_old.sql
│ │ ├── tables_informix.sql
│ │ ├── tables_mysql.sql
│ │ ├── tables_mysql_innodb.sql
│ │ ├── tables_oracle.sql
│ │ ├── tables_pointbase.sql
│ │ ├── tables_postgres.sql
│ │ ├── tables_sapdb.sql
│ │ ├── tables_solid.sql
│ │ ├── tables_sqlServer.sql
│ │ └── tables_sybase.sql
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ ├── java/
│ │ │ └── com/
│ │ │ └── xkcoding/
│ │ │ └── task/
│ │ │ └── quartz/
│ │ │ ├── SpringBootDemoTaskQuartzApplication.java
│ │ │ ├── common/
│ │ │ │ └── ApiResponse.java
│ │ │ ├── controller/
│ │ │ │ └── JobController.java
│ │ │ ├── entity/
│ │ │ │ ├── domain/
│ │ │ │ │ └── JobAndTrigger.java
│ │ │ │ └── form/
│ │ │ │ └── JobForm.java
│ │ │ ├── job/
│ │ │ │ ├── HelloJob.java
│ │ │ │ ├── TestJob.java
│ │ │ │ └── base/
│ │ │ │ └── BaseJob.java
│ │ │ ├── mapper/
│ │ │ │ └── JobMapper.java
│ │ │ ├── service/
│ │ │ │ ├── JobService.java
│ │ │ │ └── impl/
│ │ │ │ └── JobServiceImpl.java
│ │ │ └── util/
│ │ │ └── JobUtil.java
│ │ └── resources/
│ │ ├── application.yml
│ │ ├── mappers/
│ │ │ └── JobMapper.xml
│ │ └── static/
│ │ └── job.html
│ └── test/
│ └── java/
│ └── com/
│ └── xkcoding/
│ └── task/
│ └── quartz/
│ └── SpringBootDemoTaskQuartzApplicationTests.java
├── demo-task-xxl-job/
│ ├── .gitignore
│ ├── README.md
│ ├── pom.xml
│ └── src/
│ └── main/
│ ├── java/
│ │ └── com/
│ │ └── xkcoding/
│ │ └── task/
│ │ └── xxl/
│ │ └── job/
│ │ ├── SpringBootDemoTaskXxlJobApplication.java
│ │ ├── config/
│ │ │ ├── XxlJobConfig.java
│ │ │ └── props/
│ │ │ └── XxlJobProps.java
│ │ ├── controller/
│ │ │ └── ManualOperateController.java
│ │ └── task/
│ │ └── DemoTask.java
│ └── resources/
│ └── application.yml
├── demo-template-beetl/
│ ├── .gitignore
│ ├── README.md
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ ├── java/
│ │ │ └── com/
│ │ │ └── xkcoding/
│ │ │ └── template/
│ │ │ └── beetl/
│ │ │ ├── SpringBootDemoTemplateBeetlApplication.java
│ │ │ ├── controller/
│ │ │ │ ├── IndexController.java
│ │ │ │ └── UserController.java
│ │ │ └── model/
│ │ │ └── User.java
│ │ └── resources/
│ │ ├── application.yml
│ │ └── templates/
│ │ ├── common/
│ │ │ └── head.html
│ │ └── page/
│ │ ├── index.btl
│ │ └── login.btl
│ └── test/
│ └── java/
│ └── com/
│ └── xkcoding/
│ └── template/
│ └── beetl/
│ └── SpringBootDemoTemplateBeetlApplicationTests.java
├── demo-template-enjoy/
│ ├── .gitignore
│ ├── README.md
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ ├── java/
│ │ │ └── com/
│ │ │ └── xkcoding/
│ │ │ └── template/
│ │ │ └── enjoy/
│ │ │ ├── SpringBootDemoTemplateEnjoyApplication.java
│ │ │ ├── config/
│ │ │ │ └── EnjoyConfig.java
│ │ │ ├── controller/
│ │ │ │ ├── IndexController.java
│ │ │ │ └── UserController.java
│ │ │ └── model/
│ │ │ └── User.java
│ │ └── resources/
│ │ ├── application.yml
│ │ └── templates/
│ │ ├── common/
│ │ │ └── head.html
│ │ └── page/
│ │ ├── index.html
│ │ └── login.html
│ └── test/
│ └── java/
│ └── com/
│ └── xkcoding/
│ └── template/
│ └── enjoy/
│ └── SpringBootDemoTemplateEnjoyApplicationTests.java
├── demo-template-freemarker/
│ ├── .gitignore
│ ├── README.md
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ ├── java/
│ │ │ └── com/
│ │ │ └── xkcoding/
│ │ │ └── template/
│ │ │ └── freemarker/
│ │ │ ├── SpringBootDemoTemplateFreemarkerApplication.java
│ │ │ ├── controller/
│ │ │ │ ├── IndexController.java
│ │ │ │ └── UserController.java
│ │ │ └── model/
│ │ │ └── User.java
│ │ └── resources/
│ │ ├── application.yml
│ │ └── templates/
│ │ ├── common/
│ │ │ └── head.ftl
│ │ └── page/
│ │ ├── index.ftl
│ │ └── login.ftl
│ └── test/
│ └── java/
│ └── com/
│ └── xkcoding/
│ └── template/
│ └── freemarker/
│ └── SpringBootDemoTemplateFreemarkerApplicationTests.java
├── demo-template-thymeleaf/
│ ├── .gitignore
│ ├── README.md
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ ├── java/
│ │ │ └── com/
│ │ │ └── xkcoding/
│ │ │ └── template/
│ │ │ └── thymeleaf/
│ │ │ ├── SpringBootDemoTemplateThymeleafApplication.java
│ │ │ ├── controller/
│ │ │ │ ├── IndexController.java
│ │ │ │ └── UserController.java
│ │ │ └── model/
│ │ │ └── User.java
│ │ └── resources/
│ │ ├── application.yml
│ │ └── templates/
│ │ ├── common/
│ │ │ └── head.html
│ │ └── page/
│ │ ├── index.html
│ │ └── login.html
│ └── test/
│ └── java/
│ └── com/
│ └── xkcoding/
│ └── template/
│ └── thymeleaf/
│ └── SpringBootDemoTemplateThymeleafApplicationTests.java
├── demo-tio/
│ ├── .gitignore
│ ├── README.md
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ ├── java/
│ │ │ └── com/
│ │ │ └── xkcoding/
│ │ │ └── springbootdemotio/
│ │ │ └── SpringBootDemoTioApplication.java
│ │ └── resources/
│ │ └── application.properties
│ └── test/
│ └── java/
│ └── com/
│ └── xkcoding/
│ └── springbootdemotio/
│ └── SpringBootDemoTioApplicationTests.java
├── demo-uflo/
│ ├── .gitignore
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ ├── java/
│ │ │ └── com/
│ │ │ └── xkcoding/
│ │ │ └── uflo/
│ │ │ └── SpringBootDemoUfloApplication.java
│ │ └── resources/
│ │ └── application.properties
│ └── test/
│ └── java/
│ └── com/
│ └── xkcoding/
│ └── uflo/
│ └── SpringBootDemoUfloApplicationTests.java
├── demo-upload/
│ ├── .gitignore
│ ├── README.md
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ ├── java/
│ │ │ └── com/
│ │ │ └── xkcoding/
│ │ │ └── upload/
│ │ │ ├── SpringBootDemoUploadApplication.java
│ │ │ ├── config/
│ │ │ │ └── UploadConfig.java
│ │ │ ├── controller/
│ │ │ │ ├── IndexController.java
│ │ │ │ └── UploadController.java
│ │ │ └── service/
│ │ │ ├── IQiNiuService.java
│ │ │ └── impl/
│ │ │ └── QiNiuServiceImpl.java
│ │ └── resources/
│ │ ├── application.yml
│ │ └── templates/
│ │ └── index.html
│ └── test/
│ └── java/
│ └── com/
│ └── xkcoding/
│ └── upload/
│ └── SpringBootDemoUploadApplicationTests.java
├── demo-ureport2/
│ ├── .gitignore
│ ├── README.md
│ ├── doc/
│ │ ├── sql/
│ │ │ └── t_user_ureport2.sql
│ │ └── ureport2/
│ │ └── user_inner_datasource.ureport.xml
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ ├── java/
│ │ │ └── com/
│ │ │ └── xkcoding/
│ │ │ └── ureport2/
│ │ │ ├── SpringBootDemoUreport2Application.java
│ │ │ └── config/
│ │ │ └── InnerDatasource.java
│ │ └── resources/
│ │ └── application.yml
│ └── test/
│ └── java/
│ └── com/
│ └── xkcoding/
│ └── ureport2/
│ └── SpringBootDemoUreport2ApplicationTests.java
├── demo-urule/
│ ├── .gitignore
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ ├── java/
│ │ │ └── com/
│ │ │ └── xkcoding/
│ │ │ └── urule/
│ │ │ └── SpringBootDemoUruleApplication.java
│ │ └── resources/
│ │ └── application.properties
│ └── test/
│ └── java/
│ └── com/
│ └── xkcoding/
│ └── urule/
│ └── SpringBootDemoUruleApplicationTests.java
├── demo-war/
│ ├── .gitignore
│ ├── README.md
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ ├── java/
│ │ │ └── com/
│ │ │ └── xkcoding/
│ │ │ └── war/
│ │ │ └── SpringBootDemoWarApplication.java
│ │ └── resources/
│ │ └── application.yml
│ └── test/
│ └── java/
│ └── com/
│ └── xkcoding/
│ └── war/
│ └── SpringBootDemoWarApplicationTests.java
├── demo-websocket/
│ ├── .gitignore
│ ├── README.md
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ ├── java/
│ │ │ └── com/
│ │ │ └── xkcoding/
│ │ │ └── websocket/
│ │ │ ├── SpringBootDemoWebsocketApplication.java
│ │ │ ├── common/
│ │ │ │ └── WebSocketConsts.java
│ │ │ ├── config/
│ │ │ │ └── WebSocketConfig.java
│ │ │ ├── controller/
│ │ │ │ └── ServerController.java
│ │ │ ├── model/
│ │ │ │ ├── Server.java
│ │ │ │ └── server/
│ │ │ │ ├── Cpu.java
│ │ │ │ ├── Jvm.java
│ │ │ │ ├── Mem.java
│ │ │ │ ├── Sys.java
│ │ │ │ └── SysFile.java
│ │ │ ├── payload/
│ │ │ │ ├── KV.java
│ │ │ │ ├── ServerVO.java
│ │ │ │ └── server/
│ │ │ │ ├── CpuVO.java
│ │ │ │ ├── JvmVO.java
│ │ │ │ ├── MemVO.java
│ │ │ │ ├── SysFileVO.java
│ │ │ │ └── SysVO.java
│ │ │ ├── task/
│ │ │ │ └── ServerTask.java
│ │ │ └── util/
│ │ │ ├── IpUtil.java
│ │ │ └── ServerUtil.java
│ │ └── resources/
│ │ ├── application.yml
│ │ └── static/
│ │ ├── js/
│ │ │ └── stomp.js
│ │ └── server.html
│ └── test/
│ └── java/
│ └── com/
│ └── xkcoding/
│ └── websocket/
│ └── SpringBootDemoWebsocketApplicationTests.java
├── demo-websocket-socketio/
│ ├── .gitignore
│ ├── README.md
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ ├── java/
│ │ │ └── com/
│ │ │ └── xkcoding/
│ │ │ └── websocket/
│ │ │ └── socketio/
│ │ │ ├── SpringBootDemoWebsocketSocketioApplication.java
│ │ │ ├── config/
│ │ │ │ ├── DbTemplate.java
│ │ │ │ ├── Event.java
│ │ │ │ ├── ServerConfig.java
│ │ │ │ └── WsConfig.java
│ │ │ ├── controller/
│ │ │ │ └── MessageController.java
│ │ │ ├── handler/
│ │ │ │ └── MessageEventHandler.java
│ │ │ ├── init/
│ │ │ │ └── ServerRunner.java
│ │ │ └── payload/
│ │ │ ├── BroadcastMessageRequest.java
│ │ │ ├── GroupMessageRequest.java
│ │ │ ├── JoinRequest.java
│ │ │ └── SingleMessageRequest.java
│ │ └── resources/
│ │ ├── application.yml
│ │ └── static/
│ │ ├── bootstrap.css
│ │ ├── index.html
│ │ └── js/
│ │ └── socket.io/
│ │ └── socket.io.js
│ └── test/
│ └── java/
│ └── com/
│ └── xkcoding/
│ └── websocket/
│ └── socketio/
│ └── SpringBootDemoWebsocketSocketioApplicationTests.java
├── demo-zookeeper/
│ ├── .gitignore
│ ├── README.md
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ ├── java/
│ │ │ └── com/
│ │ │ └── xkcoding/
│ │ │ └── zookeeper/
│ │ │ ├── SpringBootDemoZookeeperApplication.java
│ │ │ ├── annotation/
│ │ │ │ ├── LockKeyParam.java
│ │ │ │ └── ZooLock.java
│ │ │ ├── aspectj/
│ │ │ │ └── ZooLockAspect.java
│ │ │ └── config/
│ │ │ ├── ZkConfig.java
│ │ │ └── props/
│ │ │ └── ZkProps.java
│ │ └── resources/
│ │ └── application.yml
│ └── test/
│ └── java/
│ └── com/
│ └── xkcoding/
│ └── zookeeper/
│ └── SpringBootDemoZookeeperApplicationTests.java
├── jd.md
└── pom.xml
================================================
FILE CONTENTS
================================================
================================================
FILE: .codacy.yml
================================================
---
exclude_paths:
- '**.md'
- '**/**.md'
- '**.sql'
- '**.html'
- '**/static/**'
- '**/templates/**'
- '**/test/**'
================================================
FILE: .editorconfig
================================================
# 开发组IDE 编辑器标准
root = true
[*]
indent_size = 2
charset = utf-8
indent_style = space
end_of_line = lf
insert_final_newline = true
trim_trailing_whitespace = true
[*.{groovy, java, kt, kts, xsd}]
indent_size = 4
================================================
FILE: .gitee/ISSUE_TEMPLATE/bug_report.md
================================================
---
name: 报告缺陷
about: 报告缺陷以帮助我们改进
title: "[BUG]"
labels: bug
assignees: xkcoding
---
**请先看[《提问的智慧》](https://github.com/ryanhanwu/How-To-Ask-Questions-The-Smart-Way/blob/master/README-zh_CN.md?utm_source=hacpai.com)**,并尝试到 **[issue 列表](https://github.com/xkcoding/spring-boot-demo/issues)** 搜寻是否已经有人遇到过同样的问题。
----
### 描述问题
请尽量清晰精准地描述你碰到的问题。
```bash
日志内容
```
### 期待的结果
请尽量清晰精准地描述你所期待的结果。
### 截屏或录像
如果可能,请尽量附加截图或录像来描述你遇到的问题。
### 其他信息
请提供其他附加信息帮助我们诊断问题。
================================================
FILE: .gitee/ISSUE_TEMPLATE/feature_request.md
================================================
---
name: 请求新功能
about: 提出你期待的功能特性
title: "[FEATURE]"
labels: feature
assignees: xkcoding
---
### 你在什么场景下需要该功能?
请尽量清晰精准地描述你碰到的问题。
### 描述可能的解决方案
请尽量清晰精准地描述你期待我们要做的,描述你想到的实现方案。
### 描述你认为的候选方案
请尽量清晰精准地描述你能接受的候选解决方案。
### 其他信息
请提供关于该功能建议的其他附加信息。
================================================
FILE: .gitee/PULL_REQUEST_TEMPLATE.md
================================================
* PR 修复缺陷请先开 `issue` **[报告缺陷](https://github.com/xkcoding/spring-boot-demo/issues/new?template=bug_report.md)**
* PR 提交新特性请先开 `issue` **[报告新特性](https://github.com/xkcoding/spring-boot-demo/issues/new?template=feature_request.md)**
* PR 请提交到 `dev` 开发分支上
* 我们对编码风格有着较为严格的要求,请在阅读代码后模仿类似风格提交
* 欢迎通过 PR 给我们补充案例
================================================
FILE: .github/FUNDING.yml
================================================
custom: https://docs.xkcoding.com/SPONSER.html
================================================
FILE: .github/ISSUE_TEMPLATE/bug_report.md
================================================
---
name: 报告缺陷
about: 报告缺陷以帮助我们改进
title: "[BUG]"
labels: bug
assignees: xkcoding
---
**请先看[《提问的智慧》](https://github.com/ryanhanwu/How-To-Ask-Questions-The-Smart-Way/blob/master/README-zh_CN.md?utm_source=hacpai.com)**,并尝试到 **[issue 列表](https://github.com/xkcoding/spring-boot-demo/issues)** 搜寻是否已经有人遇到过同样的问题。
----
### 描述问题
请尽量清晰精准地描述你碰到的问题。
```bash
日志内容
```
### 期待的结果
请尽量清晰精准地描述你所期待的结果。
### 截屏或录像
如果可能,请尽量附加截图或录像来描述你遇到的问题。
### 其他信息
请提供其他附加信息帮助我们诊断问题。
================================================
FILE: .github/ISSUE_TEMPLATE/feature_request.md
================================================
---
name: 请求新功能
about: 提出你期待的功能特性
title: "[FEATURE]"
labels: feature
assignees: xkcoding
---
### 你在什么场景下需要该功能?
请尽量清晰精准地描述你碰到的问题。
### 描述可能的解决方案
请尽量清晰精准地描述你期待我们要做的,描述你想到的实现方案。
### 描述你认为的候选方案
请尽量清晰精准地描述你能接受的候选解决方案。
### 其他信息
请提供关于该功能建议的其他附加信息。
================================================
FILE: .github/PULL_REQUEST_TEMPLATE.md
================================================
* PR 修复缺陷请先开 `issue` **[报告缺陷](https://github.com/xkcoding/spring-boot-demo/issues/new?template=bug_report.md)**
* PR 提交新特性请先开 `issue` **[报告新特性](https://github.com/xkcoding/spring-boot-demo/issues/new?template=feature_request.md)**
* PR 请提交到 `dev` 开发分支上
* 我们对编码风格有着较为严格的要求,请在阅读代码后模仿类似风格提交
* 欢迎通过 PR 给我们补充案例
================================================
FILE: .github/workflows/maven.yml
================================================
name: GitHub CI
on:
push:
branches:
- master
pull_request:
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v1
- name: Set up JDK 1.8
uses: actions/setup-java@v1
with:
java-version: 1.8
- name: Build with Maven
run: mvn clean package -DskipTests=true -Dmaven.javadoc.skip=true -B -V
================================================
FILE: .gitignore
================================================
# Created by .ignore support plugin (hsz.mobi)
### xkcoding-后端 template
### Spring Boot ###
target/
!.mvn/wrapper/maven-wrapper.jar
### STS ###
.apt_generated
.classpath
.factorypath
.project
.settings
.springBeans
.sts4-cache
### IntelliJ IDEA ###
.idea
*.iws
*.iml
*.ipr
out/
gen/
### NetBeans ###
/nbproject/private/
/build/
/nbbuild/
/dist/
/nbdist/
/.nb-gradle/
### LOGS ###
logs/
*.log
### Mac OS ###
.DS_Store
### VS CODE ###
.vscode/
================================================
FILE: .travis.yml
================================================
# 语言
language: java
# 执行脚本
script: "mvn clean package -DskipTests=true -Dmaven.javadoc.skip=true -B -V"
# 通知
notifications:
email:
recipients:
- 237497819@qq.com
on_success: always # default: change
on_failure: always # default: always
# 缓存
cache:
directories:
- '$HOME/.m2/repository'
branches:
only:
- master
================================================
FILE: LICENSE
================================================
MIT License
Copyright (c) 2018 Yangkai.Shen
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.en.md
================================================
<h1 align="center"><a href="https://github.com/xkcoding" target="_blank">Spring Boot Demo</a></h1>
<p align="center">
<a href="https://travis-ci.com/xkcoding/spring-boot-demo"><img alt="Travis-CI" src="https://travis-ci.com/xkcoding/spring-boot-demo.svg?branch=master"/></a>
<a href="https://www.codacy.com/app/xkcoding/spring-boot-demo?utm_source=github.com&utm_medium=referral&utm_content=xkcoding/spring-boot-demo&utm_campaign=Badge_Grade"><img alt="Codacy" src="https://api.codacy.com/project/badge/Grade/1f2e3d437b174bfc943dae1600332ec1"/></a>
<a href="https://xkcoding.com"><img alt="author" src="https://img.shields.io/badge/author-Yangkai.Shen-blue.svg"/></a>
<a href="https://www.oracle.com/technetwork/java/javase/downloads/index.html"><img alt="JDK" src="https://img.shields.io/badge/JDK-1.8.0_162-orange.svg"/></a>
<a href="https://docs.spring.io/spring-boot/docs/2.1.0.RELEASE/reference/html/"><img alt="Spring Boot" src="https://img.shields.io/badge/Spring Boot-2.1.0.RELEASE-brightgreen.svg"/></a>
<a href="https://github.com/xkcoding/spring-boot-demo/blob/master/LICENSE"><img alt="LICENSE" src="https://img.shields.io/github/license/xkcoding/spring-boot-demo.svg"/></a>
</p>
<p align="center">
<a href="https://github.com/xkcoding/spring-boot-demo/stargazers"><img alt="star" src="https://img.shields.io/github/stars/xkcoding/spring-boot-demo.svg?label=Stars&style=social"/></a>
<a href="https://github.com/xkcoding/spring-boot-demo/network/members"><img alt="star" src="https://img.shields.io/github/forks/xkcoding/spring-boot-demo.svg?label=Fork&style=social"/></a>
<a href="https://github.com/xkcoding/spring-boot-demo/watchers"><img alt="star" src="https://img.shields.io/github/watchers/xkcoding/spring-boot-demo.svg?label=Watch&style=social"/></a>
</p>
<p align="center">
<span>English | <a href="./README.md">中文</a></span>
</p>
## Introduction
`spring boot demo` is a project for learning and practicing `spring boot`, including `66` demos, and `55` of them have been done.
This project has integrated actuator (`monitoring`), admin (`visual monitoring`), logback (`log`), aopLog (`recording web request logs through AOP`), global exception handling (`json level and page level` ), freemarker (`template engine`), thymeleaf (`template engine`), Beetl (`template engine`), Enjoy (`template engine`), JdbcTemplate (`general JDBC operate database`), JPA (`powerful ORM framework `), mybatis (`powerful ORM framework`), Generic Mapper (`mybatis quick operation `), PageHelper (`powerful mybatis pagination plugin`), mybatis-plus (`mybatis quick operation`), BeetlSQL (`powerful ORM framework `), upload (`local file upload and qiniu cloud file upload`), redis (`cache`), ehcache (`cache`), email (`send various types of mail`), task (`basic scheduled tasks`), quartz (`dynamic management scheduled tasks`), xxl-job (`distributed scheduled tasks`), swagger (`API interface management and tests`), security (`RBAC-based Dynamic Rights Authentication`), SpringSession (`session sharing`), Zookeeper (`implement distributed locks by AOP`), RabbitMQ (`message queue`), Kafka (`message queue`), websocket (` server pushes the monitoring server status to front end `), socket.io (`chat room`), ureport2 (`Chinese-style report`), packaged into a `war` file, integrate ElasticSearch (`basic operations and advanced queries`), Async ( `asynchronous tasks`), integrated Dubbo (`with official starter`), MongoDB (`document database`), neo4j (`graph database`), docker (`container`), `JPA Multi-Datasource`, `Mybatis Multi-Datasource`, `code generator`', GrayLog (`log collection`), JustAuth (`third-party login`), LDAP(`CURD`), `Dynamically add/switch datasources`, Standalone RateLimiting(`AOP + Guava RateLimiter`), Distributed Ratelimiting(`AOP + Redis + Lua`), ElasticSearch 7.x(`use official Rest High Level Client`), HTTPS, Flyway(`initialize databases`),UReport2(`Chinese complex report `).
> If you have demos to contribute or needs to meet, it is very welcome to submit a [issue](https://github.com/xkcoding/spring-boot-demo/issues/new) and I will add it to my [TODO](./TODO.en.md) list.
## Branch Introduction
- branch master: Based on Spring Boot version `2.1.0.RELEASE`. Every module's parent dependency is the pom.xml at root directory in convenience of managing common dependencies and learning spring boot.
- branch v-1.5.x: Based on Spring Boot version `1.5.8.RELEASE`. Every module's parent dependency is spring-boot-demo-parent. But since the feedback shows that it is not much friendly to many new learners, this branch will not be mantained any more. All of the demos will be moved to branch master. Everyone could still study at this branch but it's suggested to study at branch master while Spring Boot has much new content over version `2.x`.
## Environment
- **JDK 1.8 +**
- **Maven 3.5 +**
- **IntelliJ IDEA ULTIMATE 2018.2 +** (*Note: Please use IDEA and make sure plugin `lombok` installed.*)
- **Mysql 5.7 +** (*Please use version 5.7 or higher because mysql has some new features and is not backward compatible at version 5.7. Althought this project will try to avoid this incompatibility*)
## Getting Started
> Note: If you has been forked this project, need to sync the project's code, please see: https://xkcoding.com/2018/09/18/how-to-update-the-fork-project.html
1. `git clone https://github.com/xkcoding/spring-boot-demo.git`
2. Open the cloned project in IDEA
3. Import the `pom.xml` file from the root directory using `Maven Projects` panel
4. If you can not find `Maven Projects` panel, try to tick `View -> Tool Buttons` on and the `Maven Projects` panel will appear on the right side of IDEA.
5. Find each Application class to run each module.
6. **`Note: Each demo has a detailed README file. Remember to check it before running the demo~`**
7. **`Note: In some condition you have to execute sql to prepare data before running demo, don't forget it~`**
## Stargazers over time
[](https://starchart.cc/xkcoding/spring-boot-demo)
## Appendix
### Recommended Open source
- `JustAuth`:The most comprehensive open source library for third-party logins in history,https://github.com/justauth/JustAuth
- `Mica`:Spring Boot microservices efficient development toolset,https://github.com/lets-mica/mica
- `awesome-collector`:https://github.com/P-P-X/awesome-collector
- `SpringBlade`:Complete micro-service online solution (required for enterprise development),https://github.com/chillzhuang/SpringBlade
- `Pig`:The universe's strongest micro-service certification authorized scaffolding (architect necessary),https://github.com/pigxcloud/pig
### TODO
View the [TODO](./TODO.en.md) file
### Introduction of each Module
| Module Name | Module Description |
| ------------------------------------------------------------ | ------------------------------------------------------------ |
| [demo-helloworld](./demo-helloworld) | a helloworld demo. |
| [demo-properties](./demo-properties) | a demo to read the contents of configuration file. |
| [demo-actuator](./demo-actuator) | a demo to integrate spring-boot-starter-actuator for monitoring the starting status and the running status of application. |
| [demo-admin-client](./demo-admin/admin-client) | a client demo to integrate spring-boot-admin for visually monitoring the running status of application, it can be used with spring-boot-starter-actuator. |
| [demo-admin-server](./demo-admin/admin-server) | a server demo to integrate spring-boot-admin for visually monitoring the running status of the spring-boot program, it can be used with spring-boot-starter-actuator. |
| [demo-logback](./demo-logback) | a demo to integrate the logback for logging. |
| [demo-log-aop](./demo-log-aop) | a demo to record web request logs using AOP aspect. |
| [demo-exception-handler](./demo-exception-handler) | a demo to demonstrate global exception handling, including 2 types, the first one returns json data, and the second one jumps to error page. |
| [demo-template-freemarker](./demo-template-freemarker) | a demo to integrate Freemarker template engine. |
| [demo-template-thymeleaf](./demo-template-thymeleaf) | a demo to integrate Thymeleaf template engine. |
| [demo-template-beetl](./demo-template-beetl) | a demo to integrate Beetl template engine. |
| [demo-template-enjoy](./demo-template-enjoy) | a demo to integrate Enjoy template engine. |
| [demo-orm-jdbctemplate](./demo-orm-jdbctemplate) | a demo to integrate the Jdbc Template for operating database and easily encapsulate the generic Dao layer. |
| [demo-orm-jpa](./demo-orm-jpa) | a demo to integrate spring-boot-starter-data-jpa for operating database. |
| [demo-orm-mybatis](./demo-orm-mybatis) | a demo to integrate native mybatis by using [mybatis-spring-boot-starter](https://github.com/mybatis/spring-boot-starter) dependency. |
| [demo-orm-mybatis-mapper-page](./demo-orm-mybatis-mapper-page) | a demo to integrate [Mapper](https://github.com/abel533/Mapper) and [PageHelper](https://github.com/pagehelper/Mybatis-PageHelper) by using [mapper-spring-boot-starter](https://github.com/abel533/Mapper/tree/master/spring-boot-starter) and [pagehelper-spring-boot-starter](https://github.com/pagehelper/pagehelper-spring-boot) dependencies. |
| [demo-orm-mybatis-plus](./demo-orm-mybatis-plus) | a demo to integrate [mybatis-plus](https://mybatis.plus/en/) by using [mybatis-plus-boot-starter](http://mp.baomidou.com/) dependency, integrate BaseMapper / BaseService / ActiveRecord to operate database. |
| [demo-orm-beetlsql](./demo-orm-beetlsql) | a demo to integrate [beetl-sql](http://ibeetl.com/guide/#beetlsql) by using [beetl-framework-starter](http://ibeetl.com/guide/#beetlsql) dependency. |
| [demo-upload](./demo-upload) | a file upload demo, including local file upload and qiniu cloud file upload. |
| [demo-cache-redis](./demo-cache-redis) | a demo to integrate redis, operate data in redis, and use redis to cache data. |
| [demo-cache-ehcache](./demo-cache-ehcache) | a demo to integrate ehcache, and use ehcache to cache data. |
| [demo-email](./demo-email) | a demo to integrate email, including sending simple text email, HTML email (including template HTML email), attachment email, and static resource email. |
| [demo-task](./demo-task) | a demo to show easy to use scheduled task. |
| [demo-task-quartz](./demo-task-quartz) | a demo to integrate quartz for managing scheduled tasks, including adding new scheduled tasks, deleting scheduled tasks, suspending scheduled tasks, restoring scheduled tasks, modifying scheduled task startup times, and timing task list queries, and `providing front-end pages`. |
| [demo-task-xxl-job](./demo-task-xxl-job) | a demo to integrate [xxl-job](http://www.xuxueli.com/xxl-job/en/#/) for distributed scheduled tasks and provide methods to manage scheduled tasks bypass `xxl-job-admin`, including scheduled task lists, trigger lists, new scheduled tasks, deleted scheduled tasks, stopped scheduled tasks, and started scheduled tasks. Modify the scheduled task and manually trigger the scheduled task. |
| [demo-swagger](./demo-swagger) | a demo to integrate native `swagger` to manage and test API interfaces. |
| [demo-swagger-beauty](./demo-swagger-beauty) | a demo to integrate third part of swagger dependency [swagger-bootstrap-ui](https://github.com/xiaoymin/Swagger-Bootstrap-UI) to beautify document style and manage and test API interfaces. |
| [demo-rbac-security](./demo-rbac-security) | a demo to integrate spring security implement privilege management based on RBAC privilege model, supports custom filtering request, dynamic privilege authentication, uses JWT security authentication, supports online population statistics, manually kicks out users, etc. |
| [demo-rbac-shiro](./demo-rbac-shiro) | <span style="color:pink;">NOT FINISHED YET!</span> <br />a demo to integrate shiro for authentication management. |
| [demo-session](./demo-session) | a demo to integrate Spring Session to implement Session sharing, restart program Session does not expire. |
| [demo-oauth](./demo-oauth) | <span style="color:pink;">NOT FINISHED YET!</span> <br />a demo to implement the oauth server and to implement oauth2 protocol such as the authorization code, access token. |
| [demo-social](./demo-social) | a demo to integrate third-party login by using `justauth-spring-boot-starter` dependency to achieve QQ login, GitHub login, WeChat login, Google login, Microsoft login, Xiaomi login, enterprise WeChat login. |
| [demo-zookeeper](./demo-zookeeper) | a demo to integrate Zookeeper and AOP to implement distributed lock. |
| [demo-mq-rabbitmq](./demo-mq-rabbitmq) | a demo to integrate RabbitMQ implementation for message delivery and reception based on direct queue mode, fanout mode, topic mode, delay queue. |
| [demo-mq-rocketmq](./demo-mq-rocketmq) | <span style="color:pink;">NOT FINISHED YET!</span> <br />a demo to integrate RocketMQ implementation for message delivery and reception. |
| [demo-mq-kafka](./demo-mq-kafka) | a demo to integrate Kafka implementation for message delivery and reception. |
| [demo-websocket](./demo-websocket) | a demo to integrate websocket, the backend actively pushes the server running status to front end. |
| [demo-websocket-socketio](./demo-websocket-socketio) | a demo to integrate websocket by using `netty-socketio`, implement a simple chat room. |
| [demo-ureport2](./demo-ureport2) | <span style="color:pink;">NOT FINISHED YET!</span> <br />a demo to integrate [ureport2](https://github.com/youseries/ureport) to implement complex, customized Chinese-style reports. |
| [demo-uflo](./demo-uflo) | <span style="color:pink;">NOT FINISHED YET!</span> <br />a demo to integrate [uflo](https://github.com/youseries/uflo)(process engine like Activiti and Flowable) to quickly implement a lightweight process engine. |
| [demo-urule](./demo-urule) | <span style="color:pink;">NOT FINISHED YET!</span> <br />a demo to integrate [urule](https://github.com/youseries/urule)(rule engine like drools) fast implementation rule engine. |
| [demo-activiti](./demo-activiti) | <span style="color:pink;">NOT FINISHED YET!</span> <br />a demo to integrate Activiti 7 process engine. |
| [demo-async](./demo-async) | asynchronous execution of tasks by using natively provided asynchronous task support. |
| [demo-war](./demo-war) | packaged into a war format configuration |
| [demo-elasticsearch](./demo-elasticsearch) | a demo to integrate ElasticSearch by using `spring-boot-starter-data-elasticsearch` to implement advanced techniques for using ElasticSearch, including creating indexes, configuring mappings, deleting indexes, adding and deleting basic operations, complex queries, advanced queries, aggregate queries, etc. |
| [demo-dubbo](./demo-dubbo) | a demo to integrate Dubbo, common module `spring-boot-demo-dubbo-common`, service provider `spring-boot-demo-dubbo-provider`, service consumer `spring-boot-demo-dubbo-consumer`. |
| [demo-mongodb](./demo-mongodb) | a demo to integrate MongoDB and use the official starter to CRUD. |
| [demo-neo4j](./demo-neo4j) | a demo to integrate Neo4j graph database to implement a campus character relationship network. |
| [demo-docker](./demo-docker) | docker container. |
| [demo-multi-datasource-jpa](./demo-multi-datasource-jpa) | a demo to implement JPA multi-datasource. |
| [demo-multi-datasource-mybatis](./demo-multi-datasource-mybatis) | a demo to implement Mybatis multi-datasource by using an open source solution from Mybatis-Plus. |
| [demo-sharding-jdbc](./demo-sharding-jdbc) | a demo to use `sharding-jdbc` to implement sub-database and sub-tables, while ORM uses Mybatis-Plus. |
| [demo-tio](./demo-tio) | <span style="color:pink;">NOT FINISHED YET!</span> <br />a demo to integrate t-io(a network programming framework like netty). |
| demo-grpc | <span style="color:pink;">NOT FINISHED YET!</span> <br />a demo to integrate Google grpc, need to be configure tls/ssl, see [ISSUE#5](https://github.com/xkcoding/spring-boot-demo/issues/5). |
| [demo-codegen](./demo-codegen) | a demo to integrate velocity template engine to implement code generator, improve development efficiency. |
| [demo-graylog](./demo-graylog) | a demo to integrate graylog for unified log collection. |
| demo-sso | <span style="color:pink;">NOT FINISHED YET!</span> <br />a demo to integrate Single Sign On, see [ISSUE#12](https://github.com/xkcoding/spring-boot-demo/issues/12). |
| [demo-ldap](./demo-ldap) | a demo to integrate LDAP to use `spring-boot-starter-data-ldap` to implement CURD operations and give the login demo, see [ISSUE#23](https://github.com/xkcoding/spring-boot-demo/issues/23), thanks [@fxbin](https://github.com/fxbin). |
| [demo-dynamic-datasource](./demo-dynamic-datasource) | a demo to add datasource dynamically, switch datasource dynamically. |
| [demo-ratelimit-guava](./demo-ratelimit-guava) | a demo to use use Guava RateLimiter to protect API by standalone rate limiting. |
| [demo-ratelimit-redis](./demo-ratelimit-redis) | a demo to use Redis and Lua script implementation to protect API by distributed rate limiting. |
| [demo-https](./demo-https) | a demo to integrate HTTPS. |
| [demo-elasticsearch-rest-high-level-client](./demo-elasticsearch-rest-high-level-client) | a demo to integrate ElasticSearch 7.x version by using official Rest High Level Client to operate ES data. |
| [demo-flyway](./demo-flyway) | a demo to integrate Flyway to initialize tables and data in database, Flyway also support the sql script version control. |
| [demo-ureport2](./demo-ureport2) | a demo to integrate Ureport2 to design the Chinese complex report file. |
### Thanks
- <a href="https://www.jetbrains.com/?from=spring-boot-demo"><img src="http://static.xkcoding.com/spring-boot-demo/064312.jpg" width="100px" alt="jetbrains">**Thanks JetBrains Offer Open Source Free License**</a>
- [Thanks MyBatisCodeHelper-Pro(The Best Code Generator Plugin) Offer Permanent Activation Code](https://gejun123456.github.io/MyBatisCodeHelper-Pro/#/?id=mybatiscodehelper-pro)
### License
[MIT](http://opensource.org/licenses/MIT)
Copyright (c) 2018 Yangkai.Shen
================================================
FILE: README.md
================================================
<h1 align="center"><a href="https://github.com/xkcoding" target="_blank">Spring Boot Demo</a></h1>
<p align="center">
<a href="https://travis-ci.com/xkcoding/spring-boot-demo"><img alt="Travis-CI" src="https://travis-ci.com/xkcoding/spring-boot-demo.svg?branch=master"/></a>
<a href="https://www.codacy.com/app/xkcoding/spring-boot-demo?utm_source=github.com&utm_medium=referral&utm_content=xkcoding/spring-boot-demo&utm_campaign=Badge_Grade"><img alt="Codacy" src="https://api.codacy.com/project/badge/Grade/1f2e3d437b174bfc943dae1600332ec1"/></a>
<a href="https://xkcoding.com"><img alt="author" src="https://img.shields.io/badge/author-Yangkai.Shen-blue.svg"/></a>
<a href="https://www.oracle.com/technetwork/java/javase/downloads/index.html"><img alt="JDK" src="https://img.shields.io/badge/JDK-1.8.0_162-orange.svg"/></a>
<a href="https://docs.spring.io/spring-boot/docs/2.1.0.RELEASE/reference/html/"><img alt="Spring Boot" src="https://img.shields.io/badge/Spring Boot-2.1.0.RELEASE-brightgreen.svg"/></a>
<a href="https://github.com/xkcoding/spring-boot-demo/blob/master/LICENSE"><img alt="LICENSE" src="https://img.shields.io/github/license/xkcoding/spring-boot-demo.svg"/></a>
</p>
<p align="center">
<a href="https://github.com/xkcoding/spring-boot-demo/stargazers"><img alt="star" src="https://img.shields.io/github/stars/xkcoding/spring-boot-demo.svg?label=Stars&style=social"/></a>
<a href="https://github.com/xkcoding/spring-boot-demo/network/members"><img alt="star" src="https://img.shields.io/github/forks/xkcoding/spring-boot-demo.svg?label=Fork&style=social"/></a>
<a href="https://github.com/xkcoding/spring-boot-demo/watchers"><img alt="star" src="https://img.shields.io/github/watchers/xkcoding/spring-boot-demo.svg?label=Watch&style=social"/></a>
</p>
<p align="center">
<span>中文 | <a href="./README.en.md">English</a></span>
</p>
## 项目简介
`spring boot demo` 是一个用来深度学习并实战 `spring boot` 的项目,目前总共包含 **`66`** 个集成demo,已经完成 **`55`** 个。
该项目已成功集成 actuator(`监控`)、admin(`可视化监控`)、logback(`日志`)、aopLog(`通过AOP记录web请求日志`)、统一异常处理(`json级别和页面级别`)、freemarker(`模板引擎`)、thymeleaf(`模板引擎`)、Beetl(`模板引擎`)、Enjoy(`模板引擎`)、JdbcTemplate(`通用JDBC操作数据库`)、JPA(`强大的ORM框架`)、mybatis(`强大的ORM框架`)、通用Mapper(`快速操作Mybatis`)、PageHelper(`通用的Mybatis分页插件`)、mybatis-plus(`快速操作Mybatis`)、BeetlSQL(`强大的ORM框架`)、upload(`本地文件上传和七牛云文件上传`)、redis(`缓存`)、ehcache(`缓存`)、email(`发送各种类型邮件`)、task(`基础定时任务`)、quartz(`动态管理定时任务`)、xxl-job(`分布式定时任务`)、swagger(`API接口管理测试`)、security(`基于RBAC的动态权限认证`)、SpringSession(`Session共享`)、Zookeeper(`结合AOP实现分布式锁`)、RabbitMQ(`消息队列`)、Kafka(`消息队列`)、websocket(`服务端推送监控服务器运行信息`)、socket.io(`聊天室`)、ureport2(`中国式报表`)、打包成`war`文件、集成 ElasticSearch(`基本操作和高级查询`)、Async(`异步任务`)、集成Dubbo(`采用官方的starter`)、MongoDB(`文档数据库`)、neo4j(`图数据库`)、docker(`容器化`)、`JPA多数据源`、`Mybatis多数据源`、`代码生成器`、GrayLog(`日志收集`)、JustAuth(`第三方登录`)、LDAP(`增删改查`)、`动态添加/切换数据源`、单机限流(`AOP + Guava RateLimiter`)、分布式限流(`AOP + Redis + Lua`)、ElasticSearch 7.x(`使用官方 Rest High Level Client`)、HTTPS、Flyway(`数据库初始化`)、UReport2(`中国式复杂报表`)。
> 如果大家还有想要集成的demo,也可在 [issue](https://github.com/xkcoding/spring-boot-demo/issues/new) 里提需求。我会额外添加在 [TODO](./TODO.md) 列表里。✊
## 分支介绍
- master 分支:基于 Spring Boot 版本 `2.1.0.RELEASE`,每个 Module 的 parent 依赖根目录下的 pom.xml,主要用于管理每个 Module 的通用依赖版本,方便大家学习。
- v-1.5.x 分支:基于 Spring Boot 版本 `1.5.8.RELEASE`,每个 Module 均依赖 spring-boot-demo-parent,有挺多同学们反映这种方式对新手不是很友好,运行起来有些难度,因此 ***此分支(v-1.5.x)会停止开发维护*** ,所有内容会慢慢以 master 分支的形式同步过去,此分支暂未完成的,也会直接在 master 分支上加,在此分支学习的同学们,仍然可以在此分支学习,但是建议后期切换到master分支,会更加容易,毕竟官方已经将 Spring Boot 升级到 2.x 版本。🙂
## 开发环境
- **JDK 1.8 +**
- **Maven 3.5 +**
- **IntelliJ IDEA ULTIMATE 2018.2 +** (*注意:务必使用 IDEA 开发,同时保证安装 `lombok` 插件*)
- **Mysql 5.7 +** (*尽量保证使用 5.7 版本以上,因为 5.7 版本加了一些新特性,同时不向下兼容。本 demo 里会尽量避免这种不兼容的地方,但还是建议尽量保证 5.7 版本以上*)
## 运行方式
> 提示:如果是 fork 的朋友,同步代码的请参考:https://xkcoding.com/2018/09/18/how-to-update-the-fork-project.html
1. `git clone https://github.com/xkcoding/spring-boot-demo.git`
2. 使用 IDEA 打开 clone 下来的项目
3. 在 IDEA 中 Maven Projects 的面板导入项目根目录下 的 `pom.xml` 文件
4. Maven Projects 找不到的童鞋,可以勾上 IDEA 顶部工具栏的 View -> Tool Buttons ,然后 Maven Projects 的面板就会出现在 IDEA 的右侧
5. 找到各个 Module 的 Application 类就可以运行各个 demo 了
6. **`注意:每个 demo 均有详细的 README 配套,食用 demo 前记得先看看哦~`**
7. **`注意:运行各个 demo 之前,有些是需要事先初始化数据库数据的,亲们别忘记了哦~`**
## 项目趋势
[](https://starchart.cc/xkcoding/spring-boot-demo)
## 其他
### 团队纳新
组内招人啦,HC 巨多,Base 杭州,感兴趣的小伙伴,查看 [岗位详情](./jd.md)
### 开源推荐

- `JustAuth`:史上最全的整合第三方登录的开源库,https://github.com/justauth/JustAuth
- `Mica`:SpringBoot 微服务高效开发工具集,https://github.com/lets-mica/mica
- `awesome-collector`:https://github.com/P-P-X/awesome-collector
- `SpringBlade`:完整的线上解决方案(企业开发必备),https://github.com/chillzhuang/SpringBlade
- `Pig`:宇宙最强微服务认证授权脚手架(架构师必备),https://github.com/pigxcloud/pig
### 开发计划
查看 [TODO](./TODO.md) 文件
### 各 Module 介绍
| Module 名称 | Module 介绍 |
| ------------------------------------------------------------ | ------------------------------------------------------------ |
| [demo-helloworld](./demo-helloworld) | spring-boot 的一个 helloworld |
| [demo-properties](./demo-properties) | spring-boot 读取配置文件中的内容 |
| [demo-actuator](./demo-actuator) | spring-boot 集成 spring-boot-starter-actuator 用于监控 spring-boot 的启动和运行状态 |
| [demo-admin-client](./demo-admin/admin-client) | spring-boot 集成 spring-boot-admin 来可视化的监控 spring-boot 程序的运行状态,可以与 actuator 互相搭配使用,客户端示例 |
| [demo-admin-server](./demo-admin/admin-server) | spring-boot 集成 spring-boot-admin 来可视化的监控 spring-boot 程序的运行状态,可以与 actuator 互相搭配使用,服务端示例 |
| [demo-logback](./demo-logback) | spring-boot 集成 logback 日志 |
| [demo-log-aop](./demo-log-aop) | spring-boot 使用 AOP 切面的方式记录 web 请求日志 |
| [demo-exception-handler](./demo-exception-handler) | spring-boot 统一异常处理,包括2种,第一种返回统一的 json 格式,第二种统一跳转到异常页面 |
| [demo-template-freemarker](./demo-template-freemarker) | spring-boot 集成 Freemarker 模板引擎 |
| [demo-template-thymeleaf](./demo-template-thymeleaf) | spring-boot 集成 Thymeleaf 模板引擎 |
| [demo-template-beetl](./demo-template-beetl) | spring-boot 集成 Beetl 模板引擎 |
| [demo-template-enjoy](./demo-template-enjoy) | spring-boot 集成 Enjoy 模板引擎 |
| [demo-orm-jdbctemplate](./demo-orm-jdbctemplate) | spring-boot 集成 Jdbc Template 操作数据库,并简易封装通用 Dao 层 |
| [demo-orm-jpa](./demo-orm-jpa) | spring-boot 集成 spring-boot-starter-data-jpa 操作数据库 |
| [demo-orm-mybatis](./demo-orm-mybatis) | spring-boot 集成原生mybatis,使用 [mybatis-spring-boot-starter](https://github.com/mybatis/spring-boot-starter) 集成 |
| [demo-orm-mybatis-mapper-page](./demo-orm-mybatis-mapper-page) | spring-boot 集成[通用Mapper](https://github.com/abel533/Mapper)和[PageHelper](https://github.com/pagehelper/Mybatis-PageHelper),使用 [mapper-spring-boot-starter](https://github.com/abel533/Mapper/tree/master/spring-boot-starter) 和 [pagehelper-spring-boot-starter](https://github.com/pagehelper/pagehelper-spring-boot) 集成 |
| [demo-orm-mybatis-plus](./demo-orm-mybatis-plus) | spring-boot 集成 [mybatis-plus](https://mybatis.plus/),使用 [mybatis-plus-boot-starter](http://mp.baomidou.com/) 集成,集成 BaseMapper、BaseService、ActiveRecord 操作数据库 |
| [demo-orm-beetlsql](./demo-orm-beetlsql) | spring-boot 集成 [beetl-sql](http://ibeetl.com/guide/#beetlsql),使用 [beetl-framework-starter](http://ibeetl.com/guide/#beetlsql) 集成 |
| [demo-upload](./demo-upload) | spring-boot 文件上传示例,包含本地文件上传以及七牛云文件上传 |
| [demo-cache-redis](./demo-cache-redis) | spring-boot 整合 redis,操作redis中的数据,并使用redis缓存数据 |
| [demo-cache-ehcache](./demo-cache-ehcache) | spring-boot 整合 ehcache,使用 ehcache 缓存数据 |
| [demo-email](./demo-email) | spring-boot 整合 email,包括发送简单文本邮件、HTML邮件(包括模板HTML邮件)、附件邮件、静态资源邮件 |
| [demo-task](./demo-task) | spring-boot 快速实现定时任务 |
| [demo-task-quartz](./demo-task-quartz) | spring-boot 整合 quartz,并实现对定时任务的管理,包括新增定时任务,删除定时任务,暂停定时任务,恢复定时任务,修改定时任务启动时间,以及定时任务列表查询,`提供前端页面` |
| [demo-task-xxl-job](./demo-task-xxl-job) | spring-boot 整合[xxl-job](http://www.xuxueli.com/xxl-job/en/#/),并提供绕过 `xxl-job-admin` 对定时任务的管理的方法,包括定时任务列表,触发器列表,新增定时任务,删除定时任务,停止定时任务,启动定时任务,修改定时任务,手动触发定时任务 |
| [demo-swagger](./demo-swagger) | spring-boot 集成原生的 `swagger` 用于统一管理、测试 API 接口 |
| [demo-swagger-beauty](./demo-swagger-beauty) | spring-boot 集成第三方 `swagger` [swagger-bootstrap-ui](https://github.com/xiaoymin/Swagger-Bootstrap-UI) 美化API文档样式,用于统一管理、测试 API 接口 |
| [demo-rbac-security](./demo-rbac-security) | spring-boot 集成 spring security 完成基于RBAC权限模型的权限管理,支持自定义过滤请求,动态权限认证,使用 JWT 安全认证,支持在线人数统计,手动踢出用户等操作 |
| [demo-rbac-shiro](./demo-rbac-shiro) | spring-boot 集成 shiro 实现权限管理<br /> <span style="color:pink;">待完成</span> |
| [demo-session](./demo-session) | spring-boot 集成 Spring Session 实现Session共享、重启程序Session不失效 |
| [demo-oauth](./demo-oauth) | spring-boot 实现 oauth 服务器功能,实现授权码机制<br /> <span style="color:pink;">待完成</span> |
| [demo-social](./demo-social) | spring-boot 集成第三方登录,集成 `justauth-spring-boot-starter` 实现QQ登录、GitHub登录、微信登录、谷歌登录、微软登录、小米登录、企业微信登录。 |
| [demo-zookeeper](./demo-zookeeper) | spring-boot 集成 Zookeeper 结合AOP实现分布式锁 |
| [demo-mq-rabbitmq](./demo-mq-rabbitmq) | spring-boot 集成 RabbitMQ 实现基于直接队列模式、分列模式、主题模式、延迟队列的消息发送和接收 |
| [demo-mq-rocketmq](./demo-mq-rocketmq) | spring-boot 集成 RocketMQ,实现消息的发送和接收<br /> <span style="color:pink;">待完成</span> |
| [demo-mq-kafka](./demo-mq-kafka) | spring-boot 集成 kafka,实现消息的发送和接收 |
| [demo-websocket](./demo-websocket) | spring-boot 集成 websocket,后端主动推送前端服务器运行信息 |
| [demo-websocket-socketio](./demo-websocket-socketio) | spring-boot 使用 netty-socketio 集成 websocket,实现一个简单的聊天室 |
| [demo-ureport2](./demo-ureport2) | spring-boot 集成 ureport2 实现复杂的自定义的中国式报表<br /> <span style="color:pink;">待完成</span> |
| [demo-uflo](./demo-uflo) | spring-boot 集成 uflo 快速实现轻量级流程引擎<br /> <span style="color:pink;">待完成</span> |
| [demo-urule](./demo-urule) | spring-boot 集成 urule 快速实现规则引擎<br /> <span style="color:pink;">待完成</span> |
| [demo-activiti](./demo-activiti) | spring-boot 集成 activiti 7 流程引擎<br /> <span style="color:pink;">待完成</span> |
| [demo-async](./demo-async) | spring-boot 使用原生提供的异步任务支持,实现异步执行任务 |
| [demo-war](./demo-war) | spring-boot 打成 war 包的配置 |
| [demo-elasticsearch](./demo-elasticsearch) | spring-boot 集成 ElasticSearch,集成 `spring-boot-starter-data-elasticsearch` 完成对 ElasticSearch 的高级使用技巧,包括创建索引、配置映射、删除索引、增删改查基本操作、复杂查询、高级查询、聚合查询等 |
| [demo-dubbo](./demo-dubbo) | spring-boot 集成 Dubbo,分别为公共模块 `spring-boot-demo-dubbo-common`、服务提供方`spring-boot-demo-dubbo-provider`、服务调用方`spring-boot-demo-dubbo-consumer` |
| [demo-mongodb](./demo-mongodb) | spring-boot 集成 MongoDB,使用官方的 starter 实现增删改查 |
| [demo-neo4j](./demo-neo4j) | spring-boot 集成 Neo4j 图数据库,实现一个校园人物关系网的demo |
| [demo-docker](./demo-docker) | spring-boot 容器化 |
| [demo-multi-datasource-jpa](./demo-multi-datasource-jpa) | spring-boot 使用JPA集成多数据源 |
| [demo-multi-datasource-mybatis](./demo-multi-datasource-mybatis) | spring-boot 使用Mybatis集成多数据源,使用 Mybatis-Plus 提供的开源解决方案实现 |
| [demo-sharding-jdbc](./demo-sharding-jdbc) | spring-boot 使用 `sharding-jdbc` 实现分库分表,同时ORM采用 Mybatis-Plus |
| [demo-tio](./demo-tio) | spring-boot 集成 tio 网络编程框架<br /> <span style="color:pink;">待完成</span> |
| demo-grpc | spring-boot 集成grpc,配置tls/ssl,参见[ISSUE#5](https://github.com/xkcoding/spring-boot-demo/issues/5)<br /> <span style="color:pink;">待完成</span> |
| [demo-codegen](./demo-codegen) | spring-boot 集成 velocity 模板技术实现的代码生成器,简化开发 |
| [demo-graylog](./demo-graylog) | spring-boot 集成 graylog 实现日志统一收集 |
| demo-sso | spring-boot 集成 SSO 单点登录,参见 [ISSUE#12](https://github.com/xkcoding/spring-boot-demo/issues/12)<br /> <span style="color:pink;">待完成</span> |
| [demo-ldap](./demo-ldap) | spring-boot 集成 LDAP,集成 `spring-boot-starter-data-ldap` 完成对 Ldap 的基本 CURD操作, 并给出以登录为实战的 API 示例,参见 [ISSUE#23](https://github.com/xkcoding/spring-boot-demo/issues/23),感谢 [@fxbin](https://github.com/fxbin) |
| [demo-dynamic-datasource](./demo-dynamic-datasource) | spring-boot 动态添加数据源、动态切换数据源 |
| [demo-ratelimit-guava](./demo-ratelimit-guava) | spring-boot 使用 Guava RateLimiter 实现单机版限流,保护 API |
| [demo-ratelimit-redis](./demo-ratelimit-redis) | spring-boot 使用 Redis + Lua 脚本实现分布式限流,保护 API |
| [demo-https](./demo-https) | spring-boot 集成 HTTPS |
| [demo-elasticsearch-rest-high-level-client](./demo-elasticsearch-rest-high-level-client) | spring boot 集成 ElasticSearch 7.x 版本,使用官方 Rest High Level Client 操作 ES 数据 |
| [demo-flyway](./demo-flyway) | spring boot 集成 Flyway,项目启动时初始化数据库表结构,同时支持数据库脚本版本控制 |
| [demo-ureport2](./demo-ureport2) | spring boot 集成 Ureport2,实现中国式复杂报表设计 |
### 特别感谢
- 感谢 [七牛云](https://portal.qiniu.com/signup?utm_source=kaiyuan&utm_media=xkcoding) 提供的免费云存储与 CDN 加速支持
- 感谢史上最牛的代码生成插件 [MyBatisCodeHelper-Pro](https://gejun123456.github.io/MyBatisCodeHelper-Pro/#/?id=mybatiscodehelper-pro) 提供的永久激活码
- <a href="https://www.jetbrains.com/?from=spring-boot-demo"><img src="http://static.xkcoding.com/spring-boot-demo/064312.jpg" width="100px" alt="jetbrains">**感谢 JetBrains 提供的免费开源 License**</a>
### License
[MIT](http://opensource.org/licenses/MIT)
Copyright (c) 2018 Yangkai.Shen
================================================
FILE: TODO.en.md
================================================
# spring-boot-demo Project TODO List
## Module plan (completed: 55 / 66)
- [x] ~~demo-helloworld(helloworld example)~~
- [x] ~~demo-properties (read configuration file information)~~
- [x] ~~demo-actuator (endpoint monitoring for Spring boot)~~
- [x] ~~demo-admin-client (for Spring boot visual control client)~~
- [x] ~~demo-admin-server (for Spring boot visual control server)~~
- [x] ~~demo-logback (integrated logback log)~~
- [x] ~~demo-log-aop (use AOP to intercept request log information)~~
- [x] ~~demo-exception-handler (unified exception handling)~~
- [x] ~~demo-template-freemarker (using template engine - Freemarker)~~
- [x] ~~demo-template-thymeleaf (using template engine - thymeleaf)~~
- [x] ~~demo-template-beetl (using template engine - beetl)~~
- [x] ~~demo-template-enjoy (using template engine - JFinal-Enjoy)~~
- [x] ~~demo-upload (upload - integrated local upload and seven cattle cloud upload)~~
- [x] ~~demo-orm-jdbctemplate (operating SQL relational database - JdbcTemplate)~~
- [x] ~~demo-orm-jpa (operating SQL Relational Database - JPA)~~
- [x] ~~demo-orm-mybatis (operating SQL relational database - mybatis)~~
- [x] ~~demo-orm-mybatis-mapper-page (operating SQL relational database - integrating mybatis generic Mapper, PageHelper)~~
- [x] ~~demo-orm-mybatis-plus (operating SQL relational database - integrating mybatis-plus, Mapper, ActiveRecord)~~
- [x] ~~demo-orm-beetlsql (operating SQL relational database - beetlSQL)~~
- [x] ~~demo-cache-redis (using redis for caching)~~
- [x] ~~demo-cache-ehcache (using Ehcache for caching)~~
- [x] ~~demo-email (integrated mail service)~~
- [x] ~~demo-task (scheduled task - Task implementation)~~
- [x] ~~demo-task-quartz (scheduled task - Quartz implementation)~~
- [x] ~~demo-task-xxl-job (scheduled task - XXL-JOB for Distributed Scheduling)~~
- [x] ~~demo-swagger (integrated Swagger for API interface test management)~~
- [x] ~~demo-swagger-beauty (integrated custom and more beautiful Swagger test management of API interface)~~
- [x] ~~demo-rbac-security (implementing RBAC-based permission model - Spring Security)~~
- [ ] demo-rbac-shiro (implementing RBAC-based permission model - shiro)
- [x] ~~demo-session(unified Session Management)~~
- [ ] demo-oauth (OAuth2 certification)
- [x] ~~demo-social (integrated JustAuth implements third-party authorization verification, and implements third-party logins such as QQ, WeChat, GitHub, Google, Xiaomi, etc.)~~
- [x] ~~demo-zookeeper (use zookeeper to implement distributed locks with AOP)~~
- [x] ~~demo-mq-rabbitmq (integrated messaging middleware - RabbitMQ)~~
- [ ] demo-mq-rocketmq (integrated messaging middleware - RocketMQ)
- [x] ~~demo-mq-kafka (integrated message middleware - Kafka)~~
- [x] ~~demo-websocket (integrated websocket service)~~
- [x] ~~demo-websocket-socketio (integrated socketio implements websocket service)~~
- [x] ~~demo-ureport2 (integrated ureport2 implements a custom complex Chinese-style reporting engine)~~
- [ ] demo-uflo (integrated uflo implementation process control engine)
- [ ] demo-urule (integrated urule implementation rules engine)
- [ ] demo-activiti (integrated of Activiti to implement process control engine)
- [x] ~~demo-async (Spring boot implements asynchronous calls)~~
- [x] ~~demo-dubbo (integrated dubbo)~~
- [x] ~~demo-war (packaged into a war package)~~
- [x] ~~demo-elasticsearch (integrated ElasticSearch)~~
- [x] ~~demo-mongodb (integrated MongoDb)~~
- [x] ~~demo-neo4j (integrated neo4j graph database)~~
- [x] ~~demo-docker (packaged into docker image)~~
- [x] ~~demo-multi-datasource-jpa (integrated JPA multi data source)~~
- [x] ~~demo-multi-datasource-mybatis (integrated with mybatis multi-data source)~~
- [x] ~~demo-sharding-jdbc (integrated sharding-jdbc implementation sub-library table)~~
- [ ] demo-tio (integrated t-io)
- [ ] demo-grpc (integrated grpc, configure tls/ssl) see [ISSUE#5](https://github.com/xkcoding/spring-boot-demo/issues/5)
- [x] ~~demo-codegen (integrated velocity auto-generated code)~~
- [x] ~~demo-graylog (integrated gralog log management)~~
- [ ] demo-sso (integrated single sign on) see [ISSUE#12](https://github.com/xkcoding/spring-boot-demo/issues/12)
- [x] ~~demo-ldap (integrated ldap)see [ISSUE#23](https://github.com/xkcoding/spring-boot-demo/issues/23)~~
- [x] ~~demo-dynamic-datasource(add datasource dynamically, switch datasource dynamically)~~
- [x] ~~demo-ratelimit-guava(use Guava RateLimiter to protect API by standalone rate limiting)~~
- [x] ~~demo-ratelimit-redis(use Redis and Lua script implementation to protect API by distributed rate limiting)~~
- [x] ~~demo-https(integrated HTTPS)~~
- [x] ~~demo-elasticsearch-rest-high-level-client(integrated Elasticsearch 7.x version,use official Rest High Level Client to operate ES data)~~
- [ ] demo-springbatch(data process)
- [ ] demo-security-justauth(use JustAuth to login GitHub,and use Spring-Security to manage login state)
- [x] ~~demo-flyway(integrated Flyway to initialize tables and data in database, Flyway also support the sql script version control)~~
## Remarks
Try to ensure that the corresponding demos are integrated in the order above.
================================================
FILE: TODO.md
================================================
# spring-boot-demo 项目待办列表
## 模块计划(已完成:55 / 66)
- [x] ~~demo-helloworld(Helloworld 示例)~~
- [x] ~~demo-properties(读取配置文件信息)~~
- [x] ~~demo-actuator(对 Spring boot 的端点监控)~~
- [x] ~~demo-admin-client(对 Spring boot 可视化管控 客户端)~~
- [x] ~~demo-admin-server(对 Spring boot 可视化管控 服务端)~~
- [x] ~~demo-logback(集成 logback 日志)~~
- [x] ~~demo-log-aop(使用 AOP 拦截请求日志信息)~~
- [x] ~~demo-exception-handler(统一异常处理)~~
- [x] ~~demo-template-freemarker(使用模板引擎 - Freemarker)~~
- [x] ~~demo-template-thymeleaf(使用模板引擎 - thymeleaf)~~
- [x] ~~demo-template-beetl(使用模板引擎 - beetl)~~
- [x] ~~demo-template-enjoy(使用模板引擎 - JFinal-Enjoy)~~
- [x] ~~demo-upload(上传 - 集成本地上传和七牛云上传)~~
- [x] ~~demo-orm-jdbctemplate(操作 SQL 关系型数据库 - JdbcTemplate)~~
- [x] ~~demo-orm-jpa(操作 SQL 关系型数据库 - JPA)~~
- [x] ~~demo-orm-mybatis(操作 SQL 关系型数据库 - mybatis)~~
- [x] ~~demo-orm-mybatis-mapper-page(操作 SQL 关系型数据库 - 集成mybatis通用Mapper,PageHelper)~~
- [x] ~~demo-orm-mybatis-plus(操作 SQL 关系型数据库 - 集成mybatis-plus,Mapper操作、ActiveRecord操作)~~
- [x] ~~demo-orm-beetlsql(操作 SQL 关系型数据库 - beetlSQL)~~
- [x] ~~demo-cache-redis(使用 redis 进行缓存)~~
- [x] ~~demo-cache-ehcache(使用 Ehcache 进行缓存)~~
- [x] ~~demo-email(集成邮件服务)~~
- [x] ~~demo-task(定时任务 - Task 实现)~~
- [x] ~~demo-task-quartz(定时任务 - Quartz 实现)~~
- [x] ~~demo-task-xxl-job(定时任务 - XXL-JOB 实现分布式调度)~~
- [x] ~~demo-swagger(集成 Swagger 对 API 接口进行测试管理)~~
- [x] ~~demo-swagger-beauty(集成自定义且更加美观的 Swagger 对 API 接口进行测试管理)~~
- [x] ~~demo-rbac-security(实现基于 RBAC 的权限模型 - Spring Security)~~
- [ ] demo-rbac-shiro(实现基于 RBAC 的权限模型 - shiro)
- [x] ~~demo-session(统一 Session 管理)~~
- [ ] demo-oauth(OAuth2 认证)
- [x] ~~demo-social(集成 JustAuth 实现第三方授权验证,实现 QQ、微信、GitHub、谷歌、小米等第三方登录)~~
- [x] ~~demo-zookeeper(使用 zookeeper 结合AOP实现分布式锁)~~
- [x] ~~demo-mq-rabbitmq(集成消息中间件 - RabbitMQ)~~
- [ ] demo-mq-rocketmq(集成消息中间件 - RocketMQ)
- [x] ~~demo-mq-kafka(集成消息中间件 - Kafka)~~
- [x] ~~demo-websocket(集成 websocket 服务)~~
- [x] ~~demo-websocket-socketio(集成 socketio 实现 websocket 服务)~~
- [x] ~~demo-ureport2 (集成 ureport2 实现自定义的复杂中国式报表引擎)~~
- [ ] demo-uflo(集成 uflo 实现流程控制引擎)
- [ ] demo-urule(集成 urule 实现规则引擎)
- [ ] demo-activiti(集成 Activiti 实现流程控制引擎)
- [x] ~~demo-async(Spring boot 实现异步调用)~~
- [x] ~~demo-dubbo(集成 dubbo)~~
- [x] ~~demo-war(打包成war包)~~
- [x] ~~demo-elasticsearch(集成 ElasticSearch)~~
- [x] ~~demo-mongodb(集成 MongoDb)~~
- [x] ~~demo-neo4j(集成 neo4j 图数据库)~~
- [x] ~~demo-docker(打包成 docker 镜像)~~
- [x] ~~demo-multi-datasource-jpa(集成JPA多数据源)~~
- [x] ~~demo-multi-datasource-mybatis(集成mybatis多数据源)~~
- [x] ~~demo-sharding-jdbc(集成 sharding-jdbc 实现分库分表)~~
- [ ] demo-tio(集成 tio)
- [ ] demo-grpc(集成grpc,配置tls/ssl)参见[ISSUE#5](https://github.com/xkcoding/spring-boot-demo/issues/5)
- [x] ~~demo-codegen(集成 velocity 自动生成代码)~~
- [x] ~~demo-graylog(集成 gralog 日志管理)~~
- [ ] demo-sso(集成单点登录)参见 [ISSUE#12](https://github.com/xkcoding/spring-boot-demo/issues/12)
- [x] ~~demo-ldap (集成 ldap)参见 [ISSUE#23](https://github.com/xkcoding/spring-boot-demo/issues/23)~~
- [x] ~~demo-dynamic-datasource(动态添加数据源,切换数据源)~~
- [x] ~~demo-ratelimit-guava(单机限流保护API,集成 Guava 的 RateLimiter)~~
- [x] ~~demo-ratelimit-redis(分布式限流保护API,使用 Redis + lua 脚本实现)~~
- [x] ~~demo-https(集成 HTTPS)~~
- [x] ~~demo-elasticsearch-rest-high-level-client(集成 Elasticsearch 7.x 版本,使用官方 rest high level client操作 ES 数据)~~
- [ ] demo-springbatch(数据处理)
- [ ] demo-security-justauth(使用 JustAuth 登录 GitHub,使用 Security 管理登录状态)
- [x] ~~demo-flyway(集成 Flyway,项目启动时初始化数据库表结构,同时支持数据库脚本版本控制)~~
## 备注
尽量保证按照上面的顺序集成相应的 demo。
================================================
FILE: demo-activiti/.gitignore
================================================
/target/
!.mvn/wrapper/maven-wrapper.jar
### STS ###
.apt_generated
.classpath
.factorypath
.project
.settings
.springBeans
.sts4-cache
### IntelliJ IDEA ###
.idea
*.iws
*.iml
*.ipr
### NetBeans ###
/nbproject/private/
/build/
/nbbuild/
/dist/
/nbdist/
/.nb-gradle/
================================================
FILE: demo-activiti/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>
<artifactId>demo-activiti</artifactId>
<version>1.0.0-SNAPSHOT</version>
<packaging>jar</packaging>
<name>demo-activiti</name>
<description>Demo project for Spring Boot</description>
<parent>
<groupId>com.xkcoding</groupId>
<artifactId>spring-boot-demo</artifactId>
<version>1.0.0-SNAPSHOT</version>
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- activiti 自动建表 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<dependency>
<groupId>org.activiti</groupId>
<artifactId>activiti-spring-boot-starter</artifactId>
<version>7.1.0.M2</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
</dependencies>
<build>
<finalName>demo-activiti</finalName>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
================================================
FILE: demo-activiti/src/main/java/com/xkcoding/activiti/SpringBootDemoActivitiApplication.java
================================================
package com.xkcoding.activiti;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
/**
* <p>
* 启动器
* </p>
*
* @author yangkai.shen
* @date Created in 2019-03-31 22:24
*/
@SpringBootApplication
public class SpringBootDemoActivitiApplication {
public static void main(String[] args) {
SpringApplication.run(SpringBootDemoActivitiApplication.class, args);
}
}
================================================
FILE: demo-activiti/src/main/java/com/xkcoding/activiti/config/SecurityConfiguration.java
================================================
package com.xkcoding.activiti.config;
import lombok.extern.slf4j.Slf4j;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
import org.springframework.security.core.authority.SimpleGrantedAuthority;
import org.springframework.security.core.userdetails.User;
import org.springframework.security.core.userdetails.UserDetailsService;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.security.provisioning.InMemoryUserDetailsManager;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
/**
* <p>
* 安全配置类
* </p>
*
* @author yangkai.shen
* @date Created in 2019-07-01 18:40
*/
@Slf4j
@Configuration
public class SecurityConfiguration extends WebSecurityConfigurerAdapter {
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
auth.userDetailsService(userDetailsService());
}
@Bean
protected UserDetailsService myUserDetailsService() {
InMemoryUserDetailsManager inMemoryUserDetailsManager = new InMemoryUserDetailsManager();
String[][] usersGroupsAndRoles = {{"salaboy", "password", "ROLE_ACTIVITI_USER", "GROUP_activitiTeam"}, {"ryandawsonuk", "password", "ROLE_ACTIVITI_USER", "GROUP_activitiTeam"}, {"erdemedeiros", "password", "ROLE_ACTIVITI_USER", "GROUP_activitiTeam"}, {"other", "password", "ROLE_ACTIVITI_USER", "GROUP_otherTeam"}, {"admin", "password", "ROLE_ACTIVITI_ADMIN"}};
for (String[] user : usersGroupsAndRoles) {
List<String> authoritiesStrings = Arrays.asList(Arrays.copyOfRange(user, 2, user.length));
log.info("> Registering new user: " + user[0] + " with the following Authorities[" + authoritiesStrings + "]");
inMemoryUserDetailsManager.createUser(new User(user[0], passwordEncoder().encode(user[1]), authoritiesStrings.stream().map(SimpleGrantedAuthority::new).collect(Collectors.toList())));
}
return inMemoryUserDetailsManager;
}
@Bean
public PasswordEncoder passwordEncoder() {
return new BCryptPasswordEncoder();
}
}
================================================
FILE: demo-activiti/src/main/java/com/xkcoding/activiti/util/SecurityUtil.java
================================================
package com.xkcoding.activiti.util;
import lombok.RequiredArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.GrantedAuthority;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.security.core.context.SecurityContextImpl;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.security.core.userdetails.UserDetailsService;
import org.springframework.stereotype.Component;
import java.util.Collection;
/**
* <p>
* 认证工具
* </p>
*
* @author yangkai.shen
* @date Created in 2019-07-01 18:38
*/
@Component
@RequiredArgsConstructor(onConstructor_ = @Autowired)
public class SecurityUtil {
private final UserDetailsService userDetailsService;
public void logInAs(String username) {
UserDetails user = userDetailsService.loadUserByUsername(username);
if (user == null) {
throw new IllegalStateException("User " + username + " doesn't exist, please provide a valid user");
}
SecurityContextHolder.setContext(new SecurityContextImpl(new Authentication() {
@Override
public Collection<? extends GrantedAuthority> getAuthorities() {
return user.getAuthorities();
}
@Override
public Object getCredentials() {
return user.getPassword();
}
@Override
public Object getDetails() {
return user;
}
@Override
public Object getPrincipal() {
return user;
}
@Override
public boolean isAuthenticated() {
return true;
}
@Override
public void setAuthenticated(boolean isAuthenticated) throws IllegalArgumentException {
}
@Override
public String getName() {
return user.getUsername();
}
}));
org.activiti.engine.impl.identity.Authentication.setAuthenticatedUserId(username);
}
}
================================================
FILE: demo-activiti/src/main/resources/application.yml
================================================
spring:
datasource:
url: jdbc:mysql://localhost:3306/spring-boot-demo
username: root
password: root
hikari:
data-source-properties:
useSSL: false
serverTimezone: GMT+8
useUnicode: true
characterEncoding: utf8
# 这个必须要加,否则 Activiti 自动建表会失败
nullCatalogMeansCurrent: true
activiti:
history-level: full
db-history-used: true
================================================
FILE: demo-activiti/src/main/resources/processes/team01.bpmn
================================================
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<definitions xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:activiti="http://activiti.org/bpmn" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:omgdc="http://www.omg.org/spec/DD/20100524/DC" xmlns:omgdi="http://www.omg.org/spec/DD/20100524/DI" xmlns:tns="http://www.activiti.org/test" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:yaoqiang="http://bpmn.sourceforge.net" exporter="Yaoqiang BPMN Editor" exporterVersion="5.3" expressionLanguage="http://www.w3.org/1999/XPath" id="m1544167269809" name="" targetNamespace="http://www.activiti.org/test" typeLanguage="http://www.w3.org/2001/XMLSchema" xsi:schemaLocation="http://www.omg.org/spec/BPMN/20100524/MODEL http://bpmn.sourceforge.net/schemas/BPMN20.xsd">
<process id="myProcess_1" isClosed="false" isExecutable="true" processType="None">
<extensionElements>
<yaoqiang:description/>
<yaoqiang:pageFormat height="841.8897637795276" imageableHeight="831.8897637795276" imageableWidth="588.1102362204724" imageableX="5.0" imageableY="5.0" orientation="0" width="598.1102362204724"/>
<yaoqiang:page background="#FFFFFF" horizontalCount="1" verticalCount="1"/>
</extensionElements>
<startEvent id="_2" isInterrupting="true" name="StartEvent" parallelMultiple="false">
<outgoing>_6</outgoing>
<outputSet/>
</startEvent>
<userTask activiti:candidateGroups="activitiTeam" activiti:exclusive="true" completionQuantity="1" id="_3" implementation="##unspecified" isForCompensation="false" name="first" startQuantity="1">
<incoming>_6</incoming>
<outgoing>_7</outgoing>
</userTask>
<userTask activiti:candidateGroups="activitiTeam" activiti:exclusive="true" completionQuantity="1" id="_4" implementation="##unspecified" isForCompensation="false" name="second" startQuantity="1">
<incoming>_7</incoming>
<outgoing>_8</outgoing>
</userTask>
<endEvent id="_5" name="EndEvent">
<incoming>_8</incoming>
<inputSet/>
</endEvent>
<sequenceFlow id="_6" sourceRef="_2" targetRef="_3"/>
<sequenceFlow id="_7" sourceRef="_3" targetRef="_4"/>
<sequenceFlow id="_8" sourceRef="_4" targetRef="_5"/>
</process>
<bpmndi:BPMNDiagram id="Yaoqiang_Diagram-myProcess_1" name="New Diagram" resolution="96.0">
<bpmndi:BPMNPlane bpmnElement="myProcess_1">
<bpmndi:BPMNShape bpmnElement="_2" id="Yaoqiang-_2">
<omgdc:Bounds height="32.0" width="32.0" x="65.0" y="80.0"/>
<bpmndi:BPMNLabel>
<omgdc:Bounds height="18.96" width="60.0" x="51.0" y="120.52"/>
</bpmndi:BPMNLabel>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="_3" id="Yaoqiang-_3">
<omgdc:Bounds height="55.0" width="85.0" x="170.0" y="115.0"/>
<bpmndi:BPMNLabel>
<omgdc:Bounds height="18.96" width="28.0" x="198.5" y="135.02"/>
</bpmndi:BPMNLabel>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="_4" id="Yaoqiang-_4">
<omgdc:Bounds height="55.0" width="85.0" x="310.0" y="155.0"/>
<bpmndi:BPMNLabel>
<omgdc:Bounds height="18.96" width="45.0" x="330.0" y="175.02"/>
</bpmndi:BPMNLabel>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="_5" id="Yaoqiang-_5">
<omgdc:Bounds height="32.0" width="32.0" x="505.0" y="220.0"/>
<bpmndi:BPMNLabel>
<omgdc:Bounds height="18.96" width="55.0" x="493.5" y="260.52"/>
</bpmndi:BPMNLabel>
</bpmndi:BPMNShape>
<bpmndi:BPMNEdge bpmnElement="_8" id="Yaoqiang-_8">
<omgdi:waypoint x="395.0" y="182.5"/>
<omgdi:waypoint x="505.0" y="236.0"/>
<bpmndi:BPMNLabel>
<omgdc:Bounds height="18.96" width="6.0" x="447.0" y="199.77"/>
</bpmndi:BPMNLabel>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="_7" id="Yaoqiang-_7">
<omgdi:waypoint x="255.0" y="142.5"/>
<omgdi:waypoint x="310.0" y="182.5"/>
<bpmndi:BPMNLabel>
<omgdc:Bounds height="18.96" width="6.0" x="279.5" y="153.02"/>
</bpmndi:BPMNLabel>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="_6" id="Yaoqiang-_6">
<omgdi:waypoint x="97.0" y="96.0"/>
<omgdi:waypoint x="170.0" y="142.5"/>
<bpmndi:BPMNLabel>
<omgdc:Bounds height="18.96" width="6.0" x="130.5" y="109.77"/>
</bpmndi:BPMNLabel>
</bpmndi:BPMNEdge>
</bpmndi:BPMNPlane>
</bpmndi:BPMNDiagram>
</definitions>
================================================
FILE: demo-activiti/src/test/java/com/xkcoding/activiti/SpringBootDemoActivitiApplicationTests.java
================================================
package com.xkcoding.activiti;
import com.xkcoding.activiti.util.SecurityUtil;
import org.activiti.api.process.model.ProcessDefinition;
import org.activiti.api.process.runtime.ProcessRuntime;
import org.activiti.api.runtime.shared.query.Page;
import org.activiti.api.runtime.shared.query.Pageable;
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;
@RunWith(SpringRunner.class)
@SpringBootTest
public class SpringBootDemoActivitiApplicationTests {
@Autowired
private ProcessRuntime processRuntime;
@Autowired
private SecurityUtil securityUtil;
@Test
public void contextLoads() {
securityUtil.logInAs("salaboy");
Page<ProcessDefinition> processDefinitionPage = processRuntime.processDefinitions(Pageable.of(0, 10));
processDefinitionPage.getContent().forEach(System.out::println);
}
}
================================================
FILE: demo-actuator/.gitignore
================================================
/target/
!.mvn/wrapper/maven-wrapper.jar
### STS ###
.apt_generated
.classpath
.factorypath
.project
.settings
.springBeans
.sts4-cache
### IntelliJ IDEA ###
.idea
*.iws
*.iml
*.ipr
### NetBeans ###
/nbproject/private/
/build/
/nbbuild/
/dist/
/nbdist/
/.nb-gradle/
================================================
FILE: demo-actuator/README.md
================================================
# spring-boot-demo-actuator
> 本 demo 主要演示了如何在 Spring Boot 中通过 actuator 检查项目运行情况
## pom.xml
```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>
<artifactId>spring-boot-demo-actuator</artifactId>
<version>1.0.0-SNAPSHOT</version>
<packaging>jar</packaging>
<name>spring-boot-demo-actuator</name>
<description>Demo project for Spring Boot</description>
<parent>
<groupId>com.xkcoding</groupId>
<artifactId>spring-boot-demo</artifactId>
<version>1.0.0-SNAPSHOT</version>
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<finalName>spring-boot-demo-actuator</finalName>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
```
## application.yml
```yaml
server:
port: 8080
servlet:
context-path: /demo
# 若要访问端点信息,需要配置用户名和密码
spring:
security:
user:
name: xkcoding
password: 123456
management:
# 端点信息接口使用的端口,为了和主系统接口使用的端口进行分离
server:
port: 8090
servlet:
context-path: /sys
# 端点健康情况,默认值"never",设置为"always"可以显示硬盘使用情况和线程情况
endpoint:
health:
show-details: always
# 设置端点暴露的哪些内容,默认["health","info"],设置"*"代表暴露所有可访问的端点
endpoints:
web:
exposure:
include: '*'
```
## 端点暴露地址
将项目运行起来之后,会在**控制台**里查看所有可以访问的端口信息
1. 打开浏览器,访问:http://localhost:8090/sys/actuator/mappings ,输入用户名(xkcoding)密码(123456)即可看到所有的mapping信息
2. 访问:http://localhost:8090/sys/actuator/beans ,输入用户名(xkcoding)密码(123456)即可看到所有 Spring 管理的Bean
3. 其余可访问的路径,参见文档
## 参考
- actuator文档:https://docs.spring.io/spring-boot/docs/2.0.5.RELEASE/reference/htmlsingle/#production-ready
- 具体可以访问哪些路径,参考: https://docs.spring.io/spring-boot/docs/2.0.5.RELEASE/reference/htmlsingle/#production-ready-endpoints
================================================
FILE: demo-actuator/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>
<artifactId>demo-actuator</artifactId>
<version>1.0.0-SNAPSHOT</version>
<packaging>jar</packaging>
<name>demo-actuator</name>
<description>Demo project for Spring Boot</description>
<parent>
<groupId>com.xkcoding</groupId>
<artifactId>spring-boot-demo</artifactId>
<version>1.0.0-SNAPSHOT</version>
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<finalName>demo-actuator</finalName>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
================================================
FILE: demo-actuator/src/main/java/com/xkcoding/actuator/SpringBootDemoActuatorApplication.java
================================================
package com.xkcoding.actuator;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
/**
* <p>
* 启动类
* </p>
*
* @author yangkai.shen
* @date Created in 2018-9-29 14:27
*/
@SpringBootApplication
public class SpringBootDemoActuatorApplication {
public static void main(String[] args) {
SpringApplication.run(SpringBootDemoActuatorApplication.class, args);
}
}
================================================
FILE: demo-actuator/src/main/resources/application.yml
================================================
server:
port: 8080
servlet:
context-path: /demo
# 若要访问端点信息,需要配置用户名和密码
spring:
security:
user:
name: xkcoding
password: 123456
management:
# 端点信息接口使用的端口,为了和主系统接口使用的端口进行分离
server:
port: 8090
servlet:
context-path: /sys
# 端点健康情况,默认值"never",设置为"always"可以显示硬盘使用情况和线程情况
endpoint:
health:
show-details: always
# 设置端点暴露的哪些内容,默认["health","info"],设置"*"代表暴露所有可访问的端点
endpoints:
web:
exposure:
include: '*'
================================================
FILE: demo-actuator/src/test/java/com/xkcoding/actuator/SpringBootDemoActuatorApplicationTests.java
================================================
package com.xkcoding.actuator;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
@RunWith(SpringRunner.class)
@SpringBootTest
public class SpringBootDemoActuatorApplicationTests {
@Test
public void contextLoads() {
}
}
================================================
FILE: demo-admin/README.md
================================================
# spring-boot-demo-admin
> 本 demo 主要演示了 Spring Boot 如何集成 Admin 管控台,监控管理 Spring Boot 应用,分别为 admin 服务端和 admin 客户端,两个模块。
## 运行步骤
1. 进入 `spring-boot-demo-admin-server` 服务端,启动管控台服务端程序
2. 进入 `spring-boot-demo-admin-client` 客户端,启动客户端程序,注册到服务端
3. 观察服务端里,客户端程序的运行状态等信息
## pom.xml
```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>spring-boot-demo</artifactId>
<groupId>com.xkcoding</groupId>
<version>1.0.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>spring-boot-demo-admin</artifactId>
<packaging>pom</packaging>
<properties>
<spring-boot-admin.version>2.1.0</spring-boot-admin.version>
</properties>
<modules>
<module>spring-boot-demo-admin-client</module>
<module>spring-boot-demo-admin-server</module>
</modules>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>de.codecentric</groupId>
<artifactId>spring-boot-admin-dependencies</artifactId>
<version>${spring-boot-admin.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
</project>
```
================================================
FILE: demo-admin/admin-client/.gitignore
================================================
/target/
!.mvn/wrapper/maven-wrapper.jar
### STS ###
.apt_generated
.classpath
.factorypath
.project
.settings
.springBeans
.sts4-cache
### IntelliJ IDEA ###
.idea
*.iws
*.iml
*.ipr
### NetBeans ###
/nbproject/private/
/build/
/nbbuild/
/dist/
/nbdist/
/.nb-gradle/
================================================
FILE: demo-admin/admin-client/README.md
================================================
# spring-boot-demo-admin-client
> 本 demo 主要演示了普通项目如何集成 Spring Boot Admin,并把自己的运行状态交给 Spring Boot Admin 进行展现。
## pom.xml
```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>
<artifactId>spring-boot-demo-admin-client</artifactId>
<version>1.0.0-SNAPSHOT</version>
<packaging>jar</packaging>
<name>spring-boot-demo-admin-client</name>
<description>Demo project for Spring Boot</description>
<parent>
<groupId>com.xkcoding</groupId>
<artifactId>spring-boot-demo-admin</artifactId>
<version>1.0.0-SNAPSHOT</version>
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>de.codecentric</groupId>
<artifactId>spring-boot-admin-starter-client</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<finalName>spring-boot-demo-admin-client</finalName>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
```
## application.yml
```yaml
server:
port: 8080
servlet:
context-path: /demo
spring:
application:
# Spring Boot Admin展示的客户端项目名,不设置,会使用自动生成的随机id
name: spring-boot-demo-admin-client
boot:
admin:
client:
# Spring Boot Admin 服务端地址
url: "http://localhost:8000/"
instance:
metadata:
# 客户端端点信息的安全认证信息
user.name: ${spring.security.user.name}
user.password: ${spring.security.user.password}
security:
user:
name: xkcoding
password: 123456
management:
endpoint:
health:
# 端点健康情况,默认值"never",设置为"always"可以显示硬盘使用情况和线程情况
show-details: always
endpoints:
web:
exposure:
# 设置端点暴露的哪些内容,默认["health","info"],设置"*"代表暴露所有可访问的端点
include: "*"
```
================================================
FILE: demo-admin/admin-client/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>com.xkcoding</groupId>
<artifactId>demo-admin</artifactId>
<version>1.0.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>admin-client</artifactId>
<version>1.0.0-SNAPSHOT</version>
<packaging>jar</packaging>
<name>admin-client</name>
<description>Demo project for Spring Boot</description>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>de.codecentric</groupId>
<artifactId>spring-boot-admin-starter-client</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<finalName>admin-client</finalName>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
================================================
FILE: demo-admin/admin-client/src/main/java/com/xkcoding/admin/client/SpringBootDemoAdminClientApplication.java
================================================
package com.xkcoding.admin.client;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
/**
* <p>
* 启动类
* </p>
*
* @author yangkai.shen
* @date Created in 2018-10-8 14:16
*/
@SpringBootApplication
public class SpringBootDemoAdminClientApplication {
public static void main(String[] args) {
SpringApplication.run(SpringBootDemoAdminClientApplication.class, args);
}
}
================================================
FILE: demo-admin/admin-client/src/main/java/com/xkcoding/admin/client/controller/IndexController.java
================================================
package com.xkcoding.admin.client.controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* <p>
* 首页
* </p>
*
* @author yangkai.shen
* @date Created in 2018-10-08 14:15
*/
@RestController
public class IndexController {
@GetMapping(value = {"", "/"})
public String index() {
return "This is a Spring Boot Admin Client.";
}
}
================================================
FILE: demo-admin/admin-client/src/main/resources/application.yml
================================================
server:
port: 8080
servlet:
context-path: /demo
spring:
application:
# Spring Boot Admin展示的客户端项目名,不设置,会使用自动生成的随机id
name: spring-boot-demo-admin-client
boot:
admin:
client:
# Spring Boot Admin 服务端地址
url: "http://localhost:8000/"
instance:
metadata:
# 客户端端点信息的安全认证信息
user.name: ${spring.security.user.name}
user.password: ${spring.security.user.password}
security:
user:
name: xkcoding
password: 123456
management:
endpoint:
health:
# 端点健康情况,默认值"never",设置为"always"可以显示硬盘使用情况和线程情况
show-details: always
endpoints:
web:
exposure:
# 设置端点暴露的哪些内容,默认["health","info"],设置"*"代表暴露所有可访问的端点
include: "*"
================================================
FILE: demo-admin/admin-client/src/test/java/com/xkcoding/admin/client/SpringBootDemoAdminClientApplicationTests.java
================================================
package com.xkcoding.admin.client;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
@RunWith(SpringRunner.class)
@SpringBootTest
public class SpringBootDemoAdminClientApplicationTests {
@Test
public void contextLoads() {
}
}
================================================
FILE: demo-admin/admin-server/.gitignore
================================================
/target/
!.mvn/wrapper/maven-wrapper.jar
### STS ###
.apt_generated
.classpath
.factorypath
.project
.settings
.springBeans
.sts4-cache
### IntelliJ IDEA ###
.idea
*.iws
*.iml
*.ipr
### NetBeans ###
/nbproject/private/
/build/
/nbbuild/
/dist/
/nbdist/
/.nb-gradle/
================================================
FILE: demo-admin/admin-server/README.md
================================================
# spring-boot-demo-admin-server
> 本 demo 主要演示了如何搭建一个 Spring Boot Admin 的服务端项目,可视化展示自己客户端项目的运行状态。
## pom.xml
```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>
<artifactId>spring-boot-demo-admin-server</artifactId>
<version>1.0.0-SNAPSHOT</version>
<packaging>jar</packaging>
<name>spring-boot-demo-admin-server</name>
<description>Demo project for Spring Boot</description>
<parent>
<groupId>com.xkcoding</groupId>
<artifactId>spring-boot-demo-admin</artifactId>
<version>1.0.0-SNAPSHOT</version>
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>de.codecentric</groupId>
<artifactId>spring-boot-admin-starter-server</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<finalName>spring-boot-demo-admin-server</finalName>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
```
## SpringBootDemoAdminServerApplication.java
```java
/**
* <p>
* 启动类
* </p>
*
* @author yangkai.shen
* @date Created in 2018-10-08 14:08
*/
@EnableAdminServer
@SpringBootApplication
public class SpringBootDemoAdminServerApplication {
public static void main(String[] args) {
SpringApplication.run(SpringBootDemoAdminServerApplication.class, args);
}
}
```
## application.yml
```yaml
server:
port: 8000
```
================================================
FILE: demo-admin/admin-server/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>com.xkcoding</groupId>
<artifactId>demo-admin</artifactId>
<version>1.0.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>demo-admin-server</artifactId>
<version>1.0.0-SNAPSHOT</version>
<packaging>jar</packaging>
<name>admin-server</name>
<description>Demo project for Spring Boot</description>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>de.codecentric</groupId>
<artifactId>spring-boot-admin-starter-server</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<finalName>admin-server</finalName>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
================================================
FILE: demo-admin/admin-server/src/main/java/com/xkcoding/admin/server/SpringBootDemoAdminServerApplication.java
================================================
package com.xkcoding.admin.server;
import de.codecentric.boot.admin.server.config.EnableAdminServer;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
/**
* <p>
* 启动类
* </p>
*
* @author yangkai.shen
* @date Created in 2018-10-08 14:08
*/
@EnableAdminServer
@SpringBootApplication
public class SpringBootDemoAdminServerApplication {
public static void main(String[] args) {
SpringApplication.run(SpringBootDemoAdminServerApplication.class, args);
}
}
================================================
FILE: demo-admin/admin-server/src/main/resources/application.yml
================================================
server:
port: 8000
================================================
FILE: demo-admin/admin-server/src/test/java/com/xkcoding/admin/server/SpringBootDemoAdminServerApplicationTests.java
================================================
package com.xkcoding.admin.server;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
@RunWith(SpringRunner.class)
@SpringBootTest
public class SpringBootDemoAdminServerApplicationTests {
@Test
public void contextLoads() {
}
}
================================================
FILE: demo-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>spring-boot-demo</artifactId>
<groupId>com.xkcoding</groupId>
<version>1.0.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>demo-admin</artifactId>
<packaging>pom</packaging>
<properties>
<spring-boot-admin.version>2.1.0</spring-boot-admin.version>
</properties>
<modules>
<module>admin-client</module>
<module>admin-server</module>
</modules>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>de.codecentric</groupId>
<artifactId>spring-boot-admin-dependencies</artifactId>
<version>${spring-boot-admin.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
</project>
================================================
FILE: demo-async/.gitignore
================================================
/target/
!.mvn/wrapper/maven-wrapper.jar
### STS ###
.apt_generated
.classpath
.factorypath
.project
.settings
.springBeans
.sts4-cache
### IntelliJ IDEA ###
.idea
*.iws
*.iml
*.ipr
### NetBeans ###
/nbproject/private/
/build/
/nbbuild/
/dist/
/nbdist/
/.nb-gradle/
================================================
FILE: demo-async/README.md
================================================
# spring-boot-demo-async
> 此 demo 主要演示了 Spring Boot 如何使用原生提供的异步任务支持,实现异步执行任务。
## pom.xml
```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>
<artifactId>spring-boot-demo-async</artifactId>
<version>1.0.0-SNAPSHOT</version>
<packaging>jar</packaging>
<name>spring-boot-demo-async</name>
<description>Demo project for Spring Boot</description>
<parent>
<groupId>com.xkcoding</groupId>
<artifactId>spring-boot-demo</artifactId>
<version>1.0.0-SNAPSHOT</version>
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
</dependencies>
<build>
<finalName>spring-boot-demo-async</finalName>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
```
## application.yml
```yaml
spring:
task:
execution:
pool:
# 最大线程数
max-size: 16
# 核心线程数
core-size: 16
# 存活时间
keep-alive: 10s
# 队列大小
queue-capacity: 100
# 是否允许核心线程超时
allow-core-thread-timeout: true
# 线程名称前缀
thread-name-prefix: async-task-
```
## SpringBootDemoAsyncApplication.java
```java
/**
* <p>
* 启动器
* </p>
*
* @author yangkai.shen
* @date Created in 2018-12-29 10:28
*/
@EnableAsync
@SpringBootApplication
public class SpringBootDemoAsyncApplication {
public static void main(String[] args) {
SpringApplication.run(SpringBootDemoAsyncApplication.class, args);
}
}
```
## TaskFactory.java
```java
/**
* <p>
* 任务工厂
* </p>
*
* @author yangkai.shen
* @date Created in 2018-12-29 10:37
*/
@Component
@Slf4j
public class TaskFactory {
/**
* 模拟5秒的异步任务
*/
@Async
public Future<Boolean> asyncTask1() throws InterruptedException {
doTask("asyncTask1", 5);
return new AsyncResult<>(Boolean.TRUE);
}
/**
* 模拟2秒的异步任务
*/
@Async
public Future<Boolean> asyncTask2() throws InterruptedException {
doTask("asyncTask2", 2);
return new AsyncResult<>(Boolean.TRUE);
}
/**
* 模拟3秒的异步任务
*/
@Async
public Future<Boolean> asyncTask3() throws InterruptedException {
doTask("asyncTask3", 3);
return new AsyncResult<>(Boolean.TRUE);
}
/**
* 模拟5秒的同步任务
*/
public void task1() throws InterruptedException {
doTask("task1", 5);
}
/**
* 模拟2秒的同步任务
*/
public void task2() throws InterruptedException {
doTask("task2", 2);
}
/**
* 模拟3秒的同步任务
*/
public void task3() throws InterruptedException {
doTask("task3", 3);
}
private void doTask(String taskName, Integer time) throws InterruptedException {
log.info("{}开始执行,当前线程名称【{}】", taskName, Thread.currentThread().getName());
TimeUnit.SECONDS.sleep(time);
log.info("{}执行成功,当前线程名称【{}】", taskName, Thread.currentThread().getName());
}
}
```
## TaskFactoryTest.java
```java
/**
* <p>
* 测试任务
* </p>
*
* @author yangkai.shen
* @date Created in 2018-12-29 10:49
*/
@Slf4j
public class TaskFactoryTest extends SpringBootDemoAsyncApplicationTests {
@Autowired
private TaskFactory task;
/**
* 测试异步任务
*/
@Test
public void asyncTaskTest() throws InterruptedException, ExecutionException {
long start = System.currentTimeMillis();
Future<Boolean> asyncTask1 = task.asyncTask1();
Future<Boolean> asyncTask2 = task.asyncTask2();
Future<Boolean> asyncTask3 = task.asyncTask3();
// 调用 get() 阻塞主线程
asyncTask1.get();
asyncTask2.get();
asyncTask3.get();
long end = System.currentTimeMillis();
log.info("异步任务全部执行结束,总耗时:{} 毫秒", (end - start));
}
/**
* 测试同步任务
*/
@Test
public void taskTest() throws InterruptedException {
long start = System.currentTimeMillis();
task.task1();
task.task2();
task.task3();
long end = System.currentTimeMillis();
log.info("同步任务全部执行结束,总耗时:{} 毫秒", (end - start));
}
}
```
## 运行结果
### 异步任务
```bash
2018-12-29 10:57:28.511 INFO 3134 --- [ async-task-3] com.xkcoding.async.task.TaskFactory : asyncTask3开始执行,当前线程名称【async-task-3】
2018-12-29 10:57:28.511 INFO 3134 --- [ async-task-1] com.xkcoding.async.task.TaskFactory : asyncTask1开始执行,当前线程名称【async-task-1】
2018-12-29 10:57:28.511 INFO 3134 --- [ async-task-2] com.xkcoding.async.task.TaskFactory : asyncTask2开始执行,当前线程名称【async-task-2】
2018-12-29 10:57:30.514 INFO 3134 --- [ async-task-2] com.xkcoding.async.task.TaskFactory : asyncTask2执行成功,当前线程名称【async-task-2】
2018-12-29 10:57:31.516 INFO 3134 --- [ async-task-3] com.xkcoding.async.task.TaskFactory : asyncTask3执行成功,当前线程名称【async-task-3】
2018-12-29 10:57:33.517 INFO 3134 --- [ async-task-1] com.xkcoding.async.task.TaskFactory : asyncTask1执行成功,当前线程名称【async-task-1】
2018-12-29 10:57:33.517 INFO 3134 --- [ main] com.xkcoding.async.task.TaskFactoryTest : 异步任务全部执行结束,总耗时:5015 毫秒
```
### 同步任务
```bash
2018-12-29 10:55:49.830 INFO 3079 --- [ main] com.xkcoding.async.task.TaskFactory : task1开始执行,当前线程名称【main】
2018-12-29 10:55:54.834 INFO 3079 --- [ main] com.xkcoding.async.task.TaskFactory : task1执行成功,当前线程名称【main】
2018-12-29 10:55:54.835 INFO 3079 --- [ main] com.xkcoding.async.task.TaskFactory : task2开始执行,当前线程名称【main】
2018-12-29 10:55:56.839 INFO 3079 --- [ main] com.xkcoding.async.task.TaskFactory : task2执行成功,当前线程名称【main】
2018-12-29 10:55:56.839 INFO 3079 --- [ main] com.xkcoding.async.task.TaskFactory : task3开始执行,当前线程名称【main】
2018-12-29 10:55:59.843 INFO 3079 --- [ main] com.xkcoding.async.task.TaskFactory : task3执行成功,当前线程名称【main】
2018-12-29 10:55:59.843 INFO 3079 --- [ main] com.xkcoding.async.task.TaskFactoryTest : 同步任务全部执行结束,总耗时:10023 毫秒
```
## 参考
- Spring Boot 异步任务线程池的配置 参考官方文档:https://docs.spring.io/spring-boot/docs/2.1.0.RELEASE/reference/htmlsingle/#boot-features-task-execution-scheduling
================================================
FILE: demo-async/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>
<artifactId>demo-async</artifactId>
<version>1.0.0-SNAPSHOT</version>
<packaging>jar</packaging>
<name>demo-async</name>
<description>Demo project for Spring Boot</description>
<parent>
<groupId>com.xkcoding</groupId>
<artifactId>spring-boot-demo</artifactId>
<version>1.0.0-SNAPSHOT</version>
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
</dependencies>
<build>
<finalName>demo-async</finalName>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
================================================
FILE: demo-async/src/main/java/com/xkcoding/async/SpringBootDemoAsyncApplication.java
================================================
package com.xkcoding.async;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.scheduling.annotation.EnableAsync;
/**
* <p>
* 启动器
* </p>
*
* @author yangkai.shen
* @date Created in 2018-12-29 10:28
*/
@EnableAsync
@SpringBootApplication
public class SpringBootDemoAsyncApplication {
public static void main(String[] args) {
SpringApplication.run(SpringBootDemoAsyncApplication.class, args);
}
}
================================================
FILE: demo-async/src/main/java/com/xkcoding/async/task/TaskFactory.java
================================================
package com.xkcoding.async.task;
import lombok.extern.slf4j.Slf4j;
import org.springframework.scheduling.annotation.Async;
import org.springframework.scheduling.annotation.AsyncResult;
import org.springframework.stereotype.Component;
import java.util.concurrent.Future;
import java.util.concurrent.TimeUnit;
/**
* <p>
* 任务工厂
* </p>
*
* @author yangkai.shen
* @date Created in 2018-12-29 10:37
*/
@Component
@Slf4j
public class TaskFactory {
/**
* 模拟5秒的异步任务
*/
@Async
public Future<Boolean> asyncTask1() throws InterruptedException {
doTask("asyncTask1", 5);
return new AsyncResult<>(Boolean.TRUE);
}
/**
* 模拟2秒的异步任务
*/
@Async
public Future<Boolean> asyncTask2() throws InterruptedException {
doTask("asyncTask2", 2);
return new AsyncResult<>(Boolean.TRUE);
}
/**
* 模拟3秒的异步任务
*/
@Async
public Future<Boolean> asyncTask3() throws InterruptedException {
doTask("asyncTask3", 3);
return new AsyncResult<>(Boolean.TRUE);
}
/**
* 模拟5秒的同步任务
*/
public void task1() throws InterruptedException {
doTask("task1", 5);
}
/**
* 模拟2秒的同步任务
*/
public void task2() throws InterruptedException {
doTask("task2", 2);
}
/**
* 模拟3秒的同步任务
*/
public void task3() throws InterruptedException {
doTask("task3", 3);
}
private void doTask(String taskName, Integer time) throws InterruptedException {
log.info("{}开始执行,当前线程名称【{}】", taskName, Thread.currentThread().getName());
TimeUnit.SECONDS.sleep(time);
log.info("{}执行成功,当前线程名称【{}】", taskName, Thread.currentThread().getName());
}
}
================================================
FILE: demo-async/src/main/resources/application.yml
================================================
spring:
task:
execution:
pool:
# 最大线程数
max-size: 16
# 核心线程数
core-size: 16
# 存活时间
keep-alive: 10s
# 队列大小
queue-capacity: 100
# 是否允许核心线程超时
allow-core-thread-timeout: true
# 线程名称前缀
thread-name-prefix: async-task-
================================================
FILE: demo-async/src/test/java/com/xkcoding/async/SpringBootDemoAsyncApplicationTests.java
================================================
package com.xkcoding.async;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
@RunWith(SpringRunner.class)
@SpringBootTest
public class SpringBootDemoAsyncApplicationTests {
@Test
public void contextLoads() {
}
}
================================================
FILE: demo-async/src/test/java/com/xkcoding/async/task/TaskFactoryTest.java
================================================
package com.xkcoding.async.task;
import com.xkcoding.async.SpringBootDemoAsyncApplicationTests;
import lombok.extern.slf4j.Slf4j;
import org.junit.Test;
import org.springframework.beans.factory.annotation.Autowired;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.Future;
/**
* <p>
* 测试任务
* </p>
*
* @author yangkai.shen
* @date Created in 2018-12-29 10:49
*/
@Slf4j
public class TaskFactoryTest extends SpringBootDemoAsyncApplicationTests {
@Autowired
private TaskFactory task;
/**
* 测试异步任务
*/
@Test
public void asyncTaskTest() throws InterruptedException, ExecutionException {
long start = System.currentTimeMillis();
Future<Boolean> asyncTask1 = task.asyncTask1();
Future<Boolean> asyncTask2 = task.asyncTask2();
Future<Boolean> asyncTask3 = task.asyncTask3();
// 调用 get() 阻塞主线程
asyncTask1.get();
asyncTask2.get();
asyncTask3.get();
long end = System.currentTimeMillis();
log.info("异步任务全部执行结束,总耗时:{} 毫秒", (end - start));
}
/**
* 测试同步任务
*/
@Test
public void taskTest() throws InterruptedException {
long start = System.currentTimeMillis();
task.task1();
task.task2();
task.task3();
long end = System.currentTimeMillis();
log.info("同步任务全部执行结束,总耗时:{} 毫秒", (end - start));
}
}
================================================
FILE: demo-cache-ehcache/.gitignore
================================================
/target/
!.mvn/wrapper/maven-wrapper.jar
### STS ###
.apt_generated
.classpath
.factorypath
.project
.settings
.springBeans
.sts4-cache
### IntelliJ IDEA ###
.idea
*.iws
*.iml
*.ipr
### NetBeans ###
/nbproject/private/
/build/
/nbbuild/
/dist/
/nbdist/
/.nb-gradle/
================================================
FILE: demo-cache-ehcache/README.md
================================================
# spring-boot-demo-cache-ehcache
> 此 demo 主要演示了 Spring Boot 如何集成 ehcache 使用缓存。
## pom.xml
```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>
<artifactId>spring-boot-demo-cache-ehcache</artifactId>
<version>1.0.0-SNAPSHOT</version>
<packaging>jar</packaging>
<name>spring-boot-demo-cache-ehcache</name>
<description>Demo project for Spring Boot</description>
<parent>
<groupId>com.xkcoding</groupId>
<artifactId>spring-boot-demo</artifactId>
<version>1.0.0-SNAPSHOT</version>
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-cache</artifactId>
</dependency>
<dependency>
<groupId>net.sf.ehcache</groupId>
<artifactId>ehcache</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<finalName>spring-boot-demo-cache-ehcache</finalName>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
```
## SpringBootDemoCacheEhcacheApplication.java
```java
/**
* <p>
* 启动类
* </p>
*
* @author yangkai.shen
* @date Created in 2018-11-16 17:02
*/
@SpringBootApplication
@EnableCaching
public class SpringBootDemoCacheEhcacheApplication {
public static void main(String[] args) {
SpringApplication.run(SpringBootDemoCacheEhcacheApplication.class, args);
}
}
```
## application.yml
```yaml
spring:
cache:
type: ehcache
ehcache:
config: classpath:ehcache.xml
logging:
level:
com.xkcoding: debug
```
## ehcache.xml
```xml
<!-- ehcache配置 -->
<ehcache
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="http://ehcache.org/ehcache.xsd"
updateCheck="false">
<!--缓存路径,用户目录下的base_ehcache目录-->
<diskStore path="user.home/base_ehcache"/>
<defaultCache
maxElementsInMemory="20000"
eternal="false"
timeToIdleSeconds="120"
timeToLiveSeconds="120"
overflowToDisk="true"
maxElementsOnDisk="10000000"
diskPersistent="false"
diskExpiryThreadIntervalSeconds="120"
memoryStoreEvictionPolicy="LRU"/>
<!--
缓存文件名:user,同样的可以配置多个缓存
maxElementsInMemory:内存中最多存储
eternal:外部存储
overflowToDisk:超出缓存到磁盘
diskPersistent:磁盘持久化
timeToLiveSeconds:缓存时间
diskExpiryThreadIntervalSeconds:磁盘过期时间
-->
<cache name="user"
maxElementsInMemory="20000"
eternal="true"
overflowToDisk="true"
diskPersistent="false"
timeToLiveSeconds="0"
diskExpiryThreadIntervalSeconds="120"/>
</ehcache>
```
## UserServiceImpl.java
```java
/**
* <p>
* UserService
* </p>
*
* @author yangkai.shen
* @date Created in 2018-11-16 16:54
*/
@Service
@Slf4j
public class UserServiceImpl implements UserService {
/**
* 模拟数据库
*/
private static final Map<Long, User> DATABASES = Maps.newConcurrentMap();
/**
* 初始化数据
*/
static {
DATABASES.put(1L, new User(1L, "user1"));
DATABASES.put(2L, new User(2L, "user2"));
DATABASES.put(3L, new User(3L, "user3"));
}
/**
* 保存或修改用户
*
* @param user 用户对象
* @return 操作结果
*/
@CachePut(value = "user", key = "#user.id")
@Override
public User saveOrUpdate(User user) {
DATABASES.put(user.getId(), user);
log.info("保存用户【user】= {}", user);
return user;
}
/**
* 获取用户
*
* @param id key值
* @return 返回结果
*/
@Cacheable(value = "user", key = "#id")
@Override
public User get(Long id) {
// 我们假设从数据库读取
log.info("查询用户【id】= {}", id);
return DATABASES.get(id);
}
/**
* 删除
*
* @param id key值
*/
@CacheEvict(value = "user", key = "#id")
@Override
public void delete(Long id) {
DATABASES.remove(id);
log.info("删除用户【id】= {}", id);
}
}
```
## UserServiceTest.java
```java
/**
* <p>
* ehcache缓存测试
* </p>
*
* @author yangkai.shen
* @date Created in 2018-11-16 16:58
*/
@Slf4j
public class UserServiceTest extends SpringBootDemoCacheEhcacheApplicationTests {
@Autowired
private UserService userService;
/**
* 获取两次,查看日志验证缓存
*/
@Test
public void getTwice() {
// 模拟查询id为1的用户
User user1 = userService.get(1L);
log.debug("【user1】= {}", user1);
// 再次查询
User user2 = userService.get(1L);
log.debug("【user2】= {}", user2);
// 查看日志,只打印一次日志,证明缓存生效
}
/**
* 先存,再查询,查看日志验证缓存
*/
@Test
public void getAfterSave() {
userService.saveOrUpdate(new User(4L, "user4"));
User user = userService.get(4L);
log.debug("【user】= {}", user);
// 查看日志,只打印保存用户的日志,查询是未触发查询日志,因此缓存生效
}
/**
* 测试删除,查看redis是否存在缓存数据
*/
@Test
public void deleteUser() {
// 查询一次,使ehcache中存在缓存数据
userService.get(1L);
// 删除,查看ehcache是否存在缓存数据
userService.delete(1L);
}
}
```
## 参考
- Ehcache 官网:http://www.ehcache.org/documentation/
- Spring Boot 官方文档:https://docs.spring.io/spring-boot/docs/2.1.0.RELEASE/reference/htmlsingle/#boot-features-caching-provider-ehcache2
- 博客:https://juejin.im/post/5b308de9518825748b56ae1d
================================================
FILE: demo-cache-ehcache/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>
<artifactId>demo-cache-ehcache</artifactId>
<version>1.0.0-SNAPSHOT</version>
<packaging>jar</packaging>
<name>demo-cache-ehcache</name>
<description>Demo project for Spring Boot</description>
<parent>
<groupId>com.xkcoding</groupId>
<artifactId>spring-boot-demo</artifactId>
<version>1.0.0-SNAPSHOT</version>
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-cache</artifactId>
</dependency>
<dependency>
<groupId>net.sf.ehcache</groupId>
<artifactId>ehcache</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<finalName>demo-cache-ehcache</finalName>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
================================================
FILE: demo-cache-ehcache/src/main/java/com/xkcoding/cache/ehcache/SpringBootDemoCacheEhcacheApplication.java
================================================
package com.xkcoding.cache.ehcache;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cache.annotation.EnableCaching;
/**
* <p>
* 启动类
* </p>
*
* @author yangkai.shen
* @date Created in 2018-11-16 17:02
*/
@SpringBootApplication
@EnableCaching
public class SpringBootDemoCacheEhcacheApplication {
public static void main(String[] args) {
SpringApplication.run(SpringBootDemoCacheEhcacheApplication.class, args);
}
}
================================================
FILE: demo-cache-ehcache/src/main/java/com/xkcoding/cache/ehcache/entity/User.java
================================================
package com.xkcoding.cache.ehcache.entity;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
/**
* <p>
* 用户实体
* </p>
*
* @author yangkai.shen
* @date Created in 2018-11-16 16:53
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
public class User implements Serializable {
private static final long serialVersionUID = 2892248514883451461L;
/**
* 主键id
*/
private Long id;
/**
* 姓名
*/
private String name;
}
================================================
FILE: demo-cache-ehcache/src/main/java/com/xkcoding/cache/ehcache/service/UserService.java
================================================
package com.xkcoding.cache.ehcache.service;
import com.xkcoding.cache.ehcache.entity.User;
/**
* <p>
* UserService
* </p>
*
* @author yangkai.shen
* @date Created in 2018-11-16 16:53
*/
public interface UserService {
/**
* 保存或修改用户
*
* @param user 用户对象
* @return 操作结果
*/
User saveOrUpdate(User user);
/**
* 获取用户
*
* @param id key值
* @return 返回结果
*/
User get(Long id);
/**
* 删除
*
* @param id key值
*/
void delete(Long id);
}
================================================
FILE: demo-cache-ehcache/src/main/java/com/xkcoding/cache/ehcache/service/impl/UserServiceImpl.java
================================================
package com.xkcoding.cache.ehcache.service.impl;
import com.google.common.collect.Maps;
import com.xkcoding.cache.ehcache.entity.User;
import com.xkcoding.cache.ehcache.service.UserService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.cache.annotation.CacheEvict;
import org.springframework.cache.annotation.CachePut;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.stereotype.Service;
import java.util.Map;
/**
* <p>
* UserService
* </p>
*
* @author yangkai.shen
* @date Created in 2018-11-16 16:54
*/
@Service
@Slf4j
public class UserServiceImpl implements UserService {
/**
* 模拟数据库
*/
private static final Map<Long, User> DATABASES = Maps.newConcurrentMap();
/**
* 初始化数据
*/
static {
DATABASES.put(1L, new User(1L, "user1"));
DATABASES.put(2L, new User(2L, "user2"));
DATABASES.put(3L, new User(3L, "user3"));
}
/**
* 保存或修改用户
*
* @param user 用户对象
* @return 操作结果
*/
@CachePut(value = "user", key = "#user.id")
@Override
public User saveOrUpdate(User user) {
DATABASES.put(user.getId(), user);
log.info("保存用户【user】= {}", user);
return user;
}
/**
* 获取用户
*
* @param id key值
* @return 返回结果
*/
@Cacheable(value = "user", key = "#id")
@Override
public User get(Long id) {
// 我们假设从数据库读取
log.info("查询用户【id】= {}", id);
return DATABASES.get(id);
}
/**
* 删除
*
* @param id key值
*/
@CacheEvict(value = "user", key = "#id")
@Override
public void delete(Long id) {
DATABASES.remove(id);
log.info("删除用户【id】= {}", id);
}
}
================================================
FILE: demo-cache-ehcache/src/main/resources/application.yml
================================================
spring:
cache:
type: ehcache
ehcache:
config: classpath:ehcache.xml
logging:
level:
com.xkcoding: debug
================================================
FILE: demo-cache-ehcache/src/main/resources/ehcache.xml
================================================
<!-- ehcache配置 -->
<ehcache
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="http://ehcache.org/ehcache.xsd"
updateCheck="false">
<!--缓存路径,用户目录下的base_ehcache目录-->
<diskStore path="user.home/base_ehcache"/>
<defaultCache
maxElementsInMemory="20000"
eternal="false"
timeToIdleSeconds="120"
timeToLiveSeconds="120"
overflowToDisk="true"
maxElementsOnDisk="10000000"
diskPersistent="false"
diskExpiryThreadIntervalSeconds="120"
memoryStoreEvictionPolicy="LRU"/>
<!--
缓存文件名:user,同样的可以配置多个缓存
maxElementsInMemory:内存中最多存储
eternal:外部存储
overflowToDisk:超出缓存到磁盘
diskPersistent:磁盘持久化
timeToLiveSeconds:缓存时间
diskExpiryThreadIntervalSeconds:磁盘过期时间
-->
<cache name="user"
maxElementsInMemory="20000"
eternal="true"
overflowToDisk="true"
diskPersistent="false"
timeToLiveSeconds="0"
diskExpiryThreadIntervalSeconds="120"/>
</ehcache>
================================================
FILE: demo-cache-ehcache/src/test/java/com/xkcoding/cache/ehcache/SpringBootDemoCacheEhcacheApplicationTests.java
================================================
package com.xkcoding.cache.ehcache;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
@RunWith(SpringRunner.class)
@SpringBootTest
public class SpringBootDemoCacheEhcacheApplicationTests {
@Test
public void contextLoads() {
}
}
================================================
FILE: demo-cache-ehcache/src/test/java/com/xkcoding/cache/ehcache/service/UserServiceTest.java
================================================
package com.xkcoding.cache.ehcache.service;
import com.xkcoding.cache.ehcache.SpringBootDemoCacheEhcacheApplicationTests;
import com.xkcoding.cache.ehcache.entity.User;
import lombok.extern.slf4j.Slf4j;
import org.junit.Test;
import org.springframework.beans.factory.annotation.Autowired;
/**
* <p>
* ehcache缓存测试
* </p>
*
* @author yangkai.shen
* @date Created in 2018-11-16 16:58
*/
@Slf4j
public class UserServiceTest extends SpringBootDemoCacheEhcacheApplicationTests {
@Autowired
private UserService userService;
/**
* 获取两次,查看日志验证缓存
*/
@Test
public void getTwice() {
// 模拟查询id为1的用户
User user1 = userService.get(1L);
log.debug("【user1】= {}", user1);
// 再次查询
User user2 = userService.get(1L);
log.debug("【user2】= {}", user2);
// 查看日志,只打印一次日志,证明缓存生效
}
/**
* 先存,再查询,查看日志验证缓存
*/
@Test
public void getAfterSave() {
userService.saveOrUpdate(new User(4L, "user4"));
User user = userService.get(4L);
log.debug("【user】= {}", user);
// 查看日志,只打印保存用户的日志,查询是未触发查询日志,因此缓存生效
}
/**
* 测试删除,查看redis是否存在缓存数据
*/
@Test
public void deleteUser() {
// 查询一次,使ehcache中存在缓存数据
userService.get(1L);
// 删除,查看ehcache是否存在缓存数据
userService.delete(1L);
}
}
================================================
FILE: demo-cache-redis/.gitignore
================================================
/target/
!.mvn/wrapper/maven-wrapper.jar
### STS ###
.apt_generated
.classpath
.factorypath
.project
.settings
.springBeans
.sts4-cache
### IntelliJ IDEA ###
.idea
*.iws
*.iml
*.ipr
### NetBeans ###
/nbproject/private/
/build/
/nbbuild/
/dist/
/nbdist/
/.nb-gradle/
================================================
FILE: demo-cache-redis/README.md
================================================
# spring-boot-demo-cache-redis
> 此 demo 主要演示了 Spring Boot 如何整合 redis,操作redis中的数据,并使用redis缓存数据。连接池使用 Lettuce。
## pom.xml
```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>
<artifactId>spring-boot-demo-cache-redis</artifactId>
<version>1.0.0-SNAPSHOT</version>
<packaging>jar</packaging>
<name>spring-boot-demo-cache-redis</name>
<description>Demo project for Spring Boot</description>
<parent>
<groupId>com.xkcoding</groupId>
<artifactId>spring-boot-demo</artifactId>
<version>1.0.0-SNAPSHOT</version>
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<!-- 对象池,使用redis时必须引入 -->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-pool2</artifactId>
</dependency>
<!-- 引入 jackson 对象json转换 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-json</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
</dependency>
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
</dependencies>
<build>
<finalName>spring-boot-demo-cache-redis</finalName>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
```
## application.yml
```yaml
spring:
redis:
host: localhost
# 连接超时时间(记得添加单位,Duration)
timeout: 10000ms
# Redis默认情况下有16个分片,这里配置具体使用的分片
# database: 0
lettuce:
pool:
# 连接池最大连接数(使用负值表示没有限制) 默认 8
max-active: 8
# 连接池最大阻塞等待时间(使用负值表示没有限制) 默认 -1
max-wait: -1ms
# 连接池中的最大空闲连接 默认 8
max-idle: 8
# 连接池中的最小空闲连接 默认 0
min-idle: 0
cache:
# 一般来说是不用配置的,Spring Cache 会根据依赖的包自行装配
type: redis
logging:
level:
com.xkcoding: debug
```
## RedisConfig.java
```java
/**
* <p>
* redis配置
* </p>
*
* @author yangkai.shen
* @date Created in 2018-11-15 16:41
*/
@Configuration
@AutoConfigureAfter(RedisAutoConfiguration.class)
@EnableCaching
public class RedisConfig {
/**
* 默认情况下的模板只能支持RedisTemplate<String, String>,也就是只能存入字符串,因此支持序列化
*/
@Bean
public RedisTemplate<String, Serializable> redisCacheTemplate(LettuceConnectionFactory redisConnectionFactory) {
RedisTemplate<String, Serializable> template = new RedisTemplate<>();
template.setKeySerializer(new StringRedisSerializer());
template.setValueSerializer(new GenericJackson2JsonRedisSerializer());
template.setConnectionFactory(redisConnectionFactory);
return template;
}
/**
* 配置使用注解的时候缓存配置,默认是序列化反序列化的形式,加上此配置则为 json 形式
*/
@Bean
public CacheManager cacheManager(RedisConnectionFactory factory) {
// 配置序列化
RedisCacheConfiguration config = RedisCacheConfiguration.defaultCacheConfig();
RedisCacheConfiguration redisCacheConfiguration = config.serializeKeysWith(RedisSerializationContext.SerializationPair.fromSerializer(new StringRedisSerializer())).serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(new GenericJackson2JsonRedisSerializer()));
return RedisCacheManager.builder(factory).cacheDefaults(redisCacheConfiguration).build();
}
}
```
## UserServiceImpl.java
```java
/**
* <p>
* UserService
* </p>
*
* @author yangkai.shen
* @date Created in 2018-11-15 16:45
*/
@Service
@Slf4j
public class UserServiceImpl implements UserService {
/**
* 模拟数据库
*/
private static final Map<Long, User> DATABASES = Maps.newConcurrentMap();
/**
* 初始化数据
*/
static {
DATABASES.put(1L, new User(1L, "user1"));
DATABASES.put(2L, new User(2L, "user2"));
DATABASES.put(3L, new User(3L, "user3"));
}
/**
* 保存或修改用户
*
* @param user 用户对象
* @return 操作结果
*/
@CachePut(value = "user", key = "#user.id")
@Override
public User saveOrUpdate(User user) {
DATABASES.put(user.getId(), user);
log.info("保存用户【user】= {}", user);
return user;
}
/**
* 获取用户
*
* @param id key值
* @return 返回结果
*/
@Cacheable(value = "user", key = "#id")
@Override
public User get(Long id) {
// 我们假设从数据库读取
log.info("查询用户【id】= {}", id);
return DATABASES.get(id);
}
/**
* 删除
*
* @param id key值
*/
@CacheEvict(value = "user", key = "#id")
@Override
public void delete(Long id) {
DATABASES.remove(id);
log.info("删除用户【id】= {}", id);
}
}
```
## RedisTest.java
> 主要测试使用 `RedisTemplate` 操作 `Redis` 中的数据:
>
> - opsForValue:对应 String(字符串)
> - opsForZSet:对应 ZSet(有序集合)
> - opsForHash:对应 Hash(哈希)
> - opsForList:对应 List(列表)
> - opsForSet:对应 Set(集合)
> - opsForGeo:** 对应 GEO(地理位置)
```java
/**
* <p>
* Redis测试
* </p>
*
* @author yangkai.shen
* @date Created in 2018-11-15 17:17
*/
@Slf4j
public class RedisTest extends SpringBootDemoCacheRedisApplicationTests {
@Autowired
private StringRedisTemplate stringRedisTemplate;
@Autowired
private RedisTemplate<String, Serializable> redisCacheTemplate;
/**
* 测试 Redis 操作
*/
@Test
public void get() {
// 测试线程安全,程序结束查看redis中count的值是否为1000
ExecutorService executorService = Executors.newFixedThreadPool(1000);
IntStream.range(0, 1000).forEach(i -> executorService.execute(() -> stringRedisTemplate.opsForValue().increment("count", 1)));
stringRedisTemplate.opsForValue().set("k1", "v1");
String k1 = stringRedisTemplate.opsForValue().get("k1");
log.debug("【k1】= {}", k1);
// 以下演示整合,具体Redis命令可以参考官方文档
String key = "xkcoding:user:1";
redisCacheTemplate.opsForValue().set(key, new User(1L, "user1"));
// 对应 String(字符串)
User user = (User) redisCacheTemplate.opsForValue().get(key);
log.debug("【user】= {}", user);
}
}
```
## UserServiceTest.java
> 主要测试使用Redis缓存是否起效
```java
/**
* <p>
* Redis - 缓存测试
* </p>
*
* @author yangkai.shen
* @date Created in 2018-11-15 16:53
*/
@Slf4j
public class UserServiceTest extends SpringBootDemoCacheRedisApplicationTests {
@Autowired
private UserService userService;
/**
* 获取两次,查看日志验证缓存
*/
@Test
public void getTwice() {
// 模拟查询id为1的用户
User user1 = userService.get(1L);
log.debug("【user1】= {}", user1);
// 再次查询
User user2 = userService.get(1L);
log.debug("【user2】= {}", user2);
// 查看日志,只打印一次日志,证明缓存生效
}
/**
* 先存,再查询,查看日志验证缓存
*/
@Test
public void getAfterSave() {
userService.saveOrUpdate(new User(4L, "测试中文"));
User user = userService.get(4L);
log.debug("【user】= {}", user);
// 查看日志,只打印保存用户的日志,查询是未触发查询日志,因此缓存生效
}
/**
* 测试删除,查看redis是否存在缓存数据
*/
@Test
public void deleteUser() {
// 查询一次,使redis中存在缓存数据
userService.get(1L);
// 删除,查看redis是否存在缓存数据
userService.delete(1L);
}
}
```
## 参考
- spring-data-redis 官方文档:https://docs.spring.io/spring-data/redis/docs/2.0.1.RELEASE/reference/html/
- redis 文档:https://redis.io/documentation
- redis 中文文档:http://www.redis.cn/commands.html
================================================
FILE: demo-cache-redis/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>
<artifactId>demo-cache-redis</artifactId>
<version>1.0.0-SNAPSHOT</version>
<packaging>jar</packaging>
<name>demo-cache-redis</name>
<description>Demo project for Spring Boot</description>
<parent>
<groupId>com.xkcoding</groupId>
<artifactId>spring-boot-demo</artifactId>
<version>1.0.0-SNAPSHOT</version>
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<!-- 对象池,使用redis时必须引入 -->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-pool2</artifactId>
</dependency>
<!-- 引入 jackson 对象json转换 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-json</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
</dependency>
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
</dependencies>
<build>
<finalName>demo-cache-redis</finalName>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
================================================
FILE: demo-cache-redis/src/main/java/com/xkcoding/cache/redis/SpringBootDemoCacheRedisApplication.java
================================================
package com.xkcoding.cache.redis;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class SpringBootDemoCacheRedisApplication {
public static void main(String[] args) {
SpringApplication.run(SpringBootDemoCacheRedisApplication.class, args);
}
}
================================================
FILE: demo-cache-redis/src/main/java/com/xkcoding/cache/redis/config/RedisConfig.java
================================================
package com.xkcoding.cache.redis.config;
import org.springframework.boot.autoconfigure.AutoConfigureAfter;
import org.springframework.boot.autoconfigure.data.redis.RedisAutoConfiguration;
import org.springframework.cache.CacheManager;
import org.springframework.cache.annotation.EnableCaching;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.cache.RedisCacheConfiguration;
import org.springframework.data.redis.cache.RedisCacheManager;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.RedisSerializationContext;
import org.springframework.data.redis.serializer.StringRedisSerializer;
import java.io.Serializable;
/**
* <p>
* redis配置
* </p>
*
* @author yangkai.shen
* @date Created in 2018-11-15 16:41
*/
@Configuration
@AutoConfigureAfter(RedisAutoConfiguration.class)
@EnableCaching
public class RedisConfig {
/**
* 默认情况下的模板只能支持RedisTemplate<String, String>,也就是只能存入字符串,因此支持序列化
*/
@Bean
public RedisTemplate<String, Serializable> redisCacheTemplate(LettuceConnectionFactory redisConnectionFactory) {
RedisTemplate<String, Serializable> template = new RedisTemplate<>();
template.setKeySerializer(new StringRedisSerializer());
template.setValueSerializer(new GenericJackson2JsonRedisSerializer());
template.setConnectionFactory(redisConnectionFactory);
return template;
}
/**
* 配置使用注解的时候缓存配置,默认是序列化反序列化的形式,加上此配置则为 json 形式
*/
@Bean
public CacheManager cacheManager(RedisConnectionFactory factory) {
// 配置序列化
RedisCacheConfiguration config = RedisCacheConfiguration.defaultCacheConfig();
RedisCacheConfiguration redisCacheConfiguration = config.serializeKeysWith(RedisSerializationContext.SerializationPair.fromSerializer(new StringRedisSerializer())).serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(new GenericJackson2JsonRedisSerializer()));
return RedisCacheManager.builder(factory).cacheDefaults(redisCacheConfiguration).build();
}
}
================================================
FILE: demo-cache-redis/src/main/java/com/xkcoding/cache/redis/entity/User.java
================================================
package com.xkcoding.cache.redis.entity;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
/**
* <p>
* 用户实体
* </p>
*
* @author yangkai.shen
* @date Created in 2018-11-15 16:39
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
public class User implements Serializable {
private static final long serialVersionUID = 2892248514883451461L;
/**
* 主键id
*/
private Long id;
/**
* 姓名
*/
private String name;
}
================================================
FILE: demo-cache-redis/src/main/java/com/xkcoding/cache/redis/service/UserService.java
================================================
package com.xkcoding.cache.redis.service;
import com.xkcoding.cache.redis.entity.User;
/**
* <p>
* UserService
* </p>
*
* @author yangkai.shen
* @date Created in 2018-11-15 16:45
*/
public interface UserService {
/**
* 保存或修改用户
*
* @param user 用户对象
* @return 操作结果
*/
User saveOrUpdate(User user);
/**
* 获取用户
*
* @param id key值
* @return 返回结果
*/
User get(Long id);
/**
* 删除
*
* @param id key值
*/
void delete(Long id);
}
================================================
FILE: demo-cache-redis/src/main/java/com/xkcoding/cache/redis/service/impl/UserServiceImpl.java
================================================
package com.xkcoding.cache.redis.service.impl;
import com.google.common.collect.Maps;
import com.xkcoding.cache.redis.entity.User;
import com.xkcoding.cache.redis.service.UserService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.cache.annotation.CacheEvict;
import org.springframework.cache.annotation.CachePut;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.stereotype.Service;
import java.util.Map;
/**
* <p>
* UserService
* </p>
*
* @author yangkai.shen
* @date Created in 2018-11-15 16:45
*/
@Service
@Slf4j
public class UserServiceImpl implements UserService {
/**
* 模拟数据库
*/
private static final Map<Long, User> DATABASES = Maps.newConcurrentMap();
/**
* 初始化数据
*/
static {
DATABASES.put(1L, new User(1L, "user1"));
DATABASES.put(2L, new User(2L, "user2"));
DATABASES.put(3L, new User(3L, "user3"));
}
/**
* 保存或修改用户
*
* @param user 用户对象
* @return 操作结果
*/
@CachePut(value = "user", key = "#user.id")
@Override
public User saveOrUpdate(User user) {
DATABASES.put(user.getId(), user);
log.info("保存用户【user】= {}", user);
return user;
}
/**
* 获取用户
*
* @param id key值
* @return 返回结果
*/
@Cacheable(value = "user", key = "#id")
@Override
public User get(Long id) {
// 我们假设从数据库读取
log.info("查询用户【id】= {}", id);
return DATABASES.get(id);
}
/**
* 删除
*
* @param id key值
*/
@CacheEvict(value = "user", key = "#id")
@Override
public void delete(Long id) {
DATABASES.remove(id);
log.info("删除用户【id】= {}", id);
}
}
================================================
FILE: demo-cache-redis/src/main/resources/application.yml
================================================
spring:
redis:
host: localhost
# 连接超时时间(记得添加单位,Duration)
timeout: 10000ms
# Redis默认情况下有16个分片,这里配置具体使用的分片
# database: 0
lettuce:
pool:
# 连接池最大连接数(使用负值表示没有限制) 默认 8
max-active: 8
# 连接池最大阻塞等待时间(使用负值表示没有限制) 默认 -1
max-wait: -1ms
# 连接池中的最大空闲连接 默认 8
max-idle: 8
# 连接池中的最小空闲连接 默认 0
min-idle: 0
cache:
# 一般来说是不用配置的,Spring Cache 会根据依赖的包自行装配
type: redis
logging:
level:
com.xkcoding: debug
================================================
FILE: demo-cache-redis/src/test/java/com/xkcoding/cache/redis/RedisTest.java
================================================
package com.xkcoding.cache.redis;
import com.xkcoding.cache.redis.entity.User;
import lombok.extern.slf4j.Slf4j;
import org.junit.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.StringRedisTemplate;
import java.io.Serializable;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.stream.IntStream;
/**
* <p>
* Redis测试
* </p>
*
* @author yangkai.shen
* @date Created in 2018-11-15 17:17
*/
@Slf4j
public class RedisTest extends SpringBootDemoCacheRedisApplicationTests {
@Autowired
private StringRedisTemplate stringRedisTemplate;
@Autowired
private RedisTemplate<String, Serializable> redisCacheTemplate;
/**
* 测试 Redis 操作
*/
@Test
public void get() {
// 测试线程安全,程序结束查看redis中count的值是否为1000
ExecutorService executorService = Executors.newFixedThreadPool(1000);
IntStream.range(0, 1000).forEach(i -> executorService.execute(() -> stringRedisTemplate.opsForValue().increment("count", 1)));
stringRedisTemplate.opsForValue().set("k1", "v1");
String k1 = stringRedisTemplate.opsForValue().get("k1");
log.debug("【k1】= {}", k1);
// 以下演示整合,具体Redis命令可以参考官方文档
String key = "xkcoding:user:1";
redisCacheTemplate.opsForValue().set(key, new User(1L, "user1"));
// 对应 String(字符串)
User user = (User) redisCacheTemplate.opsForValue().get(key);
log.debug("【user】= {}", user);
}
}
================================================
FILE: demo-cache-redis/src/test/java/com/xkcoding/cache/redis/SpringBootDemoCacheRedisApplicationTests.java
================================================
package com.xkcoding.cache.redis;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
@RunWith(SpringRunner.class)
@SpringBootTest
public class SpringBootDemoCacheRedisApplicationTests {
@Test
public void contextLoads() {
}
}
================================================
FILE: demo-cache-redis/src/test/java/com/xkcoding/cache/redis/service/UserServiceTest.java
================================================
package com.xkcoding.cache.redis.service;
import com.xkcoding.cache.redis.SpringBootDemoCacheRedisApplicationTests;
import com.xkcoding.cache.redis.entity.User;
import lombok.extern.slf4j.Slf4j;
import org.junit.Test;
import org.springframework.beans.factory.annotation.Autowired;
/**
* <p>
* Redis - 缓存测试
* </p>
*
* @author yangkai.shen
* @date Created in 2018-11-15 16:53
*/
@Slf4j
public class UserServiceTest extends SpringBootDemoCacheRedisApplicationTests {
@Autowired
private UserService userService;
/**
* 获取两次,查看日志验证缓存
*/
@Test
public void getTwice() {
// 模拟查询id为1的用户
User user1 = userService.get(1L);
log.debug("【user1】= {}", user1);
// 再次查询
User user2 = userService.get(1L);
log.debug("【user2】= {}", user2);
// 查看日志,只打印一次日志,证明缓存生效
}
/**
* 先存,再查询,查看日志验证缓存
*/
@Test
public void getAfterSave() {
userService.saveOrUpdate(new User(4L, "测试中文"));
User user = userService.get(4L);
log.debug("【user】= {}", user);
// 查看日志,只打印保存用户的日志,查询是未触发查询日志,因此缓存生效
}
/**
* 测试删除,查看redis是否存在缓存数据
*/
@Test
public void deleteUser() {
// 查询一次,使redis中存在缓存数据
userService.get(1L);
// 删除,查看redis是否存在缓存数据
userService.delete(1L);
}
}
================================================
FILE: demo-codegen/.gitignore
================================================
/target/
!.mvn/wrapper/maven-wrapper.jar
### STS ###
.apt_generated
.classpath
.factorypath
.project
.settings
.springBeans
.sts4-cache
### IntelliJ IDEA ###
.idea
*.iws
*.iml
*.ipr
### NetBeans ###
/nbproject/private/
/nbbuild/
/dist/
/nbdist/
/.nb-gradle/
/build/
### VS Code ###
.vscode/
================================================
FILE: demo-codegen/README.md
================================================
# spring-boot-demo-codegen
> 此 demo 主要演示了 Spring Boot 使用**模板技术**生成代码,并提供前端页面,可生成 Entity/Mapper/Service/Controller 等代码。
## 1. 主要功能
1. 使用 `velocity` 代码生成
2. 暂时支持mysql数据库的代码生成
3. 提供前端页面展示,并下载代码压缩包
> 注意:① Entity里使用lombok,简化代码 ② Mapper 和 Service 层集成 Mybatis-Plus 简化代码
## 2. 运行
1. 运行 `SpringBootDemoCodegenApplication` 启动项目
2. 打开浏览器,输入 http://localhost:8080/demo/index.html
3. 输入查询条件,生成代码
## 3. 关键代码
### 3.1. pom.xml
```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>
<artifactId>spring-boot-demo-codegen</artifactId>
<version>1.0.0-SNAPSHOT</version>
<packaging>jar</packaging>
<name>spring-boot-demo-codegen</name>
<description>Demo project for Spring Boot</description>
<parent>
<groupId>com.xkcoding</groupId>
<artifactId>spring-boot-demo</artifactId>
<version>1.0.0-SNAPSHOT</version>
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-undertow</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.zaxxer</groupId>
<artifactId>HikariCP</artifactId>
</dependency>
<!--velocity代码生成使用模板 -->
<dependency>
<groupId>org.apache.velocity</groupId>
<artifactId>velocity</artifactId>
<version>1.7</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-text</artifactId>
<version>1.6</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
</dependency>
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
</dependencies>
<build>
<finalName>spring-boot-demo-codegen</finalName>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
```
### 3.2. 代码生成器配置
```properties
#代码生成器,配置信息
mainPath=com.xkcoding
#包名
package=com.xkcoding
moduleName=generator
#作者
author=Yangkai.Shen
#表前缀(类名不会包含表前缀)
tablePrefix=tb_
#类型转换,配置信息
tinyint=Integer
smallint=Integer
mediumint=Integer
int=Integer
integer=Integer
bigint=Long
float=Float
double=Double
decimal=BigDecimal
bit=Boolean
char=String
varchar=String
tinytext=String
text=String
mediumtext=String
longtext=String
date=LocalDateTime
datetime=LocalDateTime
timestamp=LocalDateTime
```
### 3.3. CodeGenUtil.java
```java
/**
* <p>
* 代码生成器 工具类
* </p>
*
* @author yangkai.shen
* @date Created in 2019-03-22 09:27
*/
@Slf4j
@UtilityClass
public class CodeGenUtil {
private final String ENTITY_JAVA_VM = "Entity.java.vm";
private final String MAPPER_JAVA_VM = "Mapper.java.vm";
private final String SERVICE_JAVA_VM = "Service.java.vm";
private final String SERVICE_IMPL_JAVA_VM = "ServiceImpl.java.vm";
private final String CONTROLLER_JAVA_VM = "Controller.java.vm";
private final String MAPPER_XML_VM = "Mapper.xml.vm";
private final String API_JS_VM = "api.js.vm";
private List<String> getTemplates() {
List<String> templates = new ArrayList<>();
templates.add("template/Entity.java.vm");
templates.add("template/Mapper.java.vm");
templates.add("template/Mapper.xml.vm");
templates.add("template/Service.java.vm");
templates.add("template/ServiceImpl.java.vm");
templates.add("template/Controller.java.vm");
templates.add("template/api.js.vm");
return templates;
}
/**
* 生成代码
*/
public void generatorCode(GenConfig genConfig, Entity table, List<Entity> columns, ZipOutputStream zip) {
//配置信息
Props props = getConfig();
boolean hasBigDecimal = false;
//表信息
TableEntity tableEntity = new TableEntity();
tableEntity.setTableName(table.getStr("tableName"));
if (StrUtil.isNotBlank(genConfig.getComments())) {
tableEntity.setComments(genConfig.getComments());
} else {
tableEntity.setComments(table.getStr("tableComment"));
}
String tablePrefix;
if (StrUtil.isNotBlank(genConfig.getTablePrefix())) {
tablePrefix = genConfig.getTablePrefix();
} else {
tablePrefix = props.getStr("tablePrefix");
}
//表名转换成Java类名
String className = tableToJava(tableEntity.getTableName(), tablePrefix);
tableEntity.setCaseClassName(className);
tableEntity.setLowerClassName(StrUtil.lowerFirst(className));
//列信息
List<ColumnEntity> columnList = Lists.newArrayList();
for (Entity column : columns) {
ColumnEntity columnEntity = new ColumnEntity();
columnEntity.setColumnName(column.getStr("columnName"));
columnEntity.setDataType(column.getStr("dataType"));
columnEntity.setComments(column.getStr("columnComment"));
columnEntity.setExtra(column.getStr("extra"));
//列名转换成Java属性名
String attrName = columnToJava(columnEntity.getColumnName());
columnEntity.setCaseAttrName(attrName);
columnEntity.setLowerAttrName(StrUtil.lowerFirst(attrName));
//列的数据类型,转换成Java类型
String attrType = props.getStr(columnEntity.getDataType(), "unknownType");
columnEntity.setAttrType(attrType);
if (!hasBigDecimal && "BigDecimal".equals(attrType)) {
hasBigDecimal = true;
}
//是否主键
if ("PRI".equalsIgnoreCase(column.getStr("columnKey")) && tableEntity.getPk() == null) {
tableEntity.setPk(columnEntity);
}
columnList.add(columnEntity);
}
tableEntity.setColumns(columnList);
//没主键,则第一个字段为主键
if (tableEntity.getPk() == null) {
tableEntity.setPk(tableEntity.getColumns().get(0));
}
//设置velocity资源加载器
Properties prop = new Properties();
prop.put("file.resource.loader.class", "org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader");
Velocity.init(prop);
//封装模板数据
Map<String, Object> map = new HashMap<>(16);
map.put("tableName", tableEntity.getTableName());
map.put("pk", tableEntity.getPk());
map.put("className", tableEntity.getCaseClassName());
map.put("classname", tableEntity.getLowerClassName());
map.put("pathName", tableEntity.getLowerClassName().toLowerCase());
map.put("columns", tableEntity.getColumns());
map.put("hasBigDecimal", hasBigDecimal);
map.put("datetime", DateUtil.now());
map.put("year", DateUtil.year(new Date()));
if (StrUtil.isNotBlank(genConfig.getComments())) {
map.put("comments", genConfig.getComments());
} else {
map.put("comments", tableEntity.getComments());
}
if (StrUtil.isNotBlank(genConfig.getAuthor())) {
map.put("author", genConfig.getAuthor());
} else {
map.put("author", props.getStr("author"));
}
if (StrUtil.isNotBlank(genConfig.getModuleName())) {
map.put("moduleName", genConfig.getModuleName());
} else {
map.put("moduleName", props.getStr("moduleName"));
}
if (StrUtil.isNotBlank(genConfig.getPackageName())) {
map.put("package", genConfig.getPackageName());
map.put("mainPath", genConfig.getPackageName());
} else {
map.put("package", props.getStr("package"));
map.put("mainPath", props.getStr("mainPath"));
}
VelocityContext context = new VelocityContext(map);
//获取模板列表
List<String> templates = getTemplates();
for (String template : templates) {
//渲染模板
StringWriter sw = new StringWriter();
Template tpl = Velocity.getTemplate(template, CharsetUtil.UTF_8);
tpl.merge(context, sw);
try {
//添加到zip
zip.putNextEntry(new ZipEntry(Objects.requireNonNull(getFileName(template, tableEntity.getCaseClassName(), map
.get("package")
.toString(), map.get("moduleName").toString()))));
IoUtil.write(zip, StandardCharsets.UTF_8, false, sw.toString());
IoUtil.close(sw);
zip.closeEntry();
} catch (IOException e) {
throw new RuntimeException("渲染模板失败,表名:" + tableEntity.getTableName(), e);
}
}
}
/**
* 列名转换成Java属性名
*/
private String columnToJava(String columnName) {
return WordUtils.capitalizeFully(columnName, new char[]{'_'}).replace("_", "");
}
/**
* 表名转换成Java类名
*/
private String tableToJava(String tableName, String tablePrefix) {
if (StrUtil.isNotBlank(tablePrefix)) {
tableName = tableName.replaceFirst(tablePrefix, "");
}
return columnToJava(tableName);
}
/**
* 获取配置信息
*/
private Props getConfig() {
Props props = new Props("generator.properties");
props.autoLoad(true);
return props;
}
/**
* 获取文件名
*/
private String getFileName(String template, String className, String packageName, String moduleName) {
// 包路径
String packagePath = GenConstants.SIGNATURE + File.separator + "src" + File.separator + "main" + File.separator + "java" + File.separator;
// 资源路径
String resourcePath = GenConstants.SIGNATURE + File.separator + "src" + File.separator + "main" + File.separator + "resources" + File.separator;
// api路径
String apiPath = GenConstants.SIGNATURE + File.separator + "api" + File.separator;
if (StrUtil.isNotBlank(packageName)) {
packagePath += packageName.replace(".", File.separator) + File.separator + moduleName + File.separator;
}
if (template.contains(ENTITY_JAVA_VM)) {
return packagePath + "entity" + File.separator + className + ".java";
}
if (template.contains(MAPPER_JAVA_VM)) {
return packagePath + "mapper" + File.separator + className + "Mapper.java";
}
if (template.contains(SERVICE_JAVA_VM)) {
return packagePath + "service" + File.separator + className + "Service.java";
}
if (template.contains(SERVICE_IMPL_JAVA_VM)) {
return packagePath + "service" + File.separator + "impl" + File.separator + className + "ServiceImpl.java";
}
if (template.contains(CONTROLLER_JAVA_VM)) {
return packagePath + "controller" + File.separator + className + "Controller.java";
}
if (template.contains(MAPPER_XML_VM)) {
return resourcePath + "mapper" + File.separator + className + "Mapper.xml";
}
if (template.contains(API_JS_VM)) {
return apiPath + className.toLowerCase() + ".js";
}
return null;
}
}
```
### 3.4. 其余代码参见demo
## 4. 演示
<video id="video" controls="" preload="none">
<source id="mp4" src="https://static.xkcoding.com/code/spring-boot-demo/codegen/codegen.mp4" type="video/mp4">
<p>您的浏览器版本过低,不支持播放视频演示,可下载演示视频观看,https://static.xkcoding.com/code/spring-boot-demo/codegen/codegen.mp4</p>
</video>
## 5. 参考
- [基于人人开源 自动构建项目_V1](https://qq343509740.gitee.io/2018/12/20/%E7%AC%94%E8%AE%B0/%E8%87%AA%E5%8A%A8%E6%9E%84%E5%BB%BA%E9%A1%B9%E7%9B%AE/%E5%9F%BA%E4%BA%8E%E4%BA%BA%E4%BA%BA%E5%BC%80%E6%BA%90%20%E8%87%AA%E5%8A%A8%E6%9E%84%E5%BB%BA%E9%A1%B9%E7%9B%AE_V1/)
- [Mybatis-Plus代码生成器](https://mybatis.plus/guide/generator.html#%E6%B7%BB%E5%8A%A0%E4%BE%9D%E8%B5%96)
================================================
FILE: demo-codegen/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>
<artifactId>demo-codegen</artifactId>
<version>1.0.0-SNAPSHOT</version>
<packaging>jar</packaging>
<name>demo-codegen</name>
<description>Demo project for Spring Boot</description>
<parent>
<groupId>com.xkcoding</groupId>
<artifactId>spring-boot-demo</artifactId>
<version>1.0.0-SNAPSHOT</version>
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-undertow</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.zaxxer</groupId>
<artifactId>HikariCP</artifactId>
</dependency>
<!--velocity代码生成使用模板 -->
<dependency>
<groupId>org.apache.velocity</groupId>
<artifactId>velocity-engine-core</artifactId>
<version>2.1</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-text</artifactId>
<version>1.6</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
</dependency>
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
</dependencies>
<build>
<finalName>demo-codegen</finalName>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
================================================
FILE: demo-codegen/src/main/java/com/xkcoding/codegen/SpringBootDemoCodegenApplication.java
================================================
package com.xkcoding.codegen;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
/**
* <p>
* 启动器
* </p>
*
* @author yangkai.shen
* @date Created in 2019-03-22 09:10
*/
@SpringBootApplication
public class SpringBootDemoCodegenApplication {
public static void main(String[] args) {
SpringApplication.run(SpringBootDemoCodegenApplication.class, args);
}
}
================================================
FILE: demo-codegen/src/main/java/com/xkcoding/codegen/common/IResultCode.java
================================================
package com.xkcoding.codegen.common;
/**
* <p>
* 统一状态码接口
* </p>
*
* @author yangkai.shen
* @date Created in 2019-03-21 16:28
*/
public interface IResultCode {
/**
* 获取状态码
*
* @return 状态码
*/
Integer getCode();
/**
* 获取返回消息
*
* @return 返回消息
*/
String getMessage();
}
================================================
FILE: demo-codegen/src/main/java/com/xkcoding/codegen/common/PageResult.java
================================================
package com.xkcoding.codegen.common;
import lombok.AllArgsConstructor;
import lombok.Data;
import java.util.List;
/**
* <p>
* 分页结果集
* </p>
*
* @author yangkai.shen
* @date Created in 2019-03-22 11:24
*/
@Data
@AllArgsConstructor
public class PageResult<T> {
/**
* 总条数
*/
private Long total;
/**
* 页码
*/
private int pageNumber;
/**
* 每页结果数
*/
private int pageSize;
/**
* 结果集
*/
private List<T> list;
}
================================================
FILE: demo-codegen/src/main/java/com/xkcoding/codegen/common/R.java
================================================
package com.xkcoding.codegen.common;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* <p>
* 统一API对象返回
* </p>
*
* @author yangkai.shen
* @date Created in 2019-03-22 10:13
*/
@Data
@NoArgsConstructor
public class R<T> {
/**
* 状态码
*/
private Integer code;
/**
* 返回消息
*/
private String message;
/**
* 状态
*/
private boolean status;
/**
* 返回数据
*/
private T data;
public R(Integer code, String message, boolean status, T data) {
this.code = code;
this.message = message;
this.status = status;
this.data = data;
}
public R(IResultCode resultCode, boolean status, T data) {
this.code = resultCode.getCode();
this.message = resultCode.getMessage();
this.status = status;
this.data = data;
}
public R(IResultCode resultCode, boolean status) {
this.code = resultCode.getCode();
this.message = resultCode.getMessage();
this.status = status;
this.data = null;
}
public static <T> R success() {
return new R<>(ResultCode.OK, true);
}
public static <T> R message(String message) {
return new R<>(ResultCode.OK.getCode(), message, true, null);
}
public static <T> R success(T data) {
return new R<>(ResultCode.OK, true, data);
}
public static <T> R fail() {
return new R<>(ResultCode.ERROR, false);
}
public static <T> R fail(IResultCode resultCode) {
return new R<>(resultCode, false);
}
public static <T> R fail(Integer code, String message) {
return new R<>(code, message, false, null);
}
public static <T> R fail(IResultCode resultCode, T data) {
return new R<>(resultCode, false, data);
}
public static <T> R fail(Integer code, String message, T data) {
return new R<>(code, message, false, data);
}
}
================================================
FILE: demo-codegen/src/main/java/com/xkcoding/codegen/common/ResultCode.java
================================================
package com.xkcoding.codegen.common;
import lombok.Getter;
/**
* <p>
* 通用状态枚举
* </p>
*
* @author yangkai.shen
* @date Created in 2019-03-22 10:13
*/
@Getter
public enum ResultCode implements IResultCode {
/**
* 成功
*/
OK(200, "成功"),
/**
* 失败
*/
ERROR(500, "失败");
/**
* 返回码
*/
private Integer code;
/**
* 返回消息
*/
private String message;
ResultCode(Integer code, String message) {
this.code = code;
this.message = message;
}
}
================================================
FILE: demo-codegen/src/main/java/com/xkcoding/codegen/constants/GenConstants.java
================================================
package com.xkcoding.codegen.constants;
/**
* <p>
* 常量池
* </p>
*
* @author yangkai.shen
* @date Created in 2019-03-22 10:04
*/
public interface GenConstants {
/**
* 签名
*/
String SIGNATURE = "xkcoding代码生成";
}
================================================
FILE: demo-codegen/src/main/java/com/xkcoding/codegen/controller/CodeGenController.java
================================================
package com.xkcoding.codegen.controller;
import cn.hutool.core.io.IoUtil;
import com.xkcoding.codegen.common.R;
import com.xkcoding.codegen.entity.GenConfig;
import com.xkcoding.codegen.entity.TableRequest;
import com.xkcoding.codegen.service.CodeGenService;
import lombok.AllArgsConstructor;
import lombok.SneakyThrows;
import org.springframework.http.HttpHeaders;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletResponse;
/**
* <p>
* 代码生成器
* </p>
*
* @author yangkai.shen
* @date Created in 2019-03-22 10:11
*/
@RestController
@AllArgsConstructor
@RequestMapping("/generator")
public class CodeGenController {
private final CodeGenService codeGenService;
/**
* 列表
*
* @param request 参数集
* @return 数据库表
*/
@GetMapping("/table")
public R listTables(TableRequest request) {
return R.success(codeGenService.listTables(request));
}
/**
* 生成代码
*/
@SneakyThrows
@PostMapping("")
public void generatorCode(@RequestBody GenConfig genConfig, HttpServletResponse response) {
byte[] data = codeGenService.generatorCode(genConfig);
response.reset();
response.setHeader(HttpHeaders.CONTENT_DISPOSITION, String.format("attachment; filename=%s.zip", genConfig.getTableName()));
response.addHeader(HttpHeaders.CONTENT_LENGTH, String.valueOf(data.length));
response.setContentType("application/octet-stream; charset=UTF-8");
IoUtil.write(response.getOutputStream(), Boolean.TRUE, data);
}
}
================================================
FILE: demo-codegen/src/main/java/com/xkcoding/codegen/entity/ColumnEntity.java
================================================
package com.xkcoding.codegen.entity;
import lombok.Data;
/**
* <p>
* 列属性: https://blog.csdn.net/lkforce/article/details/79557482
* </p>
*
* @author yangkai.shen
* @date Created in 2019-03-22 09:46
*/
@Data
public class ColumnEntity {
/**
* 列表
*/
private String columnName;
/**
* 数据类型
*/
private String dataType;
/**
* 备注
*/
private String comments;
/**
* 驼峰属性
*/
private String caseAttrName;
/**
* 普通属性
*/
private String lowerAttrName;
/**
* 属性类型
*/
private String attrType;
/**
* jdbc类型
*/
private String jdbcType;
/**
* 其他信息
*/
private String extra;
}
================================================
FILE: demo-codegen/src/main/java/com/xkcoding/codegen/entity/GenConfig.java
================================================
package com.xkcoding.codegen.entity;
import lombok.Data;
/**
* <p>
* 生成配置
* </p>
*
* @author yangkai.shen
* @date Created in 2019-03-22 09:47
*/
@Data
public class GenConfig {
/**
* 请求参数
*/
private TableRequest request;
/**
* 包名
*/
private String packageName;
/**
* 作者
*/
private String author;
/**
* 模块名称
*/
private String moduleName;
/**
* 表前缀
*/
private String tablePrefix;
/**
* 表名称
*/
private String tableName;
/**
* 表备注
*/
private String comments;
}
================================================
FILE: demo-codegen/src/main/java/com/xkcoding/codegen/entity/TableEntity.java
================================================
package com.xkcoding.codegen.entity;
import lombok.Data;
import java.util.List;
/**
* <p>
* 表属性: https://blog.csdn.net/lkforce/article/details/79557482
* </p>
*
* @author yangkai.shen
* @date Created in 2019-03-22 09:47
*/
@Data
public class TableEntity {
/**
* 名称
*/
private String tableName;
/**
* 备注
*/
private String comments;
/**
* 主键
*/
private ColumnEntity pk;
/**
* 列名
*/
private List<ColumnEntity> columns;
/**
* 驼峰类型
*/
private String caseClassName;
/**
* 普通类型
*/
private String lowerClassName;
}
================================================
FILE: demo-codegen/src/main/java/com/xkcoding/codegen/entity/TableRequest.java
================================================
package com.xkcoding.codegen.entity;
import lombok.Data;
/**
* <p>
* 表格请求参数
* </p>
*
* @author yangkai.shen
* @date Created in 2019-03-22 10:24
*/
@Data
public class TableRequest {
/**
* 当前页
*/
private Integer currentPage;
/**
* 每页条数
*/
private Integer pageSize;
/**
* jdbc-前缀
*/
private String prepend;
/**
* jdbc-url
*/
private String url;
/**
* 用户名
*/
private String username;
/**
* 密码
*/
private String password;
/**
* 表名
*/
private String tableName;
}
================================================
FILE: demo-codegen/src/main/java/com/xkcoding/codegen/service/CodeGenService.java
================================================
package com.xkcoding.codegen.service;
import cn.hutool.db.Entity;
import com.xkcoding.codegen.common.PageResult;
import com.xkcoding.codegen.entity.GenConfig;
import com.xkcoding.codegen.entity.TableRequest;
/**
* <p>
* 代码生成器
* </p>
*
* @author yangkai.shen
* @date Created in 2019-03-22 10:15
*/
public interface CodeGenService {
/**
* 生成代码
*
* @param genConfig 生成配置
* @return 代码压缩文件
*/
byte[] generatorCode(GenConfig genConfig);
/**
* 分页查询表信息
*
* @param request 请求参数
* @return 表名分页信息
*/
PageResult<Entity> listTables(TableRequest request);
}
================================================
FILE: demo-codegen/src/main/java/com/xkcoding/codegen/service/impl/CodeGenServiceImpl.java
================================================
package com.xkcoding.codegen.service.impl;
import cn.hutool.core.io.IoUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.db.Db;
import cn.hutool.db.Entity;
import cn.hutool.db.Page;
import com.xkcoding.codegen.common.PageResult;
import com.xkcoding.codegen.entity.GenConfig;
import com.xkcoding.codegen.entity.TableRequest;
import com.xkcoding.codegen.service.CodeGenService;
import com.xkcoding.codegen.utils.CodeGenUtil;
import com.xkcoding.codegen.utils.DbUtil;
import com.zaxxer.hikari.HikariDataSource;
import lombok.AllArgsConstructor;
import lombok.SneakyThrows;
import org.springframework.stereotype.Service;
import java.io.ByteArrayOutputStream;
import java.math.BigDecimal;
import java.util.List;
import java.util.zip.ZipOutputStream;
/**
* <p>
* 代码生成器
* </p>
*
* @author yangkai.shen
* @date Created in 2019-03-22 10:15
*/
@Service
@AllArgsConstructor
public class CodeGenServiceImpl implements CodeGenService {
private final String TABLE_SQL_TEMPLATE = "select table_name tableName, engine, table_comment tableComment, create_time createTime from information_schema.tables where table_schema = (select database()) %s order by create_time desc";
private final String COLUMN_SQL_TEMPLATE = "select column_name columnName, data_type dataType, column_comment columnComment, column_key columnKey, extra from information_schema.columns where table_name = ? and table_schema = (select database()) order by ordinal_position";
private final String COUNT_SQL_TEMPLATE = "select count(1) from (%s)tmp";
private final String PAGE_SQL_TEMPLATE = " limit ?,?";
/**
* 分页查询表信息
*
* @param request 请求参数
* @return 表名分页信息
*/
@Override
@SneakyThrows
public PageResult<Entity> listTables(TableRequest request) {
HikariDataSource dataSource = DbUtil.buildFromTableRequest(request);
Db db = new Db(dataSource);
Page page = new Page(request.getCurrentPage(), request.getPageSize());
int start = page.getStartPosition();
int pageSize = page.getPageSize();
String paramSql = StrUtil.EMPTY;
if (StrUtil.isNotBlank(request.getTableName())) {
paramSql = "and table_name like concat('%', ?, '%')";
}
String sql = String.format(TABLE_SQL_TEMPLATE, paramSql);
String countSql = String.format(COUNT_SQL_TEMPLATE, sql);
List<Entity> query;
BigDecimal count;
if (StrUtil.isNotBlank(request.getTableName())) {
query = db.query(sql + PAGE_SQL_TEMPLATE, request.getTableName(), start, pageSize);
count = (BigDecimal) db.queryNumber(countSql, request.getTableName());
} else {
query = db.query(sql + PAGE_SQL_TEMPLATE, start, pageSize);
count = (BigDecimal) db.queryNumber(countSql);
}
PageResult<Entity> pageResult = new PageResult<>(count.longValue(), page.getPageNumber(), page.getPageSize(), query);
dataSource.close();
return pageResult;
}
/**
* 生成代码
*
* @param genConfig 生成配置
* @return 代码压缩文件
*/
@Override
public byte[] generatorCode(GenConfig genConfig) {
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
ZipOutputStream zip = new ZipOutputStream(outputStream);
//查询表信息
Entity table = queryTable(genConfig.getRequest());
//查询列信息
List<Entity> columns = queryColumns(genConfig.getRequest());
//生成代码
CodeGenUtil.generatorCode(genConfig, table, columns, zip);
IoUtil.close(zip);
return outputStream.toByteArray();
}
@SneakyThrows
private Entity queryTable(TableRequest request) {
HikariDataSource dataSource = DbUtil.buildFromTableRequest(request);
Db db = new Db(dataSource);
String paramSql = StrUtil.EMPTY;
if (StrUtil.isNotBlank(request.getTableName())) {
paramSql = "and table_name = ?";
}
String sql = String.format(TABLE_SQL_TEMPLATE, paramSql);
Entity entity = db.queryOne(sql, request.getTableName());
dataSource.close();
return entity;
}
@SneakyThrows
private List<Entity> queryColumns(TableRequest request) {
HikariDataSource dataSource = DbUtil.buildFromTableRequest(request);
Db db = new Db(dataSource);
List<Entity> query = db.query(COLUMN_SQL_TEMPLATE, request.getTableName());
dataSource.close();
return query;
}
}
================================================
FILE: demo-codegen/src/main/java/com/xkcoding/codegen/utils/CodeGenUtil.java
================================================
package com.xkcoding.codegen.utils;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.io.IoUtil;
import cn.hutool.core.util.CharsetUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.db.Entity;
import cn.hutool.setting.dialect.Props;
import com.google.common.collect.Lists;
import com.xkcoding.codegen.constants.GenConstants;
import com.xkcoding.codegen.entity.ColumnEntity;
import com.xkcoding.codegen.entity.GenConfig;
import com.xkcoding.codegen.entity.TableEntity;
import lombok.experimental.UtilityClass;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.text.WordUtils;
import org.apache.velocity.Template;
import org.apache.velocity.VelocityContext;
import org.apache.velocity.app.Velocity;
import java.io.File;
import java.io.IOException;
import java.io.StringWriter;
import java.nio.charset.StandardCharsets;
import java.util.*;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;
/**
* <p>
* 代码生成器 工具类
* </p>
*
* @author yangkai.shen
* @date Created in 2019-03-22 09:27
*/
@Slf4j
@UtilityClass
public class CodeGenUtil {
private final String ENTITY_JAVA_VM = "Entity.java.vm";
private final String MAPPER_JAVA_VM = "Mapper.java.vm";
private final String SERVICE_JAVA_VM = "Service.java.vm";
private final String SERVICE_IMPL_JAVA_VM = "ServiceImpl.java.vm";
private final String CONTROLLER_JAVA_VM = "Controller.java.vm";
private final String MAPPER_XML_VM = "Mapper.xml.vm";
private final String API_JS_VM = "api.js.vm";
private List<String> getTemplates() {
List<String> templates = new ArrayList<>();
templates.add("template/Entity.java.vm");
templates.add("template/Mapper.java.vm");
templates.add("template/Mapper.xml.vm");
templates.add("template/Service.java.vm");
templates.add("template/ServiceImpl.java.vm");
templates.add("template/Controller.java.vm");
templates.add("template/api.js.vm");
return templates;
}
/**
* 生成代码
*/
public void generatorCode(GenConfig genConfig, Entity table, List<Entity> columns, ZipOutputStream zip) {
//配置信息
Props propsDB2Java = getConfig("generator.properties");
Props propsDB2Jdbc = getConfig("jdbc_type.properties");
boolean hasBigDecimal = false;
//表信息
TableEntity tableEntity = new TableEntity();
tableEntity.setTableName(table.getStr("tableName"));
if (StrUtil.isNotBlank(genConfig.getComments())) {
tableEntity.setComments(genConfig.getComments());
} else {
tableEntity.setComments(table.getStr("tableComment"));
}
String tablePrefix;
if (StrUtil.isNotBlank(genConfig.getTablePrefix())) {
tablePrefix = genConfig.getTablePrefix();
} else {
tablePrefix = propsDB2Java.getStr("tablePrefix");
}
//表名转换成Java类名
String className = tableToJava(tableEntity.getTableName(), tablePrefix);
tableEntity.setCaseClassName(className);
tableEntity.setLowerClassName(StrUtil.lowerFirst(className));
//列信息
List<ColumnEntity> columnList = Lists.newArrayList();
for (Entity column : columns) {
ColumnEntity columnEntity = new ColumnEntity();
columnEntity.setColumnName(column.getStr("columnName"));
columnEntity.setDataType(column.getStr("dataType"));
columnEntity.setComments(column.getStr("columnComment"));
columnEntity.setExtra(column.getStr("extra"));
//列名转换成Java属性名
String attrName = columnToJava(columnEntity.getColumnName());
columnEntity.setCaseAttrName(attrName);
columnEntity.setLowerAttrName(StrUtil.lowerFirst(attrName));
//列的数据类型,转换成Java类型
String attrType = propsDB2Java.getStr(columnEntity.getDataType(), "unknownType");
columnEntity.setAttrType(attrType);
String jdbcType = propsDB2Jdbc.getStr(columnEntity.getDataType(), "unknownType");
columnEntity.setJdbcType(jdbcType);
if (!hasBigDecimal && "BigDecimal".equals(attrType)) {
hasBigDecimal = true;
}
//是否主键
if ("PRI".equalsIgnoreCase(column.getStr("columnKey")) && tableEntity.getPk() == null) {
tableEntity.setPk(columnEntity);
}
columnList.add(columnEntity);
}
tableEntity.setColumns(columnList);
//没主键,则第一个字段为主键
if (tableEntity.getPk() == null) {
tableEntity.setPk(tableEntity.getColumns().get(0));
}
//设置velocity资源加载器
Properties prop = new Properties();
prop.put("file.resource.loader.class", "org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader");
Velocity.init(prop);
//封装模板数据
Map<String, Object> map = new HashMap<>(16);
map.put("tableName", tableEntity.getTableName());
map.put("pk", tableEntity.getPk());
map.put("className", tableEntity.getCaseClassName());
map.put("classname", tableEntity.getLowerClassName());
map.put("pathName", tableEntity.getLowerClassName().toLowerCase());
map.put("columns", tableEntity.getColumns());
map.put("hasBigDecimal", hasBigDecimal);
map.put("datetime", DateUtil.now());
map.put("year", DateUtil.year(new Date()));
if (StrUtil.isNotBlank(genConfig.getComments())) {
map.put("comments", genConfig.getComments());
} else {
map.put("comments", tableEntity.getComments());
}
if (StrUtil.isNotBlank(genConfig.getAuthor())) {
map.put("author", genConfig.getAuthor());
} else {
map.put("author", propsDB2Java.getStr("author"));
}
if (StrUtil.isNotBlank(genConfig.getModuleName())) {
map.put("moduleName", genConfig.getModuleName());
} else {
map.put("moduleName", propsDB2Java.getStr("moduleName"));
}
if (StrUtil.isNotBlank(genConfig.getPackageName())) {
map.put("package", genConfig.getPackageName());
map.put("mainPath", genConfig.getPackageName());
} else {
map.put("package", propsDB2Java.getStr("package"));
map.put("mainPath", propsDB2Java.getStr("mainPath"));
}
VelocityContext context = new VelocityContext(map);
//获取模板列表
List<String> templates = getTemplates();
for (String template : templates) {
//渲染模板
StringWriter sw = new StringWriter();
Template tpl = Velocity.getTemplate(template, CharsetUtil.UTF_8);
tpl.merge(context, sw);
try {
//添加到zip
zip.putNextEntry(new ZipEntry(Objects.requireNonNull(getFileName(template, tableEntity.getCaseClassName(), map.get("package").toString(), map.get("moduleName").toString()))));
IoUtil.write(zip, StandardCharsets.UTF_8, false, sw.toString());
IoUtil.close(sw);
zip.closeEntry();
} catch (IOException e) {
throw new RuntimeException("渲染模板失败,表名:" + tableEntity.getTableName(), e);
}
}
}
/**
* 列名转换成Java属性名
*/
private String columnToJava(String columnName) {
return WordUtils.capitalizeFully(columnName, new char[]{'_'}).replace("_", "");
}
/**
* 表名转换成Java类名
*/
private String tableToJava(String tableName, String tablePrefix) {
if (StrUtil.isNotBlank(tablePrefix)) {
tableName = tableName.replaceFirst(tablePrefix, "");
}
return columnToJava(tableName);
}
/**
* 获取配置信息
*/
private Props getConfig(String fileName) {
Props props = new Props(fileName);
props.autoLoad(true);
return props;
}
/**
* 获取文件名
*/
private String getFileName(String template, String className, String packageName, String moduleName) {
// 包路径
String packagePath = GenConstants.SIGNATURE + File.separator + "src" + File.separator + "main" + File.separator + "java" + File.separator;
// 资源路径
String resourcePath = GenConstants.SIGNATURE + File.separator + "src" + File.separator + "main" + File.separator + "resources" + File.separator;
// api路径
String apiPath = GenConstants.SIGNATURE + File.separator + "api" + File.separator;
if (StrUtil.isNotBlank(packageName)) {
packagePath += packageName.replace(".", File.separator) + File.separator + moduleName + File.separator;
}
if (template.contains(ENTITY_JAVA_VM)) {
return packagePath + "entity" + File.separator + className + ".java";
}
if (template.contains(MAPPER_JAVA_VM)) {
return packagePath + "mapper" + File.separator + className + "Mapper.java";
}
if (template.contains(SERVICE_JAVA_VM)) {
return packagePath + "service" + File.separator + className + "Service.java";
}
if (template.contains(SERVICE_IMPL_JAVA_VM)) {
return packagePath + "service" + File.separator + "impl" + File.separator + className + "ServiceImpl.java";
}
if (template.contains(CONTROLLER_JAVA_VM)) {
return packagePath + "controller" + File.separator + className + "Controller.java";
}
if (template.contains(MAPPER_XML_VM)) {
return resourcePath + "mapper" + File.separator + className + "Mapper.xml";
}
if (template.contains(API_JS_VM)) {
return apiPath + className.toLowerCase() + ".js";
}
return null;
}
}
================================================
FILE: demo-codegen/src/main/java/com/xkcoding/codegen/utils/DbUtil.java
================================================
package com.xkcoding.codegen.utils;
import com.xkcoding.codegen.entity.TableRequest;
import com.zaxxer.hikari.HikariDataSource;
import lombok.experimental.UtilityClass;
import lombok.extern.slf4j.Slf4j;
/**
* <p>
* 数据库工具类
* </p>
*
* @author yangkai.shen
* @date Created in 2019-03-22 10:26
*/
@Slf4j
@UtilityClass
public class DbUtil {
public HikariDataSource buildFromTableRequest(TableRequest request) {
HikariDataSource dataSource = new HikariDataSource();
dataSource.setJdbcUrl(request.getPrepend() + request.getUrl());
dataSource.setUsername(request.getUsername());
dataSource.setPassword(request.getPassword());
return dataSource;
}
}
================================================
FILE: demo-codegen/src/main/resources/application.yml
================================================
server:
port: 8080
servlet:
context-path: /demo
================================================
FILE: demo-codegen/src/main/resources/generator.properties
================================================
#\u4EE3\u7801\u751F\u6210\u5668\uFF0C\u914D\u7F6E\u4FE1\u606F
mainPath=com.xkcoding
#\u5305\u540D
package=com.xkcoding
moduleName=generator
#\u4F5C\u8005
author=Yangkai.Shen
#\u8868\u524D\u7F00(\u7C7B\u540D\u4E0D\u4F1A\u5305\u542B\u8868\u524D\u7F00)
tablePrefix=tb_
#\u7C7B\u578B\u8F6C\u6362\uFF0C\u914D\u7F6E\u4FE1\u606F
tinyint=Integer
smallint=Integer
mediumint=Integer
int=Integer
integer=Integer
bigint=Long
float=Float
double=Double
decimal=BigDecimal
bit=Boolean
char=String
varchar=String
tinytext=String
text=String
mediumtext=String
longtext=String
date=LocalDateTime
datetime=LocalDateTime
timestamp=LocalDateTime
================================================
FILE: demo-codegen/src/main/resources/jdbc_type.properties
================================================
tinyint=TINYINT
smallint=SMALLINT
mediumint=MEDIUMINT
int=INTEGER
integer=INTEGER
bigint=BIGINT
float=FLOAT
double=DOUBLE
decimal=DECIMAL
bit=BIT
char=CHAR
varchar=VARCHAR
tinytext=VARCHAR
text=VARCHAR
mediumtext=VARCHAR
longtext=VARCHAR
date=DATE
datetime=DATETIME
timestamp=TIMESTAMP
blob=BLOB
longblob=LONGBLOB
================================================
FILE: demo-codegen/src/main/resources/logback-spring.xml
================================================
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<property name="FILE_ERROR_PATTERN"
value="${FILE_LOG_PATTERN:-%d{${LOG_DATEFORMAT_PATTERN:-yyyy-MM-dd HH:mm:ss.SSS}} ${LOG_LEVEL_PATTERN:-%5p} ${PID:- } --- [%t] %-40.40logger{39} %file:%line: %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}"/>
<include resource="org/springframework/boot/logging/logback/defaults.xml"/>
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>INFO</level>
</filter>
<encoder>
<pattern>${CONSOLE_LOG_PATTERN}</pattern>
<charset>UTF-8</charset>
</encoder>
</appender>
<appender name="FILE_INFO" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!--如果只是想要 Info 级别的日志,只是过滤 info 还是会输出 Error 日志,因为 Error 的级别高, 所以我们使用下面的策略,可以避免输出 Error 的日志-->
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<!--过滤 Error-->
<level>ERROR</level>
<!--匹配到就禁止-->
<onMatch>DENY</onMatch>
<!--没有匹配到就允许-->
<onMismatch>ACCEPT</onMismatch>
</filter>
<!--日志名称,如果没有File 属性,那么只会使用FileNamePattern的文件路径规则如果同时有<File>和<FileNamePattern>,那么当天日志是<File>,明天会自动把今天的日志改名为今天的日期。即,<File> 的日志都是当天的。-->
<!--<File>logs/info.demo-logback.log</File>-->
<!--滚动策略,按照时间滚动 TimeBasedRollingPolicy-->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!--文件路径,定义了日志的切分方式——把每一天的日志归档到一个文件中,以防止日志填满整个磁盘空间-->
<FileNamePattern>logs/demo-logback/info.created_on_%d{yyyy-MM-dd}.part_%i.log</FileNamePattern>
<!--只保留最近90天的日志-->
<maxHistory>90</maxHistory>
<!--用来指定日志文件的上限大小,那么到了这个值,就会删除旧的日志-->
<!--<totalSizeCap>1GB</totalSizeCap>-->
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<!-- maxFileSize:这是活动文件的大小,默认值是10MB,本篇设置为1KB,只是为了演示 -->
<maxFileSize>2MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
</rollingPolicy>
<!--<triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">-->
<!--<maxFileSize>1KB</maxFileSize>-->
<!--</triggeringPolicy>-->
<encoder>
<pattern>${FILE_LOG_PATTERN}</pattern>
<charset>UTF-8</charset> <!-- 此处设置字符集 -->
</encoder>
</appender>
<appender name="FILE_ERROR" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!--如果只是想要 Error 级别的日志,那么需要过滤一下,默认是 info 级别的,ThresholdFilter-->
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>Error</level>
</filter>
<!--日志名称,如果没有File 属性,那么只会使用FileNamePattern的文件路径规则如果同时有<File>和<FileNamePattern>,那么当天日志是<File>,明天会自动把今天的日志改名为今天的日期。即,<File> 的日志都是当天的。-->
<!--<File>logs/error.demo-logback.log</File>-->
<!--滚动策略,按照时间滚动 TimeBasedRollingPolicy-->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!--文件路径,定义了日志的切分方式——把每一天的日志归档到一个文件中,以防止日志填满整个磁盘空间-->
<FileNamePattern>logs/demo-logback/error.created_on_%d{yyyy-MM-dd}.part_%i.log</FileNamePattern>
<!--只保留最近90天的日志-->
<maxHistory>90</maxHistory>
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<!-- maxFileSize:这是活动文件的大小,默认值是10MB,本篇设置为1KB,只是为了演示 -->
<maxFileSize>2MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
</rollingPolicy>
<encoder>
<pattern>${FILE_ERROR_PATTERN}</pattern>
<charset>UTF-8</charset> <!-- 此处设置字符集 -->
</encoder>
</appender>
<root level="info">
<appender-ref ref="CONSOLE"/>
<appender-ref ref="FILE_INFO"/>
<appender-ref ref="FILE_ERROR"/>
</root>
</configuration>
================================================
FILE: demo-codegen/src/main/resources/static/index.html
================================================
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>代码生成器</title>
<!-- import Vue.js -->
<script src="libs/vue/vue.min.js"></script>
<!-- import stylesheet -->
<link rel="stylesheet" href="libs/iview/iview.css">
<!-- import iView -->
<script src="libs/iview/iview.min.js"></script>
<!-- import axios -->
<script src="libs/axios/axios.min.js"></script>
<!-- import date -->
<script src="libs/datejs/date-zh-CN.js"></script>
<style>
html, body {
height: 100%;
}
#app {
height: inherit;
}
.xkcoding-layout {
height: inherit;
}
.layout-header-center {
text-align: center;
}
.layout-footer-center {
color: #999999;
text-align: center;
}
</style>
</head>
<body>
<div id="app">
<Layout class="xkcoding-layout">
<Header class="layout-header-center">
<h1>代码生成</h1>
</Header>
<Content :style="{padding: '0 50px'}">
<Card>
<Row :gutter="16">
<i-form ref="formTableRequest" :model="tableRequest" label-position="right" label-width="50"
:rules="tableRequestValidate">
<i-col span="9">
<form-item label="URL" prop="url" required>
<i-input v-model="tableRequest.url" placeholder="<host>:<port>/<dbName>">
<i-select v-model="tableRequest.prepend" slot="prepend" style="width: 150px;">
<i-option :value="mysqlPrepend">{{mysqlPrepend}}</i-option>
<i-option :value="oraclePrepend">{{oraclePrepend}}</i-option>
<i-option :value="mssqlPrepend">{{mssqlPrepend}}</i-option>
</i-select>
</i-input>
</form-item>
</i-col>
<i-col span="4">
<form-item label="用户名" prop="username" label-width="60" required>
<i-input v-model="tableRequest.username" placeholder="请输入数据库用户名"></i-input>
</form-item>
</i-col>
<i-col span="4">
<form-item label="密码" prop="password" required>
<i-input v-model="tableRequest.password" type="password"
placeholder="请输入数据库密码"></i-input>
</form-item>
</i-col>
<i-col span="5">
<form-item label="表名" prop="tableName" label-width="40">
<i-input v-model="tableRequest.tableName" placeholder="请输入数据库表名"></i-input>
</form-item>
</i-col>
<i-col span="2" style="text-align: center">
<i-button type="primary" long icon="ios-search" @click="search('formTableRequest')">查询
</i-button>
</i-col>
</i-form>
</Row>
<br>
<Row>
<i-col>
<i-table border :columns="columns" :data="data">
<template slot-scope="{ row }" slot="tableName">
<strong>{{ row.tableName }}</strong>
</template>
<template slot-scope="{ row }" slot="action">
<i-button type="primary" icon="md-code-download" @click="showConfig(row.tableName)">生成代码
</i-button>
</template>
</i-table>
</i-col>
</Row>
<br>
<Row>
<i-col>
<Page :total="total"
:current.sync="tableRequest.currentPage"
@on-change="changePage"
@on-page-size-change="changePageSize"
show-sizer
show-elevator
show-total
:page-size-opts="[10, 20, 30]"></Page>
</i-col>
</Row>
</Card>
</Content>
<Footer class="layout-footer-center">2019 © xkcoding</Footer>
</Layout>
<Modal v-model="showConfigDialog"
:closable="false">
<div slot="header" style="text-align:center">
<h2>生成配置</h2>
</div>
<i-form ref="form" :model="genConfig">
<Row :gutter="16">
<i-col span="12">
<form-item label="表名" prop="tableName" label-width="40">
<i-input v-model="genConfig.tableName" disabled></i-input>
</form-item>
</i-col>
<i-col span="12">
<form-item label="包名" prop="packageName" label-width="40">
<i-input v-model="genConfig.packageName" placeholder="可为空,加载系统默认配置"></i-input>
</form-item>
</i-col>
</Row>
<Row :gutter="16">
<i-col span="12">
<form-item label="作者" prop="author" label-width="40">
<i-input v-model="genConfig.author" placeholder="可为空,加载系统默认配置"></i-input>
</form-item>
</i-col>
<i-col span="12">
<form-item label="模块" prop="moduleName" label-width="40">
<i-input v-model="genConfig.moduleName" placeholder="可为空,加载系统默认配置"></i-input>
</form-item>
</i-col>
</Row>
<Row :gutter="16">
<i-col span="12">
<form-item label="前缀" prop="tablePrefix" label-width="40">
<i-input v-model="genConfig.tablePrefix" placeholder="可为空,加载系统默认配置"></i-input>
</form-item>
</i-col>
<i-col span="12">
<form-item label="注释" prop="comments" label-width="40">
<i-input v-model="genConfig.comments" placeholder="可为空,加载数据库表注释"></i-input>
</form-item>
</i-col>
</Row>
</i-form>
<div slot="footer" style="text-align:center">
<i-button icon="md-trash" size="large" @click="cancel">取消</i-button>
<i-button type="success" icon="md-cloud-download" size="large" @click="download">生成代码</i-button>
</div>
</Modal>
</div>
<script>
const http = axios.create({
baseURL: '/demo'
});
const MYSQL_PREPEND = "jdbc:mysql://";
const MSSQL_PREPEND = "jdbc:jtds:sqlserver://";
const ORACLE_PREPEND = "jdbc:oracle:thin:@//";
new Vue({
el: "#app",
data: {
showConfigDialog: false,
genConfig: {
request: {
pre
gitextract_ajnuvaj3/ ├── .codacy.yml ├── .editorconfig ├── .gitee/ │ ├── ISSUE_TEMPLATE/ │ │ ├── bug_report.md │ │ └── feature_request.md │ └── PULL_REQUEST_TEMPLATE.md ├── .github/ │ ├── FUNDING.yml │ ├── ISSUE_TEMPLATE/ │ │ ├── bug_report.md │ │ └── feature_request.md │ ├── PULL_REQUEST_TEMPLATE.md │ └── workflows/ │ └── maven.yml ├── .gitignore ├── .travis.yml ├── LICENSE ├── README.en.md ├── README.md ├── TODO.en.md ├── TODO.md ├── demo-activiti/ │ ├── .gitignore │ ├── pom.xml │ └── src/ │ ├── main/ │ │ ├── java/ │ │ │ └── com/ │ │ │ └── xkcoding/ │ │ │ └── activiti/ │ │ │ ├── SpringBootDemoActivitiApplication.java │ │ │ ├── config/ │ │ │ │ └── SecurityConfiguration.java │ │ │ └── util/ │ │ │ └── SecurityUtil.java │ │ └── resources/ │ │ ├── application.yml │ │ └── processes/ │ │ └── team01.bpmn │ └── test/ │ └── java/ │ └── com/ │ └── xkcoding/ │ └── activiti/ │ └── SpringBootDemoActivitiApplicationTests.java ├── demo-actuator/ │ ├── .gitignore │ ├── README.md │ ├── pom.xml │ └── src/ │ ├── main/ │ │ ├── java/ │ │ │ └── com/ │ │ │ └── xkcoding/ │ │ │ └── actuator/ │ │ │ └── SpringBootDemoActuatorApplication.java │ │ └── resources/ │ │ └── application.yml │ └── test/ │ └── java/ │ └── com/ │ └── xkcoding/ │ └── actuator/ │ └── SpringBootDemoActuatorApplicationTests.java ├── demo-admin/ │ ├── README.md │ ├── admin-client/ │ │ ├── .gitignore │ │ ├── README.md │ │ ├── pom.xml │ │ └── src/ │ │ ├── main/ │ │ │ ├── java/ │ │ │ │ └── com/ │ │ │ │ └── xkcoding/ │ │ │ │ └── admin/ │ │ │ │ └── client/ │ │ │ │ ├── SpringBootDemoAdminClientApplication.java │ │ │ │ └── controller/ │ │ │ │ └── IndexController.java │ │ │ └── resources/ │ │ │ └── application.yml │ │ └── test/ │ │ └── java/ │ │ └── com/ │ │ └── xkcoding/ │ │ └── admin/ │ │ └── client/ │ │ └── SpringBootDemoAdminClientApplicationTests.java │ ├── admin-server/ │ │ ├── .gitignore │ │ ├── README.md │ │ ├── pom.xml │ │ └── src/ │ │ ├── main/ │ │ │ ├── java/ │ │ │ │ └── com/ │ │ │ │ └── xkcoding/ │ │ │ │ └── admin/ │ │ │ │ └── server/ │ │ │ │ └── SpringBootDemoAdminServerApplication.java │ │ │ └── resources/ │ │ │ └── application.yml │ │ └── test/ │ │ └── java/ │ │ └── com/ │ │ └── xkcoding/ │ │ └── admin/ │ │ └── server/ │ │ └── SpringBootDemoAdminServerApplicationTests.java │ └── pom.xml ├── demo-async/ │ ├── .gitignore │ ├── README.md │ ├── pom.xml │ └── src/ │ ├── main/ │ │ ├── java/ │ │ │ └── com/ │ │ │ └── xkcoding/ │ │ │ └── async/ │ │ │ ├── SpringBootDemoAsyncApplication.java │ │ │ └── task/ │ │ │ └── TaskFactory.java │ │ └── resources/ │ │ └── application.yml │ └── test/ │ └── java/ │ └── com/ │ └── xkcoding/ │ └── async/ │ ├── SpringBootDemoAsyncApplicationTests.java │ └── task/ │ └── TaskFactoryTest.java ├── demo-cache-ehcache/ │ ├── .gitignore │ ├── README.md │ ├── pom.xml │ └── src/ │ ├── main/ │ │ ├── java/ │ │ │ └── com/ │ │ │ └── xkcoding/ │ │ │ └── cache/ │ │ │ └── ehcache/ │ │ │ ├── SpringBootDemoCacheEhcacheApplication.java │ │ │ ├── entity/ │ │ │ │ └── User.java │ │ │ └── service/ │ │ │ ├── UserService.java │ │ │ └── impl/ │ │ │ └── UserServiceImpl.java │ │ └── resources/ │ │ ├── application.yml │ │ └── ehcache.xml │ └── test/ │ └── java/ │ └── com/ │ └── xkcoding/ │ └── cache/ │ └── ehcache/ │ ├── SpringBootDemoCacheEhcacheApplicationTests.java │ └── service/ │ └── UserServiceTest.java ├── demo-cache-redis/ │ ├── .gitignore │ ├── README.md │ ├── pom.xml │ └── src/ │ ├── main/ │ │ ├── java/ │ │ │ └── com/ │ │ │ └── xkcoding/ │ │ │ └── cache/ │ │ │ └── redis/ │ │ │ ├── SpringBootDemoCacheRedisApplication.java │ │ │ ├── config/ │ │ │ │ └── RedisConfig.java │ │ │ ├── entity/ │ │ │ │ └── User.java │ │ │ └── service/ │ │ │ ├── UserService.java │ │ │ └── impl/ │ │ │ └── UserServiceImpl.java │ │ └── resources/ │ │ └── application.yml │ └── test/ │ └── java/ │ └── com/ │ └── xkcoding/ │ └── cache/ │ └── redis/ │ ├── RedisTest.java │ ├── SpringBootDemoCacheRedisApplicationTests.java │ └── service/ │ └── UserServiceTest.java ├── demo-codegen/ │ ├── .gitignore │ ├── README.md │ ├── pom.xml │ └── src/ │ ├── main/ │ │ ├── java/ │ │ │ └── com/ │ │ │ └── xkcoding/ │ │ │ └── codegen/ │ │ │ ├── SpringBootDemoCodegenApplication.java │ │ │ ├── common/ │ │ │ │ ├── IResultCode.java │ │ │ │ ├── PageResult.java │ │ │ │ ├── R.java │ │ │ │ └── ResultCode.java │ │ │ ├── constants/ │ │ │ │ └── GenConstants.java │ │ │ ├── controller/ │ │ │ │ └── CodeGenController.java │ │ │ ├── entity/ │ │ │ │ ├── ColumnEntity.java │ │ │ │ ├── GenConfig.java │ │ │ │ ├── TableEntity.java │ │ │ │ └── TableRequest.java │ │ │ ├── service/ │ │ │ │ ├── CodeGenService.java │ │ │ │ └── impl/ │ │ │ │ └── CodeGenServiceImpl.java │ │ │ └── utils/ │ │ │ ├── CodeGenUtil.java │ │ │ └── DbUtil.java │ │ └── resources/ │ │ ├── application.yml │ │ ├── generator.properties │ │ ├── jdbc_type.properties │ │ ├── logback-spring.xml │ │ ├── static/ │ │ │ ├── index.html │ │ │ └── libs/ │ │ │ ├── datejs/ │ │ │ │ └── date-zh-CN.js │ │ │ └── iview/ │ │ │ └── iview.css │ │ └── template/ │ │ ├── Controller.java.vm │ │ ├── Entity.java.vm │ │ ├── Mapper.java.vm │ │ ├── Mapper.xml.vm │ │ ├── Service.java.vm │ │ ├── ServiceImpl.java.vm │ │ └── api.js.vm │ └── test/ │ └── java/ │ └── com/ │ └── xkcoding/ │ └── codegen/ │ ├── CodeGenServiceTest.java │ └── SpringBootDemoCodegenApplicationTests.java ├── demo-docker/ │ ├── .gitignore │ ├── Dockerfile │ ├── README.md │ ├── pom.xml │ └── src/ │ ├── main/ │ │ ├── java/ │ │ │ └── com/ │ │ │ └── xkcoding/ │ │ │ └── docker/ │ │ │ ├── SpringBootDemoDockerApplication.java │ │ │ └── controller/ │ │ │ └── HelloController.java │ │ └── resources/ │ │ └── application.yml │ └── test/ │ └── java/ │ └── com/ │ └── xkcoding/ │ └── docker/ │ └── SpringBootDemoDockerApplicationTests.java ├── demo-dubbo/ │ ├── .gitignore │ ├── README.md │ ├── dubbo-common/ │ │ ├── .gitignore │ │ ├── README.md │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ └── java/ │ │ └── com/ │ │ └── xkcoding/ │ │ └── dubbo/ │ │ └── common/ │ │ └── service/ │ │ └── HelloService.java │ ├── dubbo-consumer/ │ │ ├── .gitignore │ │ ├── README.md │ │ ├── pom.xml │ │ └── src/ │ │ ├── main/ │ │ │ ├── java/ │ │ │ │ └── com/ │ │ │ │ └── xkcoding/ │ │ │ │ └── dubbo/ │ │ │ │ └── consumer/ │ │ │ │ ├── SpringBootDemoDubboConsumerApplication.java │ │ │ │ └── controller/ │ │ │ │ └── HelloController.java │ │ │ └── resources/ │ │ │ └── application.yml │ │ └── test/ │ │ └── java/ │ │ └── com/ │ │ └── xkcoding/ │ │ └── dubbo/ │ │ └── consumer/ │ │ └── SpringBootDemoDubboConsumerApplicationTests.java │ ├── dubbo-provider/ │ │ ├── .gitignore │ │ ├── README.md │ │ ├── pom.xml │ │ └── src/ │ │ ├── main/ │ │ │ ├── java/ │ │ │ │ └── com/ │ │ │ │ └── xkcoding/ │ │ │ │ └── dubbo/ │ │ │ │ └── provider/ │ │ │ │ ├── SpringBootDemoDubboProviderApplication.java │ │ │ │ └── service/ │ │ │ │ └── HelloServiceImpl.java │ │ │ └── resources/ │ │ │ └── application.yml │ │ └── test/ │ │ └── java/ │ │ └── com/ │ │ └── xkcoding/ │ │ └── dubbo/ │ │ └── provider/ │ │ └── SpringBootDemoDubboProviderApplicationTests.java │ └── pom.xml ├── demo-dynamic-datasource/ │ ├── .gitignore │ ├── README.md │ ├── db/ │ │ ├── init.sql │ │ └── user.sql │ ├── pom.xml │ └── src/ │ ├── main/ │ │ ├── java/ │ │ │ └── com/ │ │ │ └── xkcoding/ │ │ │ └── dynamic/ │ │ │ └── datasource/ │ │ │ ├── SpringBootDemoDynamicDatasourceApplication.java │ │ │ ├── annotation/ │ │ │ │ └── DefaultDatasource.java │ │ │ ├── aspect/ │ │ │ │ └── DatasourceSelectorAspect.java │ │ │ ├── config/ │ │ │ │ ├── DatasourceConfiguration.java │ │ │ │ ├── MyMapper.java │ │ │ │ └── MybatisConfiguration.java │ │ │ ├── controller/ │ │ │ │ ├── DatasourceConfigController.java │ │ │ │ └── UserController.java │ │ │ ├── datasource/ │ │ │ │ ├── DatasourceConfigCache.java │ │ │ │ ├── DatasourceConfigContextHolder.java │ │ │ │ ├── DatasourceHolder.java │ │ │ │ ├── DatasourceManager.java │ │ │ │ ├── DatasourceScheduler.java │ │ │ │ └── DynamicDataSource.java │ │ │ ├── mapper/ │ │ │ │ ├── DatasourceConfigMapper.java │ │ │ │ └── UserMapper.java │ │ │ ├── model/ │ │ │ │ ├── DatasourceConfig.java │ │ │ │ └── User.java │ │ │ └── utils/ │ │ │ └── SpringUtil.java │ │ └── resources/ │ │ └── application.yml │ └── test/ │ └── java/ │ └── com/ │ └── xkcoding/ │ └── dynamic/ │ └── datasource/ │ └── SpringBootDemoDynamicDatasourceApplicationTests.java ├── demo-elasticsearch/ │ ├── .gitignore │ ├── README.md │ ├── pom.xml │ └── src/ │ ├── main/ │ │ ├── java/ │ │ │ └── com/ │ │ │ └── xkcoding/ │ │ │ └── elasticsearch/ │ │ │ ├── SpringBootDemoElasticsearchApplication.java │ │ │ ├── constants/ │ │ │ │ └── EsConsts.java │ │ │ ├── model/ │ │ │ │ └── Person.java │ │ │ └── repository/ │ │ │ └── PersonRepository.java │ │ └── resources/ │ │ └── application.yml │ └── test/ │ └── java/ │ └── com/ │ └── xkcoding/ │ └── elasticsearch/ │ ├── SpringBootDemoElasticsearchApplicationTests.java │ ├── repository/ │ │ └── PersonRepositoryTest.java │ └── template/ │ └── TemplateTest.java ├── demo-elasticsearch-rest-high-level-client/ │ ├── .gitignore │ ├── README.md │ ├── pom.xml │ └── src/ │ ├── main/ │ │ ├── java/ │ │ │ └── com/ │ │ │ └── xkcoding/ │ │ │ └── elasticsearch/ │ │ │ ├── ElasticsearchApplication.java │ │ │ ├── common/ │ │ │ │ ├── Result.java │ │ │ │ └── ResultCode.java │ │ │ ├── config/ │ │ │ │ ├── ElasticsearchAutoConfiguration.java │ │ │ │ └── ElasticsearchProperties.java │ │ │ ├── contants/ │ │ │ │ └── ElasticsearchConstant.java │ │ │ ├── exception/ │ │ │ │ └── ElasticsearchException.java │ │ │ ├── model/ │ │ │ │ └── Person.java │ │ │ └── service/ │ │ │ ├── PersonService.java │ │ │ ├── base/ │ │ │ │ └── BaseElasticsearchService.java │ │ │ └── impl/ │ │ │ └── PersonServiceImpl.java │ │ └── resources/ │ │ └── application.yml │ └── test/ │ └── java/ │ └── com/ │ └── xkcoding/ │ └── elasticsearch/ │ └── ElasticsearchApplicationTests.java ├── demo-email/ │ ├── .gitignore │ ├── README.md │ ├── pom.xml │ └── src/ │ ├── main/ │ │ ├── java/ │ │ │ └── com/ │ │ │ └── xkcoding/ │ │ │ └── email/ │ │ │ ├── SpringBootDemoEmailApplication.java │ │ │ └── service/ │ │ │ ├── MailService.java │ │ │ └── impl/ │ │ │ └── MailServiceImpl.java │ │ └── resources/ │ │ ├── application.yml │ │ ├── email/ │ │ │ └── test.html │ │ └── templates/ │ │ └── welcome.html │ └── test/ │ └── java/ │ └── com/ │ └── xkcoding/ │ └── email/ │ ├── PasswordTest.java │ ├── SpringBootDemoEmailApplicationTests.java │ └── service/ │ └── MailServiceTest.java ├── demo-exception-handler/ │ ├── .gitignore │ ├── README.md │ ├── pom.xml │ └── src/ │ ├── main/ │ │ ├── java/ │ │ │ └── com/ │ │ │ └── xkcoding/ │ │ │ └── exception/ │ │ │ └── handler/ │ │ │ ├── SpringBootDemoExceptionHandlerApplication.java │ │ │ ├── constant/ │ │ │ │ └── Status.java │ │ │ ├── controller/ │ │ │ │ └── TestController.java │ │ │ ├── exception/ │ │ │ │ ├── BaseException.java │ │ │ │ ├── JsonException.java │ │ │ │ └── PageException.java │ │ │ ├── handler/ │ │ │ │ └── DemoExceptionHandler.java │ │ │ └── model/ │ │ │ └── ApiResponse.java │ │ └── resources/ │ │ ├── application.yml │ │ └── templates/ │ │ └── error.html │ └── test/ │ └── java/ │ └── com/ │ └── xkcoding/ │ └── exception/ │ └── handler/ │ └── SpringBootDemoExceptionHandlerApplicationTests.java ├── demo-flyway/ │ ├── .gitignore │ ├── README.md │ ├── pom.xml │ └── src/ │ ├── main/ │ │ ├── java/ │ │ │ └── com/ │ │ │ └── xkcoding/ │ │ │ └── flyway/ │ │ │ └── SpringBootDemoFlywayApplication.java │ │ └── resources/ │ │ ├── application.yml │ │ └── db/ │ │ └── migration/ │ │ ├── V1_0__INIT.sql │ │ └── V1_1__ALTER.sql │ └── test/ │ └── java/ │ └── com/ │ └── xkcoding/ │ └── AppTest.java ├── demo-graylog/ │ ├── .gitignore │ ├── README.md │ ├── pom.xml │ └── src/ │ ├── main/ │ │ ├── java/ │ │ │ └── com/ │ │ │ └── xkcoding/ │ │ │ └── graylog/ │ │ │ └── SpringBootDemoGraylogApplication.java │ │ └── resources/ │ │ ├── application.yml │ │ └── logback-spring.xml │ └── test/ │ └── java/ │ └── com/ │ └── xkcoding/ │ └── graylog/ │ └── SpringBootDemoGraylogApplicationTests.java ├── demo-helloworld/ │ ├── .gitignore │ ├── README.md │ ├── pom.xml │ └── src/ │ ├── main/ │ │ ├── java/ │ │ │ └── com/ │ │ │ └── xkcoding/ │ │ │ └── helloworld/ │ │ │ └── SpringBootDemoHelloworldApplication.java │ │ └── resources/ │ │ └── application.yml │ └── test/ │ └── java/ │ └── com/ │ └── xkcoding/ │ └── helloworld/ │ └── SpringBootDemoHelloworldApplicationTests.java ├── demo-https/ │ ├── .gitignore │ ├── README.md │ ├── pom.xml │ └── src/ │ ├── main/ │ │ ├── java/ │ │ │ └── com/ │ │ │ └── xkcoding/ │ │ │ └── https/ │ │ │ ├── SpringBootDemoHttpsApplication.java │ │ │ └── config/ │ │ │ └── HttpsConfig.java │ │ └── resources/ │ │ ├── application.yml │ │ ├── server.keystore │ │ └── static/ │ │ └── index.html │ └── test/ │ └── java/ │ └── com/ │ └── xkcoding/ │ └── https/ │ └── SpringBootDemoHttpsApplicationTests.java ├── demo-ldap/ │ ├── .gitignore │ ├── README.md │ ├── pom.xml │ └── src/ │ ├── main/ │ │ ├── java/ │ │ │ └── com/ │ │ │ └── xkcoding/ │ │ │ └── ldap/ │ │ │ ├── LdapDemoApplication.java │ │ │ ├── api/ │ │ │ │ ├── Result.java │ │ │ │ └── ResultCode.java │ │ │ ├── entity/ │ │ │ │ └── Person.java │ │ │ ├── exception/ │ │ │ │ └── ServiceException.java │ │ │ ├── repository/ │ │ │ │ └── PersonRepository.java │ │ │ ├── request/ │ │ │ │ └── LoginRequest.java │ │ │ ├── service/ │ │ │ │ ├── PersonService.java │ │ │ │ └── impl/ │ │ │ │ └── PersonServiceImpl.java │ │ │ └── util/ │ │ │ └── LdapUtils.java │ │ └── resources/ │ │ └── application.yml │ └── test/ │ └── java/ │ └── com/ │ └── xkcoding/ │ └── ldap/ │ └── LdapDemoApplicationTests.java ├── demo-log-aop/ │ ├── .gitignore │ ├── README.md │ ├── pom.xml │ └── src/ │ ├── main/ │ │ ├── java/ │ │ │ └── com/ │ │ │ └── xkcoding/ │ │ │ └── log/ │ │ │ └── aop/ │ │ │ ├── SpringBootDemoLogAopApplication.java │ │ │ ├── aspectj/ │ │ │ │ └── AopLog.java │ │ │ └── controller/ │ │ │ └── TestController.java │ │ └── resources/ │ │ ├── application.yml │ │ └── logback-spring.xml │ └── test/ │ └── java/ │ └── com/ │ └── xkcoding/ │ └── log/ │ └── aop/ │ └── SpringBootDemoLogAopApplicationTests.java ├── demo-logback/ │ ├── .gitignore │ ├── README.md │ ├── pom.xml │ └── src/ │ ├── main/ │ │ ├── java/ │ │ │ └── com/ │ │ │ └── xkcoding/ │ │ │ └── logback/ │ │ │ └── SpringBootDemoLogbackApplication.java │ │ └── resources/ │ │ ├── application.yml │ │ └── logback-spring.xml │ └── test/ │ └── java/ │ └── com/ │ └── xkcoding/ │ └── logback/ │ └── SpringBootDemoLogbackApplicationTests.java ├── demo-mongodb/ │ ├── .gitignore │ ├── README.md │ ├── pom.xml │ └── src/ │ ├── main/ │ │ ├── java/ │ │ │ └── com/ │ │ │ └── xkcoding/ │ │ │ └── mongodb/ │ │ │ ├── SpringBootDemoMongodbApplication.java │ │ │ ├── model/ │ │ │ │ └── Article.java │ │ │ └── repository/ │ │ │ └── ArticleRepository.java │ │ └── resources/ │ │ └── application.yml │ └── test/ │ └── java/ │ └── com/ │ └── xkcoding/ │ └── mongodb/ │ ├── SpringBootDemoMongodbApplicationTests.java │ └── repository/ │ └── ArticleRepositoryTest.java ├── demo-mq-kafka/ │ ├── .gitignore │ ├── README.md │ ├── pom.xml │ └── src/ │ ├── main/ │ │ ├── java/ │ │ │ └── com/ │ │ │ └── xkcoding/ │ │ │ └── mq/ │ │ │ └── kafka/ │ │ │ ├── SpringBootDemoMqKafkaApplication.java │ │ │ ├── config/ │ │ │ │ └── KafkaConfig.java │ │ │ ├── constants/ │ │ │ │ └── KafkaConsts.java │ │ │ └── handler/ │ │ │ └── MessageHandler.java │ │ └── resources/ │ │ └── application.yml │ └── test/ │ └── java/ │ └── com/ │ └── xkcoding/ │ └── mq/ │ └── kafka/ │ └── SpringBootDemoMqKafkaApplicationTests.java ├── demo-mq-rabbitmq/ │ ├── .gitignore │ ├── README.md │ ├── pom.xml │ └── src/ │ ├── main/ │ │ ├── java/ │ │ │ └── com/ │ │ │ └── xkcoding/ │ │ │ └── mq/ │ │ │ └── rabbitmq/ │ │ │ ├── SpringBootDemoMqRabbitmqApplication.java │ │ │ ├── config/ │ │ │ │ └── RabbitMqConfig.java │ │ │ ├── constants/ │ │ │ │ └── RabbitConsts.java │ │ │ ├── handler/ │ │ │ │ ├── DelayQueueHandler.java │ │ │ │ ├── DirectQueueOneHandler.java │ │ │ │ ├── QueueThreeHandler.java │ │ │ │ └── QueueTwoHandler.java │ │ │ └── message/ │ │ │ └── MessageStruct.java │ │ └── resources/ │ │ └── application.yml │ └── test/ │ └── java/ │ └── com/ │ └── xkcoding/ │ └── mq/ │ └── rabbitmq/ │ └── SpringBootDemoMqRabbitmqApplicationTests.java ├── demo-mq-rocketmq/ │ ├── .gitignore │ ├── README.md │ ├── pom.xml │ └── src/ │ ├── main/ │ │ ├── java/ │ │ │ └── com/ │ │ │ └── xkcoding/ │ │ │ └── mq/ │ │ │ └── rocketmq/ │ │ │ └── SpringBootDemoMqRocketmqApplication.java │ │ └── resources/ │ │ └── application.properties │ └── test/ │ └── java/ │ └── com/ │ └── xkcoding/ │ └── mq/ │ └── rocketmq/ │ └── SpringBootDemoMqRocketmqApplicationTests.java ├── demo-multi-datasource-jpa/ │ ├── .gitignore │ ├── README.md │ ├── pom.xml │ └── src/ │ ├── main/ │ │ ├── java/ │ │ │ └── com/ │ │ │ └── xkcoding/ │ │ │ └── multi/ │ │ │ └── datasource/ │ │ │ └── jpa/ │ │ │ ├── SpringBootDemoMultiDatasourceJpaApplication.java │ │ │ ├── config/ │ │ │ │ ├── PrimaryDataSourceConfig.java │ │ │ │ ├── PrimaryJpaConfig.java │ │ │ │ ├── SecondDataSourceConfig.java │ │ │ │ ├── SecondJpaConfig.java │ │ │ │ └── SnowflakeConfig.java │ │ │ ├── entity/ │ │ │ │ ├── primary/ │ │ │ │ │ └── PrimaryMultiTable.java │ │ │ │ └── second/ │ │ │ │ └── SecondMultiTable.java │ │ │ └── repository/ │ │ │ ├── primary/ │ │ │ │ └── PrimaryMultiTableRepository.java │ │ │ └── second/ │ │ │ └── SecondMultiTableRepository.java │ │ └── resources/ │ │ └── application.yml │ └── test/ │ └── java/ │ └── com/ │ └── xkcoding/ │ └── multi/ │ └── datasource/ │ └── jpa/ │ └── SpringBootDemoMultiDatasourceJpaApplicationTests.java ├── demo-multi-datasource-mybatis/ │ ├── .gitignore │ ├── README.md │ ├── pom.xml │ ├── sql/ │ │ └── db.sql │ └── src/ │ ├── main/ │ │ ├── java/ │ │ │ └── com/ │ │ │ └── xkcoding/ │ │ │ └── multi/ │ │ │ └── datasource/ │ │ │ └── mybatis/ │ │ │ ├── SpringBootDemoMultiDatasourceMybatisApplication.java │ │ │ ├── mapper/ │ │ │ │ └── UserMapper.java │ │ │ ├── model/ │ │ │ │ └── User.java │ │ │ └── service/ │ │ │ ├── UserService.java │ │ │ └── impl/ │ │ │ └── UserServiceImpl.java │ │ └── resources/ │ │ └── application.yml │ └── test/ │ └── java/ │ └── com/ │ └── xkcoding/ │ └── multi/ │ └── datasource/ │ └── mybatis/ │ ├── SpringBootDemoMultiDatasourceMybatisApplicationTests.java │ └── service/ │ └── impl/ │ └── UserServiceImplTest.java ├── demo-neo4j/ │ ├── .gitignore │ ├── README.md │ ├── pom.xml │ └── src/ │ ├── main/ │ │ ├── java/ │ │ │ └── com/ │ │ │ └── xkcoding/ │ │ │ └── neo4j/ │ │ │ ├── SpringBootDemoNeo4jApplication.java │ │ │ ├── config/ │ │ │ │ └── CustomIdStrategy.java │ │ │ ├── constants/ │ │ │ │ └── NeoConsts.java │ │ │ ├── model/ │ │ │ │ ├── Class.java │ │ │ │ ├── Lesson.java │ │ │ │ ├── Student.java │ │ │ │ └── Teacher.java │ │ │ ├── payload/ │ │ │ │ ├── ClassmateInfoGroupByLesson.java │ │ │ │ └── TeacherStudent.java │ │ │ ├── repository/ │ │ │ │ ├── ClassRepository.java │ │ │ │ ├── LessonRepository.java │ │ │ │ ├── StudentRepository.java │ │ │ │ └── TeacherRepository.java │ │ │ └── service/ │ │ │ └── NeoService.java │ │ └── resources/ │ │ └── application.yml │ └── test/ │ └── java/ │ └── com/ │ └── xkcoding/ │ └── neo4j/ │ ├── Neo4jTest.java │ └── SpringBootDemoNeo4jApplicationTests.java ├── demo-oauth/ │ ├── .gitignore │ ├── README.md │ ├── oauth-authorization-server/ │ │ ├── README.adoc │ │ ├── pom.xml │ │ └── src/ │ │ ├── main/ │ │ │ ├── java/ │ │ │ │ └── com/ │ │ │ │ └── xkcoding/ │ │ │ │ └── oauth/ │ │ │ │ ├── SpringBootDemoOauthApplication.java │ │ │ │ ├── config/ │ │ │ │ │ ├── ClientLoginFailureHandler.java │ │ │ │ │ ├── ClientLogoutSuccessHandler.java │ │ │ │ │ ├── Oauth2AuthorizationServerConfig.java │ │ │ │ │ ├── Oauth2AuthorizationTokenConfig.java │ │ │ │ │ ├── WebSecurityConfig.java │ │ │ │ │ └── package-info.java │ │ │ │ ├── controller/ │ │ │ │ │ ├── AuthorizationController.java │ │ │ │ │ ├── Oauth2Controller.java │ │ │ │ │ └── package-info.java │ │ │ │ ├── entity/ │ │ │ │ │ ├── SysClientDetails.java │ │ │ │ │ ├── SysRole.java │ │ │ │ │ └── SysUser.java │ │ │ │ ├── repostiory/ │ │ │ │ │ ├── SysClientDetailsRepository.java │ │ │ │ │ └── SysUserRepository.java │ │ │ │ └── service/ │ │ │ │ ├── SysClientDetailsService.java │ │ │ │ ├── SysUserService.java │ │ │ │ ├── impl/ │ │ │ │ │ ├── SysClientDetailsServiceImpl.java │ │ │ │ │ └── SysUserServiceImpl.java │ │ │ │ └── package-info.java │ │ │ └── resources/ │ │ │ ├── application.yml │ │ │ ├── oauth2.jks │ │ │ ├── public.txt │ │ │ └── templates/ │ │ │ ├── authorization.html │ │ │ ├── common/ │ │ │ │ └── common.html │ │ │ ├── error.html │ │ │ ├── login.html │ │ │ ├── logout.html │ │ │ └── registerTemplate.html │ │ └── test/ │ │ ├── java/ │ │ │ └── com/ │ │ │ └── xkcoding/ │ │ │ └── oauth/ │ │ │ ├── PasswordEncodeTest.java │ │ │ ├── oauth/ │ │ │ │ ├── AuthorizationCodeGrantTests.java │ │ │ │ ├── AuthorizationServerInfo.java │ │ │ │ └── ResourceOwnerPasswordGrantTests.java │ │ │ └── repostiory/ │ │ │ ├── SysClientDetailsTest.java │ │ │ └── SysUserRepositoryTest.java │ │ └── resources/ │ │ ├── application.yml │ │ ├── import.sql │ │ └── schema.sql │ ├── oauth-resource-server/ │ │ ├── README.adoc │ │ ├── pom.xml │ │ └── src/ │ │ ├── main/ │ │ │ ├── java/ │ │ │ │ └── com/ │ │ │ │ └── xkcoding/ │ │ │ │ └── oauth/ │ │ │ │ ├── SpringBootDemoResourceApplication.java │ │ │ │ ├── config/ │ │ │ │ │ ├── OauthResourceServerConfig.java │ │ │ │ │ └── OauthResourceTokenConfig.java │ │ │ │ └── controller/ │ │ │ │ └── TestController.java │ │ │ └── resources/ │ │ │ └── application.yml │ │ └── test/ │ │ └── java/ │ │ └── com/ │ │ └── xkcoding/ │ │ └── oauth/ │ │ ├── AuthorizationTest.java │ │ └── controller/ │ │ └── TestControllerTest.java │ └── pom.xml ├── demo-orm-beetlsql/ │ ├── .gitignore │ ├── README.md │ ├── pom.xml │ └── src/ │ ├── main/ │ │ ├── java/ │ │ │ └── com/ │ │ │ └── xkcoding/ │ │ │ └── orm/ │ │ │ └── beetlsql/ │ │ │ ├── SpringBootDemoOrmBeetlsqlApplication.java │ │ │ ├── config/ │ │ │ │ └── BeetlConfig.java │ │ │ ├── dao/ │ │ │ │ └── UserDao.java │ │ │ ├── entity/ │ │ │ │ └── User.java │ │ │ └── service/ │ │ │ ├── UserService.java │ │ │ └── impl/ │ │ │ └── UserServiceImpl.java │ │ └── resources/ │ │ ├── application.yml │ │ └── db/ │ │ ├── data.sql │ │ └── schema.sql │ └── test/ │ └── java/ │ └── com/ │ └── xkcoding/ │ └── orm/ │ └── beetlsql/ │ ├── SpringBootDemoOrmBeetlsqlApplicationTests.java │ └── service/ │ └── UserServiceTest.java ├── demo-orm-jdbctemplate/ │ ├── .gitignore │ ├── README.md │ ├── pom.xml │ └── src/ │ ├── main/ │ │ ├── java/ │ │ │ └── com/ │ │ │ └── xkcoding/ │ │ │ └── orm/ │ │ │ └── jdbctemplate/ │ │ │ ├── SpringBootDemoOrmJdbctemplateApplication.java │ │ │ ├── annotation/ │ │ │ │ ├── Column.java │ │ │ │ ├── Ignore.java │ │ │ │ ├── Pk.java │ │ │ │ └── Table.java │ │ │ ├── constant/ │ │ │ │ └── Const.java │ │ │ ├── controller/ │ │ │ │ └── UserController.java │ │ │ ├── dao/ │ │ │ │ ├── UserDao.java │ │ │ │ └── base/ │ │ │ │ └── BaseDao.java │ │ │ ├── entity/ │ │ │ │ └── User.java │ │ │ └── service/ │ │ │ ├── IUserService.java │ │ │ └── impl/ │ │ │ └── UserServiceImpl.java │ │ └── resources/ │ │ ├── application.yml │ │ └── db/ │ │ ├── data.sql │ │ └── schema.sql │ └── test/ │ └── java/ │ └── com/ │ └── xkcoding/ │ └── orm/ │ └── jdbctemplate/ │ └── SpringBootDemoOrmJdbctemplateApplicationTests.java ├── demo-orm-jpa/ │ ├── .gitignore │ ├── README.md │ ├── pom.xml │ └── src/ │ ├── main/ │ │ ├── java/ │ │ │ └── com/ │ │ │ └── xkcoding/ │ │ │ └── orm/ │ │ │ └── jpa/ │ │ │ ├── SpringBootDemoOrmJpaApplication.java │ │ │ ├── config/ │ │ │ │ └── JpaConfig.java │ │ │ ├── entity/ │ │ │ │ ├── Department.java │ │ │ │ ├── User.java │ │ │ │ └── base/ │ │ │ │ └── AbstractAuditModel.java │ │ │ └── repository/ │ │ │ ├── DepartmentDao.java │ │ │ └── UserDao.java │ │ └── resources/ │ │ ├── application.yml │ │ └── db/ │ │ ├── data.sql │ │ └── schema.sql │ └── test/ │ └── java/ │ └── com/ │ └── xkcoding/ │ └── orm/ │ └── jpa/ │ ├── SpringBootDemoOrmJpaApplicationTests.java │ └── repository/ │ ├── DepartmentDaoTest.java │ └── UserDaoTest.java ├── demo-orm-mybatis/ │ ├── .gitignore │ ├── README.md │ ├── pom.xml │ └── src/ │ ├── main/ │ │ ├── java/ │ │ │ └── com/ │ │ │ └── xkcoding/ │ │ │ └── orm/ │ │ │ └── mybatis/ │ │ │ ├── SpringBootDemoOrmMybatisApplication.java │ │ │ ├── entity/ │ │ │ │ └── User.java │ │ │ └── mapper/ │ │ │ └── UserMapper.java │ │ └── resources/ │ │ ├── application.yml │ │ ├── db/ │ │ │ ├── data.sql │ │ │ └── schema.sql │ │ └── mappers/ │ │ └── UserMapper.xml │ └── test/ │ └── java/ │ └── com/ │ └── xkcoding/ │ └── orm/ │ └── mybatis/ │ ├── SpringBootDemoOrmMybatisApplicationTests.java │ └── mapper/ │ └── UserMapperTest.java ├── demo-orm-mybatis-mapper-page/ │ ├── .gitignore │ ├── README.md │ ├── pom.xml │ └── src/ │ ├── main/ │ │ ├── java/ │ │ │ └── com/ │ │ │ └── xkcoding/ │ │ │ └── orm/ │ │ │ └── mybatis/ │ │ │ └── MapperAndPage/ │ │ │ ├── SpringBootDemoOrmMybatisMapperPageApplication.java │ │ │ ├── entity/ │ │ │ │ └── User.java │ │ │ └── mapper/ │ │ │ └── UserMapper.java │ │ └── resources/ │ │ ├── application.yml │ │ └── db/ │ │ ├── data.sql │ │ └── schema.sql │ └── test/ │ └── java/ │ └── com/ │ └── xkcoding/ │ └── orm/ │ └── mybatis/ │ └── MapperAndPage/ │ ├── SpringBootDemoOrmMybatisMapperPageApplicationTests.java │ └── mapper/ │ └── UserMapperTest.java ├── demo-orm-mybatis-plus/ │ ├── .gitignore │ ├── README.md │ ├── pom.xml │ └── src/ │ ├── main/ │ │ ├── java/ │ │ │ └── com/ │ │ │ └── xkcoding/ │ │ │ └── orm/ │ │ │ └── mybatis/ │ │ │ └── plus/ │ │ │ ├── SpringBootDemoOrmMybatisPlusApplication.java │ │ │ ├── config/ │ │ │ │ ├── CommonFieldHandler.java │ │ │ │ └── MybatisPlusConfig.java │ │ │ ├── entity/ │ │ │ │ ├── Role.java │ │ │ │ └── User.java │ │ │ ├── mapper/ │ │ │ │ ├── RoleMapper.java │ │ │ │ └── UserMapper.java │ │ │ └── service/ │ │ │ ├── UserService.java │ │ │ └── impl/ │ │ │ └── UserServiceImpl.java │ │ └── resources/ │ │ ├── application.yml │ │ └── db/ │ │ ├── data.sql │ │ └── schema.sql │ └── test/ │ └── java/ │ └── com/ │ └── xkcoding/ │ └── orm/ │ └── mybatis/ │ └── plus/ │ ├── SpringBootDemoOrmMybatisPlusApplicationTests.java │ ├── activerecord/ │ │ └── ActiveRecordTest.java │ └── service/ │ └── UserServiceTest.java ├── demo-pay/ │ ├── .gitignore │ ├── README.md │ ├── pom.xml │ └── src/ │ ├── main/ │ │ ├── java/ │ │ │ └── com/ │ │ │ └── xkcoding/ │ │ │ └── pay/ │ │ │ └── SpringBootDemoPayApplication.java │ │ └── resources/ │ │ └── application.yml │ └── test/ │ └── java/ │ └── com/ │ └── xkcoding/ │ └── pay/ │ └── SpringBootDemoPayApplicationTests.java ├── demo-properties/ │ ├── .gitignore │ ├── README.md │ ├── pom.xml │ └── src/ │ ├── main/ │ │ ├── java/ │ │ │ └── com/ │ │ │ └── xkcoding/ │ │ │ └── properties/ │ │ │ ├── SpringBootDemoPropertiesApplication.java │ │ │ ├── controller/ │ │ │ │ └── PropertyController.java │ │ │ └── property/ │ │ │ ├── ApplicationProperty.java │ │ │ └── DeveloperProperty.java │ │ └── resources/ │ │ ├── META-INF/ │ │ │ └── additional-spring-configuration-metadata.json │ │ ├── application-dev.yml │ │ ├── application-prod.yml │ │ └── application.yml │ └── test/ │ └── java/ │ └── com/ │ └── xkcoding/ │ └── properties/ │ └── SpringBootDemoPropertiesApplicationTests.java ├── demo-ratelimit-guava/ │ ├── .gitignore │ ├── README.md │ ├── pom.xml │ └── src/ │ ├── main/ │ │ ├── java/ │ │ │ └── com/ │ │ │ └── xkcoding/ │ │ │ └── ratelimit/ │ │ │ └── guava/ │ │ │ ├── SpringBootDemoRatelimitGuavaApplication.java │ │ │ ├── annotation/ │ │ │ │ └── RateLimiter.java │ │ │ ├── aspect/ │ │ │ │ └── RateLimiterAspect.java │ │ │ ├── controller/ │ │ │ │ └── TestController.java │ │ │ └── handler/ │ │ │ └── GlobalExceptionHandler.java │ │ └── resources/ │ │ └── application.yml │ └── test/ │ └── java/ │ └── com/ │ └── xkcoding/ │ └── ratelimit/ │ └── guava/ │ └── SpringBootDemoRatelimitGuavaApplicationTests.java ├── demo-ratelimit-redis/ │ ├── .gitignore │ ├── README.md │ ├── pom.xml │ └── src/ │ ├── main/ │ │ ├── java/ │ │ │ └── com/ │ │ │ └── xkcoding/ │ │ │ └── ratelimit/ │ │ │ └── redis/ │ │ │ ├── SpringBootDemoRatelimitRedisApplication.java │ │ │ ├── annotation/ │ │ │ │ └── RateLimiter.java │ │ │ ├── aspect/ │ │ │ │ └── RateLimiterAspect.java │ │ │ ├── config/ │ │ │ │ └── RedisConfig.java │ │ │ ├── controller/ │ │ │ │ └── TestController.java │ │ │ ├── handler/ │ │ │ │ └── GlobalExceptionHandler.java │ │ │ └── util/ │ │ │ └── IpUtil.java │ │ └── resources/ │ │ ├── application.yml │ │ └── scripts/ │ │ └── redis/ │ │ └── limit.lua │ └── test/ │ └── java/ │ └── com/ │ └── xkcoding/ │ └── ratelimit/ │ └── redis/ │ └── SpringBootDemoRatelimiterRedisApplicationTests.java ├── demo-rbac-security/ │ ├── .gitignore │ ├── README.md │ ├── pom.xml │ ├── sql/ │ │ └── security.sql │ └── src/ │ ├── main/ │ │ ├── java/ │ │ │ └── com/ │ │ │ └── xkcoding/ │ │ │ └── rbac/ │ │ │ └── security/ │ │ │ ├── SpringBootDemoRbacSecurityApplication.java │ │ │ ├── common/ │ │ │ │ ├── ApiResponse.java │ │ │ │ ├── BaseException.java │ │ │ │ ├── Consts.java │ │ │ │ ├── IStatus.java │ │ │ │ ├── PageResult.java │ │ │ │ └── Status.java │ │ │ ├── config/ │ │ │ │ ├── CustomConfig.java │ │ │ │ ├── IdConfig.java │ │ │ │ ├── IgnoreConfig.java │ │ │ │ ├── JwtAuthenticationFilter.java │ │ │ │ ├── JwtConfig.java │ │ │ │ ├── RbacAuthorityService.java │ │ │ │ ├── RedisConfig.java │ │ │ │ ├── SecurityConfig.java │ │ │ │ ├── SecurityHandlerConfig.java │ │ │ │ └── WebMvcConfig.java │ │ │ ├── controller/ │ │ │ │ ├── AuthController.java │ │ │ │ ├── MonitorController.java │ │ │ │ └── TestController.java │ │ │ ├── exception/ │ │ │ │ ├── SecurityException.java │ │ │ │ └── handler/ │ │ │ │ └── GlobalExceptionHandler.java │ │ │ ├── model/ │ │ │ │ ├── Permission.java │ │ │ │ ├── Role.java │ │ │ │ ├── RolePermission.java │ │ │ │ ├── User.java │ │ │ │ ├── UserRole.java │ │ │ │ └── unionkey/ │ │ │ │ ├── RolePermissionKey.java │ │ │ │ └── UserRoleKey.java │ │ │ ├── payload/ │ │ │ │ ├── LoginRequest.java │ │ │ │ └── PageCondition.java │ │ │ ├── repository/ │ │ │ │ ├── PermissionDao.java │ │ │ │ ├── RoleDao.java │ │ │ │ ├── RolePermissionDao.java │ │ │ │ ├── UserDao.java │ │ │ │ └── UserRoleDao.java │ │ │ ├── service/ │ │ │ │ ├── CustomUserDetailsService.java │ │ │ │ └── MonitorService.java │ │ │ ├── util/ │ │ │ │ ├── JwtUtil.java │ │ │ │ ├── PageUtil.java │ │ │ │ ├── RedisUtil.java │ │ │ │ ├── ResponseUtil.java │ │ │ │ └── SecurityUtil.java │ │ │ └── vo/ │ │ │ ├── JwtResponse.java │ │ │ ├── OnlineUser.java │ │ │ └── UserPrincipal.java │ │ └── resources/ │ │ └── application.yml │ └── test/ │ └── java/ │ └── com/ │ └── xkcoding/ │ └── rbac/ │ └── security/ │ ├── SpringBootDemoRbacSecurityApplicationTests.java │ ├── repository/ │ │ ├── DataInitTest.java │ │ └── UserDaoTest.java │ └── util/ │ └── RedisUtilTest.java ├── demo-rbac-shiro/ │ ├── .gitignore │ ├── pom.xml │ ├── sql/ │ │ └── shiro.sql │ └── src/ │ ├── main/ │ │ ├── java/ │ │ │ └── com/ │ │ │ └── xkcoding/ │ │ │ └── rbac/ │ │ │ └── shiro/ │ │ │ ├── SpringBootDemoRbacShiroApplication.java │ │ │ ├── common/ │ │ │ │ ├── IResultCode.java │ │ │ │ ├── R.java │ │ │ │ └── ResultCode.java │ │ │ ├── config/ │ │ │ │ └── MybatisPlusConfig.java │ │ │ └── controller/ │ │ │ └── TestController.java │ │ └── resources/ │ │ ├── application.yml │ │ └── spy.properties │ └── test/ │ └── java/ │ └── com/ │ └── xkcoding/ │ └── rbac/ │ └── shiro/ │ └── SpringBootDemoRbacShiroApplicationTests.java ├── demo-session/ │ ├── .gitignore │ ├── README.md │ ├── pom.xml │ └── src/ │ ├── main/ │ │ ├── java/ │ │ │ └── com/ │ │ │ └── xkcoding/ │ │ │ └── session/ │ │ │ ├── SpringBootDemoSessionApplication.java │ │ │ ├── config/ │ │ │ │ └── WebMvcConfig.java │ │ │ ├── constants/ │ │ │ │ └── Consts.java │ │ │ ├── controller/ │ │ │ │ └── PageController.java │ │ │ └── interceptor/ │ │ │ └── SessionInterceptor.java │ │ └── resources/ │ │ ├── application.yml │ │ └── templates/ │ │ ├── index.html │ │ └── login.html │ └── test/ │ └── java/ │ └── com/ │ └── xkcoding/ │ └── session/ │ └── SpringBootDemoSessionApplicationTests.java ├── demo-sharding-jdbc/ │ ├── .gitignore │ ├── README.md │ ├── pom.xml │ ├── sql/ │ │ └── schema.sql │ └── src/ │ ├── main/ │ │ ├── java/ │ │ │ └── com/ │ │ │ └── xkcoding/ │ │ │ └── sharding/ │ │ │ └── jdbc/ │ │ │ ├── SpringBootDemoShardingJdbcApplication.java │ │ │ ├── config/ │ │ │ │ ├── CustomSnowflakeKeyGenerator.java │ │ │ │ └── DataSourceShardingConfig.java │ │ │ ├── mapper/ │ │ │ │ └── OrderMapper.java │ │ │ └── model/ │ │ │ └── Order.java │ │ └── resources/ │ │ └── application.yml │ └── test/ │ └── java/ │ └── com/ │ └── xkcoding/ │ └── sharding/ │ └── jdbc/ │ └── SpringBootDemoShardingJdbcApplicationTests.java ├── demo-social/ │ ├── .gitignore │ ├── README.md │ ├── pom.xml │ └── src/ │ ├── main/ │ │ ├── java/ │ │ │ └── com/ │ │ │ └── xkcoding/ │ │ │ └── social/ │ │ │ ├── SpringBootDemoSocialApplication.java │ │ │ └── controller/ │ │ │ └── OauthController.java │ │ └── resources/ │ │ └── application.yml │ └── test/ │ └── java/ │ └── com/ │ └── xkcoding/ │ └── social/ │ └── SpringBootDemoSocialApplicationTests.java ├── demo-swagger/ │ ├── .gitignore │ ├── README.md │ ├── pom.xml │ └── src/ │ ├── main/ │ │ ├── java/ │ │ │ └── com/ │ │ │ └── xkcoding/ │ │ │ └── swagger/ │ │ │ ├── SpringBootDemoSwaggerApplication.java │ │ │ ├── common/ │ │ │ │ ├── ApiResponse.java │ │ │ │ ├── DataType.java │ │ │ │ └── ParamType.java │ │ │ ├── config/ │ │ │ │ └── Swagger2Config.java │ │ │ ├── controller/ │ │ │ │ └── UserController.java │ │ │ └── entity/ │ │ │ └── User.java │ │ └── resources/ │ │ └── application.yml │ └── test/ │ └── java/ │ └── com/ │ └── xkcoding/ │ └── swagger/ │ └── SpringBootDemoSwaggerApplicationTests.java ├── demo-swagger-beauty/ │ ├── .gitignore │ ├── README.md │ ├── pom.xml │ └── src/ │ ├── main/ │ │ ├── java/ │ │ │ └── com/ │ │ │ └── xkcoding/ │ │ │ └── swagger/ │ │ │ └── beauty/ │ │ │ ├── SpringBootDemoSwaggerBeautyApplication.java │ │ │ ├── common/ │ │ │ │ └── ApiResponse.java │ │ │ ├── controller/ │ │ │ │ └── UserController.java │ │ │ └── entity/ │ │ │ └── User.java │ │ └── resources/ │ │ └── application.yml │ └── test/ │ └── java/ │ └── com/ │ └── xkcoding/ │ └── swagger/ │ └── beauty/ │ └── SpringBootDemoSwaggerBeautyApplicationTests.java ├── demo-task/ │ ├── .gitignore │ ├── README.md │ ├── pom.xml │ └── src/ │ ├── main/ │ │ ├── java/ │ │ │ └── com/ │ │ │ └── xkcoding/ │ │ │ └── task/ │ │ │ ├── SpringBootDemoTaskApplication.java │ │ │ ├── config/ │ │ │ │ └── TaskConfig.java │ │ │ └── job/ │ │ │ └── TaskJob.java │ │ └── resources/ │ │ └── application.yml │ └── test/ │ └── java/ │ └── com/ │ └── xkcoding/ │ └── task/ │ └── SpringBootDemoTaskApplicationTests.java ├── demo-task-quartz/ │ ├── .gitignore │ ├── README.md │ ├── init/ │ │ └── dbTables/ │ │ ├── tables_cloudscape.sql │ │ ├── tables_cubrid.sql │ │ ├── tables_db2.sql │ │ ├── tables_db2_v72.sql │ │ ├── tables_db2_v8.sql │ │ ├── tables_db2_v95.sql │ │ ├── tables_derby.sql │ │ ├── tables_derby_previous.sql │ │ ├── tables_firebird.sql │ │ ├── tables_h2.sql │ │ ├── tables_hsqldb.sql │ │ ├── tables_hsqldb_old.sql │ │ ├── tables_informix.sql │ │ ├── tables_mysql.sql │ │ ├── tables_mysql_innodb.sql │ │ ├── tables_oracle.sql │ │ ├── tables_pointbase.sql │ │ ├── tables_postgres.sql │ │ ├── tables_sapdb.sql │ │ ├── tables_solid.sql │ │ ├── tables_sqlServer.sql │ │ └── tables_sybase.sql │ ├── pom.xml │ └── src/ │ ├── main/ │ │ ├── java/ │ │ │ └── com/ │ │ │ └── xkcoding/ │ │ │ └── task/ │ │ │ └── quartz/ │ │ │ ├── SpringBootDemoTaskQuartzApplication.java │ │ │ ├── common/ │ │ │ │ └── ApiResponse.java │ │ │ ├── controller/ │ │ │ │ └── JobController.java │ │ │ ├── entity/ │ │ │ │ ├── domain/ │ │ │ │ │ └── JobAndTrigger.java │ │ │ │ └── form/ │ │ │ │ └── JobForm.java │ │ │ ├── job/ │ │ │ │ ├── HelloJob.java │ │ │ │ ├── TestJob.java │ │ │ │ └── base/ │ │ │ │ └── BaseJob.java │ │ │ ├── mapper/ │ │ │ │ └── JobMapper.java │ │ │ ├── service/ │ │ │ │ ├── JobService.java │ │ │ │ └── impl/ │ │ │ │ └── JobServiceImpl.java │ │ │ └── util/ │ │ │ └── JobUtil.java │ │ └── resources/ │ │ ├── application.yml │ │ ├── mappers/ │ │ │ └── JobMapper.xml │ │ └── static/ │ │ └── job.html │ └── test/ │ └── java/ │ └── com/ │ └── xkcoding/ │ └── task/ │ └── quartz/ │ └── SpringBootDemoTaskQuartzApplicationTests.java ├── demo-task-xxl-job/ │ ├── .gitignore │ ├── README.md │ ├── pom.xml │ └── src/ │ └── main/ │ ├── java/ │ │ └── com/ │ │ └── xkcoding/ │ │ └── task/ │ │ └── xxl/ │ │ └── job/ │ │ ├── SpringBootDemoTaskXxlJobApplication.java │ │ ├── config/ │ │ │ ├── XxlJobConfig.java │ │ │ └── props/ │ │ │ └── XxlJobProps.java │ │ ├── controller/ │ │ │ └── ManualOperateController.java │ │ └── task/ │ │ └── DemoTask.java │ └── resources/ │ └── application.yml ├── demo-template-beetl/ │ ├── .gitignore │ ├── README.md │ ├── pom.xml │ └── src/ │ ├── main/ │ │ ├── java/ │ │ │ └── com/ │ │ │ └── xkcoding/ │ │ │ └── template/ │ │ │ └── beetl/ │ │ │ ├── SpringBootDemoTemplateBeetlApplication.java │ │ │ ├── controller/ │ │ │ │ ├── IndexController.java │ │ │ │ └── UserController.java │ │ │ └── model/ │ │ │ └── User.java │ │ └── resources/ │ │ ├── application.yml │ │ └── templates/ │ │ ├── common/ │ │ │ └── head.html │ │ └── page/ │ │ ├── index.btl │ │ └── login.btl │ └── test/ │ └── java/ │ └── com/ │ └── xkcoding/ │ └── template/ │ └── beetl/ │ └── SpringBootDemoTemplateBeetlApplicationTests.java ├── demo-template-enjoy/ │ ├── .gitignore │ ├── README.md │ ├── pom.xml │ └── src/ │ ├── main/ │ │ ├── java/ │ │ │ └── com/ │ │ │ └── xkcoding/ │ │ │ └── template/ │ │ │ └── enjoy/ │ │ │ ├── SpringBootDemoTemplateEnjoyApplication.java │ │ │ ├── config/ │ │ │ │ └── EnjoyConfig.java │ │ │ ├── controller/ │ │ │ │ ├── IndexController.java │ │ │ │ └── UserController.java │ │ │ └── model/ │ │ │ └── User.java │ │ └── resources/ │ │ ├── application.yml │ │ └── templates/ │ │ ├── common/ │ │ │ └── head.html │ │ └── page/ │ │ ├── index.html │ │ └── login.html │ └── test/ │ └── java/ │ └── com/ │ └── xkcoding/ │ └── template/ │ └── enjoy/ │ └── SpringBootDemoTemplateEnjoyApplicationTests.java ├── demo-template-freemarker/ │ ├── .gitignore │ ├── README.md │ ├── pom.xml │ └── src/ │ ├── main/ │ │ ├── java/ │ │ │ └── com/ │ │ │ └── xkcoding/ │ │ │ └── template/ │ │ │ └── freemarker/ │ │ │ ├── SpringBootDemoTemplateFreemarkerApplication.java │ │ │ ├── controller/ │ │ │ │ ├── IndexController.java │ │ │ │ └── UserController.java │ │ │ └── model/ │ │ │ └── User.java │ │ └── resources/ │ │ ├── application.yml │ │ └── templates/ │ │ ├── common/ │ │ │ └── head.ftl │ │ └── page/ │ │ ├── index.ftl │ │ └── login.ftl │ └── test/ │ └── java/ │ └── com/ │ └── xkcoding/ │ └── template/ │ └── freemarker/ │ └── SpringBootDemoTemplateFreemarkerApplicationTests.java ├── demo-template-thymeleaf/ │ ├── .gitignore │ ├── README.md │ ├── pom.xml │ └── src/ │ ├── main/ │ │ ├── java/ │ │ │ └── com/ │ │ │ └── xkcoding/ │ │ │ └── template/ │ │ │ └── thymeleaf/ │ │ │ ├── SpringBootDemoTemplateThymeleafApplication.java │ │ │ ├── controller/ │ │ │ │ ├── IndexController.java │ │ │ │ └── UserController.java │ │ │ └── model/ │ │ │ └── User.java │ │ └── resources/ │ │ ├── application.yml │ │ └── templates/ │ │ ├── common/ │ │ │ └── head.html │ │ └── page/ │ │ ├── index.html │ │ └── login.html │ └── test/ │ └── java/ │ └── com/ │ └── xkcoding/ │ └── template/ │ └── thymeleaf/ │ └── SpringBootDemoTemplateThymeleafApplicationTests.java ├── demo-tio/ │ ├── .gitignore │ ├── README.md │ ├── pom.xml │ └── src/ │ ├── main/ │ │ ├── java/ │ │ │ └── com/ │ │ │ └── xkcoding/ │ │ │ └── springbootdemotio/ │ │ │ └── SpringBootDemoTioApplication.java │ │ └── resources/ │ │ └── application.properties │ └── test/ │ └── java/ │ └── com/ │ └── xkcoding/ │ └── springbootdemotio/ │ └── SpringBootDemoTioApplicationTests.java ├── demo-uflo/ │ ├── .gitignore │ ├── pom.xml │ └── src/ │ ├── main/ │ │ ├── java/ │ │ │ └── com/ │ │ │ └── xkcoding/ │ │ │ └── uflo/ │ │ │ └── SpringBootDemoUfloApplication.java │ │ └── resources/ │ │ └── application.properties │ └── test/ │ └── java/ │ └── com/ │ └── xkcoding/ │ └── uflo/ │ └── SpringBootDemoUfloApplicationTests.java ├── demo-upload/ │ ├── .gitignore │ ├── README.md │ ├── pom.xml │ └── src/ │ ├── main/ │ │ ├── java/ │ │ │ └── com/ │ │ │ └── xkcoding/ │ │ │ └── upload/ │ │ │ ├── SpringBootDemoUploadApplication.java │ │ │ ├── config/ │ │ │ │ └── UploadConfig.java │ │ │ ├── controller/ │ │ │ │ ├── IndexController.java │ │ │ │ └── UploadController.java │ │ │ └── service/ │ │ │ ├── IQiNiuService.java │ │ │ └── impl/ │ │ │ └── QiNiuServiceImpl.java │ │ └── resources/ │ │ ├── application.yml │ │ └── templates/ │ │ └── index.html │ └── test/ │ └── java/ │ └── com/ │ └── xkcoding/ │ └── upload/ │ └── SpringBootDemoUploadApplicationTests.java ├── demo-ureport2/ │ ├── .gitignore │ ├── README.md │ ├── doc/ │ │ ├── sql/ │ │ │ └── t_user_ureport2.sql │ │ └── ureport2/ │ │ └── user_inner_datasource.ureport.xml │ ├── pom.xml │ └── src/ │ ├── main/ │ │ ├── java/ │ │ │ └── com/ │ │ │ └── xkcoding/ │ │ │ └── ureport2/ │ │ │ ├── SpringBootDemoUreport2Application.java │ │ │ └── config/ │ │ │ └── InnerDatasource.java │ │ └── resources/ │ │ └── application.yml │ └── test/ │ └── java/ │ └── com/ │ └── xkcoding/ │ └── ureport2/ │ └── SpringBootDemoUreport2ApplicationTests.java ├── demo-urule/ │ ├── .gitignore │ ├── pom.xml │ └── src/ │ ├── main/ │ │ ├── java/ │ │ │ └── com/ │ │ │ └── xkcoding/ │ │ │ └── urule/ │ │ │ └── SpringBootDemoUruleApplication.java │ │ └── resources/ │ │ └── application.properties │ └── test/ │ └── java/ │ └── com/ │ └── xkcoding/ │ └── urule/ │ └── SpringBootDemoUruleApplicationTests.java ├── demo-war/ │ ├── .gitignore │ ├── README.md │ ├── pom.xml │ └── src/ │ ├── main/ │ │ ├── java/ │ │ │ └── com/ │ │ │ └── xkcoding/ │ │ │ └── war/ │ │ │ └── SpringBootDemoWarApplication.java │ │ └── resources/ │ │ └── application.yml │ └── test/ │ └── java/ │ └── com/ │ └── xkcoding/ │ └── war/ │ └── SpringBootDemoWarApplicationTests.java ├── demo-websocket/ │ ├── .gitignore │ ├── README.md │ ├── pom.xml │ └── src/ │ ├── main/ │ │ ├── java/ │ │ │ └── com/ │ │ │ └── xkcoding/ │ │ │ └── websocket/ │ │ │ ├── SpringBootDemoWebsocketApplication.java │ │ │ ├── common/ │ │ │ │ └── WebSocketConsts.java │ │ │ ├── config/ │ │ │ │ └── WebSocketConfig.java │ │ │ ├── controller/ │ │ │ │ └── ServerController.java │ │ │ ├── model/ │ │ │ │ ├── Server.java │ │ │ │ └── server/ │ │ │ │ ├── Cpu.java │ │ │ │ ├── Jvm.java │ │ │ │ ├── Mem.java │ │ │ │ ├── Sys.java │ │ │ │ └── SysFile.java │ │ │ ├── payload/ │ │ │ │ ├── KV.java │ │ │ │ ├── ServerVO.java │ │ │ │ └── server/ │ │ │ │ ├── CpuVO.java │ │ │ │ ├── JvmVO.java │ │ │ │ ├── MemVO.java │ │ │ │ ├── SysFileVO.java │ │ │ │ └── SysVO.java │ │ │ ├── task/ │ │ │ │ └── ServerTask.java │ │ │ └── util/ │ │ │ ├── IpUtil.java │ │ │ └── ServerUtil.java │ │ └── resources/ │ │ ├── application.yml │ │ └── static/ │ │ ├── js/ │ │ │ └── stomp.js │ │ └── server.html │ └── test/ │ └── java/ │ └── com/ │ └── xkcoding/ │ └── websocket/ │ └── SpringBootDemoWebsocketApplicationTests.java ├── demo-websocket-socketio/ │ ├── .gitignore │ ├── README.md │ ├── pom.xml │ └── src/ │ ├── main/ │ │ ├── java/ │ │ │ └── com/ │ │ │ └── xkcoding/ │ │ │ └── websocket/ │ │ │ └── socketio/ │ │ │ ├── SpringBootDemoWebsocketSocketioApplication.java │ │ │ ├── config/ │ │ │ │ ├── DbTemplate.java │ │ │ │ ├── Event.java │ │ │ │ ├── ServerConfig.java │ │ │ │ └── WsConfig.java │ │ │ ├── controller/ │ │ │ │ └── MessageController.java │ │ │ ├── handler/ │ │ │ │ └── MessageEventHandler.java │ │ │ ├── init/ │ │ │ │ └── ServerRunner.java │ │ │ └── payload/ │ │ │ ├── BroadcastMessageRequest.java │ │ │ ├── GroupMessageRequest.java │ │ │ ├── JoinRequest.java │ │ │ └── SingleMessageRequest.java │ │ └── resources/ │ │ ├── application.yml │ │ └── static/ │ │ ├── bootstrap.css │ │ ├── index.html │ │ └── js/ │ │ └── socket.io/ │ │ └── socket.io.js │ └── test/ │ └── java/ │ └── com/ │ └── xkcoding/ │ └── websocket/ │ └── socketio/ │ └── SpringBootDemoWebsocketSocketioApplicationTests.java ├── demo-zookeeper/ │ ├── .gitignore │ ├── README.md │ ├── pom.xml │ └── src/ │ ├── main/ │ │ ├── java/ │ │ │ └── com/ │ │ │ └── xkcoding/ │ │ │ └── zookeeper/ │ │ │ ├── SpringBootDemoZookeeperApplication.java │ │ │ ├── annotation/ │ │ │ │ ├── LockKeyParam.java │ │ │ │ └── ZooLock.java │ │ │ ├── aspectj/ │ │ │ │ └── ZooLockAspect.java │ │ │ └── config/ │ │ │ ├── ZkConfig.java │ │ │ └── props/ │ │ │ └── ZkProps.java │ │ └── resources/ │ │ └── application.yml │ └── test/ │ └── java/ │ └── com/ │ └── xkcoding/ │ └── zookeeper/ │ └── SpringBootDemoZookeeperApplicationTests.java ├── jd.md └── pom.xml
SYMBOL INDEX (1828 symbols across 507 files)
FILE: demo-activiti/src/main/java/com/xkcoding/activiti/SpringBootDemoActivitiApplication.java
class SpringBootDemoActivitiApplication (line 14) | @SpringBootApplication
method main (line 17) | public static void main(String[] args) {
FILE: demo-activiti/src/main/java/com/xkcoding/activiti/config/SecurityConfiguration.java
class SecurityConfiguration (line 27) | @Slf4j
method configure (line 31) | @Override
method myUserDetailsService (line 36) | @Bean
method passwordEncoder (line 52) | @Bean
FILE: demo-activiti/src/main/java/com/xkcoding/activiti/util/SecurityUtil.java
class SecurityUtil (line 23) | @Component
method logInAs (line 29) | public void logInAs(String username) {
FILE: demo-activiti/src/test/java/com/xkcoding/activiti/SpringBootDemoActivitiApplicationTests.java
class SpringBootDemoActivitiApplicationTests (line 14) | @RunWith(SpringRunner.class)
method contextLoads (line 23) | @Test
FILE: demo-actuator/src/main/java/com/xkcoding/actuator/SpringBootDemoActuatorApplication.java
class SpringBootDemoActuatorApplication (line 14) | @SpringBootApplication
method main (line 17) | public static void main(String[] args) {
FILE: demo-actuator/src/test/java/com/xkcoding/actuator/SpringBootDemoActuatorApplicationTests.java
class SpringBootDemoActuatorApplicationTests (line 8) | @RunWith(SpringRunner.class)
method contextLoads (line 12) | @Test
FILE: demo-admin/admin-client/src/main/java/com/xkcoding/admin/client/SpringBootDemoAdminClientApplication.java
class SpringBootDemoAdminClientApplication (line 14) | @SpringBootApplication
method main (line 17) | public static void main(String[] args) {
FILE: demo-admin/admin-client/src/main/java/com/xkcoding/admin/client/controller/IndexController.java
class IndexController (line 14) | @RestController
method index (line 16) | @GetMapping(value = {"", "/"})
FILE: demo-admin/admin-client/src/test/java/com/xkcoding/admin/client/SpringBootDemoAdminClientApplicationTests.java
class SpringBootDemoAdminClientApplicationTests (line 8) | @RunWith(SpringRunner.class)
method contextLoads (line 12) | @Test
FILE: demo-admin/admin-server/src/main/java/com/xkcoding/admin/server/SpringBootDemoAdminServerApplication.java
class SpringBootDemoAdminServerApplication (line 15) | @EnableAdminServer
method main (line 19) | public static void main(String[] args) {
FILE: demo-admin/admin-server/src/test/java/com/xkcoding/admin/server/SpringBootDemoAdminServerApplicationTests.java
class SpringBootDemoAdminServerApplicationTests (line 8) | @RunWith(SpringRunner.class)
method contextLoads (line 12) | @Test
FILE: demo-async/src/main/java/com/xkcoding/async/SpringBootDemoAsyncApplication.java
class SpringBootDemoAsyncApplication (line 15) | @EnableAsync
method main (line 19) | public static void main(String[] args) {
FILE: demo-async/src/main/java/com/xkcoding/async/task/TaskFactory.java
class TaskFactory (line 19) | @Component
method asyncTask1 (line 26) | @Async
method asyncTask2 (line 35) | @Async
method asyncTask3 (line 44) | @Async
method task1 (line 53) | public void task1() throws InterruptedException {
method task2 (line 60) | public void task2() throws InterruptedException {
method task3 (line 67) | public void task3() throws InterruptedException {
method doTask (line 71) | private void doTask(String taskName, Integer time) throws InterruptedE...
FILE: demo-async/src/test/java/com/xkcoding/async/SpringBootDemoAsyncApplicationTests.java
class SpringBootDemoAsyncApplicationTests (line 8) | @RunWith(SpringRunner.class)
method contextLoads (line 12) | @Test
FILE: demo-async/src/test/java/com/xkcoding/async/task/TaskFactoryTest.java
class TaskFactoryTest (line 19) | @Slf4j
method asyncTaskTest (line 27) | @Test
method taskTest (line 46) | @Test
FILE: demo-cache-ehcache/src/main/java/com/xkcoding/cache/ehcache/SpringBootDemoCacheEhcacheApplication.java
class SpringBootDemoCacheEhcacheApplication (line 15) | @SpringBootApplication
method main (line 19) | public static void main(String[] args) {
FILE: demo-cache-ehcache/src/main/java/com/xkcoding/cache/ehcache/entity/User.java
class User (line 17) | @Data
FILE: demo-cache-ehcache/src/main/java/com/xkcoding/cache/ehcache/service/UserService.java
type UserService (line 13) | public interface UserService {
method saveOrUpdate (line 20) | User saveOrUpdate(User user);
method get (line 28) | User get(Long id);
method delete (line 35) | void delete(Long id);
FILE: demo-cache-ehcache/src/main/java/com/xkcoding/cache/ehcache/service/impl/UserServiceImpl.java
class UserServiceImpl (line 22) | @Service
method saveOrUpdate (line 45) | @CachePut(value = "user", key = "#user.id")
method get (line 59) | @Cacheable(value = "user", key = "#id")
method delete (line 72) | @CacheEvict(value = "user", key = "#id")
FILE: demo-cache-ehcache/src/test/java/com/xkcoding/cache/ehcache/SpringBootDemoCacheEhcacheApplicationTests.java
class SpringBootDemoCacheEhcacheApplicationTests (line 8) | @RunWith(SpringRunner.class)
method contextLoads (line 12) | @Test
FILE: demo-cache-ehcache/src/test/java/com/xkcoding/cache/ehcache/service/UserServiceTest.java
class UserServiceTest (line 17) | @Slf4j
method getTwice (line 26) | @Test
method getAfterSave (line 41) | @Test
method deleteUser (line 53) | @Test
FILE: demo-cache-redis/src/main/java/com/xkcoding/cache/redis/SpringBootDemoCacheRedisApplication.java
class SpringBootDemoCacheRedisApplication (line 6) | @SpringBootApplication
method main (line 9) | public static void main(String[] args) {
FILE: demo-cache-redis/src/main/java/com/xkcoding/cache/redis/config/RedisConfig.java
class RedisConfig (line 28) | @Configuration
method redisCacheTemplate (line 36) | @Bean
method cacheManager (line 48) | @Bean
FILE: demo-cache-redis/src/main/java/com/xkcoding/cache/redis/entity/User.java
class User (line 17) | @Data
FILE: demo-cache-redis/src/main/java/com/xkcoding/cache/redis/service/UserService.java
type UserService (line 13) | public interface UserService {
method saveOrUpdate (line 20) | User saveOrUpdate(User user);
method get (line 28) | User get(Long id);
method delete (line 35) | void delete(Long id);
FILE: demo-cache-redis/src/main/java/com/xkcoding/cache/redis/service/impl/UserServiceImpl.java
class UserServiceImpl (line 22) | @Service
method saveOrUpdate (line 45) | @CachePut(value = "user", key = "#user.id")
method get (line 59) | @Cacheable(value = "user", key = "#id")
method delete (line 72) | @CacheEvict(value = "user", key = "#id")
FILE: demo-cache-redis/src/test/java/com/xkcoding/cache/redis/RedisTest.java
class RedisTest (line 23) | @Slf4j
method get (line 35) | @Test
FILE: demo-cache-redis/src/test/java/com/xkcoding/cache/redis/SpringBootDemoCacheRedisApplicationTests.java
class SpringBootDemoCacheRedisApplicationTests (line 8) | @RunWith(SpringRunner.class)
method contextLoads (line 12) | @Test
FILE: demo-cache-redis/src/test/java/com/xkcoding/cache/redis/service/UserServiceTest.java
class UserServiceTest (line 17) | @Slf4j
method getTwice (line 25) | @Test
method getAfterSave (line 40) | @Test
method deleteUser (line 52) | @Test
FILE: demo-codegen/src/main/java/com/xkcoding/codegen/SpringBootDemoCodegenApplication.java
class SpringBootDemoCodegenApplication (line 14) | @SpringBootApplication
method main (line 17) | public static void main(String[] args) {
FILE: demo-codegen/src/main/java/com/xkcoding/codegen/common/IResultCode.java
type IResultCode (line 11) | public interface IResultCode {
method getCode (line 17) | Integer getCode();
method getMessage (line 24) | String getMessage();
FILE: demo-codegen/src/main/java/com/xkcoding/codegen/common/PageResult.java
class PageResult (line 16) | @Data
FILE: demo-codegen/src/main/java/com/xkcoding/codegen/common/R.java
class R (line 14) | @Data
method R (line 37) | public R(Integer code, String message, boolean status, T data) {
method R (line 44) | public R(IResultCode resultCode, boolean status, T data) {
method R (line 51) | public R(IResultCode resultCode, boolean status) {
method success (line 58) | public static <T> R success() {
method message (line 62) | public static <T> R message(String message) {
method success (line 66) | public static <T> R success(T data) {
method fail (line 70) | public static <T> R fail() {
method fail (line 74) | public static <T> R fail(IResultCode resultCode) {
method fail (line 78) | public static <T> R fail(Integer code, String message) {
method fail (line 82) | public static <T> R fail(IResultCode resultCode, T data) {
method fail (line 86) | public static <T> R fail(Integer code, String message, T data) {
FILE: demo-codegen/src/main/java/com/xkcoding/codegen/common/ResultCode.java
type ResultCode (line 13) | @Getter
method ResultCode (line 34) | ResultCode(Integer code, String message) {
FILE: demo-codegen/src/main/java/com/xkcoding/codegen/constants/GenConstants.java
type GenConstants (line 11) | public interface GenConstants {
FILE: demo-codegen/src/main/java/com/xkcoding/codegen/controller/CodeGenController.java
class CodeGenController (line 23) | @RestController
method listTables (line 35) | @GetMapping("/table")
method generatorCode (line 43) | @SneakyThrows
FILE: demo-codegen/src/main/java/com/xkcoding/codegen/entity/ColumnEntity.java
class ColumnEntity (line 13) | @Data
FILE: demo-codegen/src/main/java/com/xkcoding/codegen/entity/GenConfig.java
class GenConfig (line 13) | @Data
FILE: demo-codegen/src/main/java/com/xkcoding/codegen/entity/TableEntity.java
class TableEntity (line 15) | @Data
FILE: demo-codegen/src/main/java/com/xkcoding/codegen/entity/TableRequest.java
class TableRequest (line 13) | @Data
FILE: demo-codegen/src/main/java/com/xkcoding/codegen/service/CodeGenService.java
type CodeGenService (line 16) | public interface CodeGenService {
method generatorCode (line 23) | byte[] generatorCode(GenConfig genConfig);
method listTables (line 31) | PageResult<Entity> listTables(TableRequest request);
FILE: demo-codegen/src/main/java/com/xkcoding/codegen/service/impl/CodeGenServiceImpl.java
class CodeGenServiceImpl (line 32) | @Service
method listTables (line 49) | @Override
method generatorCode (line 88) | @Override
method queryTable (line 103) | @SneakyThrows
method queryColumns (line 119) | @SneakyThrows
FILE: demo-codegen/src/main/java/com/xkcoding/codegen/utils/CodeGenUtil.java
class CodeGenUtil (line 37) | @Slf4j
method getTemplates (line 49) | private List<String> getTemplates() {
method generatorCode (line 65) | public void generatorCode(GenConfig genConfig, Entity table, List<Enti...
method columnToJava (line 196) | private String columnToJava(String columnName) {
method tableToJava (line 203) | private String tableToJava(String tableName, String tablePrefix) {
method getConfig (line 213) | private Props getConfig(String fileName) {
method getFileName (line 222) | private String getFileName(String template, String className, String p...
FILE: demo-codegen/src/main/java/com/xkcoding/codegen/utils/DbUtil.java
class DbUtil (line 16) | @Slf4j
method buildFromTableRequest (line 19) | public HikariDataSource buildFromTableRequest(TableRequest request) {
FILE: demo-codegen/src/main/resources/static/libs/datejs/date-zh-CN.js
function f (line 40) | function f(n){return n<10?'0'+n:n;}
FILE: demo-codegen/src/test/java/com/xkcoding/codegen/CodeGenServiceTest.java
class CodeGenServiceTest (line 29) | @RunWith(SpringRunner.class)
method testTablePage (line 36) | @Test
method testGeneratorCode (line 50) | @Test
FILE: demo-codegen/src/test/java/com/xkcoding/codegen/SpringBootDemoCodegenApplicationTests.java
class SpringBootDemoCodegenApplicationTests (line 8) | @RunWith(SpringRunner.class)
method contextLoads (line 12) | @Test
FILE: demo-docker/src/main/java/com/xkcoding/docker/SpringBootDemoDockerApplication.java
class SpringBootDemoDockerApplication (line 14) | @SpringBootApplication
method main (line 17) | public static void main(String[] args) {
FILE: demo-docker/src/main/java/com/xkcoding/docker/controller/HelloController.java
class HelloController (line 15) | @RestController
method hello (line 18) | @GetMapping
FILE: demo-docker/src/test/java/com/xkcoding/docker/SpringBootDemoDockerApplicationTests.java
class SpringBootDemoDockerApplicationTests (line 8) | @RunWith(SpringRunner.class)
method contextLoads (line 12) | @Test
FILE: demo-dubbo/dubbo-common/src/main/java/com/xkcoding/dubbo/common/service/HelloService.java
type HelloService (line 11) | public interface HelloService {
method sayHello (line 18) | String sayHello(String name);
FILE: demo-dubbo/dubbo-consumer/src/main/java/com/xkcoding/dubbo/consumer/SpringBootDemoDubboConsumerApplication.java
class SpringBootDemoDubboConsumerApplication (line 15) | @SpringBootApplication
method main (line 19) | public static void main(String[] args) {
FILE: demo-dubbo/dubbo-consumer/src/main/java/com/xkcoding/dubbo/consumer/controller/HelloController.java
class HelloController (line 18) | @RestController
method sayHello (line 24) | @GetMapping("/sayHello")
FILE: demo-dubbo/dubbo-consumer/src/test/java/com/xkcoding/dubbo/consumer/SpringBootDemoDubboConsumerApplicationTests.java
class SpringBootDemoDubboConsumerApplicationTests (line 8) | @RunWith(SpringRunner.class)
method contextLoads (line 12) | @Test
FILE: demo-dubbo/dubbo-provider/src/main/java/com/xkcoding/dubbo/provider/SpringBootDemoDubboProviderApplication.java
class SpringBootDemoDubboProviderApplication (line 15) | @EnableDubboConfiguration
method main (line 19) | public static void main(String[] args) {
FILE: demo-dubbo/dubbo-provider/src/main/java/com/xkcoding/dubbo/provider/service/HelloServiceImpl.java
class HelloServiceImpl (line 16) | @Service
method sayHello (line 26) | @Override
FILE: demo-dubbo/dubbo-provider/src/test/java/com/xkcoding/dubbo/provider/SpringBootDemoDubboProviderApplicationTests.java
class SpringBootDemoDubboProviderApplicationTests (line 8) | @RunWith(SpringRunner.class)
method contextLoads (line 12) | @Test
FILE: demo-dynamic-datasource/db/init.sql
type `datasource_config` (line 1) | CREATE TABLE IF NOT EXISTS `datasource_config`
FILE: demo-dynamic-datasource/db/user.sql
type `test_user` (line 1) | CREATE TABLE IF NOT EXISTS `test_user`
FILE: demo-dynamic-datasource/src/main/java/com/xkcoding/dynamic/datasource/SpringBootDemoDynamicDatasourceApplication.java
class SpringBootDemoDynamicDatasourceApplication (line 23) | @SpringBootApplication
method main (line 28) | public static void main(String[] args) {
method run (line 32) | @Override
FILE: demo-dynamic-datasource/src/main/java/com/xkcoding/dynamic/datasource/aspect/DatasourceSelectorAspect.java
class DatasourceSelectorAspect (line 31) | @Aspect
method datasourcePointcut (line 35) | @Pointcut("execution(public * com.xkcoding.dynamic.datasource.controll...
method doBefore (line 42) | @Before("datasourcePointcut()")
method doAfter (line 69) | @AfterReturning("datasourcePointcut()")
FILE: demo-dynamic-datasource/src/main/java/com/xkcoding/dynamic/datasource/config/DatasourceConfiguration.java
class DatasourceConfiguration (line 19) | @Configuration
method dataSource (line 22) | @Bean
FILE: demo-dynamic-datasource/src/main/java/com/xkcoding/dynamic/datasource/config/MyMapper.java
type MyMapper (line 15) | @RegisterMapper
FILE: demo-dynamic-datasource/src/main/java/com/xkcoding/dynamic/datasource/config/MybatisConfiguration.java
class MybatisConfiguration (line 21) | @Configuration
method getSqlSessionFactory (line 30) | @Bean(name = "sqlSessionFactory")
FILE: demo-dynamic-datasource/src/main/java/com/xkcoding/dynamic/datasource/controller/DatasourceConfigController.java
class DatasourceConfigController (line 19) | @RestController
method insertConfig (line 27) | @PostMapping("/config")
method removeConfig (line 38) | @DeleteMapping("/config/{id}")
FILE: demo-dynamic-datasource/src/main/java/com/xkcoding/dynamic/datasource/controller/UserController.java
class UserController (line 20) | @RestController
method getUserList (line 28) | @GetMapping("/user")
FILE: demo-dynamic-datasource/src/main/java/com/xkcoding/dynamic/datasource/datasource/DatasourceConfigCache.java
type DatasourceConfigCache (line 16) | public enum DatasourceConfigCache {
method addConfig (line 33) | public synchronized void addConfig(Long id, DatasourceConfig config) {
method getConfig (line 43) | public synchronized DatasourceConfig getConfig(Long id) {
method removeConfig (line 53) | public synchronized void removeConfig(Long id) {
FILE: demo-dynamic-datasource/src/main/java/com/xkcoding/dynamic/datasource/datasource/DatasourceConfigContextHolder.java
class DatasourceConfigContextHolder (line 11) | public class DatasourceConfigContextHolder {
method setDefaultDatasource (line 17) | public static void setDefaultDatasource() {
method getCurrentDatasourceConfig (line 27) | public static Long getCurrentDatasourceConfig() {
method setCurrentDatasourceConfig (line 36) | public static void setCurrentDatasourceConfig(Long id) {
FILE: demo-dynamic-datasource/src/main/java/com/xkcoding/dynamic/datasource/datasource/DatasourceHolder.java
type DatasourceHolder (line 16) | public enum DatasourceHolder {
method DatasourceHolder (line 25) | DatasourceHolder() {
method addDatasource (line 45) | public synchronized void addDatasource(Long id, HikariDataSource dataS...
method getDatasource (line 56) | public synchronized HikariDataSource getDatasource(Long id) {
method clearExpiredDatasource (line 68) | public synchronized void clearExpiredDatasource() {
method removeDatasource (line 84) | public synchronized void removeDatasource(Long id) {
FILE: demo-dynamic-datasource/src/main/java/com/xkcoding/dynamic/datasource/datasource/DatasourceManager.java
class DatasourceManager (line 16) | public class DatasourceManager {
method DatasourceManager (line 33) | public DatasourceManager(HikariDataSource dataSource) {
method isExpired (line 43) | public boolean isExpired() {
method refreshTime (line 54) | public void refreshTime() {
FILE: demo-dynamic-datasource/src/main/java/com/xkcoding/dynamic/datasource/datasource/DatasourceScheduler.java
type DatasourceScheduler (line 16) | public enum DatasourceScheduler {
method DatasourceScheduler (line 25) | DatasourceScheduler() {
method create (line 29) | private void create() {
method shutdown (line 34) | private void shutdown() {
method schedule (line 40) | public void schedule(Runnable task, long delay) {
FILE: demo-dynamic-datasource/src/main/java/com/xkcoding/dynamic/datasource/datasource/DynamicDataSource.java
class DynamicDataSource (line 20) | @Slf4j
method getConnection (line 22) | @Override
method initDatasource (line 42) | private HikariDataSource initDatasource(Long id) {
FILE: demo-dynamic-datasource/src/main/java/com/xkcoding/dynamic/datasource/mapper/DatasourceConfigMapper.java
type DatasourceConfigMapper (line 15) | @Mapper
FILE: demo-dynamic-datasource/src/main/java/com/xkcoding/dynamic/datasource/mapper/UserMapper.java
type UserMapper (line 15) | @Mapper
FILE: demo-dynamic-datasource/src/main/java/com/xkcoding/dynamic/datasource/model/DatasourceConfig.java
class DatasourceConfig (line 19) | @Data
method buildJdbcUrl (line 65) | public String buildJdbcUrl() {
FILE: demo-dynamic-datasource/src/main/java/com/xkcoding/dynamic/datasource/model/User.java
class User (line 19) | @Data
FILE: demo-dynamic-datasource/src/main/java/com/xkcoding/dynamic/datasource/utils/SpringUtil.java
class SpringUtil (line 19) | @Slf4j
method getApplicationContext (line 29) | public static ApplicationContext getApplicationContext() {
method setApplicationContext (line 36) | @Override
method getBean (line 44) | @SuppressWarnings("unchecked")
method getBean (line 52) | public static <T> T getBean(Class<T> requiredType) {
method clearHolder (line 59) | public static void clearHolder() {
method publishEvent (line 71) | public static void publishEvent(ApplicationEvent event) {
method destroy (line 81) | @Override
FILE: demo-dynamic-datasource/src/test/java/com/xkcoding/dynamic/datasource/SpringBootDemoDynamicDatasourceApplicationTests.java
class SpringBootDemoDynamicDatasourceApplicationTests (line 8) | @RunWith(SpringRunner.class)
method contextLoads (line 12) | @Test
FILE: demo-elasticsearch-rest-high-level-client/src/main/java/com/xkcoding/elasticsearch/ElasticsearchApplication.java
class ElasticsearchApplication (line 13) | @SpringBootApplication
method main (line 16) | public static void main(String[] args) {
FILE: demo-elasticsearch-rest-high-level-client/src/main/java/com/xkcoding/elasticsearch/common/Result.java
class Result (line 15) | @Data
method Result (line 35) | public Result() {
method Result (line 38) | private Result(ResultCode resultCode) {
method Result (line 42) | private Result(ResultCode resultCode, T data) {
method Result (line 46) | private Result(int errcode, String errmsg) {
method Result (line 50) | private Result(int errcode, String errmsg, T data) {
method success (line 63) | public static <T> Result<T> success() {
method success (line 75) | public static <T> Result<T> success(@Nullable T data) {
FILE: demo-elasticsearch-rest-high-level-client/src/main/java/com/xkcoding/elasticsearch/common/ResultCode.java
type ResultCode (line 13) | @Getter
FILE: demo-elasticsearch-rest-high-level-client/src/main/java/com/xkcoding/elasticsearch/config/ElasticsearchAutoConfiguration.java
class ElasticsearchAutoConfiguration (line 30) | @Configuration
method restHighLevelClient (line 39) | @Bean
method getRestHighLevelClient (line 68) | private static RestHighLevelClient getRestHighLevelClient(RestClientBu...
FILE: demo-elasticsearch-rest-high-level-client/src/main/java/com/xkcoding/elasticsearch/config/ElasticsearchProperties.java
class ElasticsearchProperties (line 21) | @Data
class Index (line 83) | @Data
class Account (line 101) | @Data
FILE: demo-elasticsearch-rest-high-level-client/src/main/java/com/xkcoding/elasticsearch/contants/ElasticsearchConstant.java
type ElasticsearchConstant (line 10) | public interface ElasticsearchConstant {
FILE: demo-elasticsearch-rest-high-level-client/src/main/java/com/xkcoding/elasticsearch/exception/ElasticsearchException.java
class ElasticsearchException (line 13) | public class ElasticsearchException extends RuntimeException {
method ElasticsearchException (line 21) | public ElasticsearchException(ResultCode resultCode) {
method ElasticsearchException (line 25) | public ElasticsearchException(String message) {
method ElasticsearchException (line 29) | public ElasticsearchException(Integer errcode, String errmsg) {
method ElasticsearchException (line 35) | public ElasticsearchException(String message, Throwable cause) {
method ElasticsearchException (line 39) | public ElasticsearchException(Throwable cause) {
method ElasticsearchException (line 43) | public ElasticsearchException(String message, Throwable cause, boolean...
FILE: demo-elasticsearch-rest-high-level-client/src/main/java/com/xkcoding/elasticsearch/model/Person.java
class Person (line 18) | @Data
FILE: demo-elasticsearch-rest-high-level-client/src/main/java/com/xkcoding/elasticsearch/service/PersonService.java
type PersonService (line 15) | public interface PersonService {
method createIndex (line 23) | void createIndex(String index);
method deleteIndex (line 31) | void deleteIndex(String index);
method insert (line 40) | void insert(String index, List<Person> list);
method update (line 49) | void update(String index, List<Person> list);
method delete (line 57) | void delete(String index, @Nullable Person person);
method searchList (line 66) | List<Person> searchList(String index);
FILE: demo-elasticsearch-rest-high-level-client/src/main/java/com/xkcoding/elasticsearch/service/base/BaseElasticsearchService.java
class BaseElasticsearchService (line 33) | @Slf4j
method createIndexRequest (line 58) | protected void createIndexRequest(String index) {
method deleteIndexRequest (line 79) | protected void deleteIndexRequest(String index) {
method buildDeleteIndexRequest (line 94) | private static DeleteIndexRequest buildDeleteIndexRequest(String index) {
method buildIndexRequest (line 107) | protected static IndexRequest buildIndexRequest(String index, String i...
method updateRequest (line 119) | protected void updateRequest(String index, String id, Object object) {
method deleteRequest (line 135) | protected void deleteRequest(String index, String id) {
method search (line 151) | protected SearchResponse search(String index) {
FILE: demo-elasticsearch-rest-high-level-client/src/main/java/com/xkcoding/elasticsearch/service/impl/PersonServiceImpl.java
class PersonServiceImpl (line 26) | @Service
method createIndex (line 29) | @Override
method deleteIndex (line 34) | @Override
method insert (line 39) | @Override
method update (line 60) | @Override
method delete (line 67) | @Override
method searchList (line 78) | @Override
FILE: demo-elasticsearch-rest-high-level-client/src/test/java/com/xkcoding/elasticsearch/ElasticsearchApplicationTests.java
class ElasticsearchApplicationTests (line 16) | @RunWith(SpringRunner.class)
method deleteIndexTest (line 26) | @Test
method createIndexTest (line 34) | @Test
method insertTest (line 42) | @Test
method updateTest (line 55) | @Test
method deleteTest (line 66) | @Test
method searchListTest (line 74) | @Test
FILE: demo-elasticsearch/src/main/java/com/xkcoding/elasticsearch/SpringBootDemoElasticsearchApplication.java
class SpringBootDemoElasticsearchApplication (line 14) | @SpringBootApplication
method main (line 17) | public static void main(String[] args) {
FILE: demo-elasticsearch/src/main/java/com/xkcoding/elasticsearch/constants/EsConsts.java
type EsConsts (line 11) | public interface EsConsts {
FILE: demo-elasticsearch/src/main/java/com/xkcoding/elasticsearch/model/Person.java
class Person (line 22) | @Document(indexName = EsConsts.INDEX_NAME, type = EsConsts.TYPE_NAME, sh...
FILE: demo-elasticsearch/src/main/java/com/xkcoding/elasticsearch/repository/PersonRepository.java
type PersonRepository (line 16) | public interface PersonRepository extends ElasticsearchRepository<Person...
method findByAgeBetween (line 25) | List<Person> findByAgeBetween(Integer min, Integer max);
FILE: demo-elasticsearch/src/test/java/com/xkcoding/elasticsearch/SpringBootDemoElasticsearchApplicationTests.java
class SpringBootDemoElasticsearchApplicationTests (line 8) | @RunWith(SpringRunner.class)
method contextLoads (line 12) | @Test
FILE: demo-elasticsearch/src/test/java/com/xkcoding/elasticsearch/repository/PersonRepositoryTest.java
class PersonRepositoryTest (line 35) | @Slf4j
method save (line 43) | @Test
method saveList (line 53) | @Test
method update (line 66) | @Test
method delete (line 78) | @Test
method select (line 93) | @Test
method customSelectRangeOfAge (line 101) | @Test
method advanceSelect (line 109) | @Test
method customAdvanceSelect (line 121) | @Test
method agg (line 140) | @Test
method advanceAgg (line 160) | @Test
FILE: demo-elasticsearch/src/test/java/com/xkcoding/elasticsearch/template/TemplateTest.java
class TemplateTest (line 17) | public class TemplateTest extends SpringBootDemoElasticsearchApplication...
method testCreateIndex (line 24) | @Test
method testDeleteIndex (line 36) | @Test
FILE: demo-email/src/main/java/com/xkcoding/email/SpringBootDemoEmailApplication.java
class SpringBootDemoEmailApplication (line 14) | @SpringBootApplication
method main (line 17) | public static void main(String[] args) {
FILE: demo-email/src/main/java/com/xkcoding/email/service/MailService.java
type MailService (line 13) | public interface MailService {
method sendSimpleMail (line 22) | void sendSimpleMail(String to, String subject, String content, String....
method sendHtmlMail (line 33) | void sendHtmlMail(String to, String subject, String content, String......
method sendAttachmentsMail (line 45) | void sendAttachmentsMail(String to, String subject, String content, St...
method sendResourceMail (line 58) | void sendResourceMail(String to, String subject, String content, Strin...
FILE: demo-email/src/main/java/com/xkcoding/email/service/impl/MailServiceImpl.java
class MailServiceImpl (line 25) | @Service
method sendSimpleMail (line 40) | @Override
method sendHtmlMail (line 62) | @Override
method sendAttachmentsMail (line 86) | @Override
method sendResourceMail (line 116) | @Override
FILE: demo-email/src/test/java/com/xkcoding/email/PasswordTest.java
class PasswordTest (line 15) | public class PasswordTest extends SpringBootDemoEmailApplicationTests {
method testGeneratePassword (line 22) | @Test
FILE: demo-email/src/test/java/com/xkcoding/email/SpringBootDemoEmailApplicationTests.java
class SpringBootDemoEmailApplicationTests (line 8) | @RunWith(SpringRunner.class)
method contextLoads (line 12) | @Test
FILE: demo-email/src/test/java/com/xkcoding/email/service/MailServiceTest.java
class MailServiceTest (line 23) | public class MailServiceTest extends SpringBootDemoEmailApplicationTests {
method sendSimpleMail (line 34) | @Test
method sendHtmlMail (line 44) | @Test
method sendHtmlMail2 (line 60) | @Test
method sendAttachmentsMail (line 85) | @Test
method sendResourceMail (line 96) | @Test
FILE: demo-exception-handler/src/main/java/com/xkcoding/exception/handler/SpringBootDemoExceptionHandlerApplication.java
class SpringBootDemoExceptionHandlerApplication (line 14) | @SpringBootApplication
method main (line 17) | public static void main(String[] args) {
FILE: demo-exception-handler/src/main/java/com/xkcoding/exception/handler/constant/Status.java
type Status (line 13) | @Getter
method Status (line 33) | Status(Integer code, String message) {
FILE: demo-exception-handler/src/main/java/com/xkcoding/exception/handler/controller/TestController.java
class TestController (line 20) | @Controller
method jsonException (line 23) | @GetMapping("/json")
method pageException (line 29) | @GetMapping("/page")
FILE: demo-exception-handler/src/main/java/com/xkcoding/exception/handler/exception/BaseException.java
class BaseException (line 15) | @Data
method BaseException (line 21) | public BaseException(Status status) {
method BaseException (line 27) | public BaseException(Integer code, String message) {
FILE: demo-exception-handler/src/main/java/com/xkcoding/exception/handler/exception/JsonException.java
class JsonException (line 14) | @Getter
method JsonException (line 17) | public JsonException(Status status) {
method JsonException (line 21) | public JsonException(Integer code, String message) {
FILE: demo-exception-handler/src/main/java/com/xkcoding/exception/handler/exception/PageException.java
class PageException (line 14) | @Getter
method PageException (line 17) | public PageException(Status status) {
method PageException (line 21) | public PageException(Integer code, String message) {
FILE: demo-exception-handler/src/main/java/com/xkcoding/exception/handler/handler/DemoExceptionHandler.java
class DemoExceptionHandler (line 20) | @ControllerAdvice
method jsonErrorHandler (line 31) | @ExceptionHandler(value = JsonException.class)
method pageErrorHandler (line 44) | @ExceptionHandler(value = PageException.class)
FILE: demo-exception-handler/src/main/java/com/xkcoding/exception/handler/model/ApiResponse.java
class ApiResponse (line 15) | @Data
method ApiResponse (line 35) | private ApiResponse() {
method ApiResponse (line 46) | private ApiResponse(Integer code, String message, Object data) {
method of (line 60) | public static ApiResponse of(Integer code, String message, Object data) {
method ofSuccess (line 70) | public static ApiResponse ofSuccess(Object data) {
method ofMessage (line 80) | public static ApiResponse ofMessage(String message) {
method ofStatus (line 90) | public static ApiResponse ofStatus(Status status) {
method ofStatus (line 101) | public static ApiResponse ofStatus(Status status, Object data) {
method ofException (line 113) | public static <T extends BaseException> ApiResponse ofException(T t, O...
method ofException (line 124) | public static <T extends BaseException> ApiResponse ofException(T t) {
FILE: demo-exception-handler/src/test/java/com/xkcoding/exception/handler/SpringBootDemoExceptionHandlerApplicationTests.java
class SpringBootDemoExceptionHandlerApplicationTests (line 8) | @RunWith(SpringRunner.class)
method contextLoads (line 12) | @Test
FILE: demo-flyway/src/main/java/com/xkcoding/flyway/SpringBootDemoFlywayApplication.java
class SpringBootDemoFlywayApplication (line 14) | @SpringBootApplication
method main (line 17) | public static void main(String[] args) {
FILE: demo-flyway/src/main/resources/db/migration/V1_0__INIT.sql
type `t_user` (line 2) | CREATE TABLE `t_user` (
FILE: demo-flyway/src/test/java/com/xkcoding/AppTest.java
class AppTest (line 10) | public class AppTest {
method shouldAnswerWithTrue (line 14) | @Test
FILE: demo-graylog/src/main/java/com/xkcoding/graylog/SpringBootDemoGraylogApplication.java
class SpringBootDemoGraylogApplication (line 14) | @SpringBootApplication
method main (line 17) | public static void main(String[] args) {
FILE: demo-graylog/src/test/java/com/xkcoding/graylog/SpringBootDemoGraylogApplicationTests.java
class SpringBootDemoGraylogApplicationTests (line 8) | @RunWith(SpringRunner.class)
method contextLoads (line 12) | @Test
FILE: demo-helloworld/src/main/java/com/xkcoding/helloworld/SpringBootDemoHelloworldApplication.java
class SpringBootDemoHelloworldApplication (line 18) | @SpringBootApplication
method main (line 22) | public static void main(String[] args) {
method sayHello (line 32) | @GetMapping("/hello")
FILE: demo-helloworld/src/test/java/com/xkcoding/helloworld/SpringBootDemoHelloworldApplicationTests.java
class SpringBootDemoHelloworldApplicationTests (line 8) | @RunWith(SpringRunner.class)
method contextLoads (line 12) | @Test
FILE: demo-https/src/main/java/com/xkcoding/https/SpringBootDemoHttpsApplication.java
class SpringBootDemoHttpsApplication (line 14) | @SpringBootApplication
method main (line 17) | public static void main(String[] args) {
FILE: demo-https/src/main/java/com/xkcoding/https/config/HttpsConfig.java
class HttpsConfig (line 19) | @Configuration
method connector (line 24) | @Bean
method tomcatServletWebServerFactory (line 34) | @Bean
FILE: demo-https/src/test/java/com/xkcoding/https/SpringBootDemoHttpsApplicationTests.java
class SpringBootDemoHttpsApplicationTests (line 6) | @SpringBootTest
method contextLoads (line 9) | @Test
FILE: demo-ldap/src/main/java/com/xkcoding/ldap/LdapDemoApplication.java
class LdapDemoApplication (line 13) | @SpringBootApplication
method main (line 16) | public static void main(String[] args) {
FILE: demo-ldap/src/main/java/com/xkcoding/ldap/api/Result.java
class Result (line 15) | @Data
method Result (line 35) | public Result() {
method Result (line 38) | private Result(ResultCode resultCode) {
method Result (line 42) | private Result(ResultCode resultCode, T data) {
method Result (line 46) | private Result(int errcode, String errmsg) {
method Result (line 50) | private Result(int errcode, String errmsg, T data) {
method success (line 63) | public static <T> Result<T> success() {
method success (line 75) | public static <T> Result<T> success(@Nullable T data) {
FILE: demo-ldap/src/main/java/com/xkcoding/ldap/api/ResultCode.java
type ResultCode (line 13) | @Getter
FILE: demo-ldap/src/main/java/com/xkcoding/ldap/entity/Person.java
class Person (line 19) | @Data
FILE: demo-ldap/src/main/java/com/xkcoding/ldap/exception/ServiceException.java
class ServiceException (line 13) | public class ServiceException extends RuntimeException {
method ServiceException (line 21) | public ServiceException(ResultCode resultCode) {
method ServiceException (line 25) | public ServiceException(String message) {
method ServiceException (line 29) | public ServiceException(Integer errcode, String errmsg) {
method ServiceException (line 35) | public ServiceException(String message, Throwable cause) {
method ServiceException (line 39) | public ServiceException(Throwable cause) {
method ServiceException (line 43) | public ServiceException(String message, Throwable cause, boolean enabl...
FILE: demo-ldap/src/main/java/com/xkcoding/ldap/repository/PersonRepository.java
type PersonRepository (line 16) | @Repository
method findByUid (line 25) | Person findByUid(String uid);
FILE: demo-ldap/src/main/java/com/xkcoding/ldap/request/LoginRequest.java
class LoginRequest (line 13) | @Data
FILE: demo-ldap/src/main/java/com/xkcoding/ldap/service/PersonService.java
type PersonService (line 14) | public interface PersonService {
method login (line 22) | Result login(LoginRequest request);
method listAllPerson (line 29) | Result listAllPerson();
method save (line 36) | void save(Person person);
method delete (line 43) | void delete(Person person);
FILE: demo-ldap/src/main/java/com/xkcoding/ldap/service/impl/PersonServiceImpl.java
class PersonServiceImpl (line 25) | @Slf4j
method login (line 37) | @Override
method listAllPerson (line 65) | @Override
method save (line 77) | @Override
method delete (line 88) | @Override
FILE: demo-ldap/src/main/java/com/xkcoding/ldap/util/LdapUtils.java
class LdapUtils (line 15) | public class LdapUtils {
method verify (line 25) | public static boolean verify(String ldapPassword, String inputPassword...
method asciiToString (line 69) | public static String asciiToString(String value) {
FILE: demo-ldap/src/test/java/com/xkcoding/ldap/LdapDemoApplicationTests.java
class LdapDemoApplicationTests (line 21) | @RunWith(SpringRunner.class)
method contextLoads (line 28) | @Test
method loginTest (line 35) | @Test
method listAllPersonTest (line 45) | @Test
method saveTest (line 54) | @Test
method deleteTest (line 77) | @Test
FILE: demo-log-aop/src/main/java/com/xkcoding/log/aop/SpringBootDemoLogAopApplication.java
class SpringBootDemoLogAopApplication (line 14) | @SpringBootApplication
method main (line 17) | public static void main(String[] args) {
FILE: demo-log-aop/src/main/java/com/xkcoding/log/aop/aspectj/AopLog.java
class AopLog (line 38) | @Aspect
method log (line 45) | @Pointcut("execution(public * com.xkcoding.log.aop.controller.*Control...
method aroundLog (line 57) | @Around("log()")
method getNameAndValue (line 95) | private Map<String, Object> getNameAndValue(ProceedingJoinPoint joinPo...
method getIp (line 121) | public static String getIp(HttpServletRequest request) {
class Log (line 148) | @Data
FILE: demo-log-aop/src/main/java/com/xkcoding/log/aop/controller/TestController.java
class TestController (line 23) | @Slf4j
method test (line 33) | @GetMapping("/test")
method testJson (line 43) | @PostMapping("/testJson")
FILE: demo-log-aop/src/test/java/com/xkcoding/log/aop/SpringBootDemoLogAopApplicationTests.java
class SpringBootDemoLogAopApplicationTests (line 8) | @RunWith(SpringRunner.class)
method contextLoads (line 12) | @Test
FILE: demo-logback/src/main/java/com/xkcoding/logback/SpringBootDemoLogbackApplication.java
class SpringBootDemoLogbackApplication (line 16) | @SpringBootApplication
method main (line 20) | public static void main(String[] args) {
FILE: demo-logback/src/test/java/com/xkcoding/logback/SpringBootDemoLogbackApplicationTests.java
class SpringBootDemoLogbackApplicationTests (line 8) | @RunWith(SpringRunner.class)
method contextLoads (line 12) | @Test
FILE: demo-mongodb/src/main/java/com/xkcoding/mongodb/SpringBootDemoMongodbApplication.java
class SpringBootDemoMongodbApplication (line 17) | @SpringBootApplication
method main (line 20) | public static void main(String[] args) {
method snowflake (line 24) | @Bean
FILE: demo-mongodb/src/main/java/com/xkcoding/mongodb/model/Article.java
class Article (line 19) | @Data
FILE: demo-mongodb/src/main/java/com/xkcoding/mongodb/repository/ArticleRepository.java
type ArticleRepository (line 16) | public interface ArticleRepository extends MongoRepository<Article, Long> {
method findByTitleLike (line 23) | List<Article> findByTitleLike(String title);
FILE: demo-mongodb/src/test/java/com/xkcoding/mongodb/SpringBootDemoMongodbApplicationTests.java
class SpringBootDemoMongodbApplicationTests (line 8) | @RunWith(SpringRunner.class)
method contextLoads (line 12) | @Test
FILE: demo-mongodb/src/test/java/com/xkcoding/mongodb/repository/ArticleRepositoryTest.java
class ArticleRepositoryTest (line 32) | @Slf4j
method testSave (line 46) | @Test
method testSaveList (line 56) | @Test
method testUpdate (line 70) | @Test
method testDelete (line 83) | @Test
method testThumbUp (line 95) | @Test
method testThumbUp2 (line 108) | @Test
method testQuery (line 123) | @Test
method testFindByTitleLike (line 136) | @Test
FILE: demo-mq-kafka/src/main/java/com/xkcoding/mq/kafka/SpringBootDemoMqKafkaApplication.java
class SpringBootDemoMqKafkaApplication (line 14) | @SpringBootApplication
method main (line 17) | public static void main(String[] args) {
FILE: demo-mq-kafka/src/main/java/com/xkcoding/mq/kafka/config/KafkaConfig.java
class KafkaConfig (line 22) | @Configuration
method kafkaTemplate (line 29) | @Bean
method producerFactory (line 34) | @Bean
method kafkaListenerContainerFactory (line 39) | @Bean
method consumerFactory (line 49) | @Bean
method ackContainerFactory (line 54) | @Bean("ackContainerFactory")
FILE: demo-mq-kafka/src/main/java/com/xkcoding/mq/kafka/constants/KafkaConsts.java
type KafkaConsts (line 11) | public interface KafkaConsts {
FILE: demo-mq-kafka/src/main/java/com/xkcoding/mq/kafka/handler/MessageHandler.java
class MessageHandler (line 18) | @Component
method handleMessage (line 22) | @KafkaListener(topics = KafkaConsts.TOPIC_TEST, containerFactory = "ac...
FILE: demo-mq-kafka/src/test/java/com/xkcoding/mq/kafka/SpringBootDemoMqKafkaApplicationTests.java
class SpringBootDemoMqKafkaApplicationTests (line 11) | @RunWith(SpringRunner.class)
method testSend (line 20) | @Test
FILE: demo-mq-rabbitmq/src/main/java/com/xkcoding/mq/rabbitmq/SpringBootDemoMqRabbitmqApplication.java
class SpringBootDemoMqRabbitmqApplication (line 14) | @SpringBootApplication
method main (line 17) | public static void main(String[] args) {
FILE: demo-mq-rabbitmq/src/main/java/com/xkcoding/mq/rabbitmq/config/RabbitMqConfig.java
class RabbitMqConfig (line 22) | @Slf4j
method rabbitTemplate (line 26) | @Bean
method directOneQueue (line 40) | @Bean
method queueTwo (line 48) | @Bean
method queueThree (line 56) | @Bean
method fanoutExchange (line 64) | @Bean
method fanoutBinding1 (line 75) | @Bean
method fanoutBinding2 (line 86) | @Bean
method topicExchange (line 97) | @Bean
method topicBinding1 (line 109) | @Bean
method topicBinding2 (line 120) | @Bean
method topicBinding3 (line 131) | @Bean
method delayQueue (line 139) | @Bean
method delayExchange (line 147) | @Bean
method delayBinding (line 160) | @Bean
FILE: demo-mq-rabbitmq/src/main/java/com/xkcoding/mq/rabbitmq/constants/RabbitConsts.java
type RabbitConsts (line 11) | public interface RabbitConsts {
FILE: demo-mq-rabbitmq/src/main/java/com/xkcoding/mq/rabbitmq/handler/DelayQueueHandler.java
class DelayQueueHandler (line 23) | @Slf4j
method directHandlerManualAck (line 28) | @RabbitHandler
FILE: demo-mq-rabbitmq/src/main/java/com/xkcoding/mq/rabbitmq/handler/DirectQueueOneHandler.java
class DirectQueueOneHandler (line 23) | @Slf4j
method directHandlerAutoAck (line 32) | public void directHandlerAutoAck(MessageStruct message) {
method directHandlerManualAck (line 36) | @RabbitHandler
FILE: demo-mq-rabbitmq/src/main/java/com/xkcoding/mq/rabbitmq/handler/QueueThreeHandler.java
class QueueThreeHandler (line 23) | @Slf4j
method directHandlerManualAck (line 28) | @RabbitHandler
FILE: demo-mq-rabbitmq/src/main/java/com/xkcoding/mq/rabbitmq/handler/QueueTwoHandler.java
class QueueTwoHandler (line 23) | @Slf4j
method directHandlerManualAck (line 28) | @RabbitHandler
FILE: demo-mq-rabbitmq/src/main/java/com/xkcoding/mq/rabbitmq/message/MessageStruct.java
class MessageStruct (line 18) | @Data
FILE: demo-mq-rabbitmq/src/test/java/com/xkcoding/mq/rabbitmq/SpringBootDemoMqRabbitmqApplicationTests.java
class SpringBootDemoMqRabbitmqApplicationTests (line 13) | @RunWith(SpringRunner.class)
method sendDirect (line 22) | @Test
method sendFanout (line 30) | @Test
method sendTopic1 (line 38) | @Test
method sendTopic2 (line 46) | @Test
method sendTopic3 (line 54) | @Test
method sendDelay (line 62) | @Test
FILE: demo-mq-rocketmq/src/main/java/com/xkcoding/mq/rocketmq/SpringBootDemoMqRocketmqApplication.java
class SpringBootDemoMqRocketmqApplication (line 6) | @SpringBootApplication
method main (line 9) | public static void main(String[] args) {
FILE: demo-mq-rocketmq/src/test/java/com/xkcoding/mq/rocketmq/SpringBootDemoMqRocketmqApplicationTests.java
class SpringBootDemoMqRocketmqApplicationTests (line 8) | @RunWith(SpringRunner.class)
method contextLoads (line 12) | @Test
FILE: demo-multi-datasource-jpa/src/main/java/com/xkcoding/multi/datasource/jpa/SpringBootDemoMultiDatasourceJpaApplication.java
class SpringBootDemoMultiDatasourceJpaApplication (line 14) | @SpringBootApplication
method main (line 17) | public static void main(String[] args) {
FILE: demo-multi-datasource-jpa/src/main/java/com/xkcoding/multi/datasource/jpa/config/PrimaryDataSourceConfig.java
class PrimaryDataSourceConfig (line 21) | @Configuration
method dataSourceProperties (line 29) | @Primary
method dataSource (line 42) | @Primary
method jdbcTemplate (line 54) | @Primary
FILE: demo-multi-datasource-jpa/src/main/java/com/xkcoding/multi/datasource/jpa/config/PrimaryJpaConfig.java
class PrimaryJpaConfig (line 28) | @Configuration
method jpaProperties (line 47) | @Primary
method entityManagerFactory (line 62) | @Primary
method entityManager (line 82) | @Primary
method transactionManager (line 94) | @Primary
FILE: demo-multi-datasource-jpa/src/main/java/com/xkcoding/multi/datasource/jpa/config/SecondDataSourceConfig.java
class SecondDataSourceConfig (line 20) | @Configuration
method dataSourceProperties (line 28) | @Bean(name = "secondDataSourceProperties")
method dataSource (line 40) | @Bean(name = "secondDataSource")
method jdbcTemplate (line 51) | @Bean(name = "secondJdbcTemplate")
FILE: demo-multi-datasource-jpa/src/main/java/com/xkcoding/multi/datasource/jpa/config/SecondJpaConfig.java
class SecondJpaConfig (line 27) | @Configuration
method jpaProperties (line 46) | @Bean(name = "secondJpaProperties")
method entityManagerFactory (line 60) | @Bean(name = "secondEntityManagerFactory")
method entityManager (line 79) | @Bean(name = "secondEntityManager")
method transactionManager (line 90) | @Bean(name = "secondTransactionManager")
FILE: demo-multi-datasource-jpa/src/main/java/com/xkcoding/multi/datasource/jpa/config/SnowflakeConfig.java
class SnowflakeConfig (line 16) | @Configuration
method snowflake (line 18) | @Bean
FILE: demo-multi-datasource-jpa/src/main/java/com/xkcoding/multi/datasource/jpa/entity/primary/PrimaryMultiTable.java
class PrimaryMultiTable (line 20) | @Data
FILE: demo-multi-datasource-jpa/src/main/java/com/xkcoding/multi/datasource/jpa/entity/second/SecondMultiTable.java
class SecondMultiTable (line 20) | @Data
FILE: demo-multi-datasource-jpa/src/main/java/com/xkcoding/multi/datasource/jpa/repository/primary/PrimaryMultiTableRepository.java
type PrimaryMultiTableRepository (line 15) | @Repository
FILE: demo-multi-datasource-jpa/src/main/java/com/xkcoding/multi/datasource/jpa/repository/second/SecondMultiTableRepository.java
type SecondMultiTableRepository (line 15) | @Repository
FILE: demo-multi-datasource-jpa/src/test/java/com/xkcoding/multi/datasource/jpa/SpringBootDemoMultiDatasourceJpaApplicationTests.java
class SpringBootDemoMultiDatasourceJpaApplicationTests (line 18) | @RunWith(SpringRunner.class)
method testInsert (line 29) | @Test
method testUpdate (line 39) | @Test
method testDelete (line 51) | @Test
method testSelect (line 58) | @Test
FILE: demo-multi-datasource-mybatis/sql/db.sql
type `multi_user` (line 2) | CREATE TABLE `multi_user`(
FILE: demo-multi-datasource-mybatis/src/main/java/com/xkcoding/multi/datasource/mybatis/SpringBootDemoMultiDatasourceMybatisApplication.java
class SpringBootDemoMultiDatasourceMybatisApplication (line 15) | @SpringBootApplication
method main (line 19) | public static void main(String[] args) {
FILE: demo-multi-datasource-mybatis/src/main/java/com/xkcoding/multi/datasource/mybatis/mapper/UserMapper.java
type UserMapper (line 14) | public interface UserMapper extends BaseMapper<User> {
FILE: demo-multi-datasource-mybatis/src/main/java/com/xkcoding/multi/datasource/mybatis/model/User.java
class User (line 21) | @Data
FILE: demo-multi-datasource-mybatis/src/main/java/com/xkcoding/multi/datasource/mybatis/service/UserService.java
type UserService (line 14) | public interface UserService extends IService<User> {
method addUser (line 21) | void addUser(User user);
FILE: demo-multi-datasource-mybatis/src/main/java/com/xkcoding/multi/datasource/mybatis/service/impl/UserServiceImpl.java
class UserServiceImpl (line 18) | @Service
method addUser (line 27) | @DS("master")
FILE: demo-multi-datasource-mybatis/src/test/java/com/xkcoding/multi/datasource/mybatis/SpringBootDemoMultiDatasourceMybatisApplicationTests.java
class SpringBootDemoMultiDatasourceMybatisApplicationTests (line 8) | @RunWith(SpringRunner.class)
method contextLoads (line 12) | @Test
FILE: demo-multi-datasource-mybatis/src/test/java/com/xkcoding/multi/datasource/mybatis/service/impl/UserServiceImplTest.java
class UserServiceImplTest (line 22) | @Slf4j
method addUser (line 30) | @Test
method testListUser (line 42) | @Test
FILE: demo-neo4j/src/main/java/com/xkcoding/neo4j/SpringBootDemoNeo4jApplication.java
class SpringBootDemoNeo4jApplication (line 14) | @SpringBootApplication
method main (line 17) | public static void main(String[] args) {
FILE: demo-neo4j/src/main/java/com/xkcoding/neo4j/config/CustomIdStrategy.java
class CustomIdStrategy (line 14) | public class CustomIdStrategy implements IdStrategy {
method generateId (line 15) | @Override
FILE: demo-neo4j/src/main/java/com/xkcoding/neo4j/constants/NeoConsts.java
type NeoConsts (line 11) | public interface NeoConsts {
FILE: demo-neo4j/src/main/java/com/xkcoding/neo4j/model/Class.java
class Class (line 19) | @Data
FILE: demo-neo4j/src/main/java/com/xkcoding/neo4j/model/Lesson.java
class Lesson (line 19) | @Data
FILE: demo-neo4j/src/main/java/com/xkcoding/neo4j/model/Student.java
class Student (line 21) | @Data
FILE: demo-neo4j/src/main/java/com/xkcoding/neo4j/model/Teacher.java
class Teacher (line 17) | @Data
FILE: demo-neo4j/src/main/java/com/xkcoding/neo4j/payload/ClassmateInfoGroupByLesson.java
class ClassmateInfoGroupByLesson (line 17) | @Data
FILE: demo-neo4j/src/main/java/com/xkcoding/neo4j/payload/TeacherStudent.java
class TeacherStudent (line 17) | @Data
FILE: demo-neo4j/src/main/java/com/xkcoding/neo4j/repository/ClassRepository.java
type ClassRepository (line 16) | public interface ClassRepository extends Neo4jRepository<Class, String> {
method findByName (line 23) | Optional<Class> findByName(String name);
FILE: demo-neo4j/src/main/java/com/xkcoding/neo4j/repository/LessonRepository.java
type LessonRepository (line 14) | public interface LessonRepository extends Neo4jRepository<Lesson, String> {
FILE: demo-neo4j/src/main/java/com/xkcoding/neo4j/repository/StudentRepository.java
type StudentRepository (line 22) | public interface StudentRepository extends Neo4jRepository<Student, Stri...
method findByName (line 30) | Optional<Student> findByName(String name, @Depth int depth);
method countByClassName (line 38) | @Query("MATCH (s:Student)-[r:R_STUDENT_OF_CLASS]->(c:Class{name:{class...
method findByClassmateGroupByLesson (line 47) | @Query("match (s:Student)-[:R_LESSON_OF_STUDENT]->(l:Lesson)<-[:R_LESS...
method findTeacherStudentByClass (line 55) | @Query("match (s:Student)-[:R_STUDENT_OF_CLASS]->(:Class)-[:R_BOSS_OF_...
method findTeacherStudentByLesson (line 63) | @Query("match ((s:Student)-[:R_LESSON_OF_STUDENT]->(:Lesson)-[:R_TEACH...
FILE: demo-neo4j/src/main/java/com/xkcoding/neo4j/repository/TeacherRepository.java
type TeacherRepository (line 14) | public interface TeacherRepository extends Neo4jRepository<Teacher, Stri...
FILE: demo-neo4j/src/main/java/com/xkcoding/neo4j/service/NeoService.java
class NeoService (line 36) | @Service
method initData (line 56) | @Transactional
method delete (line 104) | @Transactional
method findLessonsFromStudent (line 128) | public List<Lesson> findLessonsFromStudent(String studentName, int dep...
method studentCount (line 139) | public Long studentCount(String className) {
method findClassmatesGroupByLesson (line 152) | public Map<String, List<Student>> findClassmatesGroupByLesson() {
method findTeacherStudent (line 166) | public Map<String, Set<Student>> findTeacherStudent() {
FILE: demo-neo4j/src/test/java/com/xkcoding/neo4j/Neo4jTest.java
class Neo4jTest (line 24) | @Slf4j
method testSave (line 32) | @Test
method testDelete (line 40) | @Test
method testFindLessonsByStudent (line 48) | @Test
method testCountStudent (line 60) | @Test
method testFindClassmates (line 71) | @Test
method testFindTeacherStudent (line 80) | @Test
FILE: demo-neo4j/src/test/java/com/xkcoding/neo4j/SpringBootDemoNeo4jApplicationTests.java
class SpringBootDemoNeo4jApplicationTests (line 8) | @RunWith(SpringRunner.class)
method contextLoads (line 12) | @Test
FILE: demo-oauth/oauth-authorization-server/src/main/java/com/xkcoding/oauth/SpringBootDemoOauthApplication.java
class SpringBootDemoOauthApplication (line 14) | @SpringBootApplication
method main (line 17) | public static void main(String[] args) {
FILE: demo-oauth/oauth-authorization-server/src/main/java/com/xkcoding/oauth/config/ClientLoginFailureHandler.java
class ClientLoginFailureHandler (line 20) | @Slf4j
method onAuthenticationFailure (line 23) | @Override
FILE: demo-oauth/oauth-authorization-server/src/main/java/com/xkcoding/oauth/config/ClientLogoutSuccessHandler.java
class ClientLogoutSuccessHandler (line 19) | @Slf4j
method onLogoutSuccess (line 23) | @Override
FILE: demo-oauth/oauth-authorization-server/src/main/java/com/xkcoding/oauth/config/Oauth2AuthorizationServerConfig.java
class Oauth2AuthorizationServerConfig (line 22) | @Configuration
method configure (line 32) | @Override
method configure (line 37) | @Override
method configure (line 43) | @Override
FILE: demo-oauth/oauth-authorization-server/src/main/java/com/xkcoding/oauth/config/Oauth2AuthorizationTokenConfig.java
class Oauth2AuthorizationTokenConfig (line 23) | @Configuration
method tokenStore (line 33) | @Bean
method jwtAccessTokenConverter (line 44) | @Bean
method keyPair (line 57) | @Bean
method passwordEncoder (line 70) | @Bean
FILE: demo-oauth/oauth-authorization-server/src/main/java/com/xkcoding/oauth/config/WebSecurityConfig.java
class WebSecurityConfig (line 17) | @EnableWebSecurity
method configure (line 25) | @Override
method authenticationManagerBean (line 36) | @Override
FILE: demo-oauth/oauth-authorization-server/src/main/java/com/xkcoding/oauth/controller/AuthorizationController.java
class AuthorizationController (line 20) | @Controller
method getAccessConfirmation (line 32) | @GetMapping("/oauth/confirm_access")
FILE: demo-oauth/oauth-authorization-server/src/main/java/com/xkcoding/oauth/controller/Oauth2Controller.java
class Oauth2Controller (line 20) | @Controller
method loginView (line 30) | @GetMapping("/login")
method logoutView (line 42) | @GetMapping("/logout")
FILE: demo-oauth/oauth-authorization-server/src/main/java/com/xkcoding/oauth/entity/SysClientDetails.java
class SysClientDetails (line 23) | @Data
method isSecretRequired (line 90) | @Override
method isScoped (line 100) | @Override
method getScope (line 110) | @Override
method getAuthorizedGrantTypes (line 120) | @Override
method getResourceIds (line 125) | @Override
method getRegisteredRedirectUri (line 136) | @Override
method getAuthorities (line 152) | @Override
method isAutoApprove (line 163) | @Override
method getAdditionalInformation (line 183) | @Override
method stringToSet (line 188) | private Set<String> stringToSet(String s) {
FILE: demo-oauth/oauth-authorization-server/src/main/java/com/xkcoding/oauth/entity/SysRole.java
class SysRole (line 18) | @Data
FILE: demo-oauth/oauth-authorization-server/src/main/java/com/xkcoding/oauth/entity/SysUser.java
class SysUser (line 22) | @Data
FILE: demo-oauth/oauth-authorization-server/src/main/java/com/xkcoding/oauth/repostiory/SysClientDetailsRepository.java
type SysClientDetailsRepository (line 15) | public interface SysClientDetailsRepository extends JpaRepository<SysCli...
method findFirstByClientId (line 23) | Optional<SysClientDetails> findFirstByClientId(String clientId);
method deleteByClientId (line 30) | @Modifying
FILE: demo-oauth/oauth-authorization-server/src/main/java/com/xkcoding/oauth/repostiory/SysUserRepository.java
type SysUserRepository (line 14) | public interface SysUserRepository extends JpaRepository<SysUser, Long> {
method findFirstByUsername (line 22) | Optional<SysUser> findFirstByUsername(String username);
FILE: demo-oauth/oauth-authorization-server/src/main/java/com/xkcoding/oauth/service/SysClientDetailsService.java
type SysClientDetailsService (line 18) | public interface SysClientDetailsService extends ClientDetailsService {
method findByClientId (line 26) | SysClientDetails findByClientId(String clientId);
method addClientDetails (line 34) | void addClientDetails(SysClientDetails clientDetails) throws ClientAlr...
method updateClientDetails (line 42) | void updateClientDetails(SysClientDetails clientDetails) throws NoSuch...
method updateClientSecret (line 51) | void updateClientSecret(String clientId, String clientSecret) throws N...
method removeClientDetails (line 59) | void removeClientDetails(String clientId) throws NoSuchClientException;
method findAll (line 66) | List<SysClientDetails> findAll();
FILE: demo-oauth/oauth-authorization-server/src/main/java/com/xkcoding/oauth/service/SysUserService.java
type SysUserService (line 15) | public interface SysUserService extends UserDetailsService {
method findAll (line 21) | List<SysUser> findAll();
method findById (line 29) | SysUser findById(Long id);
method createUser (line 36) | void createUser(SysUser sysUser);
method updateUser (line 43) | void updateUser(SysUser sysUser);
method updatePassword (line 51) | void updatePassword(Long id, String password);
method deleteUser (line 58) | void deleteUser(Long id);
FILE: demo-oauth/oauth-authorization-server/src/main/java/com/xkcoding/oauth/service/impl/SysClientDetailsServiceImpl.java
class SysClientDetailsServiceImpl (line 22) | @Service
method loadClientByClientId (line 29) | @Override
method findByClientId (line 34) | @Override
method addClientDetails (line 39) | @Override
method updateClientDetails (line 48) | @Override
method updateClientSecret (line 55) | @Override
method removeClientDetails (line 62) | @Override
method findAll (line 67) | @Override
FILE: demo-oauth/oauth-authorization-server/src/main/java/com/xkcoding/oauth/service/impl/SysUserServiceImpl.java
class SysUserServiceImpl (line 23) | @Service
method loadUserByUsername (line 30) | @Override
method findAll (line 38) | @Override
method findById (line 43) | @Override
method createUser (line 48) | @Override
method updateUser (line 54) | @Override
method updatePassword (line 60) | @Override
method deleteUser (line 67) | @Override
FILE: demo-oauth/oauth-authorization-server/src/test/java/com/xkcoding/oauth/PasswordEncodeTest.java
class PasswordEncodeTest (line 13) | public class PasswordEncodeTest {
method getPasswordWhenPassed (line 17) | @Test
FILE: demo-oauth/oauth-authorization-server/src/test/java/com/xkcoding/oauth/oauth/AuthorizationCodeGrantTests.java
class AuthorizationCodeGrantTests (line 31) | public class AuthorizationCodeGrantTests {
method setUp (line 36) | @BeforeEach
method testCannotConnectWithoutToken (line 46) | @Test
method testAttemptedTokenAcquisitionWithNoRedirect (line 52) | @Test
method testCodeAcquisitionWithCorrectContext (line 63) | @Test
FILE: demo-oauth/oauth-authorization-server/src/test/java/com/xkcoding/oauth/oauth/AuthorizationServerInfo.java
class AuthorizationServerInfo (line 21) | @SuppressWarnings("all")
method AuthorizationServerInfo (line 27) | public AuthorizationServerInfo() {
method getForString (line 46) | public ResponseEntity<String> getForString(String path, final HttpHead...
method getForString (line 50) | public ResponseEntity<String> getForString(String path) {
method postForStatus (line 54) | public ResponseEntity<Void> postForStatus(String path, HttpHeaders hea...
method getUrl (line 62) | public static String getUrl(String path) {
method postForHeaders (line 66) | public HttpHeaders postForHeaders(String path, MultiValueMap<String, S...
class NullRequestCallback (line 88) | private static final class NullRequestCallback implements RequestCallb...
method doWithRequest (line 89) | public void doWithRequest(ClientHttpRequest request) {
FILE: demo-oauth/oauth-authorization-server/src/test/java/com/xkcoding/oauth/oauth/ResourceOwnerPasswordGrantTests.java
class ResourceOwnerPasswordGrantTests (line 19) | public class ResourceOwnerPasswordGrantTests {
method testConnectDirectlyToResourceServer (line 21) | @Test
method accessToken (line 26) | public static String accessToken() {
FILE: demo-oauth/oauth-authorization-server/src/test/java/com/xkcoding/oauth/repostiory/SysClientDetailsTest.java
class SysClientDetailsTest (line 16) | @DataJpaTest
method autowiredSuccessWhenPassed (line 21) | @Test
FILE: demo-oauth/oauth-authorization-server/src/test/java/com/xkcoding/oauth/repostiory/SysUserRepositoryTest.java
class SysUserRepositoryTest (line 20) | @DataJpaTest
method autowiredSuccessWhenPassed (line 26) | @Test
method queryUserAndRoleWhenPassed (line 31) | @Test
FILE: demo-oauth/oauth-authorization-server/src/test/resources/schema.sql
type sys_client_details (line 1) | create table sys_client_details
type sys_role (line 16) | create table sys_role
type sys_user (line 23) | create table sys_user
type sys_user_role (line 30) | create table sys_user_role
FILE: demo-oauth/oauth-resource-server/src/main/java/com/xkcoding/oauth/SpringBootDemoResourceApplication.java
class SpringBootDemoResourceApplication (line 14) | @EnableResourceServer
method main (line 17) | public static void main(String[] args) {
FILE: demo-oauth/oauth-resource-server/src/main/java/com/xkcoding/oauth/config/OauthResourceServerConfig.java
class OauthResourceServerConfig (line 20) | @Configuration
method configure (line 29) | @Override
method configure (line 34) | @Override
FILE: demo-oauth/oauth-resource-server/src/main/java/com/xkcoding/oauth/config/OauthResourceTokenConfig.java
class OauthResourceTokenConfig (line 27) | @Slf4j
method tokenStore (line 40) | @Bean
method jwtAccessTokenConverter (line 50) | @Bean
method getPubKey (line 63) | private String getPubKey() {
method getKeyFromAuthorizationServer (line 74) | private String getKeyFromAuthorizationServer() {
method encodeClient (line 95) | private String encodeClient() {
FILE: demo-oauth/oauth-resource-server/src/main/java/com/xkcoding/oauth/controller/TestController.java
class TestController (line 13) | @RestController
method admin (line 21) | @PreAuthorize("hasRole('ADMIN')")
method test (line 32) | @PreAuthorize("hasRole('TEST')")
method read (line 43) | @PreAuthorize("#oauth2.hasScope('READ')")
method write (line 54) | @PreAuthorize("#oauth2.hasScope('WRITE')")
FILE: demo-oauth/oauth-resource-server/src/test/java/com/xkcoding/oauth/AuthorizationTest.java
class AuthorizationTest (line 18) | public class AuthorizationTest {
method oauth2RestTemplate (line 21) | protected OAuth2RestTemplate oauth2RestTemplate(String username, Strin...
method testAccessTokenWhenPassed (line 33) | @Test
FILE: demo-oauth/oauth-resource-server/src/test/java/com/xkcoding/oauth/controller/TestControllerTest.java
class TestControllerTest (line 24) | public class TestControllerTest extends AuthorizationTest {
method testAdminRoleSucceedAndTestRoleFailedWhenPassed (line 28) | @Test
method testTestRoleSucceedWhenPassed (line 38) | @Test
method testScopeReadWhenPassed (line 48) | @Test
method testScopeWriteWhenPassed (line 58) | @Test
method testScopeWhenPassed (line 68) | @Test
FILE: demo-orm-beetlsql/src/main/java/com/xkcoding/orm/beetlsql/SpringBootDemoOrmBeetlsqlApplication.java
class SpringBootDemoOrmBeetlsqlApplication (line 14) | @SpringBootApplication
method main (line 17) | public static void main(String[] args) {
FILE: demo-orm-beetlsql/src/main/java/com/xkcoding/orm/beetlsql/config/BeetlConfig.java
class BeetlConfig (line 18) | @Configuration
method getDataSource (line 24) | @Bean(name = "datasource")
FILE: demo-orm-beetlsql/src/main/java/com/xkcoding/orm/beetlsql/dao/UserDao.java
type UserDao (line 15) | @Component
FILE: demo-orm-beetlsql/src/main/java/com/xkcoding/orm/beetlsql/entity/User.java
class User (line 20) | @Data
FILE: demo-orm-beetlsql/src/main/java/com/xkcoding/orm/beetlsql/service/UserService.java
type UserService (line 16) | public interface UserService {
method saveUser (line 23) | User saveUser(User user);
method saveUserList (line 31) | void saveUserList(List<User> users);
method deleteUser (line 38) | void deleteUser(Long id);
method updateUser (line 46) | User updateUser(User user);
method getUser (line 54) | User getUser(Long id);
method getUserList (line 61) | List<User> getUserList();
method getUserByPage (line 70) | PageQuery<User> getUserByPage(Integer currentPage, Integer pageSize);
FILE: demo-orm-beetlsql/src/main/java/com/xkcoding/orm/beetlsql/service/impl/UserServiceImpl.java
class UserServiceImpl (line 22) | @Service
method UserServiceImpl (line 28) | @Autowired
method saveUser (line 38) | @Override
method saveUserList (line 49) | @Override
method deleteUser (line 59) | @Override
method updateUser (line 70) | @Override
method getUser (line 85) | @Override
method getUserList (line 95) | @Override
method getUserByPage (line 107) | @Override
FILE: demo-orm-beetlsql/src/main/resources/db/schema.sql
type `orm_user` (line 2) | CREATE TABLE `orm_user` (
FILE: demo-orm-beetlsql/src/test/java/com/xkcoding/orm/beetlsql/SpringBootDemoOrmBeetlsqlApplicationTests.java
class SpringBootDemoOrmBeetlsqlApplicationTests (line 8) | @RunWith(SpringRunner.class)
method contextLoads (line 12) | @Test
FILE: demo-orm-beetlsql/src/test/java/com/xkcoding/orm/beetlsql/service/UserServiceTest.java
class UserServiceTest (line 28) | @Slf4j
method saveUser (line 33) | @Test
method saveUserList (line 43) | @Test
method deleteUser (line 55) | @Test
method updateUser (line 62) | @Test
method getUser (line 71) | @Test
method getUserList (line 78) | @Test
method getUserByPage (line 85) | @Test
FILE: demo-orm-jdbctemplate/src/main/java/com/xkcoding/orm/jdbctemplate/SpringBootDemoOrmJdbctemplateApplication.java
class SpringBootDemoOrmJdbctemplateApplication (line 14) | @SpringBootApplication
method main (line 17) | public static void main(String[] args) {
FILE: demo-orm-jdbctemplate/src/main/java/com/xkcoding/orm/jdbctemplate/constant/Const.java
type Const (line 11) | public interface Const {
FILE: demo-orm-jdbctemplate/src/main/java/com/xkcoding/orm/jdbctemplate/controller/UserController.java
class UserController (line 20) | @RestController
method UserController (line 25) | @Autowired
method save (line 30) | @PostMapping("/user")
method delete (line 36) | @DeleteMapping("/user/{id}")
method update (line 42) | @PutMapping("/user/{id}")
method getUser (line 48) | @GetMapping("/user/{id}")
method getUser (line 54) | @GetMapping("/user")
FILE: demo-orm-jdbctemplate/src/main/java/com/xkcoding/orm/jdbctemplate/dao/UserDao.java
class UserDao (line 19) | @Repository
method UserDao (line 22) | @Autowired
method insert (line 33) | public Integer insert(User user) {
method delete (line 43) | public Integer delete(Long id) {
method update (line 54) | public Integer update(User user, Long id) {
method selectById (line 64) | public User selectById(Long id) {
method selectUserList (line 74) | public List<User> selectUserList(User user) {
FILE: demo-orm-jdbctemplate/src/main/java/com/xkcoding/orm/jdbctemplate/dao/base/BaseDao.java
class BaseDao (line 36) | @Slf4j
method BaseDao (line 41) | @SuppressWarnings(value = "unchecked")
method insert (line 54) | protected Integer insert(T t, Boolean ignoreNull) {
method deleteById (line 81) | protected Integer deleteById(P pk) {
method updateById (line 97) | protected Integer updateById(T t, P pk, Boolean ignoreNull) {
method findOneById (line 125) | public T findOneById(P pk) {
method findByExample (line 140) | public List<T> findByExample(T t) {
method getTableName (line 166) | private String getTableName(T t) {
method getTableName (line 180) | private String getTableName() {
method getColumns (line 195) | private List<String> getColumns(List<Field> fieldList) {
method getField (line 218) | private List<Field> getField(T t, Boolean ignoreNull) {
FILE: demo-orm-jdbctemplate/src/main/java/com/xkcoding/orm/jdbctemplate/entity/User.java
class User (line 19) | @Data
FILE: demo-orm-jdbctemplate/src/main/java/com/xkcoding/orm/jdbctemplate/service/IUserService.java
type IUserService (line 15) | public interface IUserService {
method save (line 22) | Boolean save(User user);
method delete (line 30) | Boolean delete(Long id);
method update (line 39) | Boolean update(User user, Long id);
method getUser (line 47) | User getUser(Long id);
method getUser (line 55) | List<User> getUser(User user);
FILE: demo-orm-jdbctemplate/src/main/java/com/xkcoding/orm/jdbctemplate/service/impl/UserServiceImpl.java
class UserServiceImpl (line 26) | @Service
method UserServiceImpl (line 30) | @Autowired
method save (line 41) | @Override
method delete (line 57) | @Override
method update (line 69) | @Override
method getUser (line 90) | @Override
method getUser (line 101) | @Override
FILE: demo-orm-jdbctemplate/src/main/resources/db/schema.sql
type `orm_user` (line 2) | CREATE TABLE `orm_user` (
FILE: demo-orm-jdbctemplate/src/test/java/com/xkcoding/orm/jdbctemplate/SpringBootDemoOrmJdbctemplateApplicationTests.java
class SpringBootDemoOrmJdbctemplateApplicationTests (line 8) | @RunWith(SpringRunner.class)
method contextLoads (line 12) | @Test
FILE: demo-orm-jpa/src/main/java/com/xkcoding/orm/jpa/SpringBootDemoOrmJpaApplication.java
class SpringBootDemoOrmJpaApplication (line 14) | @SpringBootApplication
method main (line 17) | public static void main(String[] args) {
FILE: demo-orm-jpa/src/main/java/com/xkcoding/orm/jpa/config/JpaConfig.java
class JpaConfig (line 26) | @Configuration
method dataSource (line 31) | @Bean
method entityManagerFactory (line 37) | @Bean
method jpaTransactionManager (line 48) | @Bean
FILE: demo-orm-jpa/src/main/java/com/xkcoding/orm/jpa/entity/Department.java
class Department (line 17) | @EqualsAndHashCode(callSuper = true)
FILE: demo-orm-jpa/src/main/java/com/xkcoding/orm/jpa/entity/User.java
class User (line 18) | @EqualsAndHashCode(callSuper = true)
FILE: demo-orm-jpa/src/main/java/com/xkcoding/orm/jpa/entity/base/AbstractAuditModel.java
class AbstractAuditModel (line 20) | @MappedSuperclass
FILE: demo-orm-jpa/src/main/java/com/xkcoding/orm/jpa/repository/DepartmentDao.java
type DepartmentDao (line 18) | @Repository
method findDepartmentsByLevels (line 26) | List<Department> findDepartmentsByLevels(Integer level);
FILE: demo-orm-jpa/src/main/java/com/xkcoding/orm/jpa/repository/UserDao.java
type UserDao (line 15) | @Repository
FILE: demo-orm-jpa/src/main/resources/db/schema.sql
type `orm_user` (line 2) | CREATE TABLE `orm_user` (
type `orm_department` (line 17) | CREATE TABLE `orm_department` (
type `orm_user_dept` (line 28) | CREATE TABLE `orm_user_dept` (
FILE: demo-orm-jpa/src/test/java/com/xkcoding/orm/jpa/SpringBootDemoOrmJpaApplicationTests.java
class SpringBootDemoOrmJpaApplicationTests (line 8) | @RunWith(SpringRunner.class)
method contextLoads (line 12) | @Test
FILE: demo-orm-jpa/src/test/java/com/xkcoding/orm/jpa/repository/DepartmentDaoTest.java
class DepartmentDaoTest (line 24) | @Slf4j
method testSave (line 34) | @Test
FILE: demo-orm-jpa/src/test/java/com/xkcoding/orm/jpa/repository/UserDaoTest.java
class UserDaoTest (line 29) | @Slf4j
method testSave (line 37) | @Test
method testDelete (line 52) | @Test
method testUpdate (line 63) | @Test
method testQueryOne (line 75) | @Test
method testQueryAll (line 85) | @Test
method testQueryPage (line 95) | @Test
method initData (line 114) | private void initData() {
FILE: demo-orm-mybatis-mapper-page/src/main/java/com/xkcoding/orm/mybatis/MapperAndPage/SpringBootDemoOrmMybatisMapperPageApplication.java
class SpringBootDemoOrmMybatisMapperPageApplication (line 15) | @SpringBootApplication
method main (line 19) | public static void main(String[] args) {
FILE: demo-orm-mybatis-mapper-page/src/main/java/com/xkcoding/orm/mybatis/MapperAndPage/entity/User.java
class User (line 22) | @Data
FILE: demo-orm-mybatis-mapper-page/src/main/java/com/xkcoding/orm/mybatis/MapperAndPage/mapper/UserMapper.java
type UserMapper (line 16) | @Component
FILE: demo-orm-mybatis-mapper-page/src/main/resources/db/schema.sql
type `orm_user` (line 2) | CREATE TABLE `orm_user` (
FILE: demo-orm-mybatis-mapper-page/src/test/java/com/xkcoding/orm/mybatis/MapperAndPage/SpringBootDemoOrmMybatisMapperPageApplicationTests.java
class SpringBootDemoOrmMybatisMapperPageApplicationTests (line 8) | @RunWith(SpringRunner.class)
method contextLoads (line 12) | @Test
FILE: demo-orm-mybatis-mapper-page/src/test/java/com/xkcoding/orm/mybatis/MapperAndPage/mapper/UserMapperTest.java
class UserMapperTest (line 29) | @Slf4j
method testInsert (line 38) | @Test
method testInsertList (line 50) | @Test
method testDelete (line 67) | @Test
method testUpdate (line 79) | @Test
method testQueryOne (line 95) | @Test
method testQueryAll (line 105) | @Test
method testQueryByPageAndSort (line 115) | @Test
method testQueryByCondition (line 133) | @Test
method initData (line 155) | private void initData() {
FILE: demo-orm-mybatis-plus/src/main/java/com/xkcoding/orm/mybatis/plus/SpringBootDemoOrmMybatisPlusApplication.java
class SpringBootDemoOrmMybatisPlusApplication (line 14) | @SpringBootApplication
method main (line 17) | public static void main(String[] args) {
FILE: demo-orm-mybatis-plus/src/main/java/com/xkcoding/orm/mybatis/plus/config/CommonFieldHandler.java
class CommonFieldHandler (line 18) | @Slf4j
method insertFill (line 22) | @Override
method updateFill (line 29) | @Override
FILE: demo-orm-mybatis-plus/src/main/java/com/xkcoding/orm/mybatis/plus/config/MybatisPlusConfig.java
class MybatisPlusConfig (line 18) | @Configuration
method performanceInterceptor (line 25) | @Bean
method paginationInterceptor (line 33) | @Bean
FILE: demo-orm-mybatis-plus/src/main/java/com/xkcoding/orm/mybatis/plus/entity/Role.java
class Role (line 19) | @Data
method pkVal (line 38) | @Override
FILE: demo-orm-mybatis-plus/src/main/java/com/xkcoding/orm/mybatis/plus/entity/User.java
class User (line 24) | @Data
FILE: demo-orm-mybatis-plus/src/main/java/com/xkcoding/orm/mybatis/plus/mapper/RoleMapper.java
type RoleMapper (line 14) | public interface RoleMapper extends BaseMapper<Role> {
FILE: demo-orm-mybatis-plus/src/main/java/com/xkcoding/orm/mybatis/plus/mapper/UserMapper.java
type UserMapper (line 15) | @Component
FILE: demo-orm-mybatis-plus/src/main/java/com/xkcoding/orm/mybatis/plus/service/UserService.java
type UserService (line 14) | public interface UserService extends IService<User> {
FILE: demo-orm-mybatis-plus/src/main/java/com/xkcoding/orm/mybatis/plus/service/impl/UserServiceImpl.java
class UserServiceImpl (line 17) | @Service
FILE: demo-orm-mybatis-plus/src/main/resources/db/schema.sql
type `orm_user` (line 2) | CREATE TABLE `orm_user` (
type `orm_role` (line 16) | CREATE TABLE `orm_role` (
FILE: demo-orm-mybatis-plus/src/test/java/com/xkcoding/orm/mybatis/plus/SpringBootDemoOrmMybatisPlusApplicationTests.java
class SpringBootDemoOrmMybatisPlusApplicationTests (line 8) | @RunWith(SpringRunner.class)
method contextLoads (line 12) | @Test
FILE: demo-orm-mybatis-plus/src/test/java/com/xkcoding/orm/mybatis/plus/activerecord/ActiveRecordTest.java
class ActiveRecordTest (line 21) | @Slf4j
method testActiveRecordInsert (line 26) | @Test
method testActiveRecordUpdate (line 38) | @Test
method testActiveRecordSelect (line 47) | @Test
method testActiveRecordDelete (line 60) | @Test
FILE: demo-orm-mybatis-plus/src/test/java/com/xkcoding/orm/mybatis/plus/service/UserServiceTest.java
class UserServiceTest (line 29) | @Slf4j
method testSave (line 37) | @Test
method testSaveList (line 49) | @Test
method testDelete (line 66) | @Test
method testUpdate (line 77) | @Test
method testQueryOne (line 92) | @Test
method testQueryAll (line 102) | @Test
method testQueryByPageAndSort (line 112) | @Test
method testQueryByCondition (line 127) | @Test
method initData (line 143) | private void initData() {
FILE: demo-orm-mybatis/src/main/java/com/xkcoding/orm/mybatis/SpringBootDemoOrmMybatisApplication.java
class SpringBootDemoOrmMybatisApplication (line 15) | @MapperScan(basePackages = {"com.xkcoding.orm.mybatis.mapper"})
method main (line 19) | public static void main(String[] args) {
FILE: demo-orm-mybatis/src/main/java/com/xkcoding/orm/mybatis/entity/User.java
class User (line 19) | @Data
FILE: demo-orm-mybatis/src/main/java/com/xkcoding/orm/mybatis/mapper/UserMapper.java
type UserMapper (line 19) | @Mapper
method selectAllUser (line 28) | @Select("SELECT * FROM orm_user")
method selectUserById (line 37) | @Select("SELECT * FROM orm_user WHERE id = #{id}")
method saveUser (line 46) | int saveUser(@Param("user") User user);
method deleteById (line 54) | int deleteById(@Param("id") Long id);
FILE: demo-orm-mybatis/src/main/resources/db/schema.sql
type `orm_user` (line 2) | CREATE TABLE `orm_user` (
FILE: demo-orm-mybatis/src/test/java/com/xkcoding/orm/mybatis/SpringBootDemoOrmMybatisApplicationTests.java
class SpringBootDemoOrmMybatisApplicationTests (line 8) | @RunWith(SpringRunner.class)
method contextLoads (line 12) | @Test
FILE: demo-orm-mybatis/src/test/java/com/xkcoding/orm/mybatis/mapper/UserMapperTest.java
class UserMapperTest (line 24) | @Slf4j
method selectAllUser (line 32) | @Test
method selectUserById (line 42) | @Test
method saveUser (line 52) | @Test
method deleteById (line 63) | @Test
FILE: demo-pay/src/main/java/com/xkcoding/pay/SpringBootDemoPayApplication.java
class SpringBootDemoPayApplication (line 15) | @SpringBootApplication
method main (line 19) | public static void main(String[] args) {
FILE: demo-pay/src/test/java/com/xkcoding/pay/SpringBootDemoPayApplicationTests.java
class SpringBootDemoPayApplicationTests (line 8) | @RunWith(SpringRunner.class)
method contextLoads (line 12) | @Test
FILE: demo-properties/src/main/java/com/xkcoding/properties/SpringBootDemoPropertiesApplication.java
class SpringBootDemoPropertiesApplication (line 14) | @SpringBootApplication
method main (line 17) | public static void main(String[] args) {
FILE: demo-properties/src/main/java/com/xkcoding/properties/controller/PropertyController.java
class PropertyController (line 18) | @RestController
method PropertyController (line 23) | @Autowired
method index (line 29) | @GetMapping("/property")
FILE: demo-properties/src/main/java/com/xkcoding/properties/property/ApplicationProperty.java
class ApplicationProperty (line 15) | @Data
FILE: demo-properties/src/main/java/com/xkcoding/properties/property/DeveloperProperty.java
class DeveloperProperty (line 15) | @Data
FILE: demo-properties/src/test/java/com/xkcoding/properties/SpringBootDemoPropertiesApplicationTests.java
class SpringBootDemoPropertiesApplicationTests (line 8) | @RunWith(SpringRunner.class)
method contextLoads (line 12) | @Test
FILE: demo-ratelimit-guava/src/main/java/com/xkcoding/ratelimit/guava/SpringBootDemoRatelimitGuavaApplication.java
class SpringBootDemoRatelimitGuavaApplication (line 14) | @SpringBootApplication
method main (line 17) | public static void main(String[] args) {
FILE: demo-ratelimit-guava/src/main/java/com/xkcoding/ratelimit/guava/aspect/RateLimiterAspect.java
class RateLimiterAspect (line 25) | @Slf4j
method rateLimit (line 31) | @Pointcut("@annotation(com.xkcoding.ratelimit.guava.annotation.RateLim...
method pointcut (line 36) | @Around("rateLimit()")
FILE: demo-ratelimit-guava/src/main/java/com/xkcoding/ratelimit/guava/controller/TestController.java
class TestController (line 17) | @Slf4j
method test1 (line 21) | @RateLimiter(value = 1.0, timeout = 300)
method test2 (line 28) | @GetMapping("/test2")
method test3 (line 34) | @RateLimiter(value = 2.0, timeout = 300)
FILE: demo-ratelimit-guava/src/main/java/com/xkcoding/ratelimit/guava/handler/GlobalExceptionHandler.java
class GlobalExceptionHandler (line 15) | @RestControllerAdvice
method handler (line 18) | @ExceptionHandler(RuntimeException.class)
FILE: demo-ratelimit-guava/src/test/java/com/xkcoding/ratelimit/guava/SpringBootDemoRatelimitGuavaApplicationTests.java
class SpringBootDemoRatelimitGuavaApplicationTests (line 8) | @RunWith(SpringRunner.class)
method contextLoads (line 12) | @Test
FILE: demo-ratelimit-redis/src/main/java/com/xkcoding/ratelimit/redis/SpringBootDemoRatelimitRedisApplication.java
class SpringBootDemoRatelimitRedisApplication (line 14) | @SpringBootApplication
method main (line 17) | public static void main(String[] args) {
FILE: demo-ratelimit-redis/src/main/java/com/xkcoding/ratelimit/redis/aspect/RateLimiterAspect.java
class RateLimiterAspect (line 32) | @Slf4j
method rateLimit (line 42) | @Pointcut("@annotation(com.xkcoding.ratelimit.redis.annotation.RateLim...
method pointcut (line 47) | @Around("rateLimit()")
method shouldLimited (line 75) | private boolean shouldLimited(String key, long max, long timeout, Time...
FILE: demo-ratelimit-redis/src/main/java/com/xkcoding/ratelimit/redis/config/RedisConfig.java
class RedisConfig (line 18) | @Configuration
method limitRedisScript (line 20) | @Bean
FILE: demo-ratelimit-redis/src/main/java/com/xkcoding/ratelimit/redis/controller/TestController.java
class TestController (line 17) | @Slf4j
method test1 (line 21) | @RateLimiter(value = 5)
method test2 (line 28) | @GetMapping("/test2")
method test3 (line 34) | @RateLimiter(value = 2, key = "测试自定义key")
FILE: demo-ratelimit-redis/src/main/java/com/xkcoding/ratelimit/redis/handler/GlobalExceptionHandler.java
class GlobalExceptionHandler (line 16) | @Slf4j
method handler (line 20) | @ExceptionHandler(RuntimeException.class)
FILE: demo-ratelimit-redis/src/main/java/com/xkcoding/ratelimit/redis/util/IpUtil.java
class IpUtil (line 18) | @Slf4j
method getIpAddr (line 28) | public static String getIpAddr() {
FILE: demo-ratelimit-redis/src/test/java/com/xkcoding/ratelimit/redis/SpringBootDemoRatelimiterRedisApplicationTests.java
class SpringBootDemoRatelimiterRedisApplicationTests (line 8) | @RunWith(SpringRunner.class)
method contextLoads (line 12) | @Test
FILE: demo-rbac-security/sql/security.sql
type `sec_permission` (line 24) | CREATE TABLE `sec_permission`
type `sec_role` (line 62) | CREATE TABLE `sec_role`
type `sec_role_permission` (line 88) | CREATE TABLE `sec_role_permission`
type `sec_user` (line 122) | CREATE TABLE `sec_user`
type `sec_user_role` (line 158) | CREATE TABLE `sec_user_role`
FILE: demo-rbac-security/src/main/java/com/xkcoding/rbac/security/SpringBootDemoRbacSecurityApplication.java
class SpringBootDemoRbacSecurityApplication (line 14) | @SpringBootApplication
method main (line 17) | public static void main(String[] args) {
FILE: demo-rbac-security/src/main/java/com/xkcoding/rbac/security/common/ApiResponse.java
class ApiResponse (line 15) | @Data
method ApiResponse (line 37) | private ApiResponse() {
method ApiResponse (line 48) | private ApiResponse(Integer code, String message, Object data) {
method of (line 62) | public static ApiResponse of(Integer code, String message, Object data) {
method ofSuccess (line 71) | public static ApiResponse ofSuccess() {
method ofSuccess (line 81) | public static ApiResponse ofSuccess(Object data) {
method ofMessage (line 91) | public static ApiResponse ofMessage(String message) {
method ofStatus (line 101) | public static ApiResponse ofStatus(Status status) {
method ofStatus (line 112) | public static ApiResponse ofStatus(IStatus status, Object data) {
method ofException (line 123) | public static <T extends BaseException> ApiResponse ofException(T t) {
FILE: demo-rbac-security/src/main/java/com/xkcoding/rbac/security/common/BaseException.java
class BaseException (line 14) | @EqualsAndHashCode(callSuper = true)
method BaseException (line 21) | public BaseException(Status status) {
method BaseException (line 27) | public BaseException(Status status, Object data) {
method BaseException (line 32) | public BaseException(Integer code, String message) {
method BaseException (line 38) | public BaseException(Integer code, String message, Object data) {
FILE: demo-rbac-security/src/main/java/com/xkcoding/rbac/security/common/Consts.java
type Consts (line 11) | public interface Consts {
FILE: demo-rbac-security/src/main/java/com/xkcoding/rbac/security/common/IStatus.java
type IStatus (line 11) | public interface IStatus {
method getCode (line 18) | Integer getCode();
method getMessage (line 25) | String getMessage();
FILE: demo-rbac-security/src/main/java/com/xkcoding/rbac/security/common/PageResult.java
class PageResult (line 18) | @Data
method of (line 34) | public static <T> PageResult of(List<T> rows, Long total) {
FILE: demo-rbac-security/src/main/java/com/xkcoding/rbac/security/common/Status.java
type Status (line 13) | @Getter
method Status (line 105) | Status(Integer code, String message) {
method fromCode (line 110) | public static Status fromCode(Integer code) {
method toString (line 120) | @Override
FILE: demo-rbac-security/src/main/java/com/xkcoding/rbac/security/config/CustomConfig.java
class CustomConfig (line 14) | @ConfigurationProperties(prefix = "custom.config")
FILE: demo-rbac-security/src/main/java/com/xkcoding/rbac/security/config/IdConfig.java
class IdConfig (line 16) | @Configuration
method snowflake (line 21) | @Bean
FILE: demo-rbac-security/src/main/java/com/xkcoding/rbac/security/config/IgnoreConfig.java
class IgnoreConfig (line 16) | @Data
FILE: demo-rbac-security/src/main/java/com/xkcoding/rbac/security/config/JwtAuthenticationFilter.java
class JwtAuthenticationFilter (line 38) | @Component
method doFilterInternal (line 50) | @Override
method checkIgnores (line 85) | private boolean checkIgnores(HttpServletRequest request) {
FILE: demo-rbac-security/src/main/java/com/xkcoding/rbac/security/config/JwtConfig.java
class JwtConfig (line 14) | @ConfigurationProperties(prefix = "jwt.config")
FILE: demo-rbac-security/src/main/java/com/xkcoding/rbac/security/config/RbacAuthorityService.java
class RbacAuthorityService (line 39) | @Component
method hasPermission (line 50) | public boolean hasPermission(HttpServletRequest request, Authenticatio...
method checkRequest (line 92) | private void checkRequest(HttpServletRequest request) {
method allUrlMapping (line 120) | private Multimap<String, String> allUrlMapping() {
FILE: demo-rbac-security/src/main/java/com/xkcoding/rbac/security/config/RedisConfig.java
class RedisConfig (line 23) | @Configuration
method redisCacheTemplate (line 31) | @Bean
FILE: demo-rbac-security/src/main/java/com/xkcoding/rbac/security/config/SecurityConfig.java
class SecurityConfig (line 28) | @Configuration
method encoder (line 44) | @Bean
method authenticationManagerBean (line 49) | @Override
method configure (line 55) | @Override
method configure (line 60) | @Override
method configure (line 100) | @Override
FILE: demo-rbac-security/src/main/java/com/xkcoding/rbac/security/config/SecurityHandlerConfig.java
class SecurityHandlerConfig (line 17) | @Configuration
method accessDeniedHandler (line 20) | @Bean
FILE: demo-rbac-security/src/main/java/com/xkcoding/rbac/security/config/WebMvcConfig.java
class WebMvcConfig (line 15) | @Configuration
method addCorsMappings (line 20) | @Override
FILE: demo-rbac-security/src/main/java/com/xkcoding/rbac/security/controller/AuthController.java
class AuthController (line 31) | @Slf4j
method login (line 45) | @PostMapping("/login")
method logout (line 55) | @PostMapping("/logout")
FILE: demo-rbac-security/src/main/java/com/xkcoding/rbac/security/controller/MonitorController.java
class MonitorController (line 27) | @Slf4j
method onlineUser (line 39) | @GetMapping("/online/user")
method kickoutOnlineUser (line 51) | @DeleteMapping("/online/user/kickout")
FILE: demo-rbac-security/src/main/java/com/xkcoding/rbac/security/controller/TestController.java
class TestController (line 15) | @Slf4j
method list (line 19) | @GetMapping
method add (line 25) | @PostMapping
method update (line 31) | @PutMapping("/{id}")
FILE: demo-rbac-security/src/main/java/com/xkcoding/rbac/security/exception/SecurityException.java
class SecurityException (line 16) | @EqualsAndHashCode(callSuper = true)
method SecurityException (line 19) | public SecurityException(Status status) {
method SecurityException (line 23) | public SecurityException(Status status, Object data) {
method SecurityException (line 27) | public SecurityException(Integer code, String message) {
method SecurityException (line 31) | public SecurityException(Integer code, String message, Object data) {
FILE: demo-rbac-security/src/main/java/com/xkcoding/rbac/security/exception/handler/GlobalExceptionHandler.java
class GlobalExceptionHandler (line 30) | @ControllerAdvice
method handlerException (line 34) | @ExceptionHandler(value = Exception.class)
FILE: demo-rbac-security/src/main/java/com/xkcoding/rbac/security/model/Permission.java
class Permission (line 18) | @Data
FILE: demo-rbac-security/src/main/java/com/xkcoding/rbac/security/model/Role.java
class Role (line 18) | @Data
FILE: demo-rbac-security/src/main/java/com/xkcoding/rbac/security/model/RolePermission.java
class RolePermission (line 18) | @Data
FILE: demo-rbac-security/src/main/java/com/xkcoding/rbac/security/model/User.java
class User (line 18) | @Data
FILE: demo-rbac-security/src/main/java/com/xkcoding/rbac/security/model/UserRole.java
class UserRole (line 18) | @Data
FILE: demo-rbac-security/src/main/java/com/xkcoding/rbac/security/model/unionkey/RolePermissionKey.java
class RolePermissionKey (line 17) | @Data
FILE: demo-rbac-security/src/main/java/com/xkcoding/rbac/security/model/unionkey/UserRoleKey.java
class UserRoleKey (line 17) | @Embeddable
FILE: demo-rbac-security/src/main/java/com/xkcoding/rbac/security/payload/LoginRequest.java
class LoginRequest (line 15) | @Data
FILE: demo-rbac-security/src/main/java/com/xkcoding/rbac/security/payload/PageCondition.java
class PageCondition (line 13) | @Data
FILE: demo-rbac-security/src/main/java/com/xkcoding/rbac/security/repository/PermissionDao.java
type PermissionDao (line 19) | public interface PermissionDao extends JpaRepository<Permission, Long>, ...
method selectByRoleIdList (line 27) | @Query(value = "SELECT DISTINCT sec_permission.* FROM sec_permission,s...
FILE: demo-rbac-security/src/main/java/com/xkcoding/rbac/security/repository/RoleDao.java
type RoleDao (line 19) | public interface RoleDao extends JpaRepository<Role, Long>, JpaSpecifica...
method selectByUserId (line 26) | @Query(value = "SELECT sec_role.* FROM sec_role,sec_user,sec_user_role...
FILE: demo-rbac-security/src/main/java/com/xkcoding/rbac/security/repository/RolePermissionDao.java
type RolePermissionDao (line 16) | public interface RolePermissionDao extends JpaRepository<RolePermission,...
FILE: demo-rbac-security/src/main/java/com/xkcoding/rbac/security/repository/UserDao.java
type UserDao (line 18) | public interface UserDao extends JpaRepository<User, Long>, JpaSpecifica...
method findByUsernameOrEmailOrPhone (line 27) | Optional<User> findByUsernameOrEmailOrPhone(String username, String em...
method findByUsernameIn (line 35) | List<User> findByUsernameIn(List<String> usernameList);
FILE: demo-rbac-security/src/main/java/com/xkcoding/rbac/security/repository/UserRoleDao.java
type UserRoleDao (line 16) | public interface UserRoleDao extends JpaRepository<UserRole, UserRoleKey...
FILE: demo-rbac-security/src/main/java/com/xkcoding/rbac/security/service/CustomUserDetailsService.java
class CustomUserDetailsService (line 27) | @Service
method loadUserByUsername (line 38) | @Override
FILE: demo-rbac-security/src/main/java/com/xkcoding/rbac/security/service/MonitorService.java
class MonitorService (line 28) | @Slf4j
method onlineUser (line 43) | public PageResult<OnlineUser> onlineUser(PageCondition pageCondition) {
method kickout (line 65) | public void kickout(List<String> names) {
FILE: demo-rbac-security/src/main/java/com/xkcoding/rbac/security/util/JwtUtil.java
class JwtUtil (line 34) | @EnableConfigurationProperties(JwtConfig.class)
method createJWT (line 54) | public String createJWT(Boolean rememberMe, Long id, String subject, L...
method createJWT (line 77) | public String createJWT(Authentication authentication, Boolean remembe...
method parseJWT (line 88) | public Claims parseJWT(String jwt) {
method invalidateJWT (line 130) | public void invalidateJWT(HttpServletRequest request) {
method getUsernameFromJWT (line 143) | public String getUsernameFromJWT(String jwt) {
method getJwtFromRequest (line 154) | public String getJwtFromRequest(HttpServletRequest request) {
FILE: demo-rbac-security/src/main/java/com/xkcoding/rbac/security/util/PageUtil.java
class PageUtil (line 17) | public class PageUtil {
method checkPageCondition (line 25) | public static <T extends PageCondition> void checkPageCondition(T cond...
method ofPageRequest (line 45) | public static <T extends PageCondition> PageRequest ofPageRequest(T co...
FILE: demo-rbac-security/src/main/java/com/xkcoding/rbac/security/util/RedisUtil.java
class RedisUtil (line 26) | @Component
method findKeysForPage (line 40) | public PageResult<String> findKeysForPage(String patternKey, int curre...
method delete (line 74) | public void delete(String key) {
method delete (line 83) | public void delete(Collection<String> keys) {
FILE: demo-rbac-security/src/main/java/com/xkcoding/rbac/security/util/ResponseUtil.java
class ResponseUtil (line 21) | @Slf4j
method renderJson (line 31) | public static void renderJson(HttpServletResponse response, IStatus st...
method renderJson (line 52) | public static void renderJson(HttpServletResponse response, BaseExcept...
FILE: demo-rbac-security/src/main/java/com/xkcoding/rbac/security/util/SecurityUtil.java
class SecurityUtil (line 17) | public class SecurityUtil {
method getCurrentUsername (line 23) | public static String getCurrentUsername() {
method getCurrentUser (line 33) | public static UserPrincipal getCurrentUser() {
FILE: demo-rbac-security/src/main/java/com/xkcoding/rbac/security/vo/JwtResponse.java
class JwtResponse (line 15) | @Data
method JwtResponse (line 28) | public JwtResponse(String token) {
FILE: demo-rbac-security/src/main/java/com/xkcoding/rbac/security/vo/OnlineUser.java
class OnlineUser (line 17) | @Data
method create (line 55) | public static OnlineUser create(User user) {
FILE: demo-rbac-security/src/main/java/com/xkcoding/rbac/security/vo/UserPrincipal.java
class UserPrincipal (line 29) | @Data
method create (line 99) | public static UserPrincipal create(User user, List<Role> roles, List<P...
method getAuthorities (line 107) | @Override
method getPassword (line 112) | @Override
method getUsername (line 117) | @Override
method isAccountNonExpired (line 122) | @Override
method isAccountNonLocked (line 127) | @Override
method isCredentialsNonExpired (line 132) | @Override
method isEnabled (line 137) | @Override
FILE: demo-rbac-security/src/test/java/com/xkcoding/rbac/security/SpringBootDemoRbacSecurityApplicationTests.java
class SpringBootDemoRbacSecurityApplicationTests (line 8) | @RunWith(SpringRunner.class)
method contextLoads (line 12) | @Test
FILE: demo-rbac-security/src/test/java/com/xkcoding/rbac/security/repository/DataInitTest.java
class DataInitTest (line 22) | public class DataInitTest extends SpringBootDemoRbacSecurityApplicationT...
method initTest (line 44) | @Test
method init (line 49) | private void init() {
method createRolePermissionRelation (line 79) | private void createRolePermissionRelation(Long roleId, Long permission...
method createPermission (line 88) | private Permission createPermission(String url, String name, Integer t...
method createUserRoleRelation (line 102) | private void createUserRoleRelation(Long userId, Long roleId) {
method createRole (line 111) | private Role createRole(boolean isAdmin) {
method createUser (line 122) | private User createUser(boolean isAdmin) {
FILE: demo-rbac-security/src/test/java/com/xkcoding/rbac/security/repository/UserDaoTest.java
class UserDaoTest (line 21) | @Slf4j
method findByUsernameIn (line 26) | @Test
FILE: demo-rbac-security/src/test/java/com/xkcoding/rbac/security/util/RedisUtilTest.java
class RedisUtilTest (line 19) | @Slf4j
method findKeysForPage (line 24) | @Test
FILE: demo-rbac-shiro/sql/shiro.sql
type `shiro_user` (line 24) | CREATE TABLE `shiro_user`
type `shiro_role` (line 49) | CREATE TABLE `shiro_role`
type `shiro_user_role` (line 65) | CREATE TABLE `shiro_user_role`
type `shiro_permission` (line 77) | CREATE TABLE `shiro_permission`
type `shiro_role_permission` (line 95) | CREATE TABLE `shiro_role_permission`
FILE: demo-rbac-shiro/src/main/java/com/xkcoding/rbac/shiro/SpringBootDemoRbacShiroApplication.java
class SpringBootDemoRbacShiroApplication (line 15) | @SpringBootApplication
method main (line 19) | public static void main(String[] args) {
FILE: demo-rbac-shiro/src/main/java/com/xkcoding/rbac/shiro/common/IResultCode.java
type IResultCode (line 11) | public interface IResultCode {
method getCode (line 17) | Integer getCode();
method getMessage (line 24) | String getMessage();
FILE: demo-rbac-shiro/src/main/java/com/xkcoding/rbac/shiro/common/R.java
class R (line 14) | @Data
method R (line 37) | public R(Integer code, String message, boolean status, T data) {
method R (line 44) | public R(IResultCode resultCode, boolean status, T data) {
method R (line 51) | public R(IResultCode resultCode, boolean status) {
method success (line 58) | public static <T> R success() {
method message (line 62) | public static <T> R message(String message) {
method success (line 66) | public static <T> R success(T data) {
method fail (line 70) | public static <T> R fail() {
method fail (line 74) | public static <T> R fail(IResultCode resultCode) {
method fail (line 78) | public static <T> R fail(Integer code, String message) {
method fail (line 82) | public static <T> R fail(IResultCode resultCode, T data) {
method fail (line 86) | public static <T> R fail(Integer code, String message, T data) {
FILE: demo-rbac-shiro/src/main/java/com/xkcoding/rbac/shiro/common/ResultCode.java
type ResultCode (line 13) | @Getter
method ResultCode (line 34) | ResultCode(Integer code, String message) {
FILE: demo-rbac-shiro/src/main/java/com/xkcoding/rbac/shiro/config/MybatisPlusConfig.java
class MybatisPlusConfig (line 21) | @Configuration
method paginationInterceptor (line 24) | @Bean
method performanceInterceptor (line 39) | @Bean
FILE: demo-rbac-shiro/src/main/java/com/xkcoding/rbac/shiro/controller/TestController.java
class TestController (line 16) | @RestController
method test (line 20) | @GetMapping("")
FILE: demo-rbac-shiro/src/test/java/com/xkcoding/rbac/shiro/SpringBootDemoRbacShiroApplicationTests.java
class SpringBootDemoRbacShiroApplicationTests (line 8) | @RunWith(SpringRunner.class)
method contextLoads (line 12) | @Test
FILE: demo-session/src/main/java/com/xkcoding/session/SpringBootDemoSessionApplication.java
class SpringBootDemoSessionApplication (line 14) | @SpringBootApplication
method main (line 17) | public static void main(String[] args) {
FILE: demo-session/src/main/java/com/xkcoding/session/config/WebMvcConfig.java
class WebMvcConfig (line 18) | @Configuration
method addInterceptors (line 23) | @Override
FILE: demo-session/src/main/java/com/xkcoding/session/constants/Consts.java
type Consts (line 11) | public interface Consts {
FILE: demo-session/src/main/java/com/xkcoding/session/controller/PageController.java
class PageController (line 22) | @Controller
method index (line 30) | @GetMapping("/index")
method login (line 45) | @GetMapping("/login")
method doLogin (line 56) | @GetMapping("/doLogin")
FILE: demo-session/src/main/java/com/xkcoding/session/interceptor/SessionInterceptor.java
class SessionInterceptor (line 19) | @Component
method preHandle (line 21) | @Override
FILE: demo-session/src/test/java/com/xkcoding/session/SpringBootDemoSessionApplicationTests.java
class SpringBootDemoSessionApplicationTests (line 8) | @RunWith(SpringRunner.class)
method contextLoads (line 12) | @Test
FILE: demo-sharding-jdbc/sql/schema.sql
type `t_order_0` (line 3) | CREATE TABLE `t_order_0`
type `t_order_1` (line 14) | CREATE TABLE `t_order_1`
type `t_order_2` (line 25) | CREATE TABLE `t_order_2`
type `t_order_0` (line 38) | CREATE TABLE `t_order_0`
type `t_order_1` (line 49) | CREATE TABLE `t_order_1`
type `t_order_2` (line 60) | CREATE TABLE `t_order_2`
FILE: demo-sharding-jdbc/src/main/java/com/xkcoding/sharding/jdbc/SpringBootDemoShardingJdbcApplication.java
class SpringBootDemoShardingJdbcApplication (line 16) | @SpringBootApplication
method main (line 21) | public static void main(String[] args) {
FILE: demo-sharding-jdbc/src/main/java/com/xkcoding/sharding/jdbc/config/CustomSnowflakeKeyGenerator.java
class CustomSnowflakeKeyGenerator (line 14) | public class CustomSnowflakeKeyGenerator implements KeyGenerator {
method CustomSnowflakeKeyGenerator (line 17) | public CustomSnowflakeKeyGenerator(Snowflake snowflake) {
method generateKey (line 21) | @Override
FILE: demo-sharding-jdbc/src/main/java/com/xkcoding/sharding/jdbc/config/DataSourceShardingConfig.java
class DataSourceShardingConfig (line 33) | @Configuration
method transactionManager (line 40) | @Bean
method dataSource (line 45) | @Bean(name = "dataSource")
method orderTableRule (line 64) | private TableRuleConfiguration orderTableRule() {
method dataSourceMap (line 76) | private Map<String, DataSource> dataSourceMap() {
method customKeyGenerator (line 101) | private KeyGenerator customKeyGenerator() {
FILE: demo-sharding-jdbc/src/main/java/com/xkcoding/sharding/jdbc/mapper/OrderMapper.java
type OrderMapper (line 15) | @Component
FILE: demo-sharding-jdbc/src/main/java/com/xkcoding/sharding/jdbc/model/Order.java
class Order (line 17) | @Data
FILE: demo-sharding-jdbc/src/test/java/com/xkcoding/sharding/jdbc/SpringBootDemoShardingJdbcApplicationTests.java
class SpringBootDemoShardingJdbcApplicationTests (line 26) | @Slf4j
method testInsert (line 36) | @Test
method testUpdate (line 49) | @Test
method testDelete (line 59) | @Test
method testSelect (line 67) | @Test
FILE: demo-social/src/main/java/com/xkcoding/social/SpringBootDemoSocialApplication.java
class SpringBootDemoSocialApplication (line 14) | @SpringBootApplication
method main (line 17) | public static void main(String[] args) {
FILE: demo-social/src/main/java/com/xkcoding/social/controller/OauthController.java
class OauthController (line 33) | @Slf4j
method loginType (line 43) | @GetMapping
method renderAuth (line 56) | @RequestMapping("/login/{oauthType}")
method login (line 69) | @RequestMapping("/{oauthType}/callback")
method getAuthSource (line 77) | private AuthSource getAuthSource(String type) {
FILE: demo-social/src/test/java/com/xkcoding/social/SpringBootDemoSocialApplicationTests.java
class SpringBootDemoSocialApplicationTests (line 8) | @RunWith(SpringRunner.class)
method contextLoads (line 12) | @Test
FILE: demo-swagger-beauty/src/main/java/com/xkcoding/swagger/beauty/SpringBootDemoSwaggerBeautyApplication.java
class SpringBootDemoSwaggerBeautyApplication (line 14) | @SpringBootApplication
method main (line 17) | public static void main(String[] args) {
FILE: demo-swagger-beauty/src/main/java/com/xkcoding/swagger/beauty/common/ApiResponse.java
class ApiResponse (line 20) | @Data
FILE: demo-swagger-beauty/src/main/java/com/xkcoding/swagger/beauty/controller/UserController.java
class UserController (line 25) | @RestController
method getByUserName (line 30) | @GetMapping
method get (line 38) | @GetMapping("/{id}")
method delete (line 46) | @DeleteMapping("/{id}")
method post (line 53) | @PostMapping
method multipar (line 60) | @PostMapping("/multipar")
method array (line 68) | @PostMapping("/array")
method put (line 75) | @PutMapping("/{id}")
method file (line 81) | @PostMapping("/{id}/file")
FILE: demo-swagger-beauty/src/main/java/com/xkcoding/swagger/beauty/entity/User.java
class User (line 19) | @Data
FILE: demo-swagger-beauty/src/test/java/com/xkcoding/swagger/beauty/SpringBootDemoSwaggerBeautyApplicationTests.java
class SpringBootDemoSwaggerBeautyApplicationTests (line 8) | @RunWith(SpringRunner.class)
method contextLoads (line 12) | @Test
FILE: demo-swagger/src/main/java/com/xkcoding/swagger/SpringBootDemoSwaggerApplication.java
class SpringBootDemoSwaggerApplication (line 14) | @SpringBootApplication
method main (line 17) | public static void main(String[] args) {
FILE: demo-swagger/src/main/java/com/xkcoding/swagger/common/ApiResponse.java
class ApiResponse (line 20) | @Data
FILE: demo-swagger/src/main/java/com/xkcoding/swagger/common/DataType.java
class DataType (line 11) | public final class DataType {
FILE: demo-swagger/src/main/java/com/xkcoding/swagger/common/ParamType.java
class ParamType (line 11) | public final class ParamType {
FILE: demo-swagger/src/main/java/com/xkcoding/swagger/config/Swagger2Config.java
class Swagger2Config (line 22) | @Configuration
method createRestApi (line 26) | @Bean
method apiInfo (line 31) | private ApiInfo apiInfo() {
FILE: demo-swagger/src/main/java/com/xkcoding/swagger/controller/UserController.java
class UserController (line 25) | @RestController
method getByUserName (line 30) | @GetMapping
method get (line 38) | @GetMapping("/{id}")
method delete (line 46) | @DeleteMapping("/{id}")
method post (line 53) | @PostMapping
method multipar (line 60) | @PostMapping("/multipar")
method array (line 68) | @PostMapping("/array")
method put (line 75) | @PutMapping("/{id}")
method file (line 81) | @PostMapping("/{id}/file")
FILE: demo-swagger/src/main/java/com/xkcoding/swagger/entity/User.java
class User (line 19) | @Data
FILE: demo-swagger/src/test/java/com/xkcoding/swagger/SpringBootDemoSwaggerApplicationTests.java
class SpringBootDemoSwaggerApplicationTests (line 8) | @RunWith(SpringRunner.class)
method contextLoads (line 12) | @Test
FILE: demo-task-quartz/init/dbTables/tables_cloudscape.sql
type qrtz_job_details (line 11) | create table qrtz_job_details (
type qrtz_triggers (line 25) | create table qrtz_triggers(
type qrtz_simple_triggers (line 46) | create table qrtz_simple_triggers(
type qrtz_cron_triggers (line 57) | create table qrtz_cron_triggers(
type qrtz_simprop_triggers (line 67) | CREATE TABLE qrtz_simprop_triggers
type qrtz_blob_triggers (line 88) | create table qrtz_blob_triggers(
type qrtz_calendars (line 97) | create table qrtz_calendars(
type qrtz_paused_trigger_grps (line 104) | create table qrtz_paused_trigger_grps
type qrtz_fired_triggers (line 111) | create table qrtz_fired_triggers(
type qrtz_scheduler_state (line 128) | create table qrtz_scheduler_state
type qrtz_locks (line 137) | create table qrtz_locks
FILE: demo-task-quartz/init/dbTables/tables_cubrid.sql
type QRTZ_JOB_DETAILS (line 22) | CREATE TABLE QRTZ_JOB_DETAILS
type QRTZ_TRIGGERS (line 37) | CREATE TABLE QRTZ_TRIGGERS
type QRTZ_SIMPLE_TRIGGERS (line 60) | CREATE TABLE QRTZ_SIMPLE_TRIGGERS
type QRTZ_CRON_TRIGGERS (line 73) | CREATE TABLE QRTZ_CRON_TRIGGERS
type QRTZ_SIMPROP_TRIGGERS (line 85) | CREATE TABLE QRTZ_SIMPROP_TRIGGERS
type QRTZ_BLOB_TRIGGERS (line 106) | CREATE TABLE QRTZ_BLOB_TRIGGERS
type QRTZ_CALENDARS (line 117) | CREATE TABLE QRTZ_CALENDARS
type QRTZ_PAUSED_TRIGGER_GRPS (line 125) | CREATE TABLE QRTZ_PAUSED_TRIGGER_GRPS
type QRTZ_FIRED_TRIGGERS (line 132) | CREATE TABLE QRTZ_FIRED_TRIGGERS
type QRTZ_SCHEDULER_STATE (line 150) | CREATE TABLE QRTZ_SCHEDULER_STATE
type QRTZ_LOCKS (line 159) | CREATE TABLE QRTZ_LOCKS
type IDX_QRTZ_J_REQ_RECOVERY (line 167) | CREATE INDEX IDX_QRTZ_J_REQ_RECOVERY ON QRTZ_JOB_DETAILS(SCHED_NAME,REQU...
type IDX_QRTZ_J_GRP (line 168) | CREATE INDEX IDX_QRTZ_J_GRP ON QRTZ_JOB_DETAILS(SCHED_NAME,JOB_GROUP)
type IDX_QRTZ_T_JG (line 171) | CREATE INDEX IDX_QRTZ_T_JG ON QRTZ_TRIGGERS(SCHED_NAME,JOB_GROUP)
type IDX_QRTZ_T_C (line 172) | CREATE INDEX IDX_QRTZ_T_C ON QRTZ_TRIGGERS(SCHED_NAME,CALENDAR_NAME)
type IDX_QRTZ_T_G (line 173) | CREATE INDEX IDX_QRTZ_T_G ON QRTZ_TRIGGERS(SCHED_NAME,TRIGGER_GROUP)
type IDX_QRTZ_T_STATE (line 174) | CREATE INDEX IDX_QRTZ_T_STATE ON QRTZ_TRIGGERS(SCHED_NAME,TRIGGER_STATE)
type IDX_QRTZ_T_N_STATE (line 175) | CREATE INDEX IDX_QRTZ_T_N_STATE ON QRTZ_TRIGGERS(SCHED_NAME,TRIGGER_NAME...
type IDX_QRTZ_T_N_G_STATE (line 176) | CREATE INDEX IDX_QRTZ_T_N_G_STATE ON QRTZ_TRIGGERS(SCHED_NAME,TRIGGER_GR...
type IDX_QRTZ_T_NEXT_FIRE_TIME (line 177) | CREATE INDEX IDX_QRTZ_T_NEXT_FIRE_TIME ON QRTZ_TRIGGERS(SCHED_NAME,NEXT_...
type IDX_QRTZ_T_NFT_ST (line 178) | CREATE INDEX IDX_QRTZ_T_NFT_ST ON QRTZ_TRIGGERS(SCHED_NAME,TRIGGER_STATE...
type IDX_QRTZ_T_NFT_MISFIRE (line 179) | CREATE INDEX IDX_QRTZ_T_NFT_MISFIRE ON QRTZ_TRIGGERS(SCHED_NAME,MISFIRE_...
type IDX_QRTZ_T_NFT_ST_MISFIRE (line 180) | CREATE INDEX IDX_QRTZ_T_NFT_ST_MISFIRE ON QRTZ_TRIGGERS(SCHED_NAME,MISFI...
type IDX_QRTZ_T_NFT_ST_MISFIRE_GRP (line 181) | CREATE INDEX IDX_QRTZ_T_NFT_ST_MISFIRE_GRP ON QRTZ_TRIGGERS(SCHED_NAME,M...
type IDX_QRTZ_FT_TRIG_INST_NAME (line 183) | CREATE INDEX IDX_QRTZ_FT_TRIG_INST_NAME ON QRTZ_FIRED_TRIGGERS(SCHED_NAM...
type IDX_QRTZ_FT_INST_JOB_REQ_RCVRY (line 184) | CREATE INDEX IDX_QRTZ_FT_INST_JOB_REQ_RCVRY ON QRTZ_FIRED_TRIGGERS(SCHED...
type IDX_QRTZ_FT_J_G (line 185) | CREATE INDEX IDX_QRTZ_FT_J_G ON QRTZ_FIRED_TRIGGERS(SCHED_NAME,JOB_NAME,...
type IDX_QRTZ_FT_JG (line 186) | CREATE INDEX IDX_QRTZ_FT_JG ON QRTZ_FIRED_TRIGGERS(SCHED_NAME,JOB_GROUP)
type IDX_QRTZ_FT_T_G (line 187) | CREATE INDEX IDX_QRTZ_FT_T_G ON QRTZ_FIRED_TRIGGERS(SCHED_NAME,TRIGGER_N...
type IDX_QRTZ_FT_TG (line 188) | CREATE INDEX IDX_QRTZ_FT_TG ON QRTZ_FIRED_TRIGGERS(SCHED_NAME,TRIGGER_GR...
FILE: demo-task-quartz/init/dbTables/tables_db2_v72.sql
type qrtz_job_details (line 33) | create table qrtz_job_details (
type qrtz_triggers (line 47) | create table qrtz_triggers(
type qrtz_simple_triggers (line 68) | create table qrtz_simple_triggers(
type qrtz_cron_triggers (line 79) | create table qrtz_cron_triggers(
type qrtz_simprop_triggers (line 89) | CREATE TABLE qrtz_simprop_triggers
type qrtz_blob_triggers (line 110) | create table qrtz_blob_triggers(
type qrtz_calendars (line 119) | create table qrtz_calendars(
type qrtz_fired_triggers (line 126) | create table qrtz_fired_triggers(
type qrtz_paused_trigger_grps (line 144) | create table qrtz_paused_trigger_grps(
type qrtz_scheduler_state (line 150) | create table qrtz_scheduler_state (
type qrtz_locks (line 158) | create table qrtz_locks
FILE: demo-task-quartz/init/dbTables/tables_db2_v8.sql
type qrtz_job_details (line 23) | create table qrtz_job_details(
type qrtz_triggers (line 37) | create table qrtz_triggers(
type qrtz_simple_triggers (line 58) | create table qrtz_simple_triggers(
type qrtz_cron_triggers (line 69) | create table qrtz_cron_triggers(
type qrtz_simprop_triggers (line 79) | CREATE TABLE qrtz_simprop_triggers
type qrtz_blob_triggers (line 100) | create table qrtz_blob_triggers(
type qrtz_calendars (line 109) | create table qrtz_calendars(
type qrtz_fired_triggers (line 116) | create table qrtz_fired_triggers(
type qrtz_paused_trigger_grps (line 133) | create table qrtz_paused_trigger_grps(
type qrtz_scheduler_state (line 139) | create table qrtz_scheduler_state(
type qrtz_locks (line 147) | create table qrtz_locks(
FILE: demo-task-quartz/init/dbTables/tables_db2_v95.sql
type qrtz_job_details (line 13) | create table qrtz_job_details(
type qrtz_triggers (line 27) | create table qrtz_triggers(
type qrtz_simple_triggers (line 48) | create table qrtz_simple_triggers(
type qrtz_cron_triggers (line 59) | create table qrtz_cron_triggers(
type qrtz_simprop_triggers (line 69) | CREATE TABLE qrtz_simprop_triggers
type qrtz_blob_triggers (line 90) | create table qrtz_blob_triggers(
type qrtz_calendars (line 99) | create table qrtz_calendars(
type qrtz_fired_triggers (line 106) | create table qrtz_fired_triggers(
type qrtz_paused_trigger_grps (line 123) | create table qrtz_paused_trigger_grps(
type qrtz_scheduler_state (line 129) | create table qrtz_scheduler_state(
type qrtz_locks (line 137) | create table qrtz_locks(
FILE: demo-task-quartz/init/dbTables/tables_derby.sql
type qrtz_job_details (line 42) | create table qrtz_job_details (
type qrtz_triggers (line 56) | create table qrtz_triggers(
type qrtz_simple_triggers (line 77) | create table qrtz_simple_triggers(
type qrtz_cron_triggers (line 88) | create table qrtz_cron_triggers(
type qrtz_simprop_triggers (line 98) | create table qrtz_simprop_triggers
type qrtz_blob_triggers (line 119) | create table qrtz_blob_triggers(
type qrtz_calendars (line 128) | create table qrtz_calendars(
type qrtz_paused_trigger_grps (line 135) | create table qrtz_paused_trigger_grps
type qrtz_fired_triggers (line 142) | create table qrtz_fired_triggers(
type qrtz_scheduler_state (line 159) | create table qrtz_scheduler_state
type qrtz_locks (line 168) | create table qrtz_locks
FILE: demo-task-quartz/init/dbTables/tables_derby_previous.sql
type qrtz_job_details (line 11) | create table qrtz_job_details (
type qrtz_triggers (line 25) | create table qrtz_triggers (
type qrtz_simple_triggers (line 46) | create table qrtz_simple_triggers (
type qrtz_cron_triggers (line 57) | create table qrtz_cron_triggers (
type qrtz_simprop_triggers (line 67) | create table qrtz_simprop_triggers
type qrtz_blob_triggers (line 88) | create table qrtz_blob_triggers (
type qrtz_calendars (line 97) | create table qrtz_calendars (
type qrtz_paused_trigger_grps (line 104) | create table qrtz_paused_trigger_grps (
type qrtz_fired_triggers (line 110) | create table qrtz_fired_triggers (
type qrtz_scheduler_state (line 127) | create table qrtz_scheduler_state (
type qrtz_locks (line 135) | create table qrtz_locks (
FILE: demo-task-quartz/init/dbTables/tables_firebird.sql
type QRTZ_JOB_DETAILS (line 20) | CREATE TABLE QRTZ_JOB_DETAILS (
type QRTZ_TRIGGERS (line 34) | CREATE TABLE QRTZ_TRIGGERS (
type QRTZ_SIMPLE_TRIGGERS (line 56) | CREATE TABLE QRTZ_SIMPLE_TRIGGERS (
type QRTZ_SIMPROP_TRIGGERS (line 68) | CREATE TABLE QRTZ_SIMPROP_TRIGGERS
type QRTZ_CRON_TRIGGERS (line 89) | CREATE TABLE QRTZ_CRON_TRIGGERS (
type QRTZ_BLOB_TRIGGERS (line 100) | CREATE TABLE QRTZ_BLOB_TRIGGERS (
type QRTZ_CALENDARS (line 110) | CREATE TABLE QRTZ_CALENDARS (
type QRTZ_PAUSED_TRIGGER_GRPS (line 117) | CREATE TABLE QRTZ_PAUSED_TRIGGER_GRPS (
type QRTZ_FIRED_TRIGGERS (line 123) | CREATE TABLE QRTZ_FIRED_TRIGGERS (
type QRTZ_SCHEDULER_STATE (line 140) | CREATE TABLE QRTZ_SCHEDULER_STATE (
type QRTZ_LOCKS (line 148) | CREATE TABLE QRTZ_LOCKS (
FILE: demo-task-quartz/init/dbTables/tables_h2.sql
type QRTZ_CALENDARS (line 11) | CREATE TABLE QRTZ_CALENDARS (
type QRTZ_CRON_TRIGGERS (line 17) | CREATE TABLE QRTZ_CRON_TRIGGERS (
type QRTZ_FIRED_TRIGGERS (line 25) | CREATE TABLE QRTZ_FIRED_TRIGGERS (
type QRTZ_PAUSED_TRIGGER_GRPS (line 41) | CREATE TABLE QRTZ_PAUSED_TRIGGER_GRPS (
type QRTZ_SCHEDULER_STATE (line 46) | CREATE TABLE QRTZ_SCHEDULER_STATE (
type QRTZ_LOCKS (line 53) | CREATE TABLE QRTZ_LOCKS (
type QRTZ_JOB_DETAILS (line 58) | CREATE TABLE QRTZ_JOB_DETAILS (
type QRTZ_SIMPLE_TRIGGERS (line 71) | CREATE TABLE QRTZ_SIMPLE_TRIGGERS (
type qrtz_simprop_triggers (line 80) | CREATE TABLE qrtz_simprop_triggers
type QRTZ_BLOB_TRIGGERS (line 98) | CREATE TABLE QRTZ_BLOB_TRIGGERS (
type QRTZ_TRIGGERS (line 105) | CREATE TABLE QRTZ_TRIGGERS (
FILE: demo-task-quartz/init/dbTables/tables_hsqldb.sql
type qrtz_job_details (line 18) | CREATE TABLE qrtz_job_details
type qrtz_triggers (line 33) | CREATE TABLE qrtz_triggers
type qrtz_simple_triggers (line 56) | CREATE TABLE qrtz_simple_triggers
type qrtz_cron_triggers (line 69) | CREATE TABLE qrtz_cron_triggers
type qrtz_simprop_triggers (line 81) | CREATE TABLE qrtz_simprop_triggers
type qrtz_blob_triggers (line 102) | CREATE TABLE qrtz_blob_triggers
type qrtz_calendars (line 113) | CREATE TABLE qrtz_calendars
type qrtz_paused_trigger_grps (line 121) | CREATE TABLE qrtz_paused_trigger_grps
type qrtz_fired_triggers (line 128) | CREATE TABLE qrtz_fired_triggers
type qrtz_scheduler_state (line 146) | CREATE TABLE qrtz_scheduler_state
type qrtz_locks (line 155) | CREATE TABLE qrtz_locks
FILE: demo-task-quartz/init/dbTables/tables_hsqldb_old.sql
type qrtz_job_details (line 12) | CREATE TABLE qrtz_job_details
type qrtz_triggers (line 27) | CREATE TABLE qrtz_triggers
type qrtz_simple_triggers (line 50) | CREATE TABLE qrtz_simple_triggers
type qrtz_cron_triggers (line 63) | CREATE TABLE qrtz_cron_triggers
type qrtz_simprop_triggers (line 75) | CREATE TABLE qrtz_simprop_triggers
type qrtz_blob_triggers (line 96) | CREATE TABLE qrtz_blob_triggers
type qrtz_calendars (line 107) | CREATE TABLE qrtz_calendars
type qrtz_paused_trigger_grps (line 115) | CREATE TABLE qrtz_paused_trigger_grps
type qrtz_fired_triggers (line 122) | CREATE TABLE qrtz_fired_triggers
type qrtz_scheduler_state (line 140) | CREATE TABLE qrtz_scheduler_state
type qrtz_locks (line 149) | CREATE TABLE qrtz_locks
FILE: demo-task-quartz/init/dbTables/tables_informix.sql
type qblob_triggers (line 8) | CREATE TABLE qblob_triggers (
type qcalendars (line 19) | CREATE TABLE qcalendars (
type qcron_triggers (line 29) | CREATE TABLE qcron_triggers (
type qfired_triggers (line 41) | CREATE TABLE qfired_triggers (
type qpaused_trigger_grps (line 61) | CREATE TABLE qpaused_trigger_grps (
type qscheduler_state (line 70) | CREATE TABLE qscheduler_state (
type qlocks (line 81) | CREATE TABLE qlocks (
type qjob_details (line 90) | CREATE TABLE qjob_details (
type qsimple_triggers (line 107) | CREATE TABLE qsimple_triggers (
type qsimprop_triggers (line 120) | CREATE TABLE qsimprop_triggers
type qtriggers (line 142) | CREATE TABLE qtriggers (
FILE: demo-task-quartz/init/dbTables/tables_oracle.sql
type qrtz_job_details (line 36) | CREATE TABLE qrtz_job_details
type qrtz_triggers (line 50) | CREATE TABLE qrtz_triggers
type qrtz_simple_triggers (line 72) | CREATE TABLE qrtz_simple_triggers
type qrtz_cron_triggers (line 84) | CREATE TABLE qrtz_cron_triggers
type qrtz_simprop_triggers (line 95) | CREATE TABLE qrtz_simprop_triggers
type qrtz_blob_triggers (line 115) | CREATE TABLE qrtz_blob_triggers
type qrtz_calendars (line 125) | CREATE TABLE qrtz_calendars
type qrtz_paused_trigger_grps (line 132) | CREATE TABLE qrtz_paused_trigger_grps
type qrtz_fired_triggers (line 138) | CREATE TABLE qrtz_fired_triggers
type qrtz_scheduler_state (line 155) | CREATE TABLE qrtz_scheduler_state
type qrtz_locks (line 163) | CREATE TABLE qrtz_locks
type idx_qrtz_j_req_recovery (line 170) | create index idx_qrtz_j_req_recovery on qrtz_job_details(SCHED_NAME,REQU...
type idx_qrtz_j_grp (line 171) | create index idx_qrtz_j_grp on qrtz_job_details(SCHED_NAME,JOB_GROUP)
type idx_qrtz_t_j (line 173) | create index idx_qrtz_t_j on qrtz_triggers(SCHED_NAME,JOB_NAME,JOB_GROUP)
type idx_qrtz_t_jg (line 174) | create index idx_qrtz_t_jg on qrtz_triggers(SCHED_NAME,JOB_GROUP)
type idx_qrtz_t_c (line 175) | create index idx_qrtz_t_c on qrtz_triggers(SCHED_NAME,CALENDAR_NAME)
type idx_qrtz_t_g (line 176) | create index idx_qrtz_t_g on qrtz_triggers(SCHED_NAME,TRIGGER_GROUP)
type idx_qrtz_t_state (line 177) | create index idx_qrtz_t_state on qrtz_triggers(SCHED_NAME,TRIGGER_STATE)
type idx_qrtz_t_n_state (line 178) | create index idx_qrtz_t_n_state on qrtz_triggers(SCHED_NAME,TRIGGER_NAME...
type idx_qrtz_t_n_g_state (line 179) | create index idx_qrtz_t_n_g_state on qrtz_triggers(SCHED_NAME,TRIGGER_GR...
type idx_qrtz_t_next_fire_time (line 180) | create index idx_qrtz_t_next_fire_time on qrtz_triggers(SCHED_NAME,NEXT_...
type idx_qrtz_t_nft_st (line 181) | create index idx_qrtz_t_nft_st on qrtz_triggers(SCHED_NAME,TRIGGER_STATE...
type idx_qrtz_t_nft_misfire (line 182) | create index idx_qrtz_t_nft_misfire on qrtz_triggers(SCHED_NAME,MISFIRE_...
type idx_qrtz_t_nft_st_misfire (line 183) | create index idx_qrtz_t_nft_st_misfire on qrtz_triggers(SCHED_NAME,MISFI...
type idx_qrtz_t_nft_st_misfire_grp (line 184) | create index idx_qrtz_t_nft_st_misfire_grp on qrtz_triggers(SCHED_NAME,M...
type idx_qrtz_ft_trig_inst_name (line 186) | create index idx_qrtz_ft_trig_inst_name on qrtz_fired_triggers(SCHED_NAM...
type idx_qrtz_ft_inst_job_req_rcvry (line 187) | create index idx_qrtz_ft_inst_job_req_rcvry on qrtz_fired_triggers(SCHED...
type idx_qrtz_ft_j_g (line 188) | create index idx_qrtz_ft_j_g on qrtz_fired_triggers(SCHED_NAME,JOB_NAME,...
type idx_qrtz_ft_jg (line 189) | create index idx_qrtz_ft_jg on qrtz_fired_triggers(SCHED_NAME,JOB_GROUP)
type idx_qrtz_ft_t_g (line 190) | create index idx_qrtz_ft_t_g on qrtz_fired_triggers(SCHED_NAME,TRIGGER_N...
type idx_qrtz_ft_tg (line 191) | create index idx_qrtz_ft_tg on qrtz_fired_triggers(SCHED_NAME,TRIGGER_GR...
FILE: demo-task-quartz/init/dbTables/tables_pointbase.sql
type qrtz_job_details (line 35) | CREATE TABLE qrtz_job_details
type qrtz_triggers (line 50) | CREATE TABLE qrtz_triggers
type qrtz_simple_triggers (line 73) | CREATE TABLE qrtz_simple_triggers
type qrtz_simprop_triggers (line 87) | CREATE TABLE qrtz_simprop_triggers
type qrtz_cron_triggers (line 108) | CREATE TABLE qrtz_cron_triggers
type qrtz_blob_triggers (line 120) | CREATE TABLE qrtz_blob_triggers
type qrtz_calendars (line 131) | CREATE TABLE qrtz_calendars
type qrtz_paused_trigger_grps (line 139) | CREATE TABLE qrtz_paused_trigger_grps
type qrtz_fired_triggers (line 146) | CREATE TABLE qrtz_fired_triggers
type qrtz_scheduler_state (line 164) | CREATE TABLE qrtz_scheduler_state
type qrtz_locks (line 173) | CREATE TABLE qrtz_locks
FILE: demo-task-quartz/init/dbTables/tables_postgres.sql
type qrtz_job_details (line 18) | CREATE TABLE qrtz_job_details
type qrtz_triggers (line 33) | CREATE TABLE qrtz_triggers
type qrtz_simple_triggers (line 56) | CREATE TABLE qrtz_simple_triggers
type qrtz_cron_triggers (line 69) | CREATE TABLE qrtz_cron_triggers
type qrtz_simprop_triggers (line 81) | CREATE TABLE qrtz_simprop_triggers
type qrtz_blob_triggers (line 102) | CREATE TABLE qrtz_blob_triggers
type qrtz_calendars (line 113) | CREATE TABLE qrtz_calendars
type qrtz_paused_trigger_grps (line 122) | CREATE TABLE qrtz_paused_trigger_grps
type qrtz_fired_triggers (line 129) | CREATE TABLE qrtz_fired_triggers
type qrtz_scheduler_state (line 147) | CREATE TABLE qrtz_scheduler_state
type qrtz_locks (line 156) | CREATE TABLE qrtz_locks
type idx_qrtz_j_req_recovery (line 163) | create index idx_qrtz_j_req_recovery on qrtz_job_details(SCHED_NAME,REQU...
type idx_qrtz_j_grp (line 164) | create index idx_qrtz_j_grp on qrtz_job_details(SCHED_NAME,JOB_GROUP)
type idx_qrtz_t_j (line 166) | create index idx_qrtz_t_j on qrtz_triggers(SCHED_NAME,JOB_NAME,JOB_GROUP)
type idx_qrtz_t_jg (line 167) | create index idx_qrtz_t_jg on qrtz_triggers(SCHED_NAME,JOB_GROUP)
type idx_qrtz_t_c (line 168) | create index idx_qrtz_t_c on qrtz_triggers(SCHED_NAME,CALENDAR_NAME)
type idx_qrtz_t_g (line 169) | create index idx_qrtz_t_g on qrtz_triggers(SCHED_NAME,TRIGGER_GROUP)
type idx_qrtz_t_state (line 170) | create index idx_qrtz_t_state on qrtz_triggers(SCHED_NAME,TRIGGER_STATE)
type idx_qrtz_t_n_state (line 171) | create index idx_qrtz_t_n_state on qrtz_triggers(SCHED_NAME,TRIGGER_NAME...
type idx_qrtz_t_n_g_state (line 172) | create index idx_qrtz_t_n_g_state on qrtz_triggers(SCHED_NAME,TRIGGER_GR...
type idx_qrtz_t_next_fire_time (line 173) | create index idx_qrtz_t_next_fire_time on qrtz_triggers(SCHED_NAME,NEXT_...
type idx_qrtz_t_nft_st (line 174) | create index idx_qrtz_t_nft_st on qrtz_triggers(SCHED_NAME,TRIGGER_STATE...
type idx_qrtz_t_nft_misfire (line 175) | create index idx_qrtz_t_nft_misfire on qrtz_triggers(SCHED_NAME,MISFIRE_...
type idx_qrtz_t_nft_st_misfire (line 176) | create index idx_qrtz_t_nft_st_misfire on qrtz_triggers(SCHED_NAME,MISFI...
type idx_qrtz_t_nft_st_misfire_grp (line 177) | create index idx_qrtz_t_nft_st_misfire_grp on qrtz_triggers(SCHED_NAME,M...
type idx_qrtz_ft_trig_inst_name (line 179) | create index idx_qrtz_ft_trig_inst_name on qrtz_fired_triggers(SCHED_NAM...
type idx_qrtz_ft_inst_job_req_rcvry (line 180) | create index idx_qrtz_ft_inst_job_req_rcvry on qrtz_fired_triggers(SCHED...
type idx_qrtz_ft_j_g (line 181) | create index idx_qrtz_ft_j_g on qrtz_fired_triggers(SCHED_NAME,JOB_NAME,...
type idx_qrtz_ft_jg (line 182) | create index idx_qrtz_ft_jg on qrtz_fired_triggers(SCHED_NAME,JOB_GROUP)
type idx_qrtz_ft_t_g (line 183) | create index idx_qrtz_ft_t_g on qrtz_fired_triggers(SCHED_NAME,TRIGGER_N...
type idx_qrtz_ft_tg (line 184) | create index idx_qrtz_ft_tg on qrtz_fired_triggers(SCHED_NAME,TRIGGER_GR...
FILE: demo-task-quartz/init/dbTables/tables_solid.sql
type qrtz_job_details (line 14) | create table qrtz_job_details (
type qrtz_triggers (line 28) | create table qrtz_triggers(
type qrtz_simple_triggers (line 49) | create table qrtz_simple_triggers(
type qrtz_simprop_triggers (line 60) | CREATE TABLE qrtz_simprop_triggers
type qrtz_cron_triggers (line 81) | create table qrtz_cron_triggers(
type qrtz_blob_triggers (line 91) | create table qrtz_blob_triggers(
type qrtz_calendars (line 100) | create table qrtz_calendars(
type qrtz_paused_trigger_grps (line 107) | create table qrtz_paused_trigger_grps
type qrtz_fired_triggers (line 114) | create table qrtz_fired_triggers(
type qrtz_scheduler_state (line 131) | create table qrtz_scheduler_state
type qrtz_locks (line 140) | create table qrtz_locks
FILE: demo-task-quartz/init/dbTables/tables_sqlServer.sql
type dbo (line 90) | CREATE TABLE [dbo].[QRTZ_CALENDARS] (
FILE: demo-task-quartz/src/main/java/com/xkcoding/task/quartz/SpringBootDemoTaskQuartzApplication.java
class SpringBootDemoTaskQuartzApplication (line 15) | @MapperScan(basePackages = {"com.xkcoding.task.quartz.mapper"})
method main (line 19) | public static void main(String[] args) {
FILE: demo-task-quartz/src/main/java/com/xkcoding/task/quartz/common/ApiResponse.java
class ApiResponse (line 16) | @Data
method ApiResponse (line 28) | public ApiResponse() {
method ApiResponse (line 31) | private ApiResponse(String message, Object data) {
method of (line 43) | public static ApiResponse of(String message, Object data) {
method ok (line 53) | public static ApiResponse ok(Object data) {
method msg (line 63) | public static ApiResponse msg(String message) {
FILE: demo-task-quartz/src/main/java/com/xkcoding/task/quartz/controller/JobController.java
class JobController (line 28) | @RestController
method JobController (line 34) | @Autowired
method addJob (line 42) | @PostMapping
method deleteJob (line 56) | @DeleteMapping
method pauseJob (line 69) | @PutMapping(params = "pause")
method resumeJob (line 82) | @PutMapping(params = "resume")
method cronJob (line 95) | @PutMapping(params = "cron")
method jobList (line 106) | @GetMapping
FILE: demo-task-quartz/src/main/java/com/xkcoding/task/quartz/entity/domain/JobAndTrigger.java
class JobAndTrigger (line 15) | @Data
FILE: demo-task-quartz/src/main/java/com/xkcoding/task/quartz/entity/form/JobForm.java
class JobForm (line 16) | @Data
FILE: demo-task-quartz/src/main/java/com/xkcoding/task/quartz/job/HelloJob.java
class HelloJob (line 16) | @Slf4j
method execute (line 19) | @Override
FILE: demo-task-quartz/src/main/java/com/xkcoding/task/quartz/job/TestJob.java
class TestJob (line 16) | @Slf4j
method execute (line 19) | @Override
FILE: demo-task-quartz/src/main/java/com/xkcoding/task/quartz/job/base/BaseJob.java
type BaseJob (line 13) | public interface BaseJob extends Job {
method execute (line 33) | @Override
FILE: demo-task-quartz/src/main/java/com/xkcoding/task/quartz/mapper/JobMapper.java
type JobMapper (line 16) | @Component
method list (line 23) | List<JobAndTrigger> list();
FILE: demo-task-quartz/src/main/java/com/xkcoding/task/quartz/service/JobService.java
type JobService (line 16) | public interface JobService {
method addJob (line 23) | void addJob(JobForm form) throws Exception;
method deleteJob (line 31) | void deleteJob(JobForm form) throws SchedulerException;
method pauseJob (line 39) | void pauseJob(JobForm form) throws SchedulerException;
method resumeJob (line 47) | void resumeJob(JobForm form) throws SchedulerException;
method cronJob (line 55) | void cronJob(JobForm form) throws Exception;
method list (line 64) | PageInfo<JobAndTrigger> list(Integer currentPage, Integer pageSize);
FILE: demo-task-quartz/src/main/java/com/xkcoding/task/quartz/service/impl/JobServiceImpl.java
class JobServiceImpl (line 25) | @Service
method JobServiceImpl (line 31) | @Autowired
method addJob (line 44) | @Override
method deleteJob (line 73) | @Override
method pauseJob (line 86) | @Override
method resumeJob (line 97) | @Override
method cronJob (line 108) | @Override
method list (line 135) | @Override
FILE: demo-task-quartz/src/main/java/com/xkcoding/task/quartz/util/JobUtil.java
class JobUtil (line 13) | public class JobUtil {
method getClass (line 21) | public static BaseJob getClass(String classname) throws Exception {
FILE: demo-task-quartz/src/test/java/com/xkcoding/task/quartz/SpringBootDemoTaskQuartzApplicationTests.java
class SpringBootDemoTaskQuartzApplicationTests (line 8) | @RunWith(SpringRunner.class)
method contextLoads (line 12) | @Test
FILE: demo-task-xxl-job/src/main/java/com/xkcoding/task/xxl/job/SpringBootDemoTaskXxlJobApplication.java
class SpringBootDemoTaskXxlJobApplication (line 14) | @SpringBootApplication
method main (line 17) | public static void main(String[] args) {
FILE: demo-task-xxl-job/src/main/java/com/xkcoding/task/xxl/job/config/XxlJobConfig.java
class XxlJobConfig (line 20) | @Slf4j
method xxlJobExecutor (line 27) | @Bean(initMethod = "start", destroyMethod = "destroy")
FILE: demo-task-xxl-job/src/main/java/com/xkcoding/task/xxl/job/config/props/XxlJobProps.java
class XxlJobProps (line 14) | @Data
class XxlJobAdminProps (line 32) | @Data
class XxlJobExecutorProps (line 40) | @Data
FILE: demo-task-xxl-job/src/main/java/com/xkcoding/task/xxl/job/controller/ManualOperateController.java
class ManualOperateController (line 26) | @Slf4j
method xxlJobGroup (line 38) | @GetMapping("/group")
method xxlJobList (line 52) | @GetMapping("/list")
method xxlJobAdd (line 68) | @GetMapping("/add")
method xxlJobTrigger (line 89) | @GetMapping("/trigger")
method xxlJobRemove (line 103) | @GetMapping("/remove")
method xxlJobStop (line 116) | @GetMapping("/stop")
method xxlJobStart (line 129) | @GetMapping("/start")
FILE: demo-task-xxl-job/src/main/java/com/xkcoding/task/xxl/job/task/DemoTask.java
class DemoTask (line 20) | @Slf4j
method execute (line 32) | @Override
FILE: demo-task/src/main/java/com/xkcoding/task/SpringBootDemoTaskApplication.java
class SpringBootDemoTaskApplication (line 14) | @SpringBootApplication
method main (line 17) | public static void main(String[] args) {
FILE: demo-task/src/main/java/com/xkcoding/task/config/TaskConfig.java
class TaskConfig (line 22) | @Configuration
method configureTasks (line 26) | @Override
method taskExecutor (line 37) | @Bean
FILE: demo-task/src/main/java/com/xkcoding/task/job/TaskJob.java
class TaskJob (line 18) | @Component
method job1 (line 25) | @Scheduled(cron = "0/10 * * * * ?")
method job2 (line 34) | @Scheduled(fixedRate = 2000)
method job3 (line 43) | @Scheduled(fixedDelay = 4000, initialDelay = 5000)
FILE: demo-task/src/test/java/com/xkcoding/task/SpringBootDemoTaskApplicationTests.java
class SpringBootDemoTaskApplicationTests (line 8) | @RunWith(SpringRunner.class)
method contextLoads (line 12) | @Test
FILE: demo-template-beetl/src/main/java/com/xkcoding/template/beetl/SpringBootDemoTemplateBeetlApplication.java
class SpringBootDemoTemplateBeetlApplication (line 14) | @SpringBootApplication
method main (line 17) | public static void main(String[] args) {
FILE: demo-template-beetl/src/main/java/com/xkcoding/template/beetl/controller/IndexController.java
class IndexController (line 20) | @Controller
method index (line 24) | @GetMapping(value = {"", "/"})
FILE: demo-template-beetl/src/main/java/com/xkcoding/template/beetl/controller/UserController.java
class UserController (line 21) | @Controller
method login (line 25) | @PostMapping("/login")
method login (line 36) | @GetMapping("/login")
FILE: demo-template-beetl/src/main/java/com/xkcoding/template/beetl/model/User.java
class User (line 13) | @Data
FILE: demo-template-beetl/src/test/java/com/xkcoding/template/beetl/SpringBootDemoTemplateBeetlApplicationTests.java
class SpringBootDemoTemplateBeetlApplicationTests (line 8) | @RunWith(SpringRunner.class)
method contextLoads (line 12) | @Test
FILE: demo-template-enjoy/src/main/java/com/xkcoding/template/enjoy/SpringBootDemoTemplateEnjoyApplication.java
class SpringBootDemoTemplateEnjoyApplication (line 14) | @SpringBootApplication
method main (line 17) | public static void main(String[] args) {
FILE: demo-template-enjoy/src/main/java/com/xkcoding/template/enjoy/config/EnjoyConfig.java
class EnjoyConfig (line 16) | @Configuration
method getJFinalViewResolver (line 18) | @Bean(name = "jfinalViewResolver")
FILE: demo-template-enjoy/src/main/java/com/xkcoding/template/enjoy/controller/IndexController.java
class IndexController (line 20) | @Controller
method index (line 24) | @GetMapping(value = {"", "/"})
FILE: demo-template-enjoy/src/main/java/com/xkcoding/template/enjoy/controller/UserController.java
class UserController (line 21) | @Controller
method login (line 25) | @PostMapping("/login")
method login (line 36) | @GetMapping("/login")
FILE: demo-template-enjoy/src/main/java/com/xkcoding/template/enjoy/model/User.java
class User (line 13) | @Data
FILE: demo-template-enjoy/src/test/java/com/xkcoding/template/enjoy/SpringBootDemoTemplateEnjoyApplicationTests.java
class SpringBootDemoTemplateEnjoyApplicationTests (line 8) | @RunWith(SpringRunner.class)
method contextLoads (line 12) | @Test
FILE: demo-template-freemarker/src/main/java/com/xkcoding/template/freemarker/SpringBootDemoTemplateFreemarkerApplication.java
class SpringBootDemoTemplateFreemarkerApplication (line 14) | @SpringBootApplication
method main (line 17) | public static void main(String[] args) {
FILE: demo-template-freemarker/src/main/java/com/xkcoding/template/freemarker/controller/IndexController.java
class IndexController (line 20) | @Controller
method index (line 24) | @GetMapping(value = {"", "/"})
FILE: demo-template-freemarker/src/main/java/com/xkcoding/template/freemarker/controller/UserController.java
class UserController (line 21) | @Controller
method login (line 25) | @PostMapping("/login")
method login (line 36) | @GetMapping("/login")
FILE: demo-template-freemarker/src/main/java/com/xkcoding/template/freemarker/model/User.java
class User (line 13) | @Data
FILE: demo-template-freemarker/src/test/java/com/xkcoding/template/freemarker/SpringBootDemoTemplateFreemarkerApplicationTests.java
class SpringBootDemoTemplateFreemarkerApplicationTests (line 8) | @RunWith(SpringRunner.class)
method contextLoads (line 12) | @Test
FILE: demo-template-thymeleaf/src/main/java/com/xkcoding/template/thymeleaf/SpringBootDemoTemplateThymeleafApplication.java
class SpringBootDemoTemplateThymeleafApplication (line 14) | @SpringBootApplication
method main (line 17) | public static void main(String[] args) {
FILE: demo-template-thymeleaf/src/main/java/com/xkcoding/template/thymeleaf/controller/IndexController.java
class IndexController (line 20) | @Controller
method index (line 24) | @GetMapping(value = {"", "/"})
FILE: demo-template-thymeleaf/src/main/java/com/xkcoding/template/thymeleaf/controller/UserController.java
class UserController (line 21) | @Controller
method login (line 25) | @PostMapping("/login")
method login (line 36) | @GetMapping("/login")
FILE: demo-template-thymeleaf/src/main/java/com/xkcoding/template/thymeleaf/model/User.java
class User (line 13) | @Data
FILE: demo-template-thymeleaf/src/test/java/com/xkcoding/template/thymeleaf/SpringBootDemoTemplateThymeleafApplicationTests.java
class SpringBootDemoTemplateThymeleafApplicationTests (line 8) | @RunWith(SpringRunner.class)
method contextLoads (line 12) | @Test
FILE: demo-tio/src/main/java/com/xkcoding/springbootdemotio/SpringBootDemoTioApplication.java
class SpringBootDemoTioApplication (line 14) | @SpringBootApplication
method main (line 17) | public static void main(String[] args) {
FILE: demo-tio/src/test/java/com/xkcoding/springbootdemotio/SpringBootDemoTioApplicationTests.java
class SpringBootDemoTioApplicationTests (line 8) | @RunWith(SpringRunner.class)
method contextLoads (line 12) | @Test
FILE: demo-uflo/src/main/java/com/xkcoding/uflo/SpringBootDemoUfloApplication.java
class SpringBootDemoUfloApplication (line 6) | @SpringBootApplication
method main (line 9) | public static void main(String[] args) {
FILE: demo-uflo/src/test/java/com/xkcoding/uflo/SpringBootDemoUfloApplicationTests.java
class SpringBootDemoUfloApplicationTests (line 8) | @RunWith(SpringRunner.class)
method contextLoads (line 12) | @Test
FILE: demo-upload/src/main/java/com/xkcoding/upload/SpringBootDemoUploadApplication.java
class SpringBootDemoUploadApplication (line 14) | @SpringBootApplication
method main (line 17) | public static void main(String[] args) {
FILE: demo-upload/src/main/java/com/xkcoding/upload/config/UploadConfig.java
class UploadConfig (line 31) | @Configuration
method UploadConfig (line 44) | @Autowired
method multipartConfigElement (line 52) | @Bean
method multipartResolver (line 61) | @Bean(name = DispatcherServlet.MULTIPART_RESOLVER_BEAN_NAME)
method qiniuConfig (line 72) | @Bean
method uploadManager (line 80) | @Bean
method auth (line 88) | @Bean
method bucketManager (line 96) | @Bean
FILE: demo-upload/src/main/java/com/xkcoding/upload/controller/IndexController.java
class IndexController (line 14) | @Controller
method index (line 16) | @GetMapping("")
FILE: demo-upload/src/main/java/com/xkcoding/upload/controller/UploadController.java
class UploadController (line 32) | @RestController
method UploadController (line 44) | @Autowired
method local (line 49) | @PostMapping(value = "/local", consumes = MediaType.MULTIPART_FORM_DAT...
method yun (line 69) | @PostMapping(value = "/yun", consumes = MediaType.MULTIPART_FORM_DATA_...
FILE: demo-upload/src/main/java/com/xkcoding/upload/service/IQiNiuService.java
type IQiNiuService (line 16) | public interface IQiNiuService {
method uploadFile (line 24) | Response uploadFile(File file) throws QiniuException;
FILE: demo-upload/src/main/java/com/xkcoding/upload/service/impl/QiNiuServiceImpl.java
class QiNiuServiceImpl (line 25) | @Service
method QiNiuServiceImpl (line 37) | @Autowired
method uploadFile (line 50) | @Override
method afterPropertiesSet (line 61) | @Override
method getUploadToken (line 72) | private String getUploadToken() {
FILE: demo-upload/src/test/java/com/xkcoding/upload/SpringBootDemoUploadApplicationTests.java
class SpringBootDemoUploadApplicationTests (line 8) | @RunWith(SpringRunner.class)
method contextLoads (line 12) | @Test
FILE: demo-ureport2/doc/sql/t_user_ureport2.sql
type `t_user_ureport2` (line 24) | CREATE TABLE `t_user_ureport2` (
FILE: demo-ureport2/src/main/java/com/xkcoding/ureport2/SpringBootDemoUreport2Application.java
class SpringBootDemoUreport2Application (line 14) | @SpringBootApplication
method main (line 17) | public static void main(String[] args) {
FILE: demo-ureport2/src/main/java/com/xkcoding/ureport2/config/InnerDatasource.java
class InnerDatasource (line 19) | @Component
method name (line 24) | @Override
method getConnection (line 29) | @SneakyThrows
FILE: demo-ureport2/src/test/java/com/xkcoding/ureport2/SpringBootDemoUreport2ApplicationTests.java
class SpringBootDemoUreport2ApplicationTests (line 8) | @RunWith(SpringRunner.class)
method contextLoads (line 12) | @Test
FILE: demo-urule/src/main/java/com/xkcoding/urule/SpringBootDemoUruleApplication.java
class SpringBootDemoUruleApplication (line 14) | @SpringBootApplication
method main (line 17) | public static void main(String[] args) {
FILE: demo-urule/src/test/java/com/xkcoding/urule/SpringBootDemoUruleApplicationTests.java
class SpringBootDemoUruleApplicationTests (line 8) | @RunWith(SpringRunner.class)
method contextLoads (line 12) | @Test
FILE: demo-war/src/main/java/com/xkcoding/war/SpringBootDemoWarApplication.java
class SpringBootDemoWarApplication (line 16) | @SpringBootApplication
method main (line 19) | public static void main(String[] args) {
method configure (line 26) | @Override
FILE: demo-war/src/test/java/com/xkcoding/war/SpringBootDemoWarApplicationTests.java
class SpringBootDemoWarApplicationTests (line 8) | @RunWith(SpringRunner.class)
method contextLoads (line 12) | @Test
FILE: demo-websocket-socketio/src/main/java/com/xkcoding/websocket/socketio/SpringBootDemoWebsocketSocketioApplication.java
class SpringBootDemoWebsocketSocketioApplication (line 14) | @SpringBootApplication
method main (line 17) | public static void main(String[] args) {
FILE: demo-websocket-socketio/src/main/java/com/xkcoding/websocket/socketio/config/DbTemplate.java
class DbTemplate (line 19) | @Component
method findAll (line 31) | public List<UUID> findAll() {
method findByUserId (line 41) | public Optional<UUID> findByUserId(String userId) {
method save (line 51) | public void save(String userId, UUID sessionId) {
method deleteByUserId (line 60) | public void deleteByUserId(String userId) {
FILE: demo-websocket-socketio/src/main/java/com/xkcoding/websocket/socketio/config/Event.java
type Event (line 11) | public interface Event {
FILE: demo-websocket-socketio/src/main/java/com/xkcoding/websocket/socketio/config/ServerConfig.java
class ServerConfig (line 18) | @Configuration
method server (line 22) | @Bean
method springAnnotationScanner (line 44) | @Bean
FILE: demo-websocket-socketio/src/main/java/com/xkcoding/websocket/socketio/config/WsConfig.java
class WsConfig (line 14) | @ConfigurationProperties(prefix = "ws.server")
FILE: demo-websocket-socketio/src/main/java/com/xkcoding/websocket/socketio/controller/MessageController.java
class MessageController (line 25) | @RestController
method broadcast (line 32) | @PostMapping("/broadcast")
method isBlank (line 47) | private boolean isBlank(Object bean) {
FILE: demo-websocket-socketio/src/main/java/com/xkcoding/websocket/socketio/handler/MessageEventHandler.java
class MessageEventHandler (line 33) | @Component
method onConnect (line 47) | @OnConnect
method onDisconnect (line 67) | @OnDisconnect
method onJoinEvent (line 90) | @OnEvent(value = Event.JOIN)
method onChatEvent (line 99) | @OnEvent(value = Event.CHAT)
method onGroupEvent (line 111) | @OnEvent(value = Event.GROUP)
method sendToSingle (line 133) | public void sendToSingle(UUID sessionId, SingleMessageRequest message) {
method sendToBroadcast (line 140) | public void sendToBroadcast(BroadcastMessageRequest message) {
method sendToGroup (line 153) | public void sendToGroup(GroupMessageRequest message) {
FILE: demo-websocket-socketio/src/main/java/com/xkcoding/websocket/socketio/init/ServerRunner.java
class ServerRunner (line 17) | @Component
method run (line 23) | @Override
FILE: demo-websocket-socketio/src/main/java/com/xkcoding/websocket/socketio/payload/BroadcastMessageRequest.java
class BroadcastMessageRequest (line 13) | @Data
FILE: demo-websocket-socketio/src/main/java/com/xkcoding/websocket/socketio/payload/GroupMessageRequest.java
class GroupMessageRequest (line 13) | @Data
FILE: demo-websocket-socketio/src/main/java/com/xkcoding/websocket/socketio/payload/JoinRequest.java
class JoinRequest (line 13) | @Data
FILE: demo-websocket-socketio/src/main/java/com/xkcoding/websocket/socketio/payload/SingleMessageRequest.java
class SingleMessageRequest (line 13) | @Data
FILE: demo-websocket-socketio/src/main/resources/static/js/socket.io/socket.io.js
function s (line 1) | function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&re...
function lookup (line 1) | function lookup(uri,opts){if(typeof uri=="object"){opts=uri;uri=undefine...
function Manager (line 1) | function Manager(uri,opts){if(!(this instanceof Manager))return new Mana...
function on (line 1) | function on(obj,ev,fn){obj.on(ev,fn);return{destroy:function(){obj.remov...
function Socket (line 1) | function Socket(io,nsp){this.io=io;this.nsp=nsp;this.json=this;this.ids=...
function url (line 1) | function url(uri,loc){var obj=uri;var loc=loc||global.location;if(null==...
function Backoff (line 1) | function Backoff(opts){opts=opts||{};this.ms=opts.min||100;this.max=opts...
function Emitter (line 1) | function Emitter(obj){if(obj)return mixin(obj)}
function mixin (line 1) | function mixin(obj){for(var key in Emitter.prototype){obj[key]=Emitter.p...
function on (line 1) | function on(){self.off(event,on);fn.apply(this,arguments)}
function debug (line 1) | function debug(name){if(!debug.enabled(name))return function(){};return ...
function coerce (line 1) | function coerce(val){if(val instanceof Error)return val.stack||val.messa...
function noop (line 1) | function noop(){}
function Socket (line 1) | function Socket(uri,opts){if(!(this instanceof Socket))return new Socket...
function clone (line 1) | function clone(obj){var o={};for(var i in obj){if(obj.hasOwnProperty(i))...
function onTransportOpen (line 1) | function onTransportOpen(){if(self.onlyBinaryUpgrades){var upgradeLosesB...
function freezeTransport (line 1) | function freezeTransport(){if(failed)return;failed=true;cleanup();transp...
function onerror (line 1) | function onerror(err){var error=new Error("probe error: "+err);error.tra...
function onTransportClose (line 1) | function onTransportClose(){onerror("transport closed")}
function onclose (line 1) | function onclose(){onerror("socket closed")}
function onupgrade (line 1) | function onupgrade(to){if(transport&&to.name!=transport.name){debug('"%s...
function cleanup (line 1) | function cleanup(){transport.removeListener("open",onTransportOpen);tran...
function close (line 1) | function close(){self.onClose("forced close");debug("socket closing - te...
function cleanupAndClose (line 1) | function cleanupAndClose(){self.removeListener("upgrade",cleanupAndClose...
function waitForUpgrade (line 1) | function waitForUpgrade(){self.once("upgrade",cleanupAndClose);self.once...
function Transport (line 1) | function Transport(opts){this.path=opts.path;this.hostname=opts.hostname...
function polling (line 1) | function polling(opts){var xhr;var xd=false;var xs=false;var jsonp=false...
function empty (line 2) | function empty(){}
function JSONPPolling (line 2) | function JSONPPolling(opts){Polling.call(this,opts);this.query=this.quer...
function complete (line 2) | function complete(){initIframe();fn()}
function initIframe (line 2) | function initIframe(){if(self.iframe){try{self.form.removeChild(self.ifr...
function empty (line 2) | function empty(){}
function XHR (line 2) | function XHR(opts){Polling.call(this,opts);if(global.location){var isSSL...
function Request (line 2) | function Request(opts){this.method=opts.method||"GET";this.uri=opts.uri;...
function unloadHandler (line 2) | function unloadHandler(){for(var i in Request.requests){if(Request.reque...
function Polling (line 2) | function Polling(opts){var forceBase64=opts&&opts.forceBase64;if(!hasXHR...
function pause (line 2) | function pause(){debug("paused");self.readyState="paused";onPause()}
function close (line 2) | function close(){debug("writing close packet");self.write([{type:"close"...
function WS (line 2) | function WS(opts){var forceBase64=opts&&opts.forceBase64;if(forceBase64)...
function ondrain (line 2) | function ondrain(){self.writable=true;self.emit("drain")}
function useColors (line 2) | function useColors(){return"WebkitAppearance"in document.documentElement...
function formatArgs (line 2) | function formatArgs(){var args=arguments;var useColors=this.useColors;ar...
function log (line 2) | function log(){return"object"==typeof console&&"function"==typeof consol...
function save (line 2) | function save(namespaces){try{if(null==namespaces){localStorage.removeIt...
function load (line 2) | function load(){var r;try{r=localStorage.debug}catch(e){}return r}
function selectColor (line 2) | function selectColor(){return exports.colors[prevColor++%exports.colors....
function debug (line 2) | function debug(namespace){function disabled(){}disabled.enabled=false;fu...
function enable (line 2) | function enable(namespaces){exports.save(namespaces);var split=(namespac...
function disable (line 2) | function disable(){exports.enable("")}
function enabled (line 2) | function enabled(name){var i,len;for(i=0,len=exports.skips.length;i<len;...
function coerce (line 2) | function coerce(val){if(val instanceof Error)return val.stack||val.messa...
function parse (line 2) | function parse(str){var match=/^((?:\d+)?\.?\d+) *(ms|seconds?|s|minutes...
function short (line 2) | function short(ms){if(ms>=d)return Math.round(ms/d)+"d";if(ms>=h)return ...
function long (line 2) | function long(ms){return plural(ms,d,"day")||plural(ms,h,"hour")||plural...
function plural (line 2) | function plural(ms,n,name){if(ms<n)return;if(ms<n*1.5)return Math.floor(...
function encodeBase64Object (line 2) | function encodeBase64Object(packet,callback){var message="b"+exports.pac...
function encodeArrayBuffer (line 2) | function encodeArrayBuffer(packet,supportsBinary,callback){if(!supportsB...
function encodeBlobAsArrayBuffer (line 2) | function encodeBlobAsArrayBuffer(packet,supportsBinary,callback){if(!sup...
function encodeBlob (line 2) | function encodeBlob(packet,supportsBinary,callback){if(!supportsBinary){...
function setLengthHeader (line 2) | function setLengthHeader(message){return message.length+":"+message}
function encodeOne (line 2) | function encodeOne(packet,doneCallback){exports.encodePacket(packet,!isB...
function map (line 2) | function map(ary,each,done){var result=new Array(ary.length);var next=af...
function encodeOne (line 2) | function encodeOne(packet,doneCallback){exports.encodePacket(packet,true...
function encodeOne (line 2) | function encodeOne(packet,doneCallback){exports.encodePacket(packet,true...
function after (line 2) | function after(count,callback,err_cb){var bail=false;err_cb=err_cb||noop...
function noop (line 2) | function noop(){}
function BlobBuilderConstructor (line 2) | function BlobBuilderConstructor(ary,options){options=options||{};var bb=...
function hasBinary (line 2) | function hasBinary(data){function _hasBinary(obj){if(!obj)return false;i...
function ucs2decode (line 2) | function ucs2decode(string){var output=[];var counter=0;var length=strin...
function ucs2encode (line 3) | function ucs2encode(array){var length=array.length;var index=-1;var valu...
function createByte (line 3) | function createByte(codePoint,shift){return stringFromCharCode(codePoint...
function encodeCodePoint (line 3) | function encodeCodePoint(codePoint){if((codePoint&4294967168)==0){return...
function utf8encode (line 3) | function utf8encode(string){var codePoints=ucs2decode(string);var length...
function readContinuationByte (line 3) | function readContinuationByte(){if(byteIndex>=byteCount){throw Error("In...
function decodeSymbol (line 3) | function decodeSymbol(){var byte1;var byte2;var byte3;var byte4;var code...
function utf8decode (line 3) | function utf8decode(byteString){byteArray=ucs2decode(byteString);byteCou...
function ws (line 3) | function ws(uri,protocols,opts){var instance;if(protocols){instance=new ...
function hasBinary (line 3) | function hasBinary(data){function _hasBinary(obj){if(!obj)return false;i...
function _deconstructPacket (line 3) | function _deconstructPacket(data){if(!data)return data;if(isBuf(data)){v...
function _reconstructPacket (line 3) | function _reconstructPacket(data){if(data&&data._placeholder){var buf=bu...
function _removeBlobs (line 3) | function _removeBlobs(obj,curKey,containingObject){if(!obj)return obj;if...
function Encoder (line 3) | function Encoder(){}
function encodeAsString (line 3) | function encodeAsString(obj){var str="";var nsp=false;str+=obj.type;if(e...
function encodeAsBinary (line 3) | function encodeAsBinary(obj,callback){function writeEncoding(bloblessDat...
function Decoder (line 3) | function Decoder(){this.reconstructor=null}
function decodeString (line 3) | function decodeString(str){var p={};var i=0;p.type=Number(str.charAt(0))...
function BinaryReconstructor (line 3) | function BinaryReconstructor(packet){this.reconPack=packet;this.buffers=[]}
function error (line 3) | function error(data){return{type:exports.ERROR,data:"parser error"}}
function isBuf (line 3) | function isBuf(obj){return global.Buffer&&global.Buffer.isBuffer(obj)||g...
function has (line 3) | function has(name){if(has[name]!==undef){return has[name]}var isSupporte...
function toArray (line 3) | function toArray(list,index){var array=[];index=index||0;for(var i=index...
FILE: demo-websocket-socketio/src/test/java/com/xkcoding/websocket/socketio/SpringBootDemoWebsocketSocketioApplicationTests.java
class SpringBootDemoWebsocketSocketioApplicationTests (line 8) | @RunWith(SpringRunner.class)
method contextLoads (line 12) | @Test
FILE: demo-websocket/src/main/java/com/xkcoding/websocket/SpringBootDemoWebsocketApplication.java
class SpringBootDemoWebsocketApplication (line 15) | @SpringBootApplication
method main (line 19) | public static void main(String[] args) {
FILE: demo-websocket/src/main/java/com/xkcoding/websocket/common/WebSocketConsts.java
type WebSocketConsts (line 11) | public interface WebSocketConsts {
FILE: demo-websocket/src/main/java/com/xkcoding/websocket/config/WebSocketConfig.java
class WebSocketConfig (line 18) | @Configuration
method registerStompEndpoints (line 23) | @Override
method configureMessageBroker (line 31) | @Override
FILE: demo-websocket/src/main/java/com/xkcoding/websocket/controller/ServerController.java
class ServerController (line 19) | @RestController
method serverInfo (line 23) | @GetMapping
FILE: demo-websocket/src/main/java/com/xkcoding/websocket/model/Server.java
class Server (line 29) | public class Server {
method getCpu (line 58) | public Cpu getCpu() {
method setCpu (line 62) | public void setCpu(Cpu cpu) {
method getMem (line 66) | public Mem getMem() {
method setMem (line 70) | public void setMem(Mem mem) {
method getJvm (line 74) | public Jvm getJvm() {
method setJvm (line 78) | public void setJvm(Jvm jvm) {
method getSys (line 82) | public Sys getSys() {
method setSys (line 86) | public void setSys(Sys sys) {
method getSysFiles (line 90) | public List<SysFile> getSysFiles() {
method setSysFiles (line 94) | public void setSysFiles(List<SysFile> sysFiles) {
method copyTo (line 98) | public void copyTo() throws Exception {
method setCpuInfo (line 116) | private void setCpuInfo(CentralProcessor processor) {
method setMemInfo (line 141) | private void setMemInfo(GlobalMemory memory) {
method setSysInfo (line 150) | private void setSysInfo() {
method setJvmInfo (line 162) | private void setJvmInfo() throws UnknownHostException {
method setSysFiles (line 174) | private void setSysFiles(OperatingSystem os) {
method convertFileSize (line 199) | public String convertFileSize(long size) {
FILE: demo-websocket/src/main/java/com/xkcoding/websocket/model/server/Cpu.java
class Cpu (line 13) | public class Cpu {
method getCpuNum (line 44) | public int getCpuNum() {
method setCpuNum (line 48) | public void setCpuNum(int cpuNum) {
method getTotal (line 52) | public double getTotal() {
method setTotal (line 56) | public void setTotal(double total) {
method getSys (line 60) | public double getSys() {
method setSys (line 64) | public void setSys(double sys) {
method getUsed (line 68) | public double getUsed() {
method setUsed (line 72) | public void setUsed(double used) {
method getWait (line 76) | public double getWait() {
method setWait (line 80) | public void setWait(double wait) {
method getFree (line 84) | public double getFree() {
method setFree (line 88) | public void setFree(double free) {
FILE: demo-websocket/src/main/java/com/xkcoding/websocket/model/server/Jvm.java
class Jvm (line 17) | public class Jvm {
method getTotal (line 53) | public double getTotal() {
method setTotal (line 57) | public void setTotal(double total) {
method getMax (line 61) | public double getMax() {
method setMax (line 65) | public void setMax(double max) {
method getFree (line 69) | public double getFree() {
method setFree (line 73) | public void setFree(double free) {
method getUsed (line 77) | public double getUsed() {
method getUsage (line 81) | public double getUsage() {
method getName (line 88) | public String getName() {
method getVersion (line 92) | public String getVersion() {
method setVersion (line 96) | public void setVersion(String version) {
method getHome (line 100) | public String getHome() {
method setHome (line 104) | public void setHome(String home) {
method setStartTime (line 108) | public void setStartTime(String startTime) {
method getStartTime (line 112) | public String getStartTime() {
method setRunTime (line 117) | public void setRunTime(String runTime) {
method getRunTime (line 121) | public String getRunTime() {
FILE: demo-websocket/src/main/java/com/xkcoding/websocket/model/server/Mem.java
class Mem (line 13) | public class Mem {
method getTotal (line 29) | public double getTotal() {
method setTotal (line 33) | public void setTotal(long total) {
method getUsed (line 37) | public double getUsed() {
method setUsed (line 41) | public void setUsed(long used) {
method getFree (line 45) | public double getFree() {
method setFree (line 49) | public void setFree(long free) {
method getUsage (line 53) | public double getUsage() {
FILE: demo-websocket/src/main/java/com/xkcoding/websocket/model/server/Sys.java
class Sys (line 11) | public class Sys {
method getComputerName (line 37) | public String getComputerName() {
method setComputerName (line 41) | public void setComputerName(String computerName) {
method getComputerIp (line 45) | public String getComputerIp() {
method setComputerIp (line 49) | public void setComputerIp(String computerIp) {
method getUserDir (line 53) | public String getUserDir() {
method setUserDir (line 57) | public void setUserDir(String userDir) {
method getOsName (line 61) | public String getOsName() {
method setOsName (line 65) | public void setOsName(String osName) {
method getOsArch (line 69) | public String getOsArch() {
method setOsArch (line 73) | public void setOsArch(String osArch) {
FILE: demo-websocket/src/main/java/com/xkcoding/websocket/model/server/SysFile.java
class SysFile (line 11) | public class SysFile {
method getDirName (line 47) | public String getDirName() {
method setDirName (line 51) | public void setDirName(String dirName) {
method getSysTypeName (line 55) | public String getSysTypeName() {
method setSysTypeName (line 59) | public void setSysTypeName(String sysTypeName) {
method getTypeName (line 63) | public String getTypeName() {
method setTypeName (line 67) | public void setTypeName(String typeName) {
method getTotal (line 71) | public String getTotal() {
method setTotal (line 75) | public void setTotal(String total) {
method getFree (line 79) | public String getFree() {
method setFree (line 83) | public void setFree(String free) {
method getUsed (line 87) | public String getUsed() {
method setUsed (line 91) | public void setUsed(String used) {
method getUsage (line 95) | public double getUsage() {
method setUsage (line 99) | public void setUsage(double usage) {
FILE: demo-websocket/src/main/java/com/xkcoding/websocket/payload/KV.java
class KV (line 15) | @Data
FILE: demo-websocket/src/main/java/com/xkcoding/websocket/payload/ServerVO.java
class ServerVO (line 18) | @Data
method create (line 26) | public ServerVO create(Server server) {
FILE: demo-websocket/src/main/java/com/xkcoding/websocket/payload/server/CpuVO.java
class CpuVO (line 18) | @Data
method create (line 22) | public static CpuVO create(Cpu cpu) {
FILE: demo-websocket/src/main/java/com/xkcoding/websocket/payload/server/JvmVO.java
class JvmVO (line 18) | @Data
method create (line 22) | public static JvmVO create(Jvm jvm) {
FILE: demo-websocket/src/main/java/com/xkcoding/websocket/payload/server/MemVO.java
class MemVO (line 18) | @Data
method create (line 22) | public static MemVO create(Mem mem) {
FILE: demo-websocket/src/main/java/com/xkcoding/websocket/payload/server/SysFileVO.java
class SysFileVO (line 18) | @Data
method create (line 22) | public static SysFileVO create(List<SysFile> sysFiles) {
FILE: demo-websocket/src/main/java/com/xkcoding/websocket/payload/server/SysVO.java
class SysVO (line 18) | @Data
method create (line 22) | public static SysVO create(Sys sys) {
FILE: demo-websocket/src/main/java/com/xkcoding/websocket/task/ServerTask.java
class ServerTask (line 26) | @Slf4j
method websocket (line 35) | @Scheduled(cron = "0/2 * * * * ?")
FILE: demo-websocket/src/main/java/com/xkcoding/websocket/util/IpUtil.java
class IpUtil (line 15) | public class IpUtil {
method getIpAddr (line 16) | public static String getIpAddr(HttpServletRequest request) {
method internalIp (line 41) | public static boolean internalIp(String ip) {
method internalIp (line 46) | private static boolean internalIp(byte[] addr) {
method textToNumericFormatV4 (line 81) | public static byte[] textToNumericFormatV4(String text) {
method getHostIp (line 149) | public static String getHostIp() {
method getHostName (line 157) | public static String getHostName() {
FILE: demo-websocket/src/main/java/com/xkcoding/websocket/util/ServerUtil.java
class ServerUtil (line 15) | public class ServerUtil {
method wrapServerVO (line 22) | public static ServerVO wrapServerVO(Server server) {
method wrapServerDict (line 34) | public static Dict wrapServerDict(ServerVO serverVO) {
FILE: demo-websocket/src/main/resources/static/js/stomp.js
function Frame (line 23) | function Frame(command, headers, body) {
function Client (line 129) | function Client(ws) {
FILE: demo-websocket/src/test/java/com/xkcoding/websocket/SpringBootDemoWebsocketApplicationTests.java
class SpringBootDemoWebsocketApplicationTests (line 8) | @RunWith(SpringRunner.class)
method contextLoads (line 12) | @Test
FILE: demo-zookeeper/src/main/java/com/xkcoding/zookeeper/SpringBootDemoZookeeperApplication.java
class SpringBootDemoZookeeperApplication (line 14) | @SpringBootApplication
method main (line 17) | public static void main(String[] args) {
FILE: demo-zookeeper/src/main/java/com/xkcoding/zookeeper/aspectj/ZooLockAspect.java
class ZooLockAspect (line 31) | @Aspect
method ZooLockAspect (line 41) | @Autowired
method doLock (line 49) | @Pointcut("@annotation(com.xkcoding.zookeeper.annotation.ZooLock)")
method around (line 61) | @Around("doLock()")
method buildLockKey (line 94) | private String buildLockKey(ZooLock lock, Method method, Object[] args...
FILE: demo-zookeeper/src/main/java/com/xkcoding/zookeeper/config/ZkConfig.java
class ZkConfig (line 21) | @Configuration
method ZkConfig (line 26) | @Autowired
method curatorFramework (line 31) | @Bean
FILE: demo-zookeeper/src/main/java/com/xkcoding/zookeeper/config/props/ZkProps.java
class ZkProps (line 14) | @Data
FILE: demo-zookeeper/src/test/java/com/xkcoding/zookeeper/SpringBootDemoZookeeperApplicationTests.java
class SpringBootDemoZookeeperApplicationTests (line 20) | @RunWith(SpringRunner.class)
method getCount (line 25) | public Integer getCount() {
method test (line 38) | @Test
method testAopLock (line 48) | @Test
method testManualLock (line 64) | @Test
method aopBuy (line 71) | @ZooLock(key = "buy", timeout = 1, timeUnit = TimeUnit.MINUTES)
method manualBuy (line 78) | public void manualBuy() {
method doBuy (line 96) | public void doBuy() {
Condensed preview — 875 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (2,290K chars).
[
{
"path": ".codacy.yml",
"chars": 131,
"preview": "---\nexclude_paths:\n - '**.md'\n - '**/**.md'\n - '**.sql'\n - '**.html'\n - '**/static/**'\n - '**/templates/**'\n - '*"
},
{
"path": ".editorconfig",
"chars": 212,
"preview": "# 开发组IDE 编辑器标准\nroot = true\n\n[*]\nindent_size = 2\ncharset = utf-8\nindent_style = space\nend_of_line = lf\ninsert_final_newli"
},
{
"path": ".gitee/ISSUE_TEMPLATE/bug_report.md",
"chars": 461,
"preview": "---\nname: 报告缺陷\nabout: 报告缺陷以帮助我们改进\ntitle: \"[BUG]\"\nlabels: bug\nassignees: xkcoding\n---\n\n**请先看[《提问的智慧》](https://github.com/"
},
{
"path": ".gitee/ISSUE_TEMPLATE/feature_request.md",
"chars": 248,
"preview": "---\nname: 请求新功能\nabout: 提出你期待的功能特性\ntitle: \"[FEATURE]\"\nlabels: feature\nassignees: xkcoding\n---\n\n### 你在什么场景下需要该功能?\n\n请尽量清晰精准"
},
{
"path": ".gitee/PULL_REQUEST_TEMPLATE.md",
"chars": 306,
"preview": "* PR 修复缺陷请先开 `issue` **[报告缺陷](https://github.com/xkcoding/spring-boot-demo/issues/new?template=bug_report.md)**\n* PR 提交新"
},
{
"path": ".github/FUNDING.yml",
"chars": 47,
"preview": "custom: https://docs.xkcoding.com/SPONSER.html\n"
},
{
"path": ".github/ISSUE_TEMPLATE/bug_report.md",
"chars": 461,
"preview": "---\nname: 报告缺陷\nabout: 报告缺陷以帮助我们改进\ntitle: \"[BUG]\"\nlabels: bug\nassignees: xkcoding\n---\n\n**请先看[《提问的智慧》](https://github.com/"
},
{
"path": ".github/ISSUE_TEMPLATE/feature_request.md",
"chars": 248,
"preview": "---\nname: 请求新功能\nabout: 提出你期待的功能特性\ntitle: \"[FEATURE]\"\nlabels: feature\nassignees: xkcoding\n---\n\n### 你在什么场景下需要该功能?\n\n请尽量清晰精准"
},
{
"path": ".github/PULL_REQUEST_TEMPLATE.md",
"chars": 306,
"preview": "* PR 修复缺陷请先开 `issue` **[报告缺陷](https://github.com/xkcoding/spring-boot-demo/issues/new?template=bug_report.md)**\n* PR 提交新"
},
{
"path": ".github/workflows/maven.yml",
"chars": 364,
"preview": "name: GitHub CI\non:\n push:\n branches:\n - master\n pull_request:\njobs:\n build:\n runs-on: ubuntu-latest\n s"
},
{
"path": ".gitignore",
"chars": 448,
"preview": "# Created by .ignore support plugin (hsz.mobi)\n### xkcoding-后端 template\n### Spring Boot ###\ntarget/\n!.mvn/wrapper/maven-"
},
{
"path": ".travis.yml",
"chars": 344,
"preview": "# 语言\nlanguage: java\n# 执行脚本\nscript: \"mvn clean package -DskipTests=true -Dmaven.javadoc.skip=true -B -V\"\n# 通知\nnotificatio"
},
{
"path": "LICENSE",
"chars": 1069,
"preview": "MIT License\n\nCopyright (c) 2018 Yangkai.Shen\n\nPermission is hereby granted, free of charge, to any person obtaining a co"
},
{
"path": "README.en.md",
"chars": 20136,
"preview": "<h1 align=\"center\"><a href=\"https://github.com/xkcoding\" target=\"_blank\">Spring Boot Demo</a></h1>\n<p align=\"center\">\n "
},
{
"path": "README.md",
"chars": 15106,
"preview": "<h1 align=\"center\"><a href=\"https://github.com/xkcoding\" target=\"_blank\">Spring Boot Demo</a></h1>\n<p align=\"center\">\n "
},
{
"path": "TODO.en.md",
"chars": 5157,
"preview": "# spring-boot-demo Project TODO List\n\n## Module plan (completed: 55 / 66)\n\n- [x] ~~demo-helloworld(helloworld example)~~"
},
{
"path": "TODO.md",
"chars": 3421,
"preview": "# spring-boot-demo 项目待办列表\n\n## 模块计划(已完成:55 / 66)\n\n- [x] ~~demo-helloworld(Helloworld 示例)~~\n- [x] ~~demo-properties(读取配置文件"
},
{
"path": "demo-activiti/.gitignore",
"chars": 268,
"preview": "/target/\n!.mvn/wrapper/maven-wrapper.jar\n\n### STS ###\n.apt_generated\n.classpath\n.factorypath\n.project\n.settings\n.springB"
},
{
"path": "demo-activiti/pom.xml",
"chars": 2042,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project xmlns=\"http://maven.apache.org/POM/4.0.0\" xmlns:xsi=\"http://www.w3.org/2"
},
{
"path": "demo-activiti/src/main/java/com/xkcoding/activiti/SpringBootDemoActivitiApplication.java",
"chars": 453,
"preview": "package com.xkcoding.activiti;\n\nimport org.springframework.boot.SpringApplication;\nimport org.springframework.boot.autoc"
},
{
"path": "demo-activiti/src/main/java/com/xkcoding/activiti/config/SecurityConfiguration.java",
"chars": 2444,
"preview": "package com.xkcoding.activiti.config;\n\nimport lombok.extern.slf4j.Slf4j;\nimport org.springframework.context.annotation.B"
},
{
"path": "demo-activiti/src/main/java/com/xkcoding/activiti/util/SecurityUtil.java",
"chars": 2204,
"preview": "package com.xkcoding.activiti.util;\n\nimport lombok.RequiredArgsConstructor;\nimport org.springframework.beans.factory.ann"
},
{
"path": "demo-activiti/src/main/resources/application.yml",
"chars": 401,
"preview": "spring:\n datasource:\n url: jdbc:mysql://localhost:3306/spring-boot-demo\n username: root\n password: root\n hi"
},
{
"path": "demo-activiti/src/main/resources/processes/team01.bpmn",
"chars": 4556,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\n<definitions xmlns=\"http://www.omg.org/spec/BPMN/20100524/MODEL\""
},
{
"path": "demo-activiti/src/test/java/com/xkcoding/activiti/SpringBootDemoActivitiApplicationTests.java",
"chars": 1032,
"preview": "package com.xkcoding.activiti;\n\nimport com.xkcoding.activiti.util.SecurityUtil;\nimport org.activiti.api.process.model.Pr"
},
{
"path": "demo-actuator/.gitignore",
"chars": 268,
"preview": "/target/\n!.mvn/wrapper/maven-wrapper.jar\n\n### STS ###\n.apt_generated\n.classpath\n.factorypath\n.project\n.settings\n.springB"
},
{
"path": "demo-actuator/README.md",
"chars": 2933,
"preview": "# spring-boot-demo-actuator\n\n> 本 demo 主要演示了如何在 Spring Boot 中通过 actuator 检查项目运行情况\n\n## pom.xml\n\n```xml\n<?xml version=\"1.0\""
},
{
"path": "demo-actuator/pom.xml",
"chars": 1912,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project xmlns=\"http://maven.apache.org/POM/4.0.0\" xmlns:xsi=\"http://www.w3.org/2"
},
{
"path": "demo-actuator/src/main/java/com/xkcoding/actuator/SpringBootDemoActuatorApplication.java",
"chars": 450,
"preview": "package com.xkcoding.actuator;\n\nimport org.springframework.boot.SpringApplication;\nimport org.springframework.boot.autoc"
},
{
"path": "demo-actuator/src/main/resources/application.yml",
"chars": 473,
"preview": "server:\n port: 8080\n servlet:\n context-path: /demo\n# 若要访问端点信息,需要配置用户名和密码\nspring:\n security:\n user:\n name: "
},
{
"path": "demo-actuator/src/test/java/com/xkcoding/actuator/SpringBootDemoActuatorApplicationTests.java",
"chars": 363,
"preview": "package com.xkcoding.actuator;\n\nimport org.junit.Test;\nimport org.junit.runner.RunWith;\nimport org.springframework.boot."
},
{
"path": "demo-admin/README.md",
"chars": 1394,
"preview": "# spring-boot-demo-admin\n\n> 本 demo 主要演示了 Spring Boot 如何集成 Admin 管控台,监控管理 Spring Boot 应用,分别为 admin 服务端和 admin 客户端,两个模块。\n\n"
},
{
"path": "demo-admin/admin-client/.gitignore",
"chars": 268,
"preview": "/target/\n!.mvn/wrapper/maven-wrapper.jar\n\n### STS ###\n.apt_generated\n.classpath\n.factorypath\n.project\n.settings\n.springB"
},
{
"path": "demo-admin/admin-client/README.md",
"chars": 2699,
"preview": "# spring-boot-demo-admin-client\n\n> 本 demo 主要演示了普通项目如何集成 Spring Boot Admin,并把自己的运行状态交给 Spring Boot Admin 进行展现。\n\n## pom.xm"
},
{
"path": "demo-admin/admin-client/pom.xml",
"chars": 1713,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project xmlns=\"http://maven.apache.org/POM/4.0.0\" xmlns:xsi=\"http://www.w3.org/2"
},
{
"path": "demo-admin/admin-client/src/main/java/com/xkcoding/admin/client/SpringBootDemoAdminClientApplication.java",
"chars": 460,
"preview": "package com.xkcoding.admin.client;\n\nimport org.springframework.boot.SpringApplication;\nimport org.springframework.boot.a"
},
{
"path": "demo-admin/admin-client/src/main/java/com/xkcoding/admin/client/controller/IndexController.java",
"chars": 435,
"preview": "package com.xkcoding.admin.client.controller;\n\nimport org.springframework.web.bind.annotation.GetMapping;\nimport org.spr"
},
{
"path": "demo-admin/admin-client/src/main/resources/application.yml",
"chars": 754,
"preview": "server:\n port: 8080\n servlet:\n context-path: /demo\nspring:\n application:\n # Spring Boot Admin展示的客户端项目名,不设置,会使用自"
},
{
"path": "demo-admin/admin-client/src/test/java/com/xkcoding/admin/client/SpringBootDemoAdminClientApplicationTests.java",
"chars": 370,
"preview": "package com.xkcoding.admin.client;\n\nimport org.junit.Test;\nimport org.junit.runner.RunWith;\nimport org.springframework.b"
},
{
"path": "demo-admin/admin-server/.gitignore",
"chars": 268,
"preview": "/target/\n!.mvn/wrapper/maven-wrapper.jar\n\n### STS ###\n.apt_generated\n.classpath\n.factorypath\n.project\n.settings\n.springB"
},
{
"path": "demo-admin/admin-server/README.md",
"chars": 2178,
"preview": "# spring-boot-demo-admin-server\n\n> 本 demo 主要演示了如何搭建一个 Spring Boot Admin 的服务端项目,可视化展示自己客户端项目的运行状态。\n\n## pom.xml\n\n```xml\n<?"
},
{
"path": "demo-admin/admin-server/pom.xml",
"chars": 1572,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project xmlns=\"http://maven.apache.org/POM/4.0.0\" xmlns:xsi=\"http://www.w3.org/2"
},
{
"path": "demo-admin/admin-server/src/main/java/com/xkcoding/admin/server/SpringBootDemoAdminServerApplication.java",
"chars": 546,
"preview": "package com.xkcoding.admin.server;\n\nimport de.codecentric.boot.admin.server.config.EnableAdminServer;\nimport org.springf"
},
{
"path": "demo-admin/admin-server/src/main/resources/application.yml",
"chars": 21,
"preview": "server:\n port: 8000\n"
},
{
"path": "demo-admin/admin-server/src/test/java/com/xkcoding/admin/server/SpringBootDemoAdminServerApplicationTests.java",
"chars": 370,
"preview": "package com.xkcoding.admin.server;\n\nimport org.junit.Test;\nimport org.junit.runner.RunWith;\nimport org.springframework.b"
},
{
"path": "demo-admin/pom.xml",
"chars": 1060,
"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": "demo-async/.gitignore",
"chars": 268,
"preview": "/target/\n!.mvn/wrapper/maven-wrapper.jar\n\n### STS ###\n.apt_generated\n.classpath\n.factorypath\n.project\n.settings\n.springB"
},
{
"path": "demo-async/README.md",
"chars": 7180,
"preview": "# spring-boot-demo-async\n\n> 此 demo 主要演示了 Spring Boot 如何使用原生提供的异步任务支持,实现异步执行任务。\n\n## pom.xml\n\n```xml\n<?xml version=\"1.0\" e"
},
{
"path": "demo-async/pom.xml",
"chars": 1737,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project xmlns=\"http://maven.apache.org/POM/4.0.0\" xmlns:xsi=\"http://www.w3.org/2"
},
{
"path": "demo-async/src/main/java/com/xkcoding/async/SpringBootDemoAsyncApplication.java",
"chars": 519,
"preview": "package com.xkcoding.async;\n\nimport org.springframework.boot.SpringApplication;\nimport org.springframework.boot.autoconf"
},
{
"path": "demo-async/src/main/java/com/xkcoding/async/task/TaskFactory.java",
"chars": 1721,
"preview": "package com.xkcoding.async.task;\n\nimport lombok.extern.slf4j.Slf4j;\nimport org.springframework.scheduling.annotation.Asy"
},
{
"path": "demo-async/src/main/resources/application.yml",
"chars": 313,
"preview": "spring:\n task:\n execution:\n pool:\n # 最大线程数\n max-size: 16\n # 核心线程数\n core-size: 16\n "
},
{
"path": "demo-async/src/test/java/com/xkcoding/async/SpringBootDemoAsyncApplicationTests.java",
"chars": 358,
"preview": "package com.xkcoding.async;\n\nimport org.junit.Test;\nimport org.junit.runner.RunWith;\nimport org.springframework.boot.tes"
},
{
"path": "demo-async/src/test/java/com/xkcoding/async/task/TaskFactoryTest.java",
"chars": 1407,
"preview": "package com.xkcoding.async.task;\n\nimport com.xkcoding.async.SpringBootDemoAsyncApplicationTests;\nimport lombok.extern.sl"
},
{
"path": "demo-cache-ehcache/.gitignore",
"chars": 268,
"preview": "/target/\n!.mvn/wrapper/maven-wrapper.jar\n\n### STS ###\n.apt_generated\n.classpath\n.factorypath\n.project\n.settings\n.springB"
},
{
"path": "demo-cache-ehcache/README.md",
"chars": 6655,
"preview": "# spring-boot-demo-cache-ehcache\n\n> 此 demo 主要演示了 Spring Boot 如何集成 ehcache 使用缓存。\n\n## pom.xml\n\n```xml\n<?xml version=\"1.0\" "
},
{
"path": "demo-cache-ehcache/pom.xml",
"chars": 2194,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project xmlns=\"http://maven.apache.org/POM/4.0.0\" xmlns:xsi=\"http://www.w3.org/2"
},
{
"path": "demo-cache-ehcache/src/main/java/com/xkcoding/cache/ehcache/SpringBootDemoCacheEhcacheApplication.java",
"chars": 538,
"preview": "package com.xkcoding.cache.ehcache;\n\nimport org.springframework.boot.SpringApplication;\nimport org.springframework.boot."
},
{
"path": "demo-cache-ehcache/src/main/java/com/xkcoding/cache/ehcache/entity/User.java",
"chars": 519,
"preview": "package com.xkcoding.cache.ehcache.entity;\n\nimport lombok.AllArgsConstructor;\nimport lombok.Data;\nimport lombok.NoArgsCo"
},
{
"path": "demo-cache-ehcache/src/main/java/com/xkcoding/cache/ehcache/service/UserService.java",
"chars": 527,
"preview": "package com.xkcoding.cache.ehcache.service;\n\nimport com.xkcoding.cache.ehcache.entity.User;\n\n/**\n * <p>\n * UserService\n "
},
{
"path": "demo-cache-ehcache/src/main/java/com/xkcoding/cache/ehcache/service/impl/UserServiceImpl.java",
"chars": 1730,
"preview": "package com.xkcoding.cache.ehcache.service.impl;\n\nimport com.google.common.collect.Maps;\nimport com.xkcoding.cache.ehcac"
},
{
"path": "demo-cache-ehcache/src/main/resources/application.yml",
"chars": 125,
"preview": "spring:\n cache:\n type: ehcache\n ehcache:\n config: classpath:ehcache.xml\nlogging:\n level:\n com.xkcoding: "
},
{
"path": "demo-cache-ehcache/src/main/resources/ehcache.xml",
"chars": 1105,
"preview": "<!-- ehcache配置 -->\n<ehcache\n xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n xsi:noNamespaceSchemaL"
},
{
"path": "demo-cache-ehcache/src/test/java/com/xkcoding/cache/ehcache/SpringBootDemoCacheEhcacheApplicationTests.java",
"chars": 372,
"preview": "package com.xkcoding.cache.ehcache;\n\nimport org.junit.Test;\nimport org.junit.runner.RunWith;\nimport org.springframework."
},
{
"path": "demo-cache-ehcache/src/test/java/com/xkcoding/cache/ehcache/service/UserServiceTest.java",
"chars": 1346,
"preview": "package com.xkcoding.cache.ehcache.service;\n\nimport com.xkcoding.cache.ehcache.SpringBootDemoCacheEhcacheApplicationTest"
},
{
"path": "demo-cache-redis/.gitignore",
"chars": 268,
"preview": "/target/\n!.mvn/wrapper/maven-wrapper.jar\n\n### STS ###\n.apt_generated\n.classpath\n.factorypath\n.project\n.settings\n.springB"
},
{
"path": "demo-cache-redis/README.md",
"chars": 8658,
"preview": "# spring-boot-demo-cache-redis\n\n> 此 demo 主要演示了 Spring Boot 如何整合 redis,操作redis中的数据,并使用redis缓存数据。连接池使用 Lettuce。\n\n## pom.x"
},
{
"path": "demo-cache-redis/pom.xml",
"chars": 2569,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project xmlns=\"http://maven.apache.org/POM/4.0.0\" xmlns:xsi=\"http://www.w3.org/2"
},
{
"path": "demo-cache-redis/src/main/java/com/xkcoding/cache/redis/SpringBootDemoCacheRedisApplication.java",
"chars": 364,
"preview": "package com.xkcoding.cache.redis;\n\nimport org.springframework.boot.SpringApplication;\nimport org.springframework.boot.au"
},
{
"path": "demo-cache-redis/src/main/java/com/xkcoding/cache/redis/config/RedisConfig.java",
"chars": 2405,
"preview": "package com.xkcoding.cache.redis.config;\n\nimport org.springframework.boot.autoconfigure.AutoConfigureAfter;\nimport org.s"
},
{
"path": "demo-cache-redis/src/main/java/com/xkcoding/cache/redis/entity/User.java",
"chars": 517,
"preview": "package com.xkcoding.cache.redis.entity;\n\nimport lombok.AllArgsConstructor;\nimport lombok.Data;\nimport lombok.NoArgsCons"
},
{
"path": "demo-cache-redis/src/main/java/com/xkcoding/cache/redis/service/UserService.java",
"chars": 523,
"preview": "package com.xkcoding.cache.redis.service;\n\nimport com.xkcoding.cache.redis.entity.User;\n\n/**\n * <p>\n * UserService\n * </"
},
{
"path": "demo-cache-redis/src/main/java/com/xkcoding/cache/redis/service/impl/UserServiceImpl.java",
"chars": 1724,
"preview": "package com.xkcoding.cache.redis.service.impl;\n\nimport com.google.common.collect.Maps;\nimport com.xkcoding.cache.redis.e"
},
{
"path": "demo-cache-redis/src/main/resources/application.yml",
"chars": 490,
"preview": "spring:\n redis:\n host: localhost\n # 连接超时时间(记得添加单位,Duration)\n timeout: 10000ms\n # Redis默认情况下有16个分片,这里配置具体使用的"
},
{
"path": "demo-cache-redis/src/test/java/com/xkcoding/cache/redis/RedisTest.java",
"chars": 1586,
"preview": "package com.xkcoding.cache.redis;\n\nimport com.xkcoding.cache.redis.entity.User;\nimport lombok.extern.slf4j.Slf4j;\nimport"
},
{
"path": "demo-cache-redis/src/test/java/com/xkcoding/cache/redis/SpringBootDemoCacheRedisApplicationTests.java",
"chars": 368,
"preview": "package com.xkcoding.cache.redis;\n\nimport org.junit.Test;\nimport org.junit.runner.RunWith;\nimport org.springframework.bo"
},
{
"path": "demo-cache-redis/src/test/java/com/xkcoding/cache/redis/service/UserServiceTest.java",
"chars": 1332,
"preview": "package com.xkcoding.cache.redis.service;\n\nimport com.xkcoding.cache.redis.SpringBootDemoCacheRedisApplicationTests;\nimp"
},
{
"path": "demo-codegen/.gitignore",
"chars": 295,
"preview": "/target/\n!.mvn/wrapper/maven-wrapper.jar\n\n### STS ###\n.apt_generated\n.classpath\n.factorypath\n.project\n.settings\n.springB"
},
{
"path": "demo-codegen/README.md",
"chars": 13372,
"preview": "# spring-boot-demo-codegen\n\n> 此 demo 主要演示了 Spring Boot 使用**模板技术**生成代码,并提供前端页面,可生成 Entity/Mapper/Service/Controller 等代码。\n"
},
{
"path": "demo-codegen/pom.xml",
"chars": 2732,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project xmlns=\"http://maven.apache.org/POM/4.0.0\" xmlns:xsi=\"http://www.w3.org/2"
},
{
"path": "demo-codegen/src/main/java/com/xkcoding/codegen/SpringBootDemoCodegenApplication.java",
"chars": 449,
"preview": "package com.xkcoding.codegen;\n\nimport org.springframework.boot.SpringApplication;\nimport org.springframework.boot.autoco"
},
{
"path": "demo-codegen/src/main/java/com/xkcoding/codegen/common/IResultCode.java",
"chars": 330,
"preview": "package com.xkcoding.codegen.common;\n\n/**\n * <p>\n * 统一状态码接口\n * </p>\n *\n * @author yangkai.shen\n * @date Created in 2019-"
},
{
"path": "demo-codegen/src/main/java/com/xkcoding/codegen/common/PageResult.java",
"chars": 486,
"preview": "package com.xkcoding.codegen.common;\n\nimport lombok.AllArgsConstructor;\nimport lombok.Data;\n\nimport java.util.List;\n\n/**"
},
{
"path": "demo-codegen/src/main/java/com/xkcoding/codegen/common/R.java",
"chars": 1944,
"preview": "package com.xkcoding.codegen.common;\n\nimport lombok.Data;\nimport lombok.NoArgsConstructor;\n\n/**\n * <p>\n * 统一API对象返回\n * <"
},
{
"path": "demo-codegen/src/main/java/com/xkcoding/codegen/common/ResultCode.java",
"chars": 533,
"preview": "package com.xkcoding.codegen.common;\n\nimport lombok.Getter;\n\n/**\n * <p>\n * 通用状态枚举\n * </p>\n *\n * @author yangkai.shen\n * "
},
{
"path": "demo-codegen/src/main/java/com/xkcoding/codegen/constants/GenConstants.java",
"chars": 234,
"preview": "package com.xkcoding.codegen.constants;\n\n/**\n * <p>\n * 常量池\n * </p>\n *\n * @author yangkai.shen\n * @date Created in 2019-0"
},
{
"path": "demo-codegen/src/main/java/com/xkcoding/codegen/controller/CodeGenController.java",
"chars": 1559,
"preview": "package com.xkcoding.codegen.controller;\n\nimport cn.hutool.core.io.IoUtil;\nimport com.xkcoding.codegen.common.R;\nimport "
},
{
"path": "demo-codegen/src/main/java/com/xkcoding/codegen/entity/ColumnEntity.java",
"chars": 707,
"preview": "package com.xkcoding.codegen.entity;\n\nimport lombok.Data;\n\n/**\n * <p>\n * 列属性: https://blog.csdn.net/lkforce/article/deta"
},
{
"path": "demo-codegen/src/main/java/com/xkcoding/codegen/entity/GenConfig.java",
"chars": 591,
"preview": "package com.xkcoding.codegen.entity;\n\nimport lombok.Data;\n\n/**\n * <p>\n * 生成配置\n * </p>\n *\n * @author yangkai.shen\n * @dat"
},
{
"path": "demo-codegen/src/main/java/com/xkcoding/codegen/entity/TableEntity.java",
"chars": 625,
"preview": "package com.xkcoding.codegen.entity;\n\nimport lombok.Data;\n\nimport java.util.List;\n\n/**\n * <p>\n * 表属性: https://blog.csdn."
},
{
"path": "demo-codegen/src/main/java/com/xkcoding/codegen/entity/TableRequest.java",
"chars": 592,
"preview": "package com.xkcoding.codegen.entity;\n\nimport lombok.Data;\n\n/**\n * <p>\n * 表格请求参数\n * </p>\n *\n * @author yangkai.shen\n * @d"
},
{
"path": "demo-codegen/src/main/java/com/xkcoding/codegen/service/CodeGenService.java",
"chars": 620,
"preview": "package com.xkcoding.codegen.service;\n\nimport cn.hutool.db.Entity;\nimport com.xkcoding.codegen.common.PageResult;\nimport"
},
{
"path": "demo-codegen/src/main/java/com/xkcoding/codegen/service/impl/CodeGenServiceImpl.java",
"chars": 4493,
"preview": "package com.xkcoding.codegen.service.impl;\n\nimport cn.hutool.core.io.IoUtil;\nimport cn.hutool.core.util.StrUtil;\nimport "
},
{
"path": "demo-codegen/src/main/java/com/xkcoding/codegen/utils/CodeGenUtil.java",
"chars": 9772,
"preview": "package com.xkcoding.codegen.utils;\n\nimport cn.hutool.core.date.DateUtil;\nimport cn.hutool.core.io.IoUtil;\nimport cn.hut"
},
{
"path": "demo-codegen/src/main/java/com/xkcoding/codegen/utils/DbUtil.java",
"chars": 699,
"preview": "package com.xkcoding.codegen.utils;\n\nimport com.xkcoding.codegen.entity.TableRequest;\nimport com.zaxxer.hikari.HikariDat"
},
{
"path": "demo-codegen/src/main/resources/application.yml",
"chars": 55,
"preview": "server:\n port: 8080\n servlet:\n context-path: /demo"
},
{
"path": "demo-codegen/src/main/resources/generator.properties",
"chars": 625,
"preview": "#\\u4EE3\\u7801\\u751F\\u6210\\u5668\\uFF0C\\u914D\\u7F6E\\u4FE1\\u606F\nmainPath=com.xkcoding\n#\\u5305\\u540D\npackage=com.xkcoding\nm"
},
{
"path": "demo-codegen/src/main/resources/jdbc_type.properties",
"chars": 314,
"preview": "tinyint=TINYINT\nsmallint=SMALLINT\nmediumint=MEDIUMINT\nint=INTEGER\ninteger=INTEGER\nbigint=BIGINT\nfloat=FLOAT\ndouble=DOUBL"
},
{
"path": "demo-codegen/src/main/resources/logback-spring.xml",
"chars": 3516,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<configuration>\n <property name=\"FILE_ERROR_PATTERN\"\n value=\"${FILE_L"
},
{
"path": "demo-codegen/src/main/resources/static/index.html",
"chars": 11669,
"preview": "<!DOCTYPE html>\n<html>\n<head>\n <meta charset=\"utf-8\">\n <title>代码生成器</title>\n <!-- import Vue.js -->\n <script"
},
{
"path": "demo-codegen/src/main/resources/static/libs/datejs/date-zh-CN.js",
"chars": 30350,
"preview": "/**\n * @version: 1.0 Alpha-1\n * @author Coolite Inc. http://www.coolite.com/\n * @date: 2008-05-13\n * @copyright: Copyrig"
},
{
"path": "demo-codegen/src/main/resources/static/libs/iview/iview.css",
"chars": 308454,
"preview": ".ivu-load-loop{-webkit-animation:ani-load-loop 1s linear infinite;animation:ani-load-loop 1s linear infinite}@-webkit-ke"
},
{
"path": "demo-codegen/src/main/resources/template/Controller.java.vm",
"chars": 3453,
"preview": "package ${package}.${moduleName}.controller;\n\nimport com.baomidou.mybatisplus.core.toolkit.Wrappers;\nimport com.baomidou"
},
{
"path": "demo-codegen/src/main/resources/template/Entity.java.vm",
"chars": 1057,
"preview": "package ${package}.${moduleName}.entity;\n\nimport com.baomidou.mybatisplus.annotation.TableId;\nimport com.baomidou.mybati"
},
{
"path": "demo-codegen/src/main/resources/template/Mapper.java.vm",
"chars": 380,
"preview": "package ${package}.${moduleName}.mapper;\n\nimport com.baomidou.mybatisplus.core.mapper.BaseMapper;\nimport org.springframe"
},
{
"path": "demo-codegen/src/main/resources/template/Mapper.xml.vm",
"chars": 645,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE mapper PUBLIC \"-//mybatis.org//DTD Mapper 3.0//EN\" \"http://mybatis.org/"
},
{
"path": "demo-codegen/src/main/resources/template/Service.java.vm",
"chars": 324,
"preview": "package ${package}.${moduleName}.service;\n\nimport com.baomidou.mybatisplus.extension.service.IService;\nimport ${package}"
},
{
"path": "demo-codegen/src/main/resources/template/ServiceImpl.java.vm",
"chars": 607,
"preview": "package ${package}.${moduleName}.service.impl;\n\nimport com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;\nimpo"
},
{
"path": "demo-codegen/src/main/resources/template/api.js.vm",
"chars": 943,
"preview": "import request from '@/router/axios'\n\n/**\n * 分页查询${comments}\n * @param query 分页查询条件\n */\nexport function fetchList(query)"
},
{
"path": "demo-codegen/src/test/java/com/xkcoding/codegen/CodeGenServiceTest.java",
"chars": 2313,
"preview": "package com.xkcoding.codegen;\n\nimport cn.hutool.core.io.IoUtil;\nimport cn.hutool.db.Entity;\nimport com.xkcoding.codegen."
},
{
"path": "demo-codegen/src/test/java/com/xkcoding/codegen/SpringBootDemoCodegenApplicationTests.java",
"chars": 361,
"preview": "package com.xkcoding.codegen;\n\nimport org.junit.Test;\nimport org.junit.runner.RunWith;\nimport org.springframework.boot.t"
},
{
"path": "demo-docker/.gitignore",
"chars": 268,
"preview": "/target/\n!.mvn/wrapper/maven-wrapper.jar\n\n### STS ###\n.apt_generated\n.classpath\n.factorypath\n.project\n.settings\n.springB"
},
{
"path": "demo-docker/Dockerfile",
"chars": 359,
"preview": "# 基础镜像\nFROM openjdk:8-jdk-alpine\n\n# 作者信息\nMAINTAINER \"Yangkai.Shen 237497819@qq.com\"\n\n# 添加一个存储空间\nVOLUME /tmp\n\n# 暴露8080端口\n"
},
{
"path": "demo-docker/README.md",
"chars": 2950,
"preview": "# spring-boot-demo-docker\n\n> 本 demo 主要演示了如何容器化一个 Spring Boot 项目。通过 `Dockerfile` 的方式打包成一个 images 。\n\n## Dockerfile\n\n```do"
},
{
"path": "demo-docker/pom.xml",
"chars": 2645,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project xmlns=\"http://maven.apache.org/POM/4.0.0\" xmlns:xsi=\"http://www.w3.org/2"
},
{
"path": "demo-docker/src/main/java/com/xkcoding/docker/SpringBootDemoDockerApplication.java",
"chars": 445,
"preview": "package com.xkcoding.docker;\n\nimport org.springframework.boot.SpringApplication;\nimport org.springframework.boot.autocon"
},
{
"path": "demo-docker/src/main/java/com/xkcoding/docker/controller/HelloController.java",
"chars": 486,
"preview": "package com.xkcoding.docker.controller;\n\nimport org.springframework.web.bind.annotation.GetMapping;\nimport org.springfra"
},
{
"path": "demo-docker/src/main/resources/application.yml",
"chars": 55,
"preview": "server:\n port: 8080\n servlet:\n context-path: /demo"
},
{
"path": "demo-docker/src/test/java/com/xkcoding/docker/SpringBootDemoDockerApplicationTests.java",
"chars": 359,
"preview": "package com.xkcoding.docker;\n\nimport org.junit.Test;\nimport org.junit.runner.RunWith;\nimport org.springframework.boot.te"
},
{
"path": "demo-dubbo/.gitignore",
"chars": 268,
"preview": "/target/\n!.mvn/wrapper/maven-wrapper.jar\n\n### STS ###\n.apt_generated\n.classpath\n.factorypath\n.project\n.settings\n.springB"
},
{
"path": "demo-dubbo/README.md",
"chars": 2401,
"preview": "# spring-boot-demo-dubbo\n\n> 此 demo 主要演示了 Spring Boot 如何集成 Dubbo,demo 分了3个module,分别为公共模块 `spring-boot-demo-dubbo-common`、"
},
{
"path": "demo-dubbo/dubbo-common/.gitignore",
"chars": 268,
"preview": "/target/\n!.mvn/wrapper/maven-wrapper.jar\n\n### STS ###\n.apt_generated\n.classpath\n.factorypath\n.project\n.settings\n.springB"
},
{
"path": "demo-dubbo/dubbo-common/README.md",
"chars": 1243,
"preview": "# spring-boot-demo-dubbo-common\n\n> 此 module 主要是用于公共部分,主要存放工具类,实体,以及服务提供方/调用方的接口定义\n\n## pom.xml\n\n```xml\n<?xml version=\"1.0"
},
{
"path": "demo-dubbo/dubbo-common/pom.xml",
"chars": 810,
"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": "demo-dubbo/dubbo-common/src/main/java/com/xkcoding/dubbo/common/service/HelloService.java",
"chars": 285,
"preview": "package com.xkcoding.dubbo.common.service;\n\n/**\n * <p>\n * Hello服务接口\n * </p>\n *\n * @author yangkai.shen\n * @date Created "
},
{
"path": "demo-dubbo/dubbo-consumer/.gitignore",
"chars": 268,
"preview": "/target/\n!.mvn/wrapper/maven-wrapper.jar\n\n### STS ###\n.apt_generated\n.classpath\n.factorypath\n.project\n.settings\n.springB"
},
{
"path": "demo-dubbo/dubbo-consumer/README.md",
"chars": 3198,
"preview": "# spring-boot-demo-dubbo-consumer\n\n> 此 module 主要是服务调用方的示例\n\n## pom.xml\n\n```xml\n<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<pr"
},
{
"path": "demo-dubbo/dubbo-consumer/pom.xml",
"chars": 1954,
"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": "demo-dubbo/dubbo-consumer/src/main/java/com/xkcoding/dubbo/consumer/SpringBootDemoDubboConsumerApplication.java",
"chars": 567,
"preview": "package com.xkcoding.dubbo.consumer;\n\nimport com.alibaba.dubbo.spring.boot.annotation.EnableDubboConfiguration;\nimport o"
},
{
"path": "demo-dubbo/dubbo-consumer/src/main/java/com/xkcoding/dubbo/consumer/controller/HelloController.java",
"chars": 803,
"preview": "package com.xkcoding.dubbo.consumer.controller;\n\nimport com.alibaba.dubbo.config.annotation.Reference;\nimport com.xkcodi"
},
{
"path": "demo-dubbo/dubbo-consumer/src/main/resources/application.yml",
"chars": 177,
"preview": "server:\n port: 8080\n servlet:\n context-path: /demo\n\nspring:\n dubbo:\n application:\n name: spring-boot-demo-"
},
{
"path": "demo-dubbo/dubbo-consumer/src/test/java/com/xkcoding/dubbo/consumer/SpringBootDemoDubboConsumerApplicationTests.java",
"chars": 374,
"preview": "package com.xkcoding.dubbo.consumer;\n\nimport org.junit.Test;\nimport org.junit.runner.RunWith;\nimport org.springframework"
},
{
"path": "demo-dubbo/dubbo-provider/.gitignore",
"chars": 268,
"preview": "/target/\n!.mvn/wrapper/maven-wrapper.jar\n\n### STS ###\n.apt_generated\n.classpath\n.factorypath\n.project\n.settings\n.springB"
},
{
"path": "demo-dubbo/dubbo-provider/README.md",
"chars": 3181,
"preview": "# spring-boot-demo-dubbo-provider\n\n> 此 module 主要是服务提供方示例\n\n## pom.xml\n\n```xml\n<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<pro"
},
{
"path": "demo-dubbo/dubbo-provider/pom.xml",
"chars": 1954,
"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": "demo-dubbo/dubbo-provider/src/main/java/com/xkcoding/dubbo/provider/SpringBootDemoDubboProviderApplication.java",
"chars": 567,
"preview": "package com.xkcoding.dubbo.provider;\n\nimport com.alibaba.dubbo.spring.boot.annotation.EnableDubboConfiguration;\nimport o"
},
{
"path": "demo-dubbo/dubbo-provider/src/main/java/com/xkcoding/dubbo/provider/service/HelloServiceImpl.java",
"chars": 646,
"preview": "package com.xkcoding.dubbo.provider.service;\n\nimport com.alibaba.dubbo.config.annotation.Service;\nimport com.xkcoding.du"
},
{
"path": "demo-dubbo/dubbo-provider/src/main/resources/application.yml",
"chars": 177,
"preview": "server:\n port: 9090\n servlet:\n context-path: /demo\n\nspring:\n dubbo:\n application:\n name: spring-boot-demo-"
},
{
"path": "demo-dubbo/dubbo-provider/src/test/java/com/xkcoding/dubbo/provider/SpringBootDemoDubboProviderApplicationTests.java",
"chars": 374,
"preview": "package com.xkcoding.dubbo.provider;\n\nimport org.junit.Test;\nimport org.junit.runner.RunWith;\nimport org.springframework"
},
{
"path": "demo-dubbo/pom.xml",
"chars": 1138,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project xmlns=\"http://maven.apache.org/POM/4.0.0\" xmlns:xsi=\"http://www.w3.org/2"
},
{
"path": "demo-dynamic-datasource/.gitignore",
"chars": 333,
"preview": "HELP.md\ntarget/\n!.mvn/wrapper/maven-wrapper.jar\n!**/src/main/**\n!**/src/test/**\n\n### STS ###\n.apt_generated\n.classpath\n."
},
{
"path": "demo-dynamic-datasource/README.md",
"chars": 15677,
"preview": "# spring-boot-demo-dynamic-datasource\n\n> 此 demo 主要演示了 Spring Boot 项目如何通过接口`动态添加/删除`数据源,添加数据源之后如何`动态切换`数据源,然后使用 mybatis 查"
},
{
"path": "demo-dynamic-datasource/db/init.sql",
"chars": 769,
"preview": "CREATE TABLE IF NOT EXISTS `datasource_config`\n(\n `id` bigint(13) NOT NULL AUTO_INCREMENT COMMENT '主键',\n `"
},
{
"path": "demo-dynamic-datasource/db/user.sql",
"chars": 650,
"preview": "CREATE TABLE IF NOT EXISTS `test_user`\n(\n `id` bigint(13) NOT NULL AUTO_INCREMENT COMMENT '主键',\n `name` varcha"
},
{
"path": "demo-dynamic-datasource/pom.xml",
"chars": 2071,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project xmlns=\"http://maven.apache.org/POM/4.0.0\" xmlns:xsi=\"http://www.w3.org/2"
},
{
"path": "demo-dynamic-datasource/src/main/java/com/xkcoding/dynamic/datasource/SpringBootDemoDynamicDatasourceApplication.java",
"chars": 1520,
"preview": "package com.xkcoding.dynamic.datasource;\n\nimport com.xkcoding.dynamic.datasource.datasource.DatasourceConfigCache;\nimpor"
},
{
"path": "demo-dynamic-datasource/src/main/java/com/xkcoding/dynamic/datasource/annotation/DefaultDatasource.java",
"chars": 308,
"preview": "package com.xkcoding.dynamic.datasource.annotation;\n\nimport java.lang.annotation.*;\n\n/**\n * <p>\n * 用户标识仅可以使用默认数据源\n * </p"
},
{
"path": "demo-dynamic-datasource/src/main/java/com/xkcoding/dynamic/datasource/aspect/DatasourceSelectorAspect.java",
"chars": 2742,
"preview": "package com.xkcoding.dynamic.datasource.aspect;\n\nimport com.xkcoding.dynamic.datasource.annotation.DefaultDatasource;\nim"
},
{
"path": "demo-dynamic-datasource/src/main/java/com/xkcoding/dynamic/datasource/config/DatasourceConfiguration.java",
"chars": 835,
"preview": "package com.xkcoding.dynamic.datasource.config;\n\nimport com.xkcoding.dynamic.datasource.datasource.DynamicDataSource;\nim"
},
{
"path": "demo-dynamic-datasource/src/main/java/com/xkcoding/dynamic/datasource/config/MyMapper.java",
"chars": 384,
"preview": "package com.xkcoding.dynamic.datasource.config;\n\nimport tk.mybatis.mapper.annotation.RegisterMapper;\nimport tk.mybatis.m"
},
{
"path": "demo-dynamic-datasource/src/main/java/com/xkcoding/dynamic/datasource/config/MybatisConfiguration.java",
"chars": 1087,
"preview": "package com.xkcoding.dynamic.datasource.config;\n\nimport lombok.SneakyThrows;\nimport org.apache.ibatis.session.SqlSession"
},
{
"path": "demo-dynamic-datasource/src/main/java/com/xkcoding/dynamic/datasource/controller/DatasourceConfigController.java",
"chars": 1319,
"preview": "package com.xkcoding.dynamic.datasource.controller;\n\nimport com.xkcoding.dynamic.datasource.annotation.DefaultDatasource"
},
{
"path": "demo-dynamic-datasource/src/main/java/com/xkcoding/dynamic/datasource/controller/UserController.java",
"chars": 798,
"preview": "package com.xkcoding.dynamic.datasource.controller;\n\nimport com.xkcoding.dynamic.datasource.mapper.UserMapper;\nimport co"
},
{
"path": "demo-dynamic-datasource/src/main/java/com/xkcoding/dynamic/datasource/datasource/DatasourceConfigCache.java",
"chars": 1198,
"preview": "package com.xkcoding.dynamic.datasource.datasource;\n\nimport com.xkcoding.dynamic.datasource.model.DatasourceConfig;\n\nimp"
},
{
"path": "demo-dynamic-datasource/src/main/java/com/xkcoding/dynamic/datasource/datasource/DatasourceConfigContextHolder.java",
"chars": 845,
"preview": "package com.xkcoding.dynamic.datasource.datasource;\n\n/**\n * <p>\n * 数据源标识管理\n * </p>\n *\n * @author yangkai.shen\n * @date C"
},
{
"path": "demo-dynamic-datasource/src/main/java/com/xkcoding/dynamic/datasource/datasource/DatasourceHolder.java",
"chars": 2104,
"preview": "package com.xkcoding.dynamic.datasource.datasource;\n\nimport com.zaxxer.hikari.HikariDataSource;\n\nimport java.util.Map;\ni"
},
{
"path": "demo-dynamic-datasource/src/main/java/com/xkcoding/dynamic/datasource/datasource/DatasourceManager.java",
"chars": 1113,
"preview": "package com.xkcoding.dynamic.datasource.datasource;\n\nimport com.zaxxer.hikari.HikariDataSource;\nimport lombok.Getter;\n\ni"
},
{
"path": "demo-dynamic-datasource/src/main/java/com/xkcoding/dynamic/datasource/datasource/DatasourceScheduler.java",
"chars": 1095,
"preview": "package com.xkcoding.dynamic.datasource.datasource;\n\nimport java.util.concurrent.ScheduledExecutorService;\nimport java.u"
},
{
"path": "demo-dynamic-datasource/src/main/java/com/xkcoding/dynamic/datasource/datasource/DynamicDataSource.java",
"chars": 2314,
"preview": "package com.xkcoding.dynamic.datasource.datasource;\n\nimport com.xkcoding.dynamic.datasource.model.DatasourceConfig;\nimpo"
},
{
"path": "demo-dynamic-datasource/src/main/java/com/xkcoding/dynamic/datasource/mapper/DatasourceConfigMapper.java",
"chars": 404,
"preview": "package com.xkcoding.dynamic.datasource.mapper;\n\nimport com.xkcoding.dynamic.datasource.config.MyMapper;\nimport com.xkco"
},
{
"path": "demo-dynamic-datasource/src/main/java/com/xkcoding/dynamic/datasource/mapper/UserMapper.java",
"chars": 365,
"preview": "package com.xkcoding.dynamic.datasource.mapper;\n\nimport com.xkcoding.dynamic.datasource.config.MyMapper;\nimport com.xkco"
},
{
"path": "demo-dynamic-datasource/src/main/java/com/xkcoding/dynamic/datasource/model/DatasourceConfig.java",
"chars": 1251,
"preview": "package com.xkcoding.dynamic.datasource.model;\n\nimport lombok.Data;\n\nimport javax.persistence.Column;\nimport javax.persi"
},
{
"path": "demo-dynamic-datasource/src/main/java/com/xkcoding/dynamic/datasource/model/User.java",
"chars": 609,
"preview": "package com.xkcoding.dynamic.datasource.model;\n\nimport lombok.Data;\n\nimport javax.persistence.Column;\nimport javax.persi"
},
{
"path": "demo-dynamic-datasource/src/main/java/com/xkcoding/dynamic/datasource/utils/SpringUtil.java",
"chars": 2154,
"preview": "package com.xkcoding.dynamic.datasource.utils;\n\nimport lombok.extern.slf4j.Slf4j;\nimport org.springframework.beans.facto"
},
{
"path": "demo-dynamic-datasource/src/main/resources/application.yml",
"chars": 271,
"preview": "server:\n port: 8080\n servlet:\n context-path: /demo\nspring:\n datasource:\n url: jdbc:mysql://127.0.0.1:3306/sprin"
},
{
"path": "demo-dynamic-datasource/src/test/java/com/xkcoding/dynamic/datasource/SpringBootDemoDynamicDatasourceApplicationTests.java",
"chars": 382,
"preview": "package com.xkcoding.dynamic.datasource;\n\nimport org.junit.Test;\nimport org.junit.runner.RunWith;\nimport org.springframe"
},
{
"path": "demo-elasticsearch/.gitignore",
"chars": 268,
"preview": "/target/\n!.mvn/wrapper/maven-wrapper.jar\n\n### STS ###\n.apt_generated\n.classpath\n.factorypath\n.project\n.settings\n.springB"
},
{
"path": "demo-elasticsearch/README.md",
"chars": 12831,
"preview": "# spring-boot-demo-elasticsearch\n\n> 此 demo 主要演示了 Spring Boot 如何集成 `spring-boot-starter-data-elasticsearch` 完成对 ElasticSe"
},
{
"path": "demo-elasticsearch/pom.xml",
"chars": 2205,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project xmlns=\"http://maven.apache.org/POM/4.0.0\" xmlns:xsi=\"http://www.w3.org/2"
},
{
"path": "demo-elasticsearch/src/main/java/com/xkcoding/elasticsearch/SpringBootDemoElasticsearchApplication.java",
"chars": 467,
"preview": "package com.xkcoding.elasticsearch;\n\nimport org.springframework.boot.SpringApplication;\nimport org.springframework.boot."
},
{
"path": "demo-elasticsearch/src/main/java/com/xkcoding/elasticsearch/constants/EsConsts.java",
"chars": 297,
"preview": "package com.xkcoding.elasticsearch.constants;\n\n/**\n * <p>\n * ES常量池\n * </p>\n *\n * @author yangkai.shen\n * @date Created i"
},
{
"path": "demo-elasticsearch/src/main/java/com/xkcoding/elasticsearch/model/Person.java",
"chars": 1243,
"preview": "package com.xkcoding.elasticsearch.model;\n\nimport com.xkcoding.elasticsearch.constants.EsConsts;\nimport lombok.AllArgsCo"
},
{
"path": "demo-elasticsearch/src/main/java/com/xkcoding/elasticsearch/repository/PersonRepository.java",
"chars": 553,
"preview": "package com.xkcoding.elasticsearch.repository;\n\nimport com.xkcoding.elasticsearch.model.Person;\nimport org.springframewo"
},
{
"path": "demo-elasticsearch/src/main/resources/application.yml",
"chars": 105,
"preview": "spring:\n data:\n elasticsearch:\n cluster-name: docker-cluster\n cluster-nodes: localhost:9300"
},
{
"path": "demo-elasticsearch/src/test/java/com/xkcoding/elasticsearch/SpringBootDemoElasticsearchApplicationTests.java",
"chars": 373,
"preview": "package com.xkcoding.elasticsearch;\n\nimport org.junit.Test;\nimport org.junit.runner.RunWith;\nimport org.springframework."
},
{
"path": "demo-elasticsearch/src/test/java/com/xkcoding/elasticsearch/repository/PersonRepositoryTest.java",
"chars": 8291,
"preview": "package com.xkcoding.elasticsearch.repository;\n\nimport cn.hutool.core.date.DateUtil;\nimport cn.hutool.json.JSONUtil;\nimp"
},
{
"path": "demo-elasticsearch/src/test/java/com/xkcoding/elasticsearch/template/TemplateTest.java",
"chars": 1026,
"preview": "package com.xkcoding.elasticsearch.template;\n\nimport com.xkcoding.elasticsearch.SpringBootDemoElasticsearchApplicationTe"
},
{
"path": "demo-elasticsearch-rest-high-level-client/.gitignore",
"chars": 268,
"preview": "/target/\n!.mvn/wrapper/maven-wrapper.jar\n\n### STS ###\n.apt_generated\n.classpath\n.factorypath\n.project\n.settings\n.springB"
},
{
"path": "demo-elasticsearch-rest-high-level-client/README.md",
"chars": 12240,
"preview": "# spring-boot-demo-elasticsearch-rest-high-level-client\n\n> 此 demo 主要演示了 Spring Boot 如何集成 `elasticsearch-rest-high-level-"
},
{
"path": "demo-elasticsearch-rest-high-level-client/pom.xml",
"chars": 3332,
"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": "demo-elasticsearch-rest-high-level-client/src/main/java/com/xkcoding/elasticsearch/ElasticsearchApplication.java",
"chars": 445,
"preview": "package com.xkcoding.elasticsearch;\n\nimport org.springframework.boot.SpringApplication;\nimport org.springframework.boot."
},
{
"path": "demo-elasticsearch-rest-high-level-client/src/main/java/com/xkcoding/elasticsearch/common/Result.java",
"chars": 1431,
"preview": "package com.xkcoding.elasticsearch.common;\n\nimport lombok.Data;\nimport org.springframework.lang.Nullable;\n\nimport java.i"
},
{
"path": "demo-elasticsearch-rest-high-level-client/src/main/java/com/xkcoding/elasticsearch/common/ResultCode.java",
"chars": 439,
"preview": "package com.xkcoding.elasticsearch.common;\n\nimport lombok.AllArgsConstructor;\nimport lombok.Getter;\n\n/**\n * ResultCode\n "
},
{
"path": "demo-elasticsearch-rest-high-level-client/src/main/java/com/xkcoding/elasticsearch/config/ElasticsearchAutoConfiguration.java",
"chars": 4172,
"preview": "package com.xkcoding.elasticsearch.config;\n\nimport lombok.RequiredArgsConstructor;\nimport org.apache.http.HttpHost;\nimpo"
},
{
"path": "demo-elasticsearch-rest-high-level-client/src/main/java/com/xkcoding/elasticsearch/config/ElasticsearchProperties.java",
"chars": 1933,
"preview": "package com.xkcoding.elasticsearch.config;\n\nimport lombok.AllArgsConstructor;\nimport lombok.Builder;\nimport lombok.Data;"
},
{
"path": "demo-elasticsearch-rest-high-level-client/src/main/java/com/xkcoding/elasticsearch/contants/ElasticsearchConstant.java",
"chars": 250,
"preview": "package com.xkcoding.elasticsearch.contants;\n\n/**\n * ElasticsearchConstant\n *\n * @author fxbin\n * @version v1.0\n * @sinc"
},
{
"path": "demo-elasticsearch-rest-high-level-client/src/main/java/com/xkcoding/elasticsearch/exception/ElasticsearchException.java",
"chars": 1120,
"preview": "package com.xkcoding.elasticsearch.exception;\n\nimport com.xkcoding.elasticsearch.common.ResultCode;\nimport lombok.Getter"
},
{
"path": "demo-elasticsearch-rest-high-level-client/src/main/java/com/xkcoding/elasticsearch/model/Person.java",
"chars": 779,
"preview": "package com.xkcoding.elasticsearch.model;\n\nimport lombok.AllArgsConstructor;\nimport lombok.Builder;\nimport lombok.Data;\n"
},
{
"path": "demo-elasticsearch-rest-high-level-client/src/main/java/com/xkcoding/elasticsearch/service/PersonService.java",
"chars": 1364,
"preview": "package com.xkcoding.elasticsearch.service;\n\nimport com.xkcoding.elasticsearch.model.Person;\nimport org.springframework."
},
{
"path": "demo-elasticsearch-rest-high-level-client/src/main/java/com/xkcoding/elasticsearch/service/base/BaseElasticsearchService.java",
"chars": 5887,
"preview": "package com.xkcoding.elasticsearch.service.base;\n\nimport cn.hutool.core.bean.BeanUtil;\nimport com.xkcoding.elasticsearch"
},
{
"path": "demo-elasticsearch-rest-high-level-client/src/main/java/com/xkcoding/elasticsearch/service/impl/PersonServiceImpl.java",
"chars": 2694,
"preview": "package com.xkcoding.elasticsearch.service.impl;\n\nimport cn.hutool.core.bean.BeanUtil;\nimport com.xkcoding.elasticsearch"
},
{
"path": "demo-elasticsearch-rest-high-level-client/src/main/resources/application.yml",
"chars": 175,
"preview": "demo:\n data:\n elasticsearch:\n cluster-name: elasticsearch\n cluster-nodes: 20.20.0.27:9200\n index:\n "
},
{
"path": "demo-elasticsearch-rest-high-level-client/src/test/java/com/xkcoding/elasticsearch/ElasticsearchApplicationTests.java",
"chars": 2293,
"preview": "package com.xkcoding.elasticsearch;\n\nimport com.xkcoding.elasticsearch.contants.ElasticsearchConstant;\nimport com.xkcodi"
},
{
"path": "demo-email/.gitignore",
"chars": 268,
"preview": "/target/\n!.mvn/wrapper/maven-wrapper.jar\n\n### STS ###\n.apt_generated\n.classpath\n.factorypath\n.project\n.settings\n.springB"
},
{
"path": "demo-email/README.md",
"chars": 12470,
"preview": "# spring-boot-demo-email\n\n> 此 demo 主要演示了 Spring Boot 如何整合邮件功能,包括发送简单文本邮件、HTML邮件(包括模板HTML邮件)、附件邮件、静态资源邮件。\n\n## pom.xml\n\n``"
},
{
"path": "demo-email/pom.xml",
"chars": 2008,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project xmlns=\"http://maven.apache.org/POM/4.0.0\" xmlns:xsi=\"http://www.w3.org/2"
},
{
"path": "demo-email/src/main/java/com/xkcoding/email/SpringBootDemoEmailApplication.java",
"chars": 442,
"preview": "package com.xkcoding.email;\n\nimport org.springframework.boot.SpringApplication;\nimport org.springframework.boot.autoconf"
},
{
"path": "demo-email/src/main/java/com/xkcoding/email/service/MailService.java",
"chars": 1474,
"preview": "package com.xkcoding.email.service;\n\nimport javax.mail.MessagingException;\n\n/**\n * <p>\n * 邮件接口\n * </p>\n *\n * @author yan"
},
{
"path": "demo-email/src/main/java/com/xkcoding/email/service/impl/MailServiceImpl.java",
"chars": 4050,
"preview": "package com.xkcoding.email.service.impl;\n\nimport cn.hutool.core.util.ArrayUtil;\nimport com.xkcoding.email.service.MailSe"
},
{
"path": "demo-email/src/main/resources/application.yml",
"chars": 596,
"preview": "spring:\n mail:\n host: smtp.mxhichina.com\n port: 465\n username: spring-boot-demo@xkcoding.com\n # 使用 jasypt 加"
}
]
// ... and 675 more files (download for full content)
About this extraction
This page contains the full source code of the xkcoding/spring-boot-demo GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 875 files (2.0 MB), approximately 591.3k tokens, and a symbol index with 1828 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.