SpringBoot
SpringBoot
概述
SpringBoot是搭建spring应用的脚手架,可以迅速的搭建一个spring应用,是一个工具,而非框架。
解决问题:
复杂的配置
混乱的依赖管理
特点
- 快速创建独立的Spring应用。
- 提供固定的启动器依赖(启动器即Spring Boot提供的一个jar包)去简化组件配置,通过自己设置参数(.properties或.yml的配置文件),实现开箱即用(即快速使用)的效果。
- 只要你导入了某一个框架的启动器,那么该框架对应的依赖会全部自动导入
- 提供了一些大型项目中常见的非功能性特性,如内嵌服务器(如tomcat、jetty、undertow)、安全、指标,健康检测、外部化配置等。
搭建测试工程



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>
<!--1. 凡是springboot项目都必须要继承一个父模块-->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>3.1.1</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<!-- Generated by https://start.springboot.io -->
<!-- 优质的 spring/boot/data/security/cloud 框架中文文档尽在 => https://springdoc.cn -->
<groupId>com.yxh</groupId>
<artifactId>demo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>demo</name>
<description>demo</description>
<properties>
<java.version>17</java.version>
</properties>
<dependencies>
<!-- 2. 以后你需要使用哪个框架,那么就导入对应框架的启动器即可。
比如:springmvc - starter-web-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</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>
<configuration>
<excludes>
<exclude>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</exclude>
</excludes>
</configuration>
</plugin>
</plugins>
</build>
</project>
启动类
package com.yxh.demo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
// //表明是一个springboot应用
/*
@SpringBootApplication这个注解的本质是有以下三个注解:
1.@Configuration【表示该类是一个配置类】
2.@EnableAutoConfiguration【开启自动装配, 根据导入的依赖来完成该框架的自动配置。】
===springboot启动时会检测你导入了哪些框架的jar包,那么springboot就会给你完成哪些配置;例如springmvc(核心控制器,处理器映射器,处理器适配器,视图解析器的对象的创建)===
3.@ComponentScan【默认扫描SpringbootNewApplication所在包以及子包下面所有使用了spring注解的类】
===spring注解
ioc:@Controller @Service @Component @Repository
DI:@Value @Autowired @Qualier
AOP:@Transational @Before @After===
*/
//springboot启动类
@SpringBootApplication
public class DemoApplication {
//启动spring的容器,加载当前类上面的@SpringBootApplication注解
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
}






