回顾spring
优点:
不足:
1、配置重量级,大量的模板化配置,示例:
<!-- 开启注解spring事务管理 -->
<tx:annotation-driven transaction-manager="transactionManager"/>
<!--开启 springWeb 注解-->
<mvc:annotation-driven></mvc:annotation-driven>
2、需要我们自己添加框架或者项目需要的依赖jar,如果版本不匹配,会出现兼容问题
springboot
实在spring框架基础上对spring框架的搭建过程进行了封装,使得开发人员可以快速搭建起一个商业级的spring应用程序。
搭建过程简化体现
1、使用约定优于配置的思想,把很多开发中的默认的做法直接进行了简化(注解、事务...)
2、自动的将相关的依赖集成进来(基础性的、项目必须的)
springboot搭建过程
1、创建一个普通的maven项目,
2、在pom.xml中添加依赖
<!--依赖的父级工程-->
<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 依赖-->
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
<!--打包插件-->
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>2.6.6</version>
</plugin>
</plugins>
</build>
3、创建基本包目录,在包下创建一个启动类
启动类示例,添加注解@SpringBootApplication扫描这个类下的所有包,包目录就是在这个类下。
package com.ffyc.news;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication//扫描这个类下的所有包
public class NewsApplication {
public static void main(String[] args) {
SpringApplication.run(NewsApplication.class);
}
}
springboot集成web组件后,内置了Tomcat服务器,一个springboot应用相当于一个独立的服务,使用启动类的main方法启动springboot程序。
spring boot配置文件
spring boot使用一个全局的配置文件(配置文件名固定的,必须为application),用来存储项目用的各种参数配置。
配置文件名有俩种格式,一种是properties格式,另一种是yaml格式。
application.properties属于文件格式,内容是键值对形式,
properties的格式是叫为简单的
yml是yaml(YAML Ain't Markup Language)语言的文件,以数据为中心
yml基本语法:
语法结构:空格key:空格value (空格不能省略),以此来表示键值对,以空格缩进的方式控制层级关系,只要左边对齐则说明是同一级关系。
spring boot数据访问管理
1、先导入数据源,在pom.xml中引入spring+jdbc依赖,因为为了连接引入数据库需要引入jdbc支持
<!--spring jdbc-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
2、在application.yml中进行数据源配置
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://127.0.0.1:3306/ssmdb?serverTimezone=Asia/Shanghai
username: root
password: root
3、spring boot整合阿里数据源
导入阿里源的jar、在application.xml中进行注册阿里数据库连接池,和password是同一级
type: com.alibaba.druid.pool.DruidDataSource #指定数据库连接对象
initialSize: 5 #初始化时建立物理连接的个数
maxActive: 20 #最大连接池数量
spring boot集成mybatis
1、导入springboot+mybatis的依赖
<!--spring+mybatis-->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.1.4</version>
</dependency>
2、在application.xml中进行配置
# spring boot集成mybatis
mybatis:
type-aliases-package: com.ffyc.news.model
mapper-locations: classpath:mapper/*Mapper.xml
configuration:
map-underscore-to-camel-case: true
cache-enabled: true
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
3、在启动类上添加@MapperScan(接口所在的包的地址)
springboot集成日志功能
1、在application中进行配置,日志级别和日志文件路径
logging:
level:
com.ffyc.news: debug 日志级别
file:
name: E:/log/log.log 日志文件位置,不用自己创建,启动时会自动创建
2、在需要打印日志的类中创建Logger对象在类中使用
private static Logger logger = LoggerFactory.getLogger(当前类名.class);
//在需要的位置调用具体的日志级别方法输出
日志级别划分:debug<info<warn<error,在application.yml中配置的是debug,所以日志打印会将四个级别都打印出。(日志打印只会打印比自己高级别的类型,如果配置的是info则debug不会打印出来)
spring boot使用AOP统一打印日志
1、导入依赖jar
<!--aop 日志打印-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency>
2、在application.yml中进行配置
logging:
level:
com.ffyc.news: debug
file:
name: E:/log/log.log
3、定义切面通知类
@Component
@Aspect
public class LogAspect {
private Logger logger = LoggerFactory.getLogger(LogAspect.class);
@Before("execution(public * com.ffyc.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
}
}