# 启路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子项目,我只是有点强迫症而已.