SpringBoot
Spring Boot 的创建起因
spring 能简化开发效率,但还不完善。
优点:
- 开源
- 轻量级
- 一站式框架
- 控制反转(IOC),依赖注入(DI)依赖注入(DI)降低了组件之间的耦合性,实现了软件各层之间的解耦
- 面向切面(AOP),利用它可以很容易实现一些拦截,如事务控制等
- spring 对于主流的应用框架提供了很好的支持,例如 mybatis。
- spring 提供有自己的 mvc 实现。
缺点:
-
spring 的组件代码是轻量级的,但它的 配置却是重量级。虽然 spring
引入了 注解功能,但是仍然需要编写 大量的模板化配置文件。 -
依赖管理也是一件耗时耗力的事情,在环境搭建时,需要分析要导入大量库的坐标,而且还需要分析导入与之有依赖关,一旦选错依赖的版本,随之而来的不兼容问题就会严重阻碍项目的开发进度。
Spring Boot 对上述 spring 的缺点进行的改善和优化,基于约定优于配置的思想.
Spring Boot 简介
Spring Boot 是由 Pivotal 团队提供的在 spring 框架基础之上开发的框架,其设计目的是用来简化应用的初始搭建以及开发过程。
Spirng Boot 本身并不提供 Spring 框架的核心特性以及扩展功能,只是用于快速开发新一代基于 Spring 框架的应用程序。
它并不是用来替代 Spring 的解决方案,而是和 Spring 框架紧密结合用于提升 Spring 开发者体验的工具
SpringBoot 特点:
创建独立的 spring 应用程序
直接内嵌 tomcat、jetty 和 undertow
提供了固定化的“starter”配置,以简化构建配置
尽可能的自动配置 spring 和第三方库
提供产品级的功能,如:安全指标、运行状况监测和外部化配置等
绝对不会生成代码,并且不需要 XML 配置
springBoot 的核心功能
- 起步依赖
起步依赖就是将具备某种功能的坐标打包到一起,并提供一些默认的功能。 - 自动配置
Spring Boot 的自动配置是一个运行时(更准确地说,是应用程序启动时)的过程,考虑了众多因素,才决定 Spring 配置应该用哪个,不该用哪个。该过程是 Spring 自动完成的。
SpringBoot 搭建
-
创建maven项目,或者创建Spring Initializr项目(缺点:jdk选择受到限制目前只有17,21,22,并且创建速度较慢)。
-
导入依赖
<!--依赖的父级工程-->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.6.6</version>
<relativePath/>
</parent>
<!--指定 jdk 版本-->
<properties>
<java.version>1.8</java.version>
</properties>
<!--添加基本的 springweb 依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--导入打包插件-->
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>2.6.6</version>
</plugin>
</plugins>
</build>
- 创建 Application 启动类
创建位置与项目功能包 平级位置。
Springboot 集成 web 组件后,内置了 tomcat 服务器,一个 springboot 应用相当于一个独立的服务,可以使用启动类中的 main 方法启动 springboot 程序
@SpringBootApplication
public class NewsApplication {
public static void main(String[] args) {
SpringApplication.run(NewsApplication.class);
}
}
- 修改端口号
在resources包下创建名为 application.properties 文件(名字不能变), server.port 可修改启动端口
server.port=8088
- 修改启动图
可在 https://www.bootschool.net/ascii-art 中寻找艺术图
复制在resources包下创建的名为 banner.txt 文件中 (名字不能变)
Spring Boot中配置参数
配置文件有两种格式
键=值 形式的properties文件
server.port=8088
spring.datasource.driver-class-name=
spring.datasource.url=
spring.datasource.username=
spring.activemq.password=
yml 是 YAML(YAML Ain’t Markup Language)语言的文件,以数据为中心。
Spring Boot 配置集成mybatis
需要集成四个依赖
- boot支持jdbc依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
- mysql
<!--mysql-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.16</version>
</dependency>
- 阿里巴巴数据源
<!-- 阿里数据源 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.10</version>
</dependency>
- boot支持 mybatis 依赖
<!-- mybatis依赖 -->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.1.4</version>
</dependency>
- yml文件整合阿里巴巴数据源,并配置 mybatis
spring:
datasource: #
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://127.0.0.1:3306/ssmdb?serverTimezone=Asia/Shanghai
password: root
username: root
type: com.alibaba.druid.pool.DruidDataSource
initialSize: 5 #初始化时建立物理连接的个数
maxActive: 20 #最大连接池数量
mybatis:
type-aliases-package: com.ffyc.news.model #导入实体类
mapper-locations: classpath:mappers/*Mapper.xml #classpath:放Mapper文件夹名/*Mapper.xml
configuration: # mybatis 全局设置
map-underscore-to-camel-case: true # 驼峰名映射
cache-enabled: true # 二级缓存
- 启动类上读取 dao 包中的接口
@SpringBootApplication
@MapperScan("com.ffyc.news.dao")
public class NewsApplication{
...
}
即可集成mybatis,利用 mybatis 和 spring 知识可验证是否集成成功。
Spring Boot 集成日志功能
日志记录可以在程序出现问题时帮助开发人员迅速地定位错误的根源,尤其是在生产环境中运行的程序更加重要。
-
常用日志组件
- slf4j(Simple Logging Facade for Java)
- commons-logging
- Log4J
- Log4J2
- Logback
- JUL(Java Utils Logging
springboot 中对这些组件都提供了支持,slf4j 和 commons-logging 是日志的门面接口,它们都不是具体的日志框架,你可以指定其他主流的日志实现框架。一般首选强烈推荐使用slf4j + logback.
AOP统一打印日志 依赖
<!-- SpringBoot 使用 AOP 统一打印日志-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency>
日志的级别划分:debug < info < warn < error
{} 是占位符,值由之后的参数传入
logger.debug("user account:{},user password:{}", user.getAccount(),user.getPassword());
logger.info("user account:{},user password:{}", user.getAccount(),user.getPassword());
logger.warn("user account:{},user password:{}", user.getAccount(),user.getPassword());
logger.error("user account:{},user password:{}", user.getAccount(),user.getPassword());
private Logger logger = LoggerFactory.getLogger(LogAspect.class);
@Before("execution(public * com.news.web..*.*(..))")
public void savelog(JoinPoint joinPoint) {
ServletRequestAttributes attributes =(ServletRequestAttributes)RequestContextHolder.getRequestAttributes();
HttpServletRequest request = attributes.getRequest();
//Object[] objs = joinPoint.getArgs();获取方法参数
// 记录下请求内容
logger.info("HTTP_METHOD :{} ", request.getMethod());
logger.info("IP : {}", request.getRemoteAddr());//客户端 ip
Object[] objs=joinPoint.getArgs();
logger.info(Arrays.toString(objs))
}
Spring Boot 统一异常处理
全局异常捕获与处理
当请求出现异常会逐步上抛,直到 Controller 抛给框架,这不符合开发的统一返回规定。所以可以使用全局异常处理器来代替框架接收异常。
Springboot 对 于 异 常 的 处 理 也 做 了 不 错 的 支 持 , 它 提 供 了 一个 @RestControllerAdvice 注解以及 @ExceptionHandler 注解,前者是用来开启全局的异常捕获,后者则是说明捕获哪些异常.
@RestControllerAdvice
public class GlobalExceptionHandler {
/**
* 异常处理
*/
@ExceptionHandler(Exception.class)
public Result globalException(Exception e) {
Result Result = new Result(500,e.getMessage());
return commonResult;
}
}
SpringBoot 集成 Swagger
Spring Boot 定时任务
注释
@Configuration
添加在类上表明是个 配置类
@Bean
用在方法上,返回一个交给spring管理的对象