1.环境说明
1.1 IDEA的版本
可在官网上查询相应的版本进行下载。
1.2 Mysql的版本
可以使用最新版本的mariadb,建议使用5.5版本,最好不要使用最新版的Mysql8.0版本。
2 IDEA环境配置
2.1 IDEA环境搭建参考PPT
2.2 IDEA关于版本的说明
2.2.1 社区版本
说明:社区版本没有Spring/JS/HTML的支持,需要针对SpringBoot安装特定的插件——Spring Assistant。
2.2.2 正式版本
说明:正式版本中,自带了SpringBoot的插件,所以无需再安装。
2.3 Lombok插件的安装
说明:当创建一个实体对象时,必须写get/set/toStriing/构造/equals/hash等方法,为了优化上述操作,则引入lombok插件,通过相应的注解可以自动为实体对象生成必要的方法。
2.4 SpringBoot项目入门
2.4.1 框架的作用
- Spring MVC的作用:接收用户提交的数据,返回服务器数据(交互)。
- Spring 的作用:整合其他的第三方框架,可以让程序调用以一种统一的方式进行调用(整合)。
- Mybatis 的作用:整合JDBC,方便用户与数据库进行交互(持久化)。
- Spring Boot 作用: 简化Spring等框架的操作(简化)。
2.4.2框架之间的关系
创建SpringBoot项目
2.5.1 创建项目
2.5.2 选择依赖
3 创建SpringBoot高级用法
3.1 关于maven坐标说明
3.1.0 maven常见命令
3.1.1 Maven常见命令说明
- install项目打包命令
- clean清空target文件目录
注意事项:clean只会清空target文件目录的内容,而本地仓库的文件是不会清理的,所以每次项目打包都要重新install。
3.1.2 坐标
<!--坐标的说明: 只要是一个Maven工程必然会有坐标-->
<!--groupId 组ID: 公司域名倒写-->
<groupId>com.jt</groupId>
<!--项目名称 名称唯一-->
<artifactId>springboot_demo1</artifactId>
<!--版本: 可以自己指定-->
<version>0.0.1-SNAPSHOT</version>
3.1.3 坐标的作用
- 可以唯一标识项目的路径
- 坐标是将来项目打包的位置
- 修改jar包文件使得其可以被其他项目依赖使用
3.2 关于pom.xml文件的说明
3.2.1 知识铺垫
作为大型项目的开发,里面必然会引入很多的jar包文件(包括:公共第三方的jar包、自己公司的jar包等),由于jar包文件过多,就有可能会引发jar包文件冲突的问题。
3.2.2 parent标签的说明
2015年SpringBoot框架进入人们的视野,其中最为主要的是parent标签的定义,它是Spring官网负责维护,在其中定义了几乎所有框架与SpringBoot兼容的版本信息。
作用:集中定义版本号。
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.5.3</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
3.2.3 依赖(dependency)的作用
<!--依赖:项目中需要添加什么功能,就依赖于什么jar包-->
<dependencies>
<!--引入SpringMVC的功能-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--引入springboot的测试功能-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
3.2.4 build的作用
<build>
<!--该插件是SpringBoot项目打包时必须添加的,如果没有该插件,则会导致jar包不能正常运行-->
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
3.3 关于SpringBoot配置文件的说明
3.3.1 properties文件说明
-
properties语法 是Key-Value结构
-
基本写法 key=value 不要写多余的空格
-
properties 本身就是字符串的数据类型,所以无需添加’'号
-
在properties中IDEA设定UTF-8,是IDEA读取的字符集编码,程序通过IO进行读取时,默认编码ISO-8859-1,所以中文必定乱码,需要设定字符集。
spring.application.name=springboot_demo server.port=8090 server.servlet.context-path=/springboot
3.3.2 yml文件说明
- 数据结构 key-value结构
- 写法 key:(加空格)value
- yml文件有层级结构,注意父子级的语法的缩进
- 属性和值大小写敏感,如果有特殊字符% & 记得用单引号(‘)包起来
- yml文件程序默认读取时采用UTF-8编码
server:
port: 8090
servlet:
context-path: /api/path #项目发布路径
- 当SpringBoot程序启动时,该配置项会被Spring加载
- yml文件的主要作用是:编辑SpringBoot与第三方框架的整合。
3.3.3 配置文件的加载顺序
如果同时存在yml和properties的配置文件,则会优先以yml的文件为主,properties为辅。假如,yml中某个配置属性的值不存在,则会去properties中进行获取。
3.3.4 加载其他配置文件的顺序
- 配置文件加载的优先级从低到高如下,高优先级的配置会覆盖低优先级的,互补配置:
-
【1】classpath根目录下的配置文件
-
【2】classpath根目录下的子目录config中的配置文件
-
【3】项目根目录下的配置文件(当前项目是聚合或继承项目,即:父项目根目录)
-
【4】项目根目录下的子目录config中的配置文件
-
【5】直接子目录(服务器中多见这种命令行参数配置的方式:可以在运行jar的命令中指定加载某个路径下的配置文件)
java -jar springbootdemo-0.0.1-SNAPSHOT.jar --spring.config.location=D:\config/
-
3.3.5 Profile文件的加载
- Profile是配置的意思,对于应用程序来说,不同的环境需要加载不同的配置文件。
- SpringBoot框架提供了多profile管理的功能,我们可以使用profile的功能来区分不同的环境配置。
- 多Profile文件:语法规则是application-{profile}.properties(.yaml/.yml)。
- application-dev.yml
- application-prod.yml
- application-db.yml
- application-xxljob.yml
- 在主配置文件中指定使用某个profile文件
spring:
profiles:
active: prod,db,xxljob #如果需要指定多个文件,可以使用逗号分隔
3.3.6 读取外部配置文件的方式
-
1、注解加载
- 在配置类上添加:@PropertySource(“classpath:xx.properties”)
- 会与约定的配置文件进行互补(一定要指定.properties文件)
@SpringBootApplication @PropertySource("classpath:appSource.properties") public class SpringbootDemoApplication { public static void main(String[] args) throws IOException { SpringApplication.run(SpringbootDemoApplication.class,args); } }
-
2、设置属性:通过设置默认的配置文件
- 会与约定的配置文件(即:application.(yml/properties))进行互补
@SpringBootApplication public class SpringbootDemoApplication { public static void main(String[] args) throws IOException { SpringApplication application = new SpringApplication(SpringbootDemoApplication.class); //创建Properties Properties properties = new Properties(); //通过当前类的ClassLoader加载配置文件 InputStream inputStream = SpringbootDemoApplication.class.getClassLoader().getResourceAsStream("app.properties"); //将输入流读取为properties对象 properties.load(inputStream); //设置外部的配置文件 application.setDefaultProperties(properties); application.run(args); } }
-
约定配置文件(默认方式)
3.4 入门案例
3.4.1 案例要求
1.编辑HelloController类
2.请求路径:http://localhost:8090/hello
3.在客户端页面获取“欢迎使用SpringBoot”的字样
3.4.2 案例实现代码
/**
* 历史:后端进行页面跳转时,一般使用Controller注解
* 当下:前后端分离,页面不归后端管理,使用RestController
* @RestController = @Controller + @ResponseBody
*/
@RestController
//@RequestMapping("//method/hello") 这代表通用的路径,单独的路径要写在某个方法上
public class HelloController {
/*该注解与方法绑定 */
@RequestMapping("/hello")
public String helloController(){
return "欢迎使用SpringBoot";
}
3.4.3 创建启动类
@SpringBootApplication
public class Application{
public static void main(String[] args){
SpringApplication.run(Application.class,args);
}
}
3.5 配置文件动态注入值
3.5.1 业务需求
- 如果将数据写死在代码中,那么数据在发生变化时,就需要手动修改代码,如果以后有大量的需求,则对其扩展会造成极大不便。
- 解决方案:动态为属性赋值。
- 无论是yml还是properties的配置文件都支持使用如下的方式进行赋值。
3.5.2 yml方式为属性赋值
user:
username: 张三
age: 20
birthday: 2002/12/24
# hobby: [打球,跑步,钓鱼]
hobby:
- 打球
- 跑步
- 钓鱼
# friends:
# 朋友1 : 小明
# 朋友2 : 小花
# 朋友3 : 小张
friends: {朋友1: 小明,朋友2: 小花,朋友3: 小张}
批量属性赋值:
@Component
@ConfigurationProperties(prefix = "user")
/*
* @ConfigurationProperties:会告诉SpringBoot将本类中的所有属性和配置文件中相关的配置进行绑定;
* prefix = "user":设置使用配置文件中哪个配置属性下面的所有属性进行一一映射;
* 它同时支持jsr-303数据校验:@Validated
*/
public class User {
private String username;
private Integer age;
private Date birthday;
private List<String> hobby;
private Map<String, Object> friends;
}
单个属性赋值
public class User{
/**
* 表达式:springel表达式,简称spel表达式
* 语法: ${表达式内容}
* 工作原理:
* 容器:在内存中的一个存储大量数据的Map集合
* 1.当SpringBoot程序启动时,首先加载application.yml的配置文件
* 2.在程序加载key-value结构时,将数据保存到Map集合中(容器内部)
* 3.利用Spel表达式,通过key,获取value,再为属性赋值。
*/
//为属性赋值
@Value("${user.username}")
private String username;
@Value("${user.age}")
private Integer age;
@Value("${user.birthday}")
private Date birthday;
}
3.5.3 配置文件占位符
可以使用${xxx}来引用其他属性的值
user:
username: ${random.value}
age: ${random.int(10)}
birthday: 2002/12/24
address: ${user.username}的家在北京市海淀区太平镇36号
3.5.4 单独使用properties来赋值
首先,先将配置文件单独存放到某个目录下,再进行引用。
user.username=${random.uuid}
user.age=${random.int[10,30]}
user.birthday=2002/12/23
user.hobby= 打球,钓鱼
user.friends.f1= xiaoming
user.friends.f2= xiaohua
user.address= XIAN
@Component
@ConfigurationProperties(prefix = "user")
//这里对单独的配置文件进行引用赋值
@PropertySource("classpath:config/user.properties")
public class User {
private String username;
private Integer age;
private Date birthday;
private String address;
private List<String> hobby;
private Map<String, Object> friends;
}