|
| 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 | +#### 应用程序优化 |
0 commit comments