目录
一、为什么要学Spring Boot
1、Spring Boot的优点
二、创建Spring Boot项目
1、创建项目之前的准备工作
2、创建Spring Boot项目
3、项目目录的介绍
4、安装Spring Boot快速添加依赖的插件
5、在项目中写一个helloworld
三、Spring Boot的配置文件
1、配置文件的作用
2、properties格式的配置文件
2.1、基本语法格式
2.2、读取配置项
3、yml格式的配置文件
3.1、yml基本语法
3.2、使用yml配置对象
4、配置集合
Spring的诞生是为了简化Java程序的开发,而Spring Boot的诞生是为了简化Spring程序开发的,他就是Spring框架的脚手架。为了快速开发Spring程序而开发的一个框架。
Spring和Spring Boot开发效率就像下面的图片
Spring
Spring Boot
火车让我们出行方便,但是高铁让我们的生活更便捷,这就像我们的Spring和Spring Boot。
- 起步依赖:常见项目的时候就可以方便的添加依赖,不再需要像Spring在添加依赖的时候,需要让添加的依赖之间版本相匹配。(开发前)
- 内置Tomcat容器,把外部项目可以像内部项目一样直接运行。不需要再打一个war包,将程序放到Tomcat的webapps目录中,再启动Tomcat。(开发中)
- 快速部署,使用jar包加上简单的命令就可以再服务器上直接运行,也就是服务器上只要装配了1.8及以上版本的JDK,就可以直接以jar包方式启动,使用Spring Boot内置的Tomacat运行。(开发后)
- 抛弃了XML的配置方式,Spring中使用XML的方式配置文件首先就需要我们将特定的代码先复制到文件中,然后根据自己的需要配置,比较繁琐。Spring Boot中的配置文件是空白的,你需要配置什么写什么即可。
- 提供了更多的监控框架,方便了监控系统运行。
还是之前说过的,如果你想使用的idea社区版,那么就需要你安装2021.3.x版本或者这份版本之前的版本,因为社区版新版本对我们安装的一些插件收费。
创建Spring Boot项目之前需要安装Spring Boot Helper插件
这个插件安装完成之后,它的图标和名字就发生了改变,变成了下面的这个东西。
注意到这里并不是所有人的项目会创建成功,我们还需要检查一下自己的国内源是否配置正确。
检查和配置当前项目的国内源
设置往后新创建的项目的国内源
具体的setting.xml文件的配置,可以看我的这篇博客【Spring】创建一个Spring项目与Bean对象的存储_奋斗べ青年.的博客-CSDN博客
到这里一个Spring Boot 项目就创建完成了。
这里需要知道的是这个插件中只是提供了Spring Boot中最常用的jar包(依赖),不太常用到的这个里面是没有的,还是需要我们在maven仓库中找到,手动添加依赖。
使用这个插件,需要我们在pom.xml文件中单机鼠标右键
这里需要注意的是,创建类需要在demo包底下创建的,不能在Java包的其他包底下创建,在其他包底下创建的类,是不能别识别的。
当我们将创建的TestController类添加到example包下,这个时候重启,再次访问是访问不到的的。
Spring Boot核心思想:约定大于配置。Spring Boot中有许多约定或规范,你必须遵循。这里需要遵循的约定就是,所有你要放在容器中的对象的类,都必须和启动类在同一个目录下或者是在启动类所在目录的子目录中。如果不放,就会扫描不到。
Spring Boot项目中所有重要的数据都是在配置文件中配置的,比如
- 数据库的连接信息,包括用户名和密码的设置
- 项目的启动端口,
- 第三方系统的调用密钥等信息
- 用于发现和定位问题的普通日志和异常日志等。
配置文件的格式有两种properties和yml(yaml) 。虽然有两种格式,但是配置文件的名字都需要是application,如果配置文件的名字是其他的,那么这个文件不会被识别,那么其中的配置信息也就并不会生效。
properties格式的配置文件可以和yml格式的配置文件共同存在于一个项目中,但是如果两个配置文件中出现了同样的配置信息,比如两个配置文件中都配置了"server.port",指定tomcat的端口号不同,那么这个时候就会以properties格式的配置文件中的配置为主,也就是说properties配置文件优先级高,但是两个配置文件都会被加载。只不过是优先级高的先加载。
一个项目中可以将两种格式的配置文件共存,但是实际使用中,我们通常只会采用一种格式的配置文件。这样可以更好的维护,管理。
properties的语法是用键值对的形式来组织的,key与value之间是使用"="连接的,并不需要多余的空格和缩进。配置文件中使用"#"号来添加注释信息。如下面的代码
server.port=8888
✨这里需要注意的是,我们在properties格式的配置文件中写了注释信息,注释信息中存在中文,可能在下次打开这个项目的时候,注释信息中存在的中文会乱码,因为properties格式的配置文件中默认的字符集是ISO-8859-1.
解决中文乱码问题可以在setting中设置来解决。但是当前已经写了的中文在设置好了之后,再次打开还是乱码,但是将字符集修改之后添加的中文,就不会在出现乱码的问题了。
这个操作只是修改当前项目的。
我们需要将从今往后创建的所有新项目都改为UTF-8,点击进入之后,和上面的操作一样搜索encoding,然后将所有的字符集都改为UTF-8.
✨所有的配置文件中存在两类配置项:系统配置项和用户自定义配置项
- 系统配置项:例如配置端口号 server.port
- 用户自定义配置项:例如myMotherland = China
#数据库的配置
Spring.datasource.url=jdbc:mysql://127.0.0.1:3306/库名
Spring.datasource.username=root
Spring.datasource.password=123456
Spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
#用户自定义配置项
myMotherland = China
#用户自定义配置项
myMotherland = China
在项目中,想要主动的读取配置文件中的内容,可以使用@Value注解来实现,@Value注解参数中使用"${}"的格式读取。
package com.example.demo;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
@Controller
@ResponseBody
public class TestController {
@Value("${myMotherland}")//这里是通过依赖注入的方式将配置文件中的自定义信息注入到当前的属性中
private String myMotherland;
@RequestMapping("/sayHi")
public String sayHi(){
return "我的祖国是"+myMotherland;
}
}
properies配置文件结构清晰,没有层级、各种缩进和空格格式的控制,键和值的形式简单,这种格式很适合初学者。不容易出错。但是这种格式的写法比较臃肿。还有一个问题就是properies格式的配置文件对中文的支持不是很好。
yml是YAML的缩写(全称为Yet Another Markup Language)意思为另一种标记语言。他对中文的支持很好
- yml 是⼀个可读性⾼,写法简单、易于理解,它的语法和 JSON 语⾔类似。
- yml ⽀持更多的数据类型,它可以简单表达清单(数组)、散列表,标量等数据形态。它使⽤空⽩ 符号缩进和⼤量依赖外观的特⾊,特别适合⽤来表达或编辑数据结构、各种配置⽂件等。
- yml ⽀持更多的编程语⾔,它不⽌是 Java 中可以使⽤在 Golang、PHP、Python、Ruby、 JavaScript、Perl 中。
yml是属性结构的配置文件,它的基础语法是"key:value",注意key和value之间使用因为冒号加空格的方式组成的,其中空格不能省略。下面我们来看一下设置端口号和数据库连接信息的代码
#设置端口号
server:
port: 8081
#设置数据库连接
spring:
datasource:
url: jdbc:mysql://127.0.0.0:3306/dbname?characterEncoding=utf8
username: root
password: 123456
我们使用yml还可以配置对象
#自定义对象
student:
id: 1
name: 李四
age: 20
1️⃣可以使用@Value注解来获取对象中的属性的值。使用可以使用@Controller注解将UserController类的对象存储到容器中。在将这个类创建成对象时通过@Value注解,将配置文件中student对象的名字赋值给当前类的属性,然后调用初始化方法doPostConstruct,完成对象的初始化。
package com.example.demo;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Controller;
import javax.annotation.PostConstruct;
@Controller
public class UserController {
@Value("${student.name}")
private String name;
@PostConstruct
public void doPostConstruct(){
//初始化方法
System.out.println("name "+name);
}
}
2️⃣我们也可以使用@ConfigurationProperties注解来读取配置文件中的对象并且与五大类注解搭配使用,在User类中使用五大类注解中的一个的作用是保证@ConfigurationProperties注解能够执行,只有让User类和Spring Boot框架一起启动才能够将配置文件中的对象属性赋值给User类中的属性
package com.example.demo.model;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
@ConfigurationProperties("student")
@Component
public class User {
private int id;
private String name;
private int age;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "User{" +
"id=" + id +
", name='" + name + '\'' +
", age=" + age +
'}';
}
}
这里将user对象打印出来
package com.example.demo;
import com.example.demo.model.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import javax.annotation.PostConstruct;
@Controller
public class UserController {
@Autowired
private User user;
@PostConstruct
public void doPostConstruct(){
//初始化方法
System.out.println(user.toString());
}
}
配置文件也可以配置list集合,如下所示
#配置集合
dbtypes://key值
name://集合名字
//集合属性
- mysql
- sqlserver
- db2
或者使用行内写法
dbtypes: {name: [mysql,sqlserver,db2]}
这里读取集合和对象一样,也是使用@ConfigurationProperties注解来读取,具体实现和读取对象一样,先创建一个list类,将集合中的属性设置成私有的,然后使用get和set方法,然后通过下面的程序将list对象赋值到当前类的属性上。
package com.example.demo;
import com.example.demo.model.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import javax.annotation.PostConstruct;
@Controller
public class UserController {
@Autowired
private List list;
@PostConstruct
public void doPostConstruct(){
//初始化方法
System.out.println(list.toString());
}
}