• springBoot框架简介入门教程(快速学习版)


    回顾spring

    优点

    • 开源,轻量级,非侵入式的一站式框架,简化企业级应用开发。
    • 控制反转(IOC),依赖注入(DI)降低了组件之间的耦合性,实现了软件各层之间的解耦。
    • 面向切面(AOP),利用它可以很容易实现一些拦截,如事务控制等。
    • spring 对于主流的应用框架提供了很好的支持,例如 mybatis。
    • spring 提供有自己的 mvc 实现。

    缺点

    • 虽然 spring 的组件代码是轻量级的,但它的配置却是重量级的。虽然 spring引入了注解功能,但是仍然需要编写大量的模板化配置文件.
    • 项目的依赖管理也是一件耗时耗力的事情,在环境搭建时,需要分析要导入大量库的坐标,而且还需要分析导入与之有依赖关,一旦选错依赖的版本,随之而来的不兼容问题就会严重阻碍项目的开发进度。

    Spring Boot 对上述 spring 的缺点进行的改善和优化,基于约定优于配置的思想.可以让开发人员不必在配置与逻辑业务之间进行思维的切换,全身心的投入到逻辑业务的代码编写中,从而大大提高了开发的效率,一定程度上缩短了项目周期。

    SpringBoot概述

    • Spring Boot 是由 Pivotal 团队提供的在 spring框架基础之上开发的框架,其设计目的是用来简化应用的初始搭建以及开发过程。
    • Spirng Boot 本身并不提供 Spring 框架的核心特性以及扩展功能,只是用于快速、敏捷地开发新一代基于 Spring框架的应用程序。也就是说,它并不是用来替代 Spring 的解决方案,而是和 Spring 框架紧密结合用于提升 Spring开发者体验的工具. Spring Boot 以约定大于配置的核心思想,从而使开发人员不再需要定义样板化的配置。
    • 它集成了大量常用的第三方库配置(例如 Redis,Jpa RabbitMQ,Quartz 等等),Spring Boot 应用中这些第三方库几乎可以零配置的开箱即用,通过这种方式,Spring Boot 致力于在蓬勃发展的快速应用开发领域成为领导者。

    SpringBoot特点

    • 创建独立的 spring
    • 应用程序直接内嵌 tomcat、jetty 和 undertow
    • 提供了固定化的“starter”配置,以简化构建配置
    • 尽可能的自动配置 spring 和第三方库
    • 提供产品级的功能,如:安全指标、运行状况监测和外部化配置等
    • 绝对不会生成代码,并且不需要XML 配置

    SpringBoot 的核心功能

    起步依赖

    • 起步依赖就是将具备某种功能的坐标打包到一起,并提供一些默认的功能。

    自动配置

    • Spring Boot 的自动配置是一个运行时(更准确地说,是应用程序启动时) 的过程,考虑了众多因素,才决定 Spring 配置应该用哪个,不该用哪个。该过 程是 Spring 自动完成的。

    SpringBoot自动配置

    Springboot 实现自动装配的核心仍然是使用注解标签,
    @SpringBootApplication 是 springboot 核心注解,其中包含
    @SpringBootConfiguration,@EnableAutoConfiguration,
    @ComponentScan.
    @ComponentScan 它默认扫描的是与该类同级的类或者同级包下的所有类. @SpringBootConfiguration,通过源码得知它是一个@Configuration,相当于之前的配置文件功能. @EnableAutoConfiguration 是这里最重要的注解,它实现了对 Spring Boot应用自动装配的功能。@EnableAutoConfiguration 是利用SpringFactoriesLoader 机制加载自动装配配置的,它的配置数据在
    META-INF/spring.factories 中,我们打开 spring-boot-autoconfigure jar 中的该文件,发现对应着许多个 XXXAutoConfiguration 配置类.
    @Configuration加入@Configuration 注解,表明这就是一个配置类。有一个 myBean()的方法
    并用@Bean 进行注释,返回一个 MyBean()的实例,表明这个方法是需要被Spring 进行管理的 bean。@Bean 如果不指定名称的话,默认使用 myBean名称,也就是小写的名称。
    @Bean
    相当于 XML 中的,放在方法的上面,而不是类,意思是产生一个 bean,并交给 spring 管理

    SpringBoot开发环境构建

    官网配置生成
    https://start.spring.io/ >>> 点击进入
    选择配选项,在线生成并下载
    解压后修改 pom.xml 版本为 2.6.6,删除.mvn 文件夹,mvnw.cmd 文件
    导入到 idea 中
    在这里插入图片描述

    • Springboot 集成 web 组件后,内置了 tomcat 服务器,一个 springboot
      应用相当于一个独立的服务,可以使用启动类中的 main 方法启动 springboot 程序.

    在线生成启动 logo:https://www.bootschool.net/ascii >>>点击进入
    下载存放在 resources 目录下即可

    SpringBoot配置文件

    Spring Boot 使用一个全局的配置文件(配置文件名是固定的)
    application.properties 属性文件格式,内容为键值对
    server.port=8080
    application.yml
    yml 是 YAML(YAML Ain’t Markup Language)语言的文件,以数据为中心.
    yml 配置示例
    server:
    port: 8080
    yaml 基本语法:
    语法结构:key:空格 value
    以此来表示一对键值对(空格不能省略);以空格的缩进来控制层级关系,
    只要是左边对齐的一列数据都是同一个层级的。
    值的写法
    字面量:普通的值[数字,布尔值,字符串]
    K: V
    字面量直接写在后面就可以,字符串默认不用加上双引号或者单引号;
    案例:
    user:
    name: zhangsan
    age: 20
    @ConfigurationProperties(prefix = “user” )
    在这里插入图片描述

    SpringBoot集成JDBC

    数据源配置
    在我们访问数据库的时候,需要先配置一个数据源,下面分别介绍一下几种不同
    的数据库配置方式。
    首先,为了连接数据库需要引入 jdbc 支持,在 pom.xml 中引入如下配置:

    	
    				org.springframework.boot
    				spring-boot-starter-jdbc
    	
    
    • 1
    • 2
    • 3
    • 4

    在 application.yml 中配置数据源信息

    spring:
    	datasource:
    		url:
    		jdbc:mysql://127.0.0.1:3306/mybatis_db?serverTimezone=Asia/Shanghai
    		username: root
    		password: root
    		driver-class-name: com.mysql.cj.jdbc.Driver
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    使用 JdbcTemplate 操作数据库
    Spring 的 JdbcTemplate 是自动配置的,你可以直接使用@Autowired 来注入
    到你自己的 bean 中来使用

    SpringBoot集合阿里数据源

    导入阿里数据源 jar
    在 yml 文件中注册阿里数据库连接池

    type: com.alibaba.druid.pool.DruidDataSource
    initialSize: 5 初始化时建立物理连接的个数
    minIdle: 1 最小连接池数量
    maxActive: 20 最大连接池数量
    
    • 1
    • 2
    • 3
    • 4

    添加 DruidDataSource 配置工具类

    SpringBoot集成mybatis

    	
    		org.mybatis.spring.boot
    		mybatis-spring-boot-starter
    		2.1.4
    	
    
    • 1
    • 2
    • 3
    • 4
    • 5

    在 application.yml 中配置数据源信息

    			mybatis:
    				type-aliases-package: com.ff.cms.bean
    				mapper-locations: classpath:mapper/*Mapper.xml
    				configuration:
    				map-underscore-to-camel-case: true
    				cache-enabled: true
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    启动类上添加@MapperScan(“接口所在的包地址”)@MapperScan(“接口所在的包地址”)
    或者在接口上添加@Mapper

    SpringBoot集成日志

    • 日志是软件应用必备的组件,是程序debug,或是数据收集管理的重要依据,方便我们监测生产环境的变量值变化以及代码运行轨迹。主要是为了方便我们监测生产环境的变量值变化以及代码运行轨迹等。这些记录会被输出到我们指定的位置形成文件,帮助我们分析错误以及用户请求轨迹。
    • 日志记录可以在程序出现问题时帮助开发人员迅速地定位错误的根源,尤其是在生产环境中运行的程序更加重要。

    常用日志组件

    	slf4j(Simple Logging Facade for Java)
    	commons-logging
    	Log4J
    	Log4J2
    	Logback
    	JUL(Java Utils Logging)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    springboot 中对这些组件都提供了支持,slf4j 和 commons-logging 是日志的
    门面接口,它们都不是具体的日志框架,你可以指定其他主流的日志实现框架。一
    般首选强烈推荐使用 slf4j + logback.
    日志的级别划分:从低到高:debug 配置日志级别和日志文件位置

    	logging:
    		level:
    		com.ffyc.news: debug
    		file:
    		name: E:/log/log.log
    
    • 1
    • 2
    • 3
    • 4
    • 5

    其余信息在 logback 配置文件中
    在类中使用

    		创建 Logger 对象
    		private static Logger logger = LoggerFactory.getLogger(当前类名.class);
    		在需要的位置调用具体的日志级别方法输出
    		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());
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    SpringBoot 使用 AOP 统一打印日志
    导入依赖 jar

    <dependency>
    	<groupId>org.springframework.boot</groupId>
    	<artifactId>spring-boot-starter-aop</artifactId>
    </dependency>
    
    • 1
    • 2
    • 3
    • 4

    定义切面通知类

    @Component
    @Aspect
    public class LogAspect {
    	private Logger logger = LoggerFactory.getLogger(getClass());
    	//通配符,定义规则,哪些方法可以被我的切面切到,这里的意思是不限返回值和方法和参数
    	@Pointcut("execution(public * com.ffyc.news.controller..*.*(..))")
    public void webLog() {
    }
    @Before("webLog()")
    public void doBefore(JoinPoint joinPoint) {
    	ServletRequestAttributes attributes = (ServletRequestAttributes)
    	RequestContextHolder.getRequestAttributes();
    	HttpServletRequest request = attributes.getRequest();
    	// 记录下请求内容
    	logger.info("URL : {}", request.getRequestURL().toString());
    	logger.info("HTTP_METHOD :{} ", request.getMethod());
    	logger.info("IP : {}", request.getRemoteAddr());
    	//获取所有请求参数
    	Enumeration<String> enu = request.getParameterNames();
    	while (enu.hasMoreElements()) {
    	String name = (String) enu.nextElement();
    	logger.info("name:{},value:{}", name, request.getParameter(name));
    	}
    }
    @AfterReturning(returning = "ret", pointcut = "webLog()")
    public void doAfter(Object ret) throws Throwable {
    	// 处理完请求,返回内容
    	logger.info("RESPONSE : " + ret);
    }
    /*环绕通知实现前置 最终通知
    @Around("webLog()")
    public Object printLog(ProceedingJoinPoint joinPoint) throws Throwable {
    	Object proceed = null;
    	try {
    	doBefore(joinPoint);
    	proceed = joinPoint.proceed();
    	doAfter(proceed);
    	} finally {
    	//System.lineSeparator():系统换行符
    	logger.info("=========END=========" + System.lineSeparator());
    	}
    return proceed;
    }*/
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43

    SpringBoot统一异常处理

    			日常开发过程中,难免有的程序会因为某些原因抛出异常,而这些异常一
    		般都是利用 try ,catch 的方式处理异常或者 throw,throws 的方式抛出异常
    		不管。这种方法对于程序员来说处理也比较麻烦,所以我们希望既能方便程序员
    		编写代码,不用过多的自己去处理各种异常编写重复的代码又能提升用户的体
    		验,这时候全局异常处理就显得很重要也很便捷了,是一种不错的选择。
    
    • 1
    • 2
    • 3
    • 4
    • 5

    全局异常捕获与处理

    		Springboot 对 于 异 常 的 处 理 也 做 了 不 错 的 支 持 , 它 提 供 了 一
    	个 @RestControllerAdvice 注解以及 @ExceptionHandler 注解,前者是用来
    	开启全局的异常捕获,后者则是说明捕获哪些异常,对那些异常进行处理。
    
    • 1
    • 2
    • 3
    @RestControllerAdvice
    public class GlobalExceptionHandler {
    	/**
    	* 针对其他异常处理
    	*/
    	@ExceptionHandler(Exception.class)
    	public CommonResult globalException(Exception e) {
    		CommonResult commonResult = new CommonResult(500,e.getMessage());
    		return commonResult;
    	}
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    请求404 application.yml配置

    mvc:
    	throw-exception-if-no-handler-found: true
    web:
    	resources:
    		add-mappings: false
    
    • 1
    • 2
    • 3
    • 4
    • 5

    SpringBoot集成Swagger

    • 支持 API 自动生成同步的在线文档:使用 Swagger 后可以直接通过代码生成文档,不再需要自己手动编写接口文档了,对程序员来说非常方便,可以节约写文档的时间去学习新技术。

    • 提供 Web 页面在线测试 API:光有文档还不够,Swagger 生成的文档还支持在线测试。参数和格式都定好了,直接在界面上输入参数对应的值即可在线测试接口。

    环境搭建

    1.导入 jar

    <dependency>
    	<groupId>io.springfox</groupId>
    	<artifactId>springfox-swagger2</artifactId>
    	<version>2.9.2</version>
    </dependency>
    <dependency>
    	<groupId>io.springfox</groupId>
    	<artifactId>springfox-swagger-ui</artifactId>
    	<version>2.9.2</version>
    </dependency>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    1. 在 application.yml 中配置
    spring:
    	mvc:
    		pathmatch:
    			matching-strategy: ant_path_matcher
    
    • 1
    • 2
    • 3
    • 4
    1. 添加 swagger 配置类
      配置 swagger 扫描方式
      及放行静态资源请求不被 spring 拦

    Swagger使用的注解及其说明

    @Api:用在类上,说明该类的作用,tags 类的功能进行描述. @Api(tags=“用户登录控制器”)
    @ApiOperation:用在方法上,用于对方法功能说明。 @ApiOperation(value=“方法概述”, notes=“功能详细描述”)
    @ApiImplicitParam:用来注解来给方法入参增加说明。
    在这里插入图片描述

    paramType 属性表示参数放在哪里,主要有以下几个属性:
    header–>放在请求头。请求参数的获取:@RequestHeader(代码中接收注解)
    query–>用于 get 请求的参数拼接。请求参数的获取
    path(用于 restful 接口)–>请求参数的获取:@PathVariable(代码中接收注解)
    body–>放在请求体。请求参数的获取:@RequestBody(代码中接收注解)
    form(不常用)
    参数为实体类
    在实体类上添加注解
    @ApiModel:描述一个 Model 的信息(参数为实体类时使用)
    @ApiModelProperty:描述一个 model 的属性
    在这里插入图片描述

    @ApiResponses:用于表示一组响应
    @ApiResponse:用在@ApiResponses 中,一般用于表达一个错误的响应信

    code:数字,例如 400
    message:信息,例如"请求参数没填好" 也可以不需要添加
    在这里插入图片描述

    Swagger UI的使用

    访问 swagger-ui.html 后可以在页面中看到所有需要生成接口文档的控制器名称。
    http://localhost:端口/swagger-ui.html

  • 相关阅读:
    centos卸载nginx
    Java毕业设计 基于springboot vue无人超市管理系统
    【预测模型-BP分类】基于人工蜂群算法优化BP神经网络实现数据分类附matlab代码
    计算机毕业设计之java+springcloud分布式架构网上商城网站
    Spring Cloud Alibaba+saas企业架构之自组织是管理者和成员的双向奔赴
    CPU使用率较低但负载较高怎么处理?
    【源码解读】asp.net core源码启动流程精细解读
    自动导入时,Element-plus Message Box组件样式丢失
    Go语言语法入门
    大数据课程L4——网站流量项目的Hive离线批处理
  • 原文地址:https://blog.csdn.net/weixin_56781779/article/details/126325099