# summer **Repository Path**: geekluo123/summer ## Basic Information - **Project Name**: summer - **Description**: summer框架,开箱即用,快速开发,专注业务 - **Primary Language**: Java - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 14 - **Forks**: 0 - **Created**: 2022-03-23 - **Last Updated**: 2023-02-26 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ## SUMMER-V1.0.4 版本 [![star](https://gitee.com/geekluo123/summer/badge/star.svg?theme=dark)](https://gitee.com/dy-xiaodong/fastjs/stargazers)[![License](https://img.shields.io/badge/license-Apache%202-4EB1BA.svg)](https://gitee.com/link?target=https%3A%2F%2Fwww.apache.org%2Flicenses%2FLICENSE-2.0.html) #### 背景介绍 summer是一个非常适合快速开发的框架,开箱即用,快速开发,专注业务 #### 接口文档 http://127.0.0.1:8088/api/doc.html#/home #### 目录结构 ```htaccess +---api --- web页面接口api +---src.java.com.summer.web | +---config --- API配置类 | +---controllers --- controller | \---WebApplication.java --- 启动类 +---src.main.resources | +---config | | \---application.yml --- 主配置文件 | | \---application-dev.yml --- 开发环境配置文件 | | \---application-local.yml --- 本地环境配置文件 | | \---application-prod.yml --- 生产环境配置文件 | | \---application-test.yml --- 测试环境配置文件 | +---docker | | \---docker-compose.yml --- docke-compose配置文件 | | \---Dockerfile --- Dockerfile配置文件 | \---exception-code.properties --- 自定义异常错误码 +---src.test.java.com.summer.web --- 测试用例 +---application --- 应用层接口和实现 | +---src.com.summer.appliation | | +---dto --- POJO | | +---enums --- 枚举 | | +---services --- 接口 | | +---utils --- 工具类 +---core --- 仓储层 | +---src.main.java.com.summer.core | +---entity --- 实体类 | +---repositorys --- mapper类 \---pom.xml --- 父级pom \---README.md --- 说明文档 ``` #### 模块结构 | 模块名称 | 模块介绍 | 应用场景 | | :--------------- | ------------------ | -------- | | api | API层 | 项目 | | application | 业务层 | 项目 | | core | 数据层 | 项目 | | framework-all | 业务层公共配置 | 框架 | | framework-common | 业务层/API层公共类 | 框架 | | framework-core | 数据层公共配置 | 框架 | | framework-web | API层的公共配置 | 框架 | | template | | 临时 | application.yml ```yml #配置tomcat server: port: 8088 servlet: context-path: /api #配置本地/开发/测试/生产环境 spring: application: name: summer-demo profiles: active: dev #SQL打印开启 mybatis-plus: mapper-locations: classpath:mapper/*.xml configuration: log-impl: org.apache.ibatis.logging.stdout.StdOutImpl global-config: db-config: logic-delete-field: is_delete # 逻辑删除属性名称(为数据库中的字段名称) logic-delete-value: 1 # 代表已删除的值 logic-not-delete-value: 0 # 代表未删除的值 ``` application-dev.yml ```yml spring: # 配置文件上传大小限制 servlet: multipart: max-file-size: 100MB max-request-size: 100MB #邮箱配置授权码 mail: host: smtp.qq.com username: 824952970@qq.com password: jcrskyunepgqbfgf default-encoding: UTF-8 datasource: driver-class-name: com.mysql.cj.jdbc.Driver type: com.alibaba.druid.pool.DruidDataSource url: jdbc:mysql://47.106.138.160:13306/summer-demo?characterEncoding=UTF-8&useSSL=false&zeroDateTimeBehavior=convertToNull&allowMultiQueries=true&serverTimezone=Asia/Shanghai username: root password: 123456 max-active: 50 redis: dbbase: 0 host: 47.106.138.160 port: 6379 password: timeout: 3000 #自定义token缓存时间 token: name: user-token #token名称 expiration-time: 3600000 #过期时间 #自定义@Cacheable全局缓存时间+配置类 cache: expiration-time: 300000 rabbitmq: host: 47.106.138.160 port: 5672 username: admin password: admin virtual-host: summer-demo #虚拟机 # listener: # simple: # acknowledge-mode: manual #消费者手动确认消息 publisher-confirm-type: correlated #发送确认模式 confirm #同步设置 回复超时等待时间 template: reply-timeout: 10000 data: elasticsearch: ####集群名称 cluster-name: docker-cluster ####地址 cluster-nodes: 47.106.138.160:9200 # 异常处理 elasticsearch: rest: uris: 47.106.138.160:9200 UserName: elastic #账号 Password: es@123 #你的elasticsearch密码 mqtt: host: tcp://192.168.1.200:1883 minio: endpoint: http://47.106.138.160:9000 #conslole 9000 minio minio123 accessKey: MX72CUPGWNGKE5FMVVRA secretKey: RXsDPE+kvavQy+LsExBgpGxqo1VizXpBiwPTKQ4J bucket-name: summer-demo #需要创建 ``` Dockerfile ```dockerfile # 镜像名称 FROM java:8 # 作者 MAINTAINER ltj # 添加jar到镜像并命名 xx.jar ADD web.jar summer-demo.jar #设置docker和主机时间一致 RUN /bin/cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime # 镜像启动后暴露的端口 EXPOSE 8088 # jar运行命令,参数使用逗号隔开 会存在时间不一致问题 ENTRYPOINT ["java","-jar","summer-demo.jar" ,"-Duser.timezone=GMT+08"] #docker build -t summer-demo . #docker run -d --name user -p 8001:8001 user ``` docker-compose.yml ```yaml version: '3' services: web: image: summer-demo #和dockerfile build 的镜像名一样 container_name: summer-demo restart: always #重启容器 ports: - "18080:8088" depends_on: #设置启动redis和mysql在启动web服务 - redis - mysql redis: image: redis #镜像名称 container_name: redis-01 #容器名称 restart: always command: redis-server /usr/local/redis/redis.conf #容器内执行命令 ports: #端口暴露 主机端口:容器端口 - "16379:6379" volumes: #设置容器目录映射到服务器主机 ./为当前执行docker-compose目录 - ./redis/data:/usr/local/redis/data - ./redis/redis.conf:/usr/local/redis/redis.conf mysql: restart: always image: mysql:5.7 container_name: mysql-01 volumes: - ./mysql/mydir:/mydir - ./mysql/datadir:/var/lib/mysql - ./mysql/conf/my.cnf:/etc/my.cnf #数据库还原目录 可将需要还原的sql文件放在这里 - /root/docker/mysql/source:/docker-entrypoint-initdb.d environment: #创建mysql初始配置和账号密码 - "MYSQL_ROOT_PASSWORD=123456" - "MYSQL_DATABASE=mydb" - "TZ=Asia/Shanghai" ports: - 13306:3306 ``` #### 框架集成 | 名称 | 版本 | 备注 | | ------------- | -------------- | ------------------------------------------------ | | jdk | 1.8 | | | maven | 3.5.4 | | | spring-boot | 2.3.12.RELEASE | | | mysql | 5.7或5.7以上 | | | mybatis-plus | 3.5.1 | https://baomidou.com/pages/24112f/ | | lombok | 1.16.18 | | | redis | 5.0.9或以上 | | | knife4j | 3.0.3 | https://doc.xiaominfo.com/knife4j/documentation/ | | hutool | 5.7.22 | https://apidoc.gitee.com/dromara/hutool/ | | fastjson | 1.2.78 | | | rabbit mq | 2.3.12 | | | elasticsearch | 2.3.12 | | | minio | 8.0.3 | https://docs.min.io/ | | nexus | 3 | https://www.sonatype.com/ | #### 功能实现 | 功能 | 补充 | 备注 | | --------------------------------- | ------------------------------------------------- | -------------- | | 1.配置response统一返回模型 | GlobalResponseAdvice(类) | 完成 | | 2.配置只打包web的target | pom.xml | | | 3.集成spring security jwt | | | | 4.跨越配置路径限制 | GlobalCorsConfig(类) | 未测试 | | 5.基本注册/登录/退出/注销 | | | | 6.第一次运行生成基础表 | flowable EngineConfiguration 配置引擎(需要学习) | 基础表需要确认 | | 7.全局拦截异常友好提示 | GlobalExceptionHandler(类) | 完成 | | 8.配置全局返回json类型 | configureContentNegotiation(方法) | 完成 | | 9.swagger配置 | SwaggerConfiguration(类) | 完成 | | 10.自定义注解登录拦截请求api | RequestLogin(注解)+ GlobalCorsConfig (配置类) | 完成 | | 11.pdman建表(规则定义) | 工具下载 :https://gitee.com/robergroup/pdman | | | 12.pdman自动生成代码 | doc/pdman/summer基础表.chnr.json | 完成 | | 13.sql插入和修改自动注入时间 | DataScopeInterceptor(类) | 完成 | | 14.sql配置打印 | yml配置文件 | 完成 | | 15.集成minio | yml配置文件+配置类 MinIoClientConfig | 完成 | | 16.接口访问拦截日记 | GlobalCorsConfig.requestPrintf(方法) | 完成 | | 17.整合rabbit mq | yml配置文件+配置类 | 完成 | | 18.整合kafka | | | | 19.整合es | | 完成 | | 20.完成docker-compose | summer-web/src/main/resources/docker-compose.yml | 完成 | | 21.docker部署nginx编写 | | 完成 | | 22.Dockerfile编写 | summer-web/src/main/resources/Dockerfile | 完成 | | 23.搭建gitlab | | | | 24.搭建并集成nexus | maven配置文件+pom配置 | 完成 | | 25.集成链路追踪 | | | | 26.使用arthas | 修改后热更新 | | | 27.使用newsql | | | | 28.使用阿里云效 | 托管代码 | | | 29.原生代码实现热更新 | | | | 30.阅读openjdk源码 | | | | 31.k8s+k3s | | | | 32.boot集成shardingjdbc | 实现分表分库 | | | 33.boot集成发送邮箱 | | 完成 | | 34.boot集成jpa | | | | 35.实现热部署 | template/hot-deployment (demo) | 完成 | | 36.实现mqtt | template/mqtt (demo) | 完成 | | 37.asm+javassist实现字节码插桩 | template/asm (demo) | 完成 | | 38.字节码增强+热替换 | | | | 39.状态码自定义+自动匹配 | | 完成 | | 40.文件NIO实例 | FileChannelTest(类) | 完成 | | 41.socket nio实例 | | | | 42.okhttp实例 | OkHttp(类) | | | 43.配置logback日志颜色 | logback-spring.xml 下个版本推送到kafka | 完成 | | 44.画模块的继承关系图 | | 完成 | | 45.实现websocket通信 | WebSocketServer | 完成 | | 46.多线程池和隔离 | ThreadPoolConfig | 完成 | | 47.手写http服务器和spring(简版) | template/spring-feather | 完成 | | 48.手写简版rpc框架交互 | template/rpc-study | 完成 | | 49.实现spi服务发现扩展机制 | template/rpc-study/com/ltj/rpc/framework/App.java | 完成 | #### 架构设计 | 场景 | 备注 | | ------------------ | ------------------------------------------------------------ | | 代码层 | web(api) application core 三层 | | 用户层 | 应用层读写分离,查询访问es和缓存redis等,其他走数据库 | | 网络层 | 外网+内网,外网拦截和并发和安全+内网服务互相访问不消耗网络资源(微服务) | | 分表分库 | 水平,横向分表,雪花算法,分库基因算法 | | 缓存和数据库一致性 | 双删延迟策略 | | 限流算法 | 计数器,令牌桶,漏桶,滑动窗口 | | 加密算法 | MD5,SHA1,HMAC,BASE64,DES,AES,REA,ECC | | 数据库读写分离 | 强制读主库,查询延迟,半同步复制 | | 负载均衡 | 强负载,软负载, 轮询策略 ,负载度策略 ,响应策略 ,哈希策略 | | 集群 | 分流,负载均衡,容灾,易扩展, | ![summer.png](https://s2.loli.net/2022/05/21/gd7PAmJ3j1XuqQI.png) #### 设计模式 | 名称 | 技术 | 描述实现场景 | | ------------ | --------------------------------- | ------------------------------------------------------------ | | 工厂模式 | 接口多实现类+动态反射 | | | 抽象工厂模式 | 继承+抽象类+接口多实现类+动态反射 | | | 原型模式 | 深拷贝 | 两种方法:1.实现Clonneable接口并重写clone方法 2.对象序列化实现深拷贝 | | 单例模式 | 静态内部类 | 访问类只能通过静态方法 | | 建造者模式 | 多接口+多实现+继承 | 1.A接口,B接口,2.A类实现A接口,3.B类实现B接口,4.A类继承B类继承C | | 适配器模式 | 多接口+多实现 | 过于繁杂不建议使用 | | 观察者模式 | 实现接口 | ApplicationListener | #### 参与贡献 1. Fork 本仓库 2. 新建 Feat_xxx 分支 3. 提交代码 4. 新建 Pull Request