配置文件
application.properties
## 端口号
server.port=9090
## 项目访问路径
server.servlet.context-path=/test
springboot在启动完成自动配置的时候会去读取application.properties文件,根据key值读取相应的value
yml配置
- YML文件格式是YAML(YAML Aint Markup Language)编写的文件格式,YAML是一种层级树键值对格式文件,并且容易被人类阅读,容易和脚本语言交互的,可以被支持YAML库的不同的编程语言程序导入,比如: C/C++, Ruby, Python, Java, Perl, C#, PHP等。YML文件是以数据为核心的,比传统的xml方式更加简洁。
- YML文件的扩展名可以使用.yml或者.yaml。
当application.properties与application.yml两个文件同时存在时,当属性名相同时application.properties中的属性会 覆盖 application.yml中的属性。
加载顺序:
1、application.yml
2、application.properties
application.yml
server:
port: 9090
servlet:
context-path: /test
## 如果需要自定义一些东西,只能写在application.yml或者application.properties中
## 自己定义的属性和值,需要自己去读取
student:
name: 张三
age: 18
sex: 女
读取自定义配置
@Data
//spring注解 创建对象
@Component
//spring 要把数据给到实体类的前提是:1.属性名要对上,2.属性必须要有setter方法
@ConfigurationProperties(prefix="student")
public class User implements Serializable{
private String name;
private String sex;
private Integer age;
}
或者
@Data
@Component
public class Student implements Serializable{
@Value("${student.name}")
private String name;
@Value("${student.sex}")
private String sex;
@Value("${student.age}")
private Integer age;
}
!!不支持注入复杂数据类型
集成mybatis
1.导入依赖
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.3.8.RELEASE</version>
</parent>
<dependencies>
<!--springmvc-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--数据库驱动-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.47</version>
</dependency>
<!--myabtis-->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.1.0</version>
</dependency>
<!--lombok-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
</dependencies>
2.配置yml
server:
port: 8081
servlet:
context-path: /test
## 配置数据源
spring:
datasource:
username: root
password: root
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/medical?useSSL=false
## 映射文件/包名
mybatis:
mapper-locations:
- classpath:mapper/*.xml
type-aliases-package: com.yxh.springboot_create_ssm.entity
configuration:
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
## 记录日志
3.编写实体类
4.编写mapper
接口上加@Mapper或者在Application.java上加@MapperScan(basePackages = "com.yxh.springboot.dao")
静态资源访问



默认的静态资源访问路径有四个:
- classpath:/META-INF/resources/
- classpath:/resources/
- classpath:/static/
- classpath:/public
第二步: 创建静态资源存储目录
我们习惯会把静态资源放在classpath:/static/目录下。拷贝"资料"文件夹目录下的test.jpg与test.js

重启项目后访问

拦截器的使用
思考: 拦截器也是我们经常需要使用的,在SpringBoot中该如何添加呢?
实现步骤
第一步
-
第一步: 自定义拦截器实现HandlerInterceptor接口
src\main\java\cn\itcast\interceptor\LoginInterceptor.java:
package com.tyhxzy.interceptor; import org.springframework.stereotype.Component; import org.springframework.web.servlet.HandlerInterceptor; import org.springframework.web.servlet.ModelAndView; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @Component public class Demo1Interceptor implements HandlerInterceptor { @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { System.out.println("【前置通知】"); return true; } @Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { System.out.println("【后置通知】"); } @Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { System.out.println("【最终通知】"); } }
第二步
-
第二步: 自定义配置类实现WebMvcConfigurer接口,注册拦截器
src\main\java\cn\itcast\configuration\MvcConfiguration.java
package com.tyhxzy.config; import com.tyhxzy.interceptor.Demo1Interceptor; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Configuration; import org.springframework.web.servlet.config.annotation.InterceptorRegistry; import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; @Configuration public class InterceptorConfig implements WebMvcConfigurer { @Autowired private Demo1Interceptor demo1Interceptor; @Override public void addInterceptors(InterceptorRegistry registry) { registry.addInterceptor(demo1Interceptor).addPathPatterns("/log"); } }运行结果:

SpringBoot:整合Mybatis
整合步骤
引入mybatis启动器依赖(它依赖了jdbc启动器,jdbc启动器可以删除)
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.3.8.RELEASE</version>
</parent>
<dependencies>
<!--springmvc-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--数据库驱动-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.47</version>
</dependency>
<!--myabtis-->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.1.0</version>
</dependency>
<!--lombok-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
</dependencies>
配置mybatis相关属性
spring:
datasource:
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql:///springdb?useSSL=false
username: root
password: root
mybatis:
#别名扫描
type-aliases-package: com.tyhxzy.model
#开启下划线与小驼峰映射
configuration:
map-underscore-to-camel-case: true
#打印sql的日志信息
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
#指定Mapper文件所在的位置 ,一旦指定不需要mapper.xml文件与类名同一个包文件名也可以不一样的。
mapper-locations:
#注意: classpath后面的:是没有空格的,
- classpath:mappers/*.xml
用户实体(User)
package com.tyhxzy.model;
import lombok.Data;
@Data
public class User {
private Long id; //id
private String username; //用户名
private String password; //密码
private Integer age; //年龄
private String email; //邮箱
private Integer sex; //性别
}
数据访问接口(UserMapper)
-
方式一 (@Mapper注解)
-
package com.tyhxzy.dao; import com.tyhxzy.model.User; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Select; import java.util.List; @Mapper public interface UserDao { public List<User> findAll(); }方式二 (@MapperScan注解)【推荐】
package com.tyhxzy.dao; import com.tyhxzy.model.User; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Select; import java.util.List; public interface UserDao { public List<User> findAll(); }在启动类上添加数据访问接口包扫描:
package com.tyhxzy; import org.mybatis.spring.annotation.MapperScan; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; /** * 注意: 使用mybatis的时候,这个springboot默认是不扫描dao接口的,两种解决方案: * 1. 每一个dao接口都添加一个@mapper注解,不推荐,因为较为繁琐 * 2. 在启动类中@MapperScan注解扫描dao包 */ @SpringBootApplication @MapperScan(basePackages = "com.tyhxzy.dao") public class DemoApplication { public static void main(String[] args) { SpringApplication.run(DemoApplication.class, args); } }-
说明: 这种方式的好处是,不用给每一个Mapper都添加注解。采用@MapperScan包扫描方式只需要添加一次注解。
-
定义SQL语句(UserMapper.xml)
-
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" > <mapper namespace="com.tyhxzy.dao.UserDao"> <select id="findAll" resultType="user"> select * from tb_user </select> </mapper>业务层 (UserService)
package com.tyhxzy.service; import com.tyhxzy.model.User; import org.apache.ibatis.annotations.Select; import java.util.List; public interface UserService { public List<User> findAll(); }package com.tyhxzy.service.impl; import com.tyhxzy.dao.UserDao; import com.tyhxzy.model.User; import com.tyhxzy.service.UserService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.List; @Service public class UserServiceImpl implements UserService { @Autowired private UserDao userDao; @Override public List<User> findAll() { List<User> userList = userDao.findAll(); return userList; } }控制器 (UserController)
package com.tyhxzy.controller; import com.tyhxzy.model.User; import com.tyhxzy.service.UserService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import java.util.List; @RestController @RequestMapping("/user") public class UserController { @Autowired private UserService userService; @RequestMapping("/findAll") public List<User> findAll(){ return userService.findAll(); } }
-
运行测试

