Skip to content

Commit 21f061f

Browse files
committed
第七周-作业2- 部分
1 parent 6943786 commit 21f061f

File tree

15 files changed

+978
-0
lines changed

15 files changed

+978
-0
lines changed

07rpc/README.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,3 +70,8 @@
7070
8. 生成项目;
7171
- 8.1 创建Controller
7272
9. 执行与测试.
73+
74+
参考: [mysql-demo/README.md](./mysql-demo/README.md)
75+
76+
77+
https://mybatis.org/spring-boot-starter/mybatis-spring-boot-autoconfigure/

07rpc/mysql-demo/.gitignore

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
HELP.md
2+
target/
3+
!.mvn/wrapper/maven-wrapper.jar
4+
!**/src/main/**/target/
5+
!**/src/test/**/target/
6+
7+
### STS ###
8+
.apt_generated
9+
.classpath
10+
.factorypath
11+
.project
12+
.settings
13+
.springBeans
14+
.sts4-cache
15+
16+
### IntelliJ IDEA ###
17+
.idea
18+
*.iws
19+
*.iml
20+
*.ipr
21+
22+
### NetBeans ###
23+
/nbproject/private/
24+
/nbbuild/
25+
/dist/
26+
/nbdist/
27+
/.nb-gradle/
28+
build/
29+
!**/src/main/**/build/
30+
!**/src/test/**/build/
31+
32+
### VS Code ###
33+
.vscode/

07rpc/mysql-demo/README.md

