# 项目初始化
Spring官方为我们提供了非常简单的初始化器:[https://start.spring.io](https://start.spring.io/)
![](https://img.kancloud.cn/91/bd/91bd5756c54bad7e9b3deaec0b1cc78c_1023x854.png)
2.1.8为版本号,Goup一般写自己拥有的域名,目的是防止冲突。Artifact为项目标识,在同一个Group下该名称应该唯一,目的也是防止冲突。在Dependencies(依赖)中,我们输入`web`后,在弹出的选项中选择第1个`Spring Web`并点击右方的`+`完成添加。
![](https://img.kancloud.cn/16/4f/164f81065fd493fc29fc0816cc4c06fa_1117x463.png)
最后点击`Generate the project 生成项目`将其下载的任意自己喜欢的文件夹,下载成后解压:
![](https://img.kancloud.cn/7c/7d/7c7dbdc9e859a4a378b2e7a1249ade19_427x111.png)
Spring在推出最新的稳定的版本后,2.1.8版本将被最新的版本替换。为和教程达到一致,请[点击下载](https://yunzhiclub.github.io/springAndAngularGuide/helloWorld.zip)教程对应版本。
# 使用命令行启动项目
打开`shell`并进行到项目文件夹,比如:
```
panjiedeMac-Pro:springBootStudy panjie$ cd helloWorld
panjiedeMac-Pro:helloWorld panjie$ ls
HELP.md mvnw mvnw.cmd pom.xml src
```
*****
windows中使用`dir`来替待`ls`命令。如果想在windows中使用`unix`命令,可以参考[此文章](https://www.kancloud.cn/yunzhiclub/thinkphp5guide/169733)来安装`git`客户端。
*****
执行`mvn spring-boot:run`命令来启动程序,此时`maven`将自动的为我们下载`spring boot`所依赖的其它包,下载成功后自动启动程序。当出现以下字样时表示启动成功:
```
2019-09-19 09:44:40.169 INFO 10164 --- [ main] c.y.helloWorld.HelloWorldApplication : Started HelloWorldApplication in 2.11 seconds (JVM running for 96.448)
```
>[info] 和`npm`一样`maven`也依赖于较好的网络环境,如果在下载包的过程中,发生了超时或是其它异常情况,大多是由于网络原因造成的,则请参阅本节第5小节 ---- maven国内源配置。
使用`Ctrl-C`终止程序后(直接关闭shell也是可以的)我们继续学习。
>[info] 在实际的开发过程中往往为节电脑资源及系统启动时间,在开发前台时我们会使用命行的形式来启动后台。
# 在idea中启动项目
下面将展示如何使用IDEA来启动`Spring Boot`项目。
打开IDEA,点击`open`按钮并选择项目目录下的`pom.xml`文件。
![](https://img.kancloud.cn/9e/22/9e2280bf163d0069e5e93c7dbdb74620_471x243.png)
![](https://img.kancloud.cn/0b/0a/0b0a56aa73955a46f4bb20d867069b60_419x143.png)
选择`Open as Project` **\[很重要\]**
![](https://img.kancloud.cn/8a/c1/8ac10c20f1d759297e7a846d7e859746_677x198.png)
IDEA接下来会进行一些初始化的操作,比如进行项目索引,下载`maven`管理的包等。时间的长知取决于使用电脑的CPU频率(与核心数无关)及网络速度。初始化完成后,我们便可以点击右上方的运行按钮来启动项目了。
![](https://img.kancloud.cn/f1/66/f1663ff4dfff4e36b6c151f2a46f7edb_612x65.png)
*****
如果发生了如下错误:
```
*************************
APPLICATION FAILED TO START
***************************
Description:
The Tomcat connector configured to listen on port 8080 failed to start. The port may already be in use or the connector may be misconfigured.
Action:
Verify the connector's configuration, identify and stop any process that's listening on port 8080, or configure this application to listen on another port.
2019-09-19 10:03:24.468 INFO 26811 --- [ main] o.s.s.concurrent.ThreadPoolTaskExecutor : Shutting down ExecutorService 'applicationTaskExecutor'
Process finished with exit code 1
```
则说明端口8080被占用了,请参考上一小节最后的内容,关闭命令行启动的程序后重新点击启动按钮。
*****
系统成功启动后,控制台如下:
```
2019-09-19 10:07:46.574 INFO 30351 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port(s): 8080 (http) with context path ''
2019-09-19 10:07:46.577 INFO 30351 --- [ main] c.y.helloWorld.HelloWorldApplication : Started HelloWorldApplication in 1.535 seconds (JVM running for 2.016)
```
简单解释一下:
```
2019-09-19 10:07:46.574(574是ms 毫秒) 一般日志 进程号30351 [main线程]地球.中国.天津.河北工业大学.embedded.tomcat.TomcatWebServer : Tomcat服务于8080端口,上下文路径为''
2019-09-19 10:07:46.577 一般日志 进程号30351 --- [main线程] 团队.云智.helloWorld.HelloWorldApplication : 启动HelloWorld应用程序花费了1.545秒(JVM已运行2.016秒)
```
>[success] `单位`: 小学时我们学过dm,cm,mm分别代表分米、厘米、毫米。所以`d`,`c`,`m`分别代表:`分`、`厘`、`毫`,即`0.1`, `0.01`, `0.001`。
> `日志等级`: 分为`error`错误,`warning`警告,`info`一般信息,`debug`调试信息,`trace`追踪执行。
点击停止按钮终止程序运行:
![](https://img.kancloud.cn/21/51/21518e676c7d14b8ccaa540a905466e5_634x60.png)
- 序言
- 第一章:Hello World
- 第一节:Angular准备工作
- 1 Node.js
- 2 npm
- 3 WebStorm
- 第二节:Hello Angular
- 第三节:Spring Boot准备工作
- 1 JDK
- 2 MAVEN
- 3 IDEA
- 第四节:Hello Spring Boot
- 1 Spring Initializr
- 2 Hello Spring Boot!
- 3 maven国内源配置
- 4 package与import
- 第五节:Hello Spring Boot + Angular
- 1 依赖注入【前】
- 2 HttpClient获取数据【前】
- 3 数据绑定【前】
- 4 回调函数【选学】
- 第二章 教师管理
- 第一节 数据库初始化
- 第二节 CRUD之R查数据
- 1 原型初始化【前】
- 2 连接数据库【后】
- 3 使用JDBC读取数据【后】
- 4 前后台对接
- 5 ng-if【前】
- 6 日期管道【前】
- 第三节 CRUD之C增数据
- 1 新建组件并映射路由【前】
- 2 模板驱动表单【前】
- 3 httpClient post请求【前】
- 4 保存数据【后】
- 5 组件间调用【前】
- 第四节 CRUD之U改数据
- 1 路由参数【前】
- 2 请求映射【后】
- 3 前后台对接【前】
- 4 更新数据【前】
- 5 更新某个教师【后】
- 6 路由器链接【前】
- 7 观察者模式【前】
- 第五节 CRUD之D删数据
- 1 绑定到用户输入事件【前】
- 2 删除某个教师【后】
- 第六节 代码重构
- 1 文件夹化【前】
- 2 优化交互体验【前】
- 3 相对与绝对地址【前】
- 第三章 班级管理
- 第一节 JPA初始化数据表
- 第二节 班级列表
- 1 新建模块【前】
- 2 初识单元测试【前】
- 3 初始化原型【前】
- 4 面向对象【前】
- 5 测试HTTP请求【前】
- 6 测试INPUT【前】
- 7 测试BUTTON【前】
- 8 @RequestParam【后】
- 9 Repository【后】
- 10 前后台对接【前】
- 第三节 新增班级
- 1 初始化【前】
- 2 响应式表单【前】
- 3 测试POST请求【前】
- 4 JPA插入数据【后】
- 5 单元测试【后】
- 6 惰性加载【前】
- 7 对接【前】
- 第四节 编辑班级
- 1 FormGroup【前】
- 2 x、[x]、{{x}}与(x)【前】
- 3 模拟路由服务【前】
- 4 测试间谍spy【前】
- 5 使用JPA更新数据【后】
- 6 分层开发【后】
- 7 前后台对接
- 8 深入imports【前】
- 9 深入exports【前】
- 第五节 选择教师组件
- 1 初始化【前】
- 2 动态数据绑定【前】
- 3 初识泛型
- 4 @Output()【前】
- 5 @Input()【前】
- 6 再识单元测试【前】
- 7 其它问题
- 第六节 删除班级
- 1 TDD【前】
- 2 TDD【后】
- 3 前后台对接
- 第四章 学生管理
- 第一节 引入Bootstrap【前】
- 第二节 NAV导航组件【前】
- 1 初始化
- 2 Bootstrap格式化
- 3 RouterLinkActive
- 第三节 footer组件【前】
- 第四节 欢迎界面【前】
- 第五节 新增学生
- 1 初始化【前】
- 2 选择班级组件【前】
- 3 复用选择组件【前】
- 4 完善功能【前】
- 5 MVC【前】
- 6 非NULL校验【后】
- 7 唯一性校验【后】
- 8 @PrePersist【后】
- 9 CM层开发【后】
- 10 集成测试
- 第六节 学生列表
- 1 分页【后】
- 2 HashMap与LinkedHashMap
- 3 初识综合查询【后】
- 4 综合查询进阶【后】
- 5 小试综合查询【后】
- 6 初始化【前】
- 7 M层【前】
- 8 单元测试与分页【前】
- 9 单选与多选【前】
- 10 集成测试
- 第七节 编辑学生
- 1 初始化【前】
- 2 嵌套组件测试【前】
- 3 功能开发【前】
- 4 JsonPath【后】
- 5 spyOn【后】
- 6 集成测试
- 7 @Input 异步传值【前】
- 8 值传递与引入传递
- 9 @PreUpdate【后】
- 10 表单验证【前】
- 第八节 删除学生
- 1 CSS选择器【前】
- 2 confirm【前】
- 3 功能开发与测试【后】
- 4 集成测试
- 5 定制提示框【前】
- 6 引入图标库【前】
- 第九节 集成测试
- 第五章 登录与注销
- 第一节:普通登录
- 1 原型【前】
- 2 功能设计【前】
- 3 功能设计【后】
- 4 应用登录组件【前】
- 5 注销【前】
- 6 保留登录状态【前】
- 第二节:你是谁
- 1 过滤器【后】
- 2 令牌机制【后】
- 3 装饰器模式【后】
- 4 拦截器【前】
- 5 RxJS操作符【前】
- 6 用户登录与注销【后】
- 7 个人中心【前】
- 8 拦截器【后】
- 9 集成测试
- 10 单例模式
- 第六章 课程管理
- 第一节 新增课程
- 1 初始化【前】
- 2 嵌套组件测试【前】
- 3 async管道【前】
- 4 优雅的测试【前】
- 5 功能开发【前】
- 6 实体监听器【后】
- 7 @ManyToMany【后】
- 8 集成测试【前】
- 9 异步验证器【前】
- 10 详解CORS【前】
- 第二节 课程列表
- 第三节 果断
- 1 初始化【前】
- 2 分页组件【前】
- 2 分页组件【前】
- 3 综合查询【前】
- 4 综合查询【后】
- 4 综合查询【后】
- 第节 班级列表
- 第节 教师列表
- 第节 编辑课程
- TODO返回机制【前】
- 4 弹出框组件【前】
- 5 多路由出口【前】
- 第节 删除课程
- 第七章 权限管理
- 第一节 AOP
- 总结
- 开发规范
- 备用