# 1. archetype模板导入
# 设置maven的settings.xml配置文件
# (1) 在profiles节点中增加如下配置
<profile>
<id>test</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<repositories>
<repository>
<id>archetype</id>
<name>maven-snapshots</name>
<url>http://123.207.115.13:8080/repository/maven-snapshots/</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
<repository>
<id>archetype-release</id>
<name>maven-releases</name>
<url>http://123.207.115.13:8080/repository/maven-releases/</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
</repositories>
</profile>
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
# (2) 在servers节点中添加如下配置
<server>
<id>archetype-release</id>
<username>xxxx</username>
<password>yyyy</password>
</server>
<server>
<id>archetype</id>
<username>xxxx</username>
<password>yyyy</password>
</server>
2
3
4
5
6
7
8
9
10
# (3) 在mirrors节点下添加如下配置
<mirror>
<id>releases</id>
<mirrorOf>releases</mirrorOf>
<name>releases</name>
<url>https://mirrors.cloud.tencent.com/repository/maven/releases/</url>
</mirror>
<mirror>
<id>oa.com.thirdparty</id>
<mirrorOf>oa.com.thirdparty</mirrorOf>
<name>oa.com.thirdparty</name>
<url>https://mirrors.cloud.tencent.com/repository/maven/thirdparty-snapshots/</url>
</mirror>
<mirror>
<id>thirdparty</id>
<mirrorOf>thirdparty</mirrorOf>
<name>thirdparty</name>
<url>https://mirrors.cloud.tencent.com/repository/maven/thirdparty/</url>
</mirror>
<!-- 阿里云仓库 -->
<mirror>
<id>alimaven</id>
<mirrorOf>central</mirrorOf>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/repositories/central/</url>
</mirror>
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# idea使用archetype新建项目
# (1) 选择基于archetype模板新建项目
*注意jdk版本为1.11
# (2) 添加交付模板信息
GroupId: org.tencent
ArtifactId: iov-template-archetype
Version: 1.0.0-20201204.030314-1
Respository: http://123.207.115.13:8080/repository/maven-snapshots/
# 代码规范检查
此代码规范为强制要求,必须本地通过代码检查的代码才能提交,否则会扫描打回!
# (1) 下载腾讯编码规范checkstyle规则文件
点击下载(右键选择下载链接文件): 规则文件
# (2) 安装checkstyle-IDEA插件
# (3) 设置checkstyle,导入腾讯checkstyle规则集
# (4) 在当前类中,右键 -> Check Current File, 扫描代码规范问题
# 2. 交付模板目录结构说明
基于mvc分层架构进行划分。
filter:过滤器层,主要对http进行协议级别的过滤,例如过滤用户的非法请求,限流,核心参数的校验等,该层不处理用户请求,也不对客户端生成任何响应。
aspect:依赖于Spring框架实现各类拦截器,例如用户请求统一日志记录,服务异常返回统一处理,事务管理以及项目中自定义注解的实现等等。
controller: 请求处理层,负责响应用户请求,Spring项目的所有controller类都在该层实现。
controller/vo: 负责视图对象的实现,主要面向http协议的数据传输,定义与前端交互的数据结构。
controller/assembler:针对不同类型的数据对象进行适配,负责vo<->entity、vo<->value的转换和必要的参数检查
service: 业务逻辑处理层,只处理value和entity,不感知vo的存在
dao: 数据访问层
dao/mapper:负责与数据库进行数据交互。
dao/cache:负责与各类型缓存进行数据交互,包括redis分布式缓存,本地缓存等。
dao/http:实现基于http协议与第三方服务进行接口交互的功能。
entity: 数据实体,定义需要服务自身在数据库里维护的数据实体,用于数据持久化。
value:定义只读型数据实体,一般分为两类,一类是用于service层业务处理的值对象,一类是与第三方服务进行接口交互时定义的请求参数、响应参数等数据结构。
config: 配置目录,存放配置文件类,模板中目前提供以下几类配置:
CacheConfig:本地缓存caffeine配置类
CosConfig:腾讯云COS服务的配置类
RedisConfig:分布式缓存redis配置类
Swagger2Config:接口文档管理工具swagger配置类
TaskThreadPoolConfig:线程池配置管理类
RestTemplateConfig: http客户端配置类
2
3
4
5
6
7
8
9
10
11
resource/mapper: 存放Mybatis框架的xml文件(mybatis的所有sql语句实现必须是xml格式,尽量不要使用注解形式)。
注:该结构有明确的分层和向下依赖,尽量避免在项目内出现common、util等有可能破坏项目垂直依赖关系的结构
注:项目logback.xml文件中固定日志文件路径为/data/logs/服务名称,不能修改
注:项目所有查询接口返回的数据结构体均需要使用模板controller/vo目录下的ResponseVo(普通查询)和PageQueryResponseVo(列表分页查询)。对于列表查询返回分页接口的请求需要统一以下三个字段:
page:当前页码
pageSize:每页返回条数
sort:排序方式,该字段不传的话默认默认按照创建时间倒序
# 3. 运维组件对接
# skywalking对接
采用主动上报的方式。由agent端主动发送数据到server端
# (1) 项目dockerfile配置
注:模板的dockerfile中skywalking相关配置已经配置完成,一般情况无需修改
# (2) tke平台新建pod添加如下配置
添加数据卷:使用临时目录,名称为agent
添加挂载点:agent,路径统一填成/skywalking/agent
在环境变量下添加两项属性:
SKYWALKING_ADDR:skywlking server访问地址
APP_ID:skywalking注册服务名称,按项目名称_服务名称格式统一命名
# (3) 修改yaml文件
pod创建好后,在yaml文件的spec.spec.containers.env目录下添加如下配置:
initContainers:
- command:
- sh
- -c
- set -ex;mkdir -p /skywalking/agent;cp -r /opt/skywalking/agent/* /skywalking/agent;
image: ccr.ccs.tencentyun.com/skywalking-test/skywalking-agent:6.5
imagePullPolicy: IfNotPresent
name: init-agent
resources: {}
securityContext:
privileged: false
volumeMounts:
- mountPath: /skywalking/agent
name: agent
2
3
4
5
6
7
8
9
10
11
12
13
14
注: 服务启动后若无法在skywalking客户端找到对应服务,需要先访问一次服务,然后在客户端查找服务
- 访问skywalking的时候,服务的时间需要注意一下。
# nacos配置中心对接
# (1) 项目配置文件(application.yml)添加nacos相关配置
server-addr是nacos server访问地址,namespace,group,data-id信息需要在nacos控制台配置,username和password是nacos控制台登录账号信息。其他配置信息不需要修改。
nacos:
config:
server-addr: xxxxxxx:8848
data-ids: xxx_resources.yml,xxx_service.yml,xxx_other.yml
max-retry: 5
config-long-poll-timeout: 46000
group: xxxxxx
bootstrap:
log-enable: true
enable: true
type: yaml
namespace: xxxx
username: xxx
password: xxxxxx
auto-refresh: true
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# (2) 在nacos控制台创建项目对应的配置列表
项目本地配置文件除了nacos配置外其他均需移到nacos中。 nacos项目配置共分为三类:
资源类:包括mysql、redis、mongo、es、Kafka等资源配置信息,DATA ID统一命名格式为服务名称_resources.yml。
服务类:包括第三方服务的访问地址/域名等信息,DATA ID统一命名格式为服务名称_service.yml。
自定义类:基于实际业务背景的自定义配置信息,DATA ID统一命名格式为服务名称_other.yml。
同一服务的nacos配置在同一个GROUP,统一命名格式为项目名称_服务名称。
# prometheus+grafna对接
# (1) prometheus依赖配置
注:模板中已经配置,一般情况无需修改
组件 | 版本信息 |
---|---|
micrometer-registry-prometheus | 1.2.0 |
# (2) nacos配置
management:
endpoints:
web:
exposure:
include: 'prometheus'
metrics:
tags:
application: ${spring.application.name}
2
3
4
5
6
7
8
# (3) YAML文件配置
服务部署后需要在yaml文件的spec.template.metadata.annotations节点下添加如下配置:
prometheus.io/app_type: java
prometheus.io/port: "8080"
2
8080是当前服务端口号,具体项目需要根据实际情况修改
注:由于prometheus目前使用的是server主动拉取的策略,所以需要先在prometheus的server端配置客户端信息,之后登录grafna的控制台,创建对应服务的监控台,grafna中选择服务对应的prometheus server需要和运维确认,否则在错误server中无法找到自己的服务。
# sentinel+nacos对接
# (1) 客户端依赖配置
##组件## | ##版本信息## |
---|---|
springboot | 2.2.5 |
nacos-config-spring-boot-starter | 0.2.7 |
spring-cloud-starter-alibaba-sentinel | 2.1.0.RELEASE |
sentinel-datasource-nacos | 1.7.0,依赖导入时删除包含的nacos-client-1.2.0 |
# (2) nacos动态配置
spring:
cloud:
sentinel:
datasource:
flow:
nacos:
server-addr: 127.0.0.1:8848
data-id: demo.yml
group-id: SENTINEL_GROUP
rule-type: flow
data-type: json
degrade:
nacos:
server-addr: 127.0.0.1:8848
data-id: demo.yml
group-id: SENTINEL_GROUP
rule-type: degrade
data-type: json
transport:
dashboard: 127.0.0.1:8080
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# (3) nacos控制台配置sentinel规则
sentinel-web端的规则全部存入namespace为public,Group为SENTINEL_GROUP中。所有客户端都应该从此处获取规则