# 启路springCloud服务模板 **Repository Path**: senvon/service-sample ## Basic Information - **Project Name**: 启路springCloud服务模板 - **Description**: 启路springCloud服务模板工程 - **Primary Language**: Java - **License**: AGPL-3.0 - **Default Branch**: master - **Homepage**: http://blog.9istock.com - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2021-11-25 - **Last Updated**: 2021-12-24 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 启路springCloud服务模板 ## 介绍 启路springCloud服务模板工程,三大项目类型之一,只有接口,没有页面. 内网工程,没有安全. 本项目为微服务的模板工程,在没有平台的情况下,只是对springCloud进行了集成,配置常见的参数,支持多版本的兼容. 使用feign的过程中,对常见的坑进行简单处理.主要解决问题: * 可运行的程序框架+示例 * 服务暴露 * 服务声明 * 服务调用 * 异常处理 * 日志追踪号传递 * 多版本兼容 * 简单监控,(外挂prometheus+grafana) * 配置文件载入 * 附带简单运维 * springboot2.3版本以后,支持优雅停机(请使用run.sh启停服务),2.2以前版本,请使用actuator/shutdown停机,脚本不支持 * 支持Hicari/Druid数据源 ## 详情 基于JDK1.8构建 部署包大小:49M * 去掉swagger,减少4M * 使用druid,增加2M 没有再次对springCloud做瘦身. # 版本 使用springCloud搭建,支持springboot,springCloud版本如下: springboot|springCloud|说明 -|-|- 1.5.12|Edgware.SR6|已测试 2.0.9.RELEASE|Finchley.SR4|EnableFeignClients变更包名 2.1.8.RELEASE|Greenwich.SR6|已测试 2.2.13.RELEASE|Hoxton.SR4|已测试 2.2.13.RELEASE|Hoxton.SR11|已测试 2.3.12.RELEASE|Hoxton.SR11|已测试 2.4.13|2020.0.4|已测试,springCloud已经移除spring-cloud-starter-netflix-hystrix,需要手动添加版本号 2.5.8|2020.0.4|已测试 # 部署 ## 编译 使用settings-hw.xml 直接命令行运行mvn -s settings-hw.xml clean package 将run.sh和jar包放到一个目录 ## 启动服务 使用`./run.sh start` 启动服务 `./run.sh start c `清空日志并启动 ## 使用外部日志文件 修改run.sh,在SPRING_OPT变量中,输入"--logging.config=./logback.xml " ## 使用外部配置文件 修改run.sh, 在SPRING_OPT变量,输入"--spring.config.location=./application.yml" ## 停止服务 使用./run.sh stop 停止服务 ## IDE调试 1. 先启动eureka-server 2. 再启动sample-service-boot ### 测试数据 新增 http://localhost:18080/service/senvonInfoPost/add name=senvon 查询 http://localhost:18080/service/senvonInfoPost/showList name=en ### 监控地址 http://localhost:18080/service/actuator/health ### swagger http://localhost:18080/service/swagger-ui.html#/ # 缺点 ## 服务声明 按照我的本意,希望把接口单独独立成jar包,外部系统依赖的时候,就直接依赖jar包,配置扫描就可以了. 有以下2点限制没有实现 1. feign的具体调用需要依赖`@RequestMapping`注解,而`@RequestMapping`注解在springMVC包,依赖复杂 2. `@FeignClient`的注解,在openFeign或者netflix-feign里面,也是无法拆除 本框架的服务声明,使用接口模式,期望在最大程度上保留接口声明(一个重要原因,接口服务需要明确输入输出!!). 正是因为上述原因,Feign接口的返回都是使用泛型,而不是使用Map 1. 可以方便swagger查看接口 2. 固定输出参数 目前的实现造成以下不是很好的实现, * 每个接口都需要在项目内部重新使用feign扩展.详细请看代码中的`com.istock.sampleservice.api.SenvonInfoFeignClient`类.因为feign的注解没有单独成jar包,也可以猜测spring官方认为feign的初衷就不希望使用jar包集成,可以去掉api子项目,我只是有点强迫症而已.