COLA学习之COLA架构分析(四)

231 阅读4分钟

小伙伴们,你们好,我是老寇,上一节学习了COLA环境搭建,这一节学习COLA架构

COLA架构分析

运行项目

安装Docker

参考 Centos7安装Docker 23.0.6(傻瓜式安装)

参考 Win11用虚拟机win10安装docker

安装Mysql

编写Docker-Compose脚本
services:
  mysql:
    image: registry.cn-shenzhen.aliyuncs.com/koushenhai/mysql:9.1.0
    container_name: mysql
    # 保持容器在没有守护程序的情况下运行
    tty: true
    restart: always
    privileged: true
    ports:
      - "3306:3306"
    command:
      --character-set-server=utf8mb4
      --collation-server=utf8mb4_general_ci
      --lower-case-table-names=1
    volumes:
      - ./mysql9/data:/var/lib/mysql
      - ./mysql9/conf/my.cnf:/etc/mysql/my.cnf
    environment:
      - MYSQL_ROOT_PASSWORD=123456
      - TZ=Asia/Shanghai
    networks:
      - laokou_network
networks:
  laokou_network:
    driver: bridge
Mysql配置文件【my.cnf】
[client]
port = 3306
default-character-set = utf8mb4

[mysql]
no-auto-rehash
default-character-set = utf8mb4

[mysqld]
character-set-client-handshake = FALSE
character-set-server = utf8mb4
collation-server = utf8mb4_general_ci
init_connect = 'SET NAMES utf8mb4'

port = 3306
skip-external-locking
key_buffer_size = 16M
max_allowed_packet = 1M
table_open_cache = 64
sort_buffer_size = 512K
net_buffer_length = 8K
read_buffer_size = 256K
read_rnd_buffer_size = 512K
myisam_sort_buffer_size = 8M
lower_case_table_names = 1
innodb_flush_log_at_trx_commit = 1
sync_binlog = 1

[mysqldump]
quick
max_allowed_packet = 16M

[myisamchk]
key_buffer_size = 20M
sort_buffer_size = 20M
read_buffer = 2M
write_buffer = 2M

[mysqlhotcopy]
interactive-timeout
部署Mysql
sudo chmod -R 7777 /home/laokou/app
sudo docker-compose up -d

# 停止容器
sudo docker-compose stop
# 移除容器
sudo docker-compose rm
启动项目

1.使用Idea打开COLA项目,找到 craftsman.all image.png

2.创建craftsman数据库并运行SQL脚本

create database craftsman;
 CREATE TABLE `metric` (
  `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键',
  `user_id` varchar(64) NOT NULL COMMENT '域账号',
  `main_metric` varchar(64) NOT NULL COMMENT '主度量',
  `sub_metric` varchar(64) NOT NULL COMMENT '度量项',
  `metric_item` json DEFAULT NULL COMMENT '度量项内容',
  `creator` varchar(64) NOT NULL COMMENT '创建人',
  `modifier` varchar(64) NOT NULL COMMENT '修改人',
  `gmt_create` datetime NOT NULL COMMENT '创建时间',
  `gmt_modified` datetime NOT NULL COMMENT '修改时间',
  `is_deleted` char(1) NOT NULL DEFAULT 'n' COMMENT '逻辑删除',
  PRIMARY KEY (`id`),
  KEY `idx_username` (`user_id`)
) ENGINE=InnoDB AUTO_INCREMENT=1000 DEFAULT CHARSET=utf8mb4 COMMENT='度量表';

CREATE TABLE `user_profile` (
  `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键',
  `user_id` varchar(64) NOT NULL COMMENT '工号',
  `user_name` varchar(64) NOT NULL COMMENT '名字',
  `dep` varchar(128) NOT NULL COMMENT '部门',
  `role` varchar(6) NOT NULL COMMENT '角色',
  `total_score` decimal(10,2) NOT NULL DEFAULT '0.00' COMMENT '综合得分',
  `app_quality_score` decimal(10,2) NOT NULL DEFAULT '0.00' COMMENT '代码质量分',
  `tech_influence_score` decimal(10,2) NOT NULL DEFAULT '0.00' COMMENT '技术影响力分',
  `tech_contribution_score` decimal(10,2) NOT NULL DEFAULT '0.00' COMMENT '技术贡献分',
  `dev_quality_score` decimal(10,2) NOT NULL DEFAULT '0.00' COMMENT '开发质量分',
  `checkin_code_quantity` decimal(9,2) NOT NULL DEFAULT '0.00' COMMENT 'checkin代码量',
  `is_manager` char(1) DEFAULT NULL COMMENT '是否主管',
  `creator` varchar(64) NOT NULL COMMENT '创建人',
  `modifier` varchar(64) NOT NULL COMMENT '修改人',
  `gmt_create` datetime NOT NULL COMMENT '创建时间',
  `gmt_modified` datetime NOT NULL COMMENT '修改时间',
  `is_deleted` char(1) NOT NULL DEFAULT 'n' COMMENT '逻辑删除',
  PRIMARY KEY (`id`),
  KEY `idx_user_id` (`user_id`)
) ENGINE=InnoDB AUTO_INCREMENT=1000 DEFAULT CHARSET=utf8mb4 COMMENT='用户Profile表';