Lines changed: 208 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,208 @@
1+
## 说明
2+
3+
第七周-作业2. (必做): 按自己设计的表结构,插入 100 万订单模拟数据,测试不同方式的插入效率
4+
5+
## 操作步骤
6+
7+
8+
### 第七周-作业2. (必做)
9+
10+
11+
#### 1. 创建基本项目
12+
13+
1. 打开 Spring 官网: https://spring.io/
14+
2. 找到 Projects --> Spring Initializr: https://start.spring.io/
15+
3. 填写项目信息:
16+
* Project: Maven Project
17+
* Language: Java
18+
* Spring Boot版本: 2.5.4
19+
* Group: 自己的包名, 以做标识;
20+
* Artifact: mysql-demo
21+
* JDK版本: 8
22+
* Dependencies: 添加依赖, 比如 MyBatis, Spring Web, MySQL, JDBC
23+
* 生成 maven 项目; 下载并解压。 参考: [mysql-demo项目Share信息](https://start.spring.io/#!type=maven-project&language=java&platformVersion=2.5.4&packaging=jar&jvmVersion=1.8&groupId=com.cncounter&artifactId=mysql-demo&name=mysql-demo&description=MySQL%20Demo&packageName=com.cncounter.mysql-demo&dependencies=mybatis,web,mysql,data-jdbc)
24+
25+
4. Idea或者Eclipse从已有的Source导入Maven项目。
26+
27+
28+
#### 2. 准备mysql环境
29+
30+
mysql服务器, 可以使用这些方式:
31+
32+
- 物理机安装
33+
- 虚拟机安装
34+
- 购买云服务
35+
- 使用已有MySQL
36+
- 使用Docker
37+
- 使用docker-compose: 参考配置文件: [docker-compose.yml](./docker-compose.yml)
38+
39+
这里使用 docker-compose 方式。
40+
41+
根据配置信息, 我们需要创建好以下2个目录:
42+
43+
- `./docker_data/docker-entrypoint-initdb.d` ; MySQL镜像启动时会自动执行下面的SQL.
44+
- `./docker_data/var/lib/mysql` ; 注意这个目录下不能有任何文件, 否则启动报错。
45+
46+
安装好 docker 之后, 使用 `docker-compose up -d` 命令来启动。
47+
48+
这个命令会自动查找当前目录下的 [docker-compose.yml](./docker-compose.yml) 配置文件。
49+
50+
如果启动失败, 可以在当前目录下, 使用 `docker-compose logs -f` 命令查看日志信息。
51+
52+
可以使用命令来查看当前物理机监听的端口号;
53+
54+
55+
```shell
56+
# mac
57+
lsof -iTCP -sTCP:LISTEN -n -P
58+
59+
# linux
60+
netstat -ntlp
61+
62+
```
63+
64+
启动成功后, 应该能看到我们配置的 `13306` 端口信息.
65+
66+
然后使用MySQL客户端连接即可, 我们在配置文件里面指定了ROOT用户的密码为 `123456`;
67+
68+
69+
#### 3. 项目基础配置
70+
71+
如果直接启动下载下来的 MysqlDemoApplication, 报错信息大致如下:
72+
73+
```text
74+
***************************
75+
APPLICATION FAILED TO START
76+
***************************
77+
78+
Description:
79+
80+
Failed to configure a DataSource:
81+
'url' attribute is not specified
82+
and no embedded datasource could be configured.
83+
84+
Reason: Failed to determine a suitable driver class
85+
```
86+
87+
可以看到这里提示 缺少了DataSource的url等配置信息
88+
89+
我们增加一个配置文件: [src/main/resources/application.yml](./src/main/resources/application.yml)
90+
91+
文件内容参考:
92+
93+
```yaml
94+
# Spring相关配置
95+
spring:
96+
datasource:
97+
type: com.zaxxer.hikari.HikariDataSource
98+
hikari:
99+
minimum-idle: 1
100+
maximum-pool-size: 5
101+
auto-commit: true
102+
idle-timeout: 30000
103+
pool-name: MySQLHikariCP1
104+
max-lifetime: 1800000
105+
connection-timeout: 30000
106+
connection-test-query: SELECT 1
107+
driverClassName: com.mysql.cj.jdbc.Driver
108+
url: jdbc:mysql://localhost:13306/mysql_demo?useUnicode=true&characterEncoding=utf-8&useSSL=false
109+
username: root
110+
password: 123456
111+
112+
```
113+
114+
然后再增加 logback的日志级别:
115+
116+
```yaml
117+
# Logback日志级别配置
118+
logging.level.root: info
119+
logging.level.com.cncounter: debug
120+
logging.level.org.springframework.test.web.servlet.result: debug
121+
122+
```
123+
124+
以及 Tomcat 配置:
125+
126+
```yaml
127+
# Tomcat 配置
128+
server:
129+
port: 8080
130+
tomcat:
131+
uri-encoding: UTF-8
132+
max-threads: 1000
133+
min-spare-threads: 10
134+
servlet:
135+
context-path: /
136+
encoding:
137+
enabled: true
138+
force: true
139+
charset: UTF-8
140+
```
141+
142+
143+
然后重新启动 MysqlDemoApplication.
144+
145+
启动成功之后, 可以查看本机的端口号, 也可以访问: [http://localhost:8080/](http://localhost:8080/)
146+
147+
148+
提示: 可以用 jvisualvm 来观察启动好的Java进程。
149+
150+
151+
#### 4. 数据库脚本
152+
153+
可以使用前面课程的作业中提交的数据库表。
154+
155+
也可以参考: [docker_data/docker-entrypoint-initdb.d/01-mysql_demo-init.ddl.sql](./docker_data/docker-entrypoint-initdb.d/01-mysql_demo-init.ddl.sql)
156+
157+
158+
#### 5. MyBatis生成器与配置
159+
160+
官方文档: [MyBatis Generator Doc](https://mybatis.org/generator/configreference/xmlconfig.html)
161+
162+
配置文件: [src/main/resources/MybatisGeneratorConfig.xml](./src/main/resources/MybatisGeneratorConfig.xml)
163+
164+
在 [pom.xml](./pom.xml) 文件中增加 `mybatis-generator-maven-plugin` 插件.
165+
166+
执行生成(也可以使用 [generateMapper.sh](./generateMapper.sh) 脚本文件):
167+
168+
```shell
169+
mvn mybatis-generator:generate -X -e
170+
```
171+
172+
可以看到生成了以下文件:
173+
174+
- [`src/main/resources/com/cncounter/mysqldemo/dao/mapper/TBizOrderMapper.xml`](./src/main/resources/com/cncounter/mysqldemo/dao/mapper/TBizOrderMapper.xml)
175+
- [`src/main/java/com/cncounter/mysqldemo/dao/mapper/TBizOrderMapper.java`](./src/main/java/com/cncounter/mysqldemo/dao/mapper/TBizOrderMapper.java)
176+
- [`src/main/java/com/cncounter/mysqldemo/model/TBizOrder.java`](./src/main/java/com/cncounter/mysqldemo/model/TBizOrder.java)
177+
178+
#### MyBatis 扫描配置
179+
180+
要使用MyBatis, 首先要配置数据源. 当然, 在前面的步骤中我们已经配置好了.
181+
182+
文件内容参考: [src/main/resources/application.yml](./src/main/resources/application.yml)
183+
184+
然后, 我们在配置文件中增加 MyBatis 相关的配置
185+
186+
187+
188+
#### WebMVC
189+
190+
191+
192+
193+
194+
195+
#### 请求链路分析
196+
197+
198+
199+
200+
201+
202+
#### MySQL服务器参数调整
203+
204+
205+
206+
207+
208+
#### 应用程序优化

07rpc/mysql-demo/docker-compose.yml

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
version: '3.1'
2+
3+
services:
4+
5+
mysql:
6+
image: mysql:5.7
7+
command: --default-authentication-plugin=mysql_native_password
8+
ports:
9+
- 13306:3306
10+
environment:
11+
MYSQL_ROOT_PASSWORD: 123456
12+
volumes:
13+
- ./docker_data/docker-entrypoint-initdb.d/:/docker-entrypoint-initdb.d
14+
- ./docker_data/var/lib/mysql/:/var/lib/mysql
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
CREATE DATABASE IF NOT EXISTS `mysql_demo`;
2+
3+
USE `mysql_demo`;
4+
5+
-- 业务订单表
6+
CREATE TABLE `t_biz_order` (
7+
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '自增主键;订单id',
8+
`user_id` bigint(20) NOT NULL COMMENT '用户userId',
9+
`state` int(8) NOT NULL DEFAULT '0' COMMENT '订单状态;参考OrderStateEnum',
10+
`create_time` bigint(20) NOT NULL COMMENT '下单时间',
11+
`update_time` bigint(20) NOT NULL COMMENT '更新时间',
12+
PRIMARY KEY (`id`),
13+
KEY `idx_user_id` (`user_id`)
14+
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='订单信息表';
15+
16+
-- 订单-商品信息表;

07rpc/mysql-demo/generateMapper.sh

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
2+
echo mvn clean -U -DskipTests
3+
mvn clean -U -DskipTests
4+
5+
echo mvn mybatis-generator:generate -X -e
6+
mvn mybatis-generator:generate -X -e

07rpc/mysql-demo/pom.xml

Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,81 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
3+
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
4+
<modelVersion>4.0.0</modelVersion>
5+
<parent>
6+
<groupId>org.springframework.boot</groupId>
7+
<artifactId>spring-boot-starter-parent</artifactId>
8+
<version>2.5.4</version>
9+
<relativePath/> <!-- lookup parent from repository -->
10+
</parent>
11+
<groupId>com.cncounter</groupId>
12+
<artifactId>mysql-demo</artifactId>
13+
<version>0.0.1-SNAPSHOT</version>
14+
<name>mysql-demo</name>
15+
<description>MySQL Demo</description>
16+
<properties>
17+
<java.version>1.8</java.version>
18+
</properties>
19+
<dependencies>
20+
<dependency>
21+
<groupId>org.springframework.boot</groupId>
22+
<artifactId>spring-boot-starter-data-jdbc</artifactId>
23+
</dependency>
24+
<dependency>
25+
<groupId>org.springframework.boot</groupId>
26+
<artifactId>spring-boot-starter-web</artifactId>
27+
</dependency>
28+
<dependency>
29+
<groupId>org.mybatis.spring.boot</groupId>
30+
<artifactId>mybatis-spring-boot-starter</artifactId>
31+
<version>2.2.0</version>
32+
</dependency>
33+
34+
<!-- https://mvnrepository.com/artifact/com.alibaba/fastjson -->
35+
<dependency>
36+
<groupId>com.alibaba</groupId>
37+
<artifactId>fastjson</artifactId>
38+
<version>1.2.78</version>
39+
</dependency>
40+
41+
<dependency>
42+
<groupId>mysql</groupId>
43+
<artifactId>mysql-connector-java</artifactId>
44+
<version>8.0.26</version>
45+
<scope>runtime</scope>
46+
</dependency>
47+
<dependency>
48+
<groupId>org.springframework.boot</groupId>
49+
<artifactId>spring-boot-starter-test</artifactId>
50+
<scope>test</scope>
51+
</dependency>
52+
</dependencies>
53+
54+
<build>
55+
<plugins>
56+
<plugin>
57+
<groupId>org.springframework.boot</groupId>
58+
<artifactId>spring-boot-maven-plugin</artifactId>
59+
</plugin>
60+
<plugin>
61+
<groupId>org.mybatis.generator</groupId>
62+
<artifactId>mybatis-generator-maven-plugin</artifactId>
63+
<version>1.3.6</version>
64+
<configuration>
65+
<configurationFile>${basedir}/src/main/resources/MybatisGeneratorConfig.xml</configurationFile>
66+
<verbose>true</verbose>
67+
<overwrite>true</overwrite>
68+
</configuration>
69+
<!-- 指定数据库jdbc驱动: 必须指定版本号 -->
70+
<dependencies>
71+
<dependency>
72+
<groupId>mysql</groupId>
73+
<artifactId>mysql-connector-java</artifactId>
74+
<version>8.0.26</version>
75+
</dependency>
76+
</dependencies>
77+
</plugin>
78+
</plugins>
79+
</build>
80+
81+
</project>
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
package com.cncounter.mysqldemo;
2+
3+
import org.springframework.boot.SpringApplication;
4+
import org.springframework.boot.autoconfigure.SpringBootApplication;
5+
6+
@SpringBootApplication
7+
public class MysqlDemoApplication {
8+
9+
public static void main(String[] args) {
10+
SpringApplication.run(MysqlDemoApplication.class, args);
11+
}
12+
13+
}

0 commit comments

Comments
 (0)