Spring优点:
Spring缺点:
SpringBoot对Spring的缺点进行了改善和优化,基于约定优于配置的思想,提供了大量的默认配置和实现。
版本锁定:
起步依赖:
自动配置:
内置Tomcat:
SpringBoot最主要的作用是帮助程序员快速构建Spring项目,让程序员更多的关注业务而非配置
导入依赖:
<parent>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-parentartifactId>
<version>2.2.2.RELEASEversion>
parent>
<dependencies>
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-webartifactId>
dependency>
dependencces>
启动类:
@SpringBootApplication// 告诉springboot这是一个启动类
public class QuickApplication {
// 通过main方法运行启动类
public static void main(String[] args) {
SpringApplication.run(QuickApplication.class, args);
}
}
启动并测试



版本锁定:
spring-boot-starter-parent父工程内部有一系列已经指定好的版本号,组合了一套最优搭配的技术版本

自动装配:
SpringBoot基于约定优于配置的思想,许多配置都有默认值,如tomcat默认端口 8080、redis 默认端口6379 等等

如果想使用自定义的配置替换默认配置,可以在resources创建以下文件:
注意:如果多个配置文件同时配置了相同的内容,SpringBoot在2.4版本之前以properties文件为准
yaml是专门用来写配置文件的语言,非常简洁,比xml格式方便
| properties | xml | yaml \ yml |
|---|---|---|
![]() | ![]() | ![]() |
yaml语法:
server:
port: 8082
address: 127.0.0.1
# 简单格式(坑 key命名不能使用username)
age: 18
# 对象格式
user:
username: jack
age: ${age}
gender: male
# 集合格式
addressList:
- '北京'
- '上海'
- '广州'
@Value
该注解是Spring框架提供的,用来读取配置文件中的属性值并逐个注入到Bean对象的对应属性中

Environment
该对象由Spring框架提供,用来表示整个应用运行时的环境,可以读取配置文件中的属性值并逐个注入到Bean对象的对象的对应属性中

@ConfigurationProperties
该注解由SpringBoot框架提供,用来快速、方便地将配置文件中的自定义属性值批量注入到某个Bean对象的多个对应属性中

解决一个红色提示的小bug


SpringBoot启动时会加载org.springframework.boot.autoconfigure.web.ResourceProperties资源属性类,静态资源放在Resources下static文件夹中


拦截器配置
HandlerInterceptor接口@Component
public class MyHandlerInterceptor implements HandlerInterceptor {
// 预处理拦截
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
System.out.println("preHandle拦截了");
return false;
}
}
WebMvcConfigurer接口@Configuration // 配置类
public class MyMVCConfiguration implements WebMvcConfigurer {
@Autowired
private MyHandlerInterceptor myHandlerInterceptor;
// 注册拦截器
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(myHandlerInterceptor)
.addPathPatterns("/img/**") // 拦截路径
.excludePathPatterns("/img/1syn.jpg"); // 放行路径
}
}
<dependency>
<groupId>mysqlgroupId>
<artifactId>mysql-connector-javaartifactId>
<version>5.1.6version>
dependency>
<dependency>
<groupId>org.mybatis.spring.bootgroupId>
<artifactId>mybatis-spring-boot-starterartifactId>
<version>2.1.1version>
dependency>

@NoArgsConstructor
@AllArgsConstructor
public class User {
private Long id;
private String username;
private String password;
private String nickName;
private Integer age;
private String email;
}

public interface UserMapper {
List<User> findAll();
}
DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.itheima.mapper.UserMapper">
<select id="findAll" resultType="User">
SELECT * FROM tb_user
select>
mapper>
# 连接池指定数据库连接四项
spring:
datasource:
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql://localhost:3306/springboot_db
username: root
password: root
# mybatis配置
mybatis:
mapper-locations: classpath:mapper/*.xml # 指定映射文件目录
type-aliases-package: com.itheima.domain # 指定实体别名
configuration: # nickName 自动映射 nick_name
map-underscore-to-camel-case: true
@Mapper
public interface UserMapper {
List<User> findAll();
}
– 方式二
@SpringBootApplication
@MapperScan("com.baidu.mapper") // 将mapper包下接口交给ioc容器并创建代理对象
public class QuickApplication {
// 通过main方法运行启动类
public static void main(String[] args){
SpringApplication.class,args)
}
}
@RunWith(SpringRunner.class)
@SpringBootTest
public class MyBatisTest {
@Autowired
private UserMapper userMapper;
@Test
public void test01() throws Exception {
List<User> list = userMapper.findAll();
for (User user : list) {
System.out.println(user);
}
}
}
<dependency>
<groupId>com.alibabagroupId>
<artifactId>druidartifactId>
<version>1.1.15version>
dependency>
修改application.yml
– 添加spring.datasource.type配置项
# 连接池指定数据库连接四项
spring:
datasource:
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql://localhost:3306/springboot_db
username: root
password: root
type: com.alibaba.druid.pool.DruidDataSource
日志介绍
在项目的开发中,日志是必不可少的一个记录事件的组件,不管是记录运行情况还是追踪线上问题,都离不开对日志的分析,所以也会相应的在项目中实现和构建我们所需要的日志框架。而市面上常见的日志框架有很多,比如:JCL、SLF4J、jUL、log4j、log4j2、logback等等
通常情况下,日志是由一个抽象(接口)层+实现层的组合来搭建的
| 日志-接口层 | 日志-实现层 |
|---|---|
| 日志-接口层日志-实现层JCL(Jakarta Commons Logging)、SLF4J(Simple Logging Facade for Java) | jul(java.util.logging)、 log4j、logback、log4j2 |
SpringBoot在2.0版本后默认选择了 SLF4J 结合 LogBack
SLF4J介绍
在开发的时候不应该直接使用日志实现类,应该使用日志的接口层
下图是 SLF4J 结合各种日志框架的官方示例,从图中可以清晰的看出 SLF4J API 永远作为日志的门面(规范),直接应用与应用程序中

SLF4J使用
SpringBoot 是使用了 SLF4J+logback 的日志框架组合
查看 Spring Boot 项目的 Maven 依赖关系可以看到 Spring Boot 的核心启动器spring-boot-starter 引入了 spring-boot-starter-logging
/*
* 测试日志输出,
* SLF4J 常见的日志级别从小到大 debug,info,warn,error
*/
@RunWith(SpringRunner.class)
@SpringBootTest
public class LogbackTest {
Logger logger = LoggerFactory.getLogger(LogbackTest.class);
@Test
public void testLog() {
logger.debug("Debug 日志...");
logger.info("Info 日志...");
logger.warn("Warn 日志...");
logger.error("Error 日志...");
}
}
SpringBoot 默认日志级别为 INFO
# 日志配置
logging:
level: # 指定项目日志级别
com.baidu: debug
file: # 指定日志输出路径文件
name: D:\springboot-quick.log
@Slf4j注解
如果不想每次都写private final Logger logger = LoggerFactory.getLogger(当前类名.class);
可以在类上面添加@Sl4j注解,然后使用log对象打印日志
要求:idea首先需要安装Lombok插件
在开发过程中,通常会对一段业务代码不断地修改测试,在修改之后往往需要重启服务,有些服务需要加载很久才能启动成功,这种不必要的重复操作极大的降低了程序开发效率。为此,Spring Boot框架专门提供了进行热部署的依赖启动器,用于进行项目热部署,而无需手动重启项目
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-devtoolsartifactId>
dependency>



ctrl+F9