# 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>
1
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>
1
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>
1
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客户端配置类
1
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
1
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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

# (2) 在nacos控制台创建项目对应的配置列表

​ 项目本地配置文件除了nacos配置外其他均需移到nacos中。 nacos项目配置共分为三类:

  1. 资源类:包括mysql、redis、mongo、es、Kafka等资源配置信息,DATA ID统一命名格式为服务名称_resources.yml

  2. 服务类:包括第三方服务的访问地址/域名等信息,DATA ID统一命名格式为服务名称_service.yml

  3. 自定义类:基于实际业务背景的自定义配置信息,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}
1
2
3
4
5
6
7
8

# (3) YAML文件配置

服务部署后需要在yaml文件的spec.template.metadata.annotations节点下添加如下配置:

 prometheus.io/app_type: java
 prometheus.io/port: "8080" 
1
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
1
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中。所有客户端都应该从此处获取规则

lastUpdate: 1/17/2022, 11:45:26 PM