小结
- 说出以下配置文件的意思
mybatis:
configuration:
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl 日志输出
map-underscore-to-camel-case: true 开启下划线与小驼峰映射
mapper-locations:
- classpath:mappers/*.xml mapper文件路径
type-aliases-package: cn.itcast.model 别名扫描
SpringBoot:整合Junit
整合步骤
-
引入test启动器依赖
<!-- 配置test启动器(自动整合spring-test、junit) --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> -
编写测试类 (UserServiceTest)
package com.tyhxzy.test; import com.tyhxzy.MybatisApplication; import com.tyhxzy.domain.User; import com.tyhxzy.service.UserService; import org.junit.jupiter.api.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringRunner; import java.util.List; /* 注意: 测试类如果与启动类不在同一级包或者是启动类子包,必须要指定启动类所在的位置 例子: @SpringBootTest(classes = MybatisApplication.class) */ @SpringBootTest public class MybatisTest { @Autowired private UserService userService; @Test public void test01(){ List<User> userList = userService.findAll(); System.out.println("用户列表:"+userList); } }
- 使用junit的步骤
- 导入spring-boot-starter-test
- 编写一个测试类,类上使用@SpringBootTest注解
SpringBoot:项目打包部署
打成Jar包
- 需要添加打包组件将项目中的资源、配置、依赖包打到一个jar包中,可以使用maven的
package; - 运行: java -jar xxx(jar包名)
操作步骤
-
第一步: 引入Spring Boot打包插件
<!--打包的插件--> <build> <!--修改jar的名字--> <finalName>ROOT</finalName> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> -
第二步: 执行命令
# 清理、打包 跳过测试 mvn clean package -Dmaven.test.skip=true -
第三步: 运行
java -jar xxx.jar -
第四步: 浏览器访问 http://localhost:8080/findAll
打包jar的步骤
- 在pom文件添加打包的插件
- 在控制台进入到模块里面执行 mvn clean package -Dmaven.test.skip=true
- 执行jar java -jar xxx.jar
- 在控制台进入到模块里面执行 mvn clean package -Dmaven.test.skip=true
SpringBoot :profile配置
我们在开发Spring Boot应用时,通常同一套程序会被安装到不同环境,比如:开发、测试、生产等。其中数据库地址、服务器端口等等配置都不同,如果每次打包时,都要修改配置文件,那么非常麻烦。profile功能就是来进行动态配置切换的。
1) profile是用来完成不同环境下,配置动态切换功能的。
2) profile配置方式
-
多profile文件方式:提供多个配置文件,每种文件代表一种环境。
-
application-dev.properties/yml开发环境
-
application-test.properties|yml测试环境
-
application-pro.properties|yml生产环境
-
-
一个yml文件配置多环境方式:
- 在yml中使用 --- 分隔不同配置
3) profile激活方式
-
配置文件: 再配置文件中配置:spring.profiles.active=dev
-
虚拟机参数:在VM options 指定:-Dspring.profiles.active=dev
-
命令行参数:java –jar xxx.jar --spring.profiles.active=dev
演示
多文件方式
1、准备项目环境:新建项目、依赖、启动类
2、新建配置文件
application-dev.properties
server.port=8082
application-test.properties
server.port=8083
application-pro.properties
server.port=8084
3、此时启动项目发现端口还是8080,因为没有激活配置。
4、新建application.properties,激活配置
spring.profiles.active=dev
此时,使用的就是application-dev.properties配置文件的内容。
yml多文档
新建application.yml
---
server:
port: 8082
spring:
profiles: dev
---
server:
port: 8083
spring:
profiles: test
---
server:
port: 8084
spring:
profiles: pro
---
# 激活配置
spring:
profiles:
active: test
虚拟机参数
方式1: VM Options 参数:

方式2:Program arguments:

命令行参数
E:\>java -jar springboot-profile-1.0-SNAPSHOT.jar --spring.profiles.active=test
- profile文件的作用,有几种方式
- profile: 配置多环境的
- 多个properties文件
- 一个yml文件使用---分割
- profile: 配置多环境的

浙公网安备 33010602011771号