1.SpringBoot简介
1.1 SpringBoot快速入门
-
1 创建新模块
-
选中
Web
,然后勾选Spring Web
由于我们需要开发一个web
程序,使用到了SpringMVC
技术,所以按照下图红框进行勾选
-经过以上步骤后就创建了如下结构的模块,它会帮我们自动生成一个Application
类,而该类一会再启动服务器时会用到 -
2创建 Controller
在com.itheima.controller
包下创建BookController
,代码如下:
@RestController
@RequestMapping("/books")
public class BookController {
@GetMapping("/{id}")
public String getById(@PathVariable Integer id){
System.out.println("id ==> "+id);
return "hello , spring boot!";
}
}
3 启动服务器
- `4 测试
这个类中的东西很简单,就在类上添加了一个 @SpringBootApplication
注解,而在主方法中就一行代码。我们在启动服务器时就是执行的该类中的主方法。
pom.xml
配置文件中的内容`
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<!--指定了一个父工程,父工程中的东西在该工程中可以继承过来使用-->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.5.0</version>
</parent>
<groupId>com.itheima</groupId>
<artifactId>springboot_01_quickstart</artifactId>
<version>0.0.1-SNAPSHOT</version>
<!--JDK 的版本-->
<properties>
<java.version>8</java.version>
</properties>
<dependencies>
<!--该依赖就是我们在创建 SpringBoot 工程勾选的那个 Spring Web 产生的-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--这个是单元测试的依赖,我们现在没有进行单元测试,所以这个依赖现在可以没有-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<!--这个插件是在打包时需要的,而这里暂时还没有用到-->
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
1.2 SpringBoot快速入门(网址版)
https://spring.io/projects/spring-boot
进入到 SpringBoot
官网后拖到最下方就可以看到如下内容
然后点击 Spring Initializr
超链接就会跳转到如下页面
选择 Spring Web
可以点击上图右上角的 ADD DEPENDENCIES... CTRL + B
按钮,就会出现如下界面
以上步骤完成后就可以生成 SpringBoot
工程了。在页面的最下方点击 GENERATE CTRL + 回车
按钮生成工程并下载到本地,如下图所示
以上步骤完成后就可以生成 SpringBoot
工程了。在页面的最下方点击 GENERATE CTRL + 回车
按钮生成工程并下载到本地,如下图所示
1.3 SpringBoot快速入门(阿里云版)
只需要将地址进行修改即可
http://start.aliyun.com或https://start.aliyun.com
1.4 SpringBoot快速入门
- 1.由于我们在构建
SpringBoot
工程时已经在pom.xml
中配置了如下插件
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
- 2.所以我们只需要使用
Maven
的package
指令打包就会在target
目录下生成对应的Jar
包。
注意:该插件必须配置,不然打好的
jar
包也是有问题的。
- 3.进入
jar
包所在位置,在命令提示符
中输入如下命令
jar -jar xxxx.jar
- 4.执行上述命令就可以看到
SpringBoot
运行的日志信息
1.5 SpringBoot概述
1.5.1 起步依赖
- 父工程
上图中的properties
标签中定义了各个技术软件依赖的版本,避免了我们在使用不同软件技术时考虑版本的兼容问题。在properties
中我们找servlet
和mysql
的版本如下图
dependencyManagement标签是进行依赖版本锁定,但是并没有导入对应的依赖;如果我们工程需要那个依赖只需要引入依赖的
groupid和
artifactId不需要定义
version`。
而 build
标签中也对插件的版本进行了锁定,如下图
看完了父工程中 pom.xml
的配置后不难理解我们工程的的依赖为什么都没有配置 version
。
1.5.2 探索依赖
在我们创建的工程中的 pom.xml
中配置了如下依赖
进入到该依赖,查看 pom.xml
的依赖会发现它引入了如下的依赖
里面的引入了 spring-web
和 spring-webmvc
的依赖,这就是为什么我们的工程中没有依赖这两个包还能正常使用 springMVC
中的注解的原因。
1.5.2 引导类
@SpringBootApplication
public class Springboot01Application {
public static void main(String[] args) {
SpringApplication.run(Springboot01Application.class, args);
}
}
SpringBoot的引导类是Boot工程的执行入口,运行main方法就可以启动项目
SpringBoot工程运行后初始化Spring容器
,扫描引导类
所在包加载bean
1.5.4 内嵌tomcat
======================================================================================
2.配置文件
2.1 系统属性配置
修改配置:
- 修改服务器端口号
#服务器端口修改
server.port=80
- 关闭运行日志图标
#关闭日志运行图标
spring.main.banner-mode=off
- 设置日志相关
logging.level.root=debug
4. 因为有更多的关于配置的信息:
查询方法如下:
https://docs.spring.io/spring-boot/docs/current/reference/html/application-properties.html#application-properties
2.2 配置文件格式
- application.properties
server.port=80 修改端口号
- application.yml
server:
port: 81
- application.yaml
server:
port: 82
注意:SpringBoot
程序的配置文件名必须是 application
,只是后缀名不同而已。
创建结尾为yml,yaml或者properties的application文件
注意:
优先级
application.properties
>application.yml
>application.yaml
配置文件不出现提示:
2.3 yaml(yml)格式
-
大小写敏感
-
属性层级关系使用多行描述,每行结尾使用冒号结束
-
使用缩进表示层级关系,同层级左侧对齐,只允许使用空格(不允许使用Tab键)
空格的个数并不重要,只要保证同层级的左侧对齐即可。
-
属性值前面添加空格(属性名与属性值之间使用冒号+空格作为分隔)
-
# 表示注释
核心规则:数据前面要加空格与冒号隔开
数组数据在数据书写位置的下方使用减号作为数据开始符号,每行书写一个数据,减号与数据间空格分隔,例如
enterprise:
name: itcast
age: 16
tel: 4006184000
subject: //数组
- Java
- 前端
- 大数据
subject: [java,前端,大数据] //也是数组
users: //对象数组 第一种
- name: tom
age: 4
- name: tim
age: 8
users1: //对象数组 第二种
-
name: tom
age: 4
-
name: tim
age: 8
usrs3: [{name:tom,age:4},{name:tim,age:8}] //第三种对象数组
2.4 yaml(yml)配置文件数据读取
2.4.1 使用 @Value注解
使用 @Value("表达式")
注解可以从配合文件中读取数据,注解中用于读取属性名引用方式是:${一级属性名.二级属性名……}
在yaml文件种读取数据只需要 ${}即可
#转义字符不生效
user1: ${users}\temp
结果:d/window10\temp
#加了字符串 转义字符就生效了
user2: "${users}\temp"
结果:d/window10 emp
2.4.2 Environment对象
上面方式读取到的数据特别零散,SpringBoot
还可以使用 @Autowired
注解注入 Environment
对象的方式读取数据。这种方式 SpringBoot
会将配置文件中所有的数据封装到 Environment
对象中,如果需要使用哪个数据只需要通过调用 Environment
对象的 getProperty(String name)
方法获取。具体代码如下:
注意:这种方式,框架内容大量数据,而在开发中我们很少使用。
2.4.3 自定义对象
1. 使用@ConfigurationProperties注解绑定配置信息到封装类中
2. 封装类需要定义为Spring管理的bean,否则无法进行属性注入
SpringBoot
还提供了将配置文件中的数据封装到我们自定义的实体类对象中的方式。具体操作如下:
-
将实体类
bean
的创建交给Spring
管理。在类上添加
@Component
注解 -
使用
@ConfigurationProperties
注解表示加载配置文件在该注解中也可以使用
prefix
属性指定只加载指定前缀的数据 -
在
BookController
中进行注入
注意: 使用第三种方式,在实体类上有如下警告提示
这个警告提示解决是在 pom.xml
中添加如下依赖即可
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
2.5 多环境配置
以后在工作中,对于开发环境、测试环境、生产环境的配置肯定都不相同,比如我们开发阶段会在自己的电脑上安装 mysql
,连接自己电脑上的 mysql
即可,但是项目开发完毕后要上线就需要该配置,将环境的配置改为线上环境的。
2.5.1 yaml文件
在 application.yml
中使用 ---
来分割不同的配置,内容如下
#设置启用的环境
spring:
profiles:
active: dev
---
#开发
spring:
profiles: dev
server:
port: 80
---
#生产
spring:
profiles: pro
server:
port: 81
---
#测试
spring:
profiles: test
server:
port: 82
---
注意:
在上面配置中给不同配置起名字的 spring.profiles
配置项已经过时。最新用来起名字的配置项是
#开发
spring:
config:
activate:
on-profile: dev
2.5.2 properties文件
properties
类型的配置文件配置多环境需要定义不同的配置文件
- application-dev.properties
是开发环境的配置文件。我们在该文件中配置端口号为
80`
server.port=80
- application-test.properties
是测试环境的配置文件。我们在该文件中配置端口号为
81`
server.port=81
SpringBoot
只会默认加载名为 application.properties
的配置文件,所以需要在 application.properties
配置文件中设置启用哪个配置文件,配置如下:
spring.profiles.active=dev
2.5.3 命令行启动参数设置
- 1.修改配置
我们知道jar
包其实就是一个压缩包,可以解压缩,然后修改配置,最后再打成jar包就可以了。这种方式显然有点麻烦,而SpringBoot
提供了在运行jar
时设置开启指定的环境的方式,如下
java –jar xxx.jar –-spring.profiles.active=test
那么这种方式能不能临时修改端口号呢?也是可以的,可以通过如下方式
java –jar xxx.jar –-server.port=88
当然也可以同时设置多个配置,比如即指定启用哪个环境配置,又临时指定端口,如下
java –jar springboot.jar –-server.port=88 –-spring.profiles.active=test
大家进行测试后就会发现命令行设置的端口号优先级高(也就是使用的是命令行设置的端口号),配置的优先级其实 SpringBoot
官网已经进行了说明,参见 :
2.5.4 Maven和boot的多环境开发兼容问题
以Maven为主 boot为辅
=================================================
2.6 配置文件分类
有这样的场景,我们开发完毕后需要测试人员进行测试,由于测试环境和开发环境的很多配置都不相同,所以测试人员在运行我们的工程时需要临时修改很多配置,如下
SpringBoot
中4级配置文件放置位置:
- 1级:classpath:application.yml
- 2级:classpath:config/application.yml
- 3级:file :application.yml
- 4级:file :config/application.yml
==说明:==级别越高优先级越高
3.SpringBoot整合第三方技术
3.1 SpringBoot整合junit
直接使用即可
注意: 这里的引导类所在包必须是测试类所在包及其子包。
例如:
- 引导类所在包是
com.itheima
- 测试类所在包是
com.itheima
如果不满足这个要求的话,就需要在使用 @SpringBootTest
注解时,使用 classes
属性指定引导类的字节码对象。如 @SpringBootTest(classes = Springboot07TestApplication.class)
=========================================
3.2 SpringBoot整合mybatis
-
创建新模块,选择
Spring Initializr
,并配置模块相关基础信息
-
选择当前模块需要使用的技术集(MyBatis、MySQL)
-
定义dao接口
-
我们代码中并没有指定连接哪儿个数据库,用户名是什么,密码是什么。所以这部分需要在
SpringBoot
的配置文件中进行配合。
在 application.yml
配置文件中配置如下内容
spring:
datasource:
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql://localhost:3306/ssm_db
username: root
password: 1234
注意:
SpringBoot
版本低于2.4.3(不含),Mysql驱动版本大于8.0时,需要在url连接串中配置时区 jdbc:mysql://localhost:3306/ssm_db?serverTimezone=UTC
,或在MySQL数据库端配置时区解决此问题
3.3 整合Mybtais_plus
- 1.导入mysql驱动包
- 2.导入mybaits的依赖
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.4.3</version>
</dependency>
-
3.因为使用mybaits_plus的时候是按照domain中的pojo类名进行寻找表,所以我们数据库中寻求不到表 所以我们需要配置。
-
4.编写dao层的内容
-
5.进行调用
3.4 使用Druid数据源
- 导入
Druid
依赖
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.16</version>
</dependency>
- 在
application.yml
配置文件配置