INSERT INTO `craftsman`.`metric` (`id`, `user_id`, `main_metric`, `sub_metric`, `metric_item`, `creator`, `modifier`, `gmt_create`, `gmt_modified`, `is_deleted`) VALUES (1001, '1', 'tech-influence', 'ATA', '{\"url\": \"测试链接\", \"title\": \"测试标题\", \"hitCount\": 1, \"commentCount\": 1, \"favoriteCount\": 1, \"thumbsUpCount\": 1}', 'test', 'test', '2024-12-14 08:54:36', '2024-12-14 08:54:36', 'n');
 
INSERT INTO `craftsman`.`user_profile` (`id`, `user_id`, `user_name`, `dep`, `role`, `total_score`, `app_quality_score`, `tech_influence_score`, `tech_contribution_score`, `dev_quality_score`, `checkin_code_quantity`, `is_manager`, `creator`, `modifier`, `gmt_create`, `gmt_modified`, `is_deleted`) VALUES (1, '1', '1', '1', 'DEV', 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, NULL, '1', '1', '2024-12-14 09:32:42', '2024-12-14 09:32:45', 'n');

3.修改数据库配置 image.png

project.name=start

# mysql configruation
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/craftsman?useUnicode=true&characterEncoding=utf8&autoReconnect=true&zeroDateTimeBehavior=convertToNull
spring.datasource.username=root
spring.datasource.password=123456

mybatis-plus.mapper-locations=classpath*:/mybatis/*.xml
mybatis-plus.type-aliases-package=com.alibaba.craftsman.gatewayimpl.database.dataobject

4.运行项目【略】

5.报错解决

Githu已改好的代码

1.JDK1.8改为JDK21

2.validation-api替换成hibernate-validator

<dependency>
  <groupId>org.hibernate.validator</groupId>
  <artifactId>hibernate-validator</artifactId>
</dependency>

3.mysql-connector-java替换成mysql-connector-j

<dependency>
    <groupId>com.mysql</groupId>
    <artifactId>mysql-connector-j</artifactId>
    <version>9.1.0</version>
</dependency>

4.javax.el-apijakarta.el替换成jakarta.el-api

<dependency>
    <groupId>jakarta.el</groupId>
    <artifactId>jakarta.el-api</artifactId>
    <version>6.0.1</version>
</dependency>

5.mybatis-spring-boot-starter替换成mybatis-plus-spring-boot3-starter

<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-spring-boot3-starter</artifactId>
    <version>3.5.9</version>
</dependency>
<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-jsqlparser</artifactId>
    <version>3.5.9</version>
    <exclusions>
        <exclusion>
            <groupId>com.github.jsqlparser</groupId>
            <artifactId>jsqlparser</artifactId>
        </exclusion>
    </exclusions>
</dependency>
<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-extension</artifactId>
    <version>3.5.9</version>
</dependency>

6.运行项目【略】

7.调试项目

1.创建request.http

POST http://localhost:8080/metrics/ata
Content-Type: application/json

{
  "ataMetricCO": {
    "title": "测试标题",
    "url": "测试链接",
    "thumbsUpCount": 1,
    "hitCount": 1,
    "commentCount": 1,
    "favoriteCount": 1,
    "ownerId": "1"
  }
}

###

GET http://localhost:8080/metrics/ata?ownerId=1

2.调试项目