java框架第五课(终极版本)SpringBoot
一.关于SpringBoot
(1)回忆Spring
传统的Spring由Spring 框架(ioc,aop)加mybatis加Springweb组成,虽然相比原生的java程序Spring框架帮我们大大减少了代码量,减少了冗余,提高了开发效率但是由于Spring框架下的配置和相关的jar包依赖过多,导致我们在开发业务代码时常常需要大量精力去搞相关配置,还是不利于我们的开发,因此Spring 开发官方帮我们将Spring框架再次做了一个封装。
优点开源,轻量级,非侵入式的一站式框架,简化企业级应用开发。控制反转(IOC),依赖注入(DI)降低了组件之间的耦合性,实现了软件各层之间 的解耦。面向切面(AOP),利用它可以很容易实现一些拦截,如事务控制等。spring 对于主流的应用框架提供了很好的支持,例如 mybatis。spring 提供有自己的 mvc 实现。
缺点虽然 spring 的组件代码是轻量级的,但它的配置却是重量级的。<!--aop:开启自动代理--> <aop:aspectj-autoproxy/> </bean> <!-- 开启注解事务管理 --> <tx:annotation-driven transaction-manager="transactionManager"/> <!-- 开启 springweb 注解--> <mvc:annotation-driven></mvc:annotation-driven>
虽然 spring 引入了注解功能,但是仍然需要编写大量的模板化配置文件。项目的依赖管理也是一件耗时耗力的事情,在环境搭建时,需要分析要导入大量库的坐标,而且还需要分析导入与之有依赖关,一旦选错依赖的版本,随之而来的不兼容问题就会严重阻碍项目的开发进度。Spring Boot 对上述 spring 的缺点进行的改善和优化,基于约定优于配置的思想.可以让开发人员不必在配置与逻辑业务之间进行思维的切换,全身心的投入到逻辑业务的代码编写中,从而大大提高了开发的效率,一定程度上缩短了项目周期.
(2)SpringBoot的简述
Spirng Boot 本身并不提供 Spring 框架的核心特性以及扩展功能,只是用 于快速、敏捷地开发新一代基于 Spring 框架的应用程序。也就是说,它并不是 用来替代 Spring 的解决方案,而是和 Spring 框架紧密结合用于提升 Spring 开 发者体验的工具。Spring Boot 以约定大于配置的核心思想,从而使开发人员不再需要定义样 板化的配置。它集成了大量常用的第三方库配置(例如 Redis,Jpa RabbitMQ, Quartz 等等),Spring Boot 应用中这些第三方库几乎可以零配置的开箱即用, 通过这种方式,Spring Boot 致力于在蓬勃发展的快速应用开发领域成为领导者。SpringBoot搭建过程简化体现:(1)由于约定大于配置思想,把很多开发默认的做法直接简化。(2)可以自动将相关的依赖加入进来(继承性,基础性)。Spring Boot 你只需要“run”就可以非常轻易的构建独立的、企业级别的 spring 应用。我们为 spring 平台和第三方依赖库提供了一种固定化的使用方式,使你能非常 轻松的开始开发你的应用程序。大部分 SpringBoot 应用只需要很少的配置。
(3)SpringBoot的特点
创建独立的 spring 应用程序直接内嵌 tomcat、jetty 和 undertow提供了固定化的“starter”配置,以简化构建配置尽可能的自动配置 spring 和第三方库提供产品级的功能,如:安全指标、运行状况监测和外部化配置等绝对不会生成代码,并且不需要 XML 配置
springBoot 的核心功能起步依赖起步依赖就是将具备某种功能的坐标打包到一起,并提供一些默认的功能。自动配置Spring Boot 的自动配置是一个运行时(更准确地说,是应用程序启动时)的过程,考虑了众多因素,才决定 Spring 配置应该用哪个,不该用哪个。该过程是 Spring 自动完成的。
二.SpringBoot开发环境的搭建
(1)创建一个普通的 maven 项目在 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 >(2)创建基本包目录,在包下创建一个启动类,如下所示:
@SpringBootApplication
public class NewsApplication {public static void main ( String [] args) {SpringApplication . run ( NewsApplication . class );}}Springboot 集成 web 组件后,内置了 tomcat 服务器,一个 springboot 应用相当于一个独立的服务,可以使用启动类中的 main 方法启动 springboot 程序.
在线生成启动 logo:(有意思的小玩意)
https://www.bootschool.net/ascii-art
下载存放在 resources 目录下即可.
三.SpringBoot的配置文件
(1)配置的两种形式介绍
Spring Boot 使 用 一 个 全 局 的 配 置 文 件 ( 配 置 文 件 名 是 固 定 的 , 必 须 为application),用来存储项目中需要用到的各种配置参数。配置文件格式有两种,一种为 properties 格式,一种 yaml 格式。(1) application.properties 属性文件格式,内容为键值对。server.port=8080properties 格式比较简单,没有什么难度,在此我们以第二种 yaml 格式为例.(2)application.ymlyml 是 YAML(YAML Ain’t Markup Language)语言的文件,以数据为中心.yml 配置示例server:port: 8080yaml 基本语法:语法结构:key:空格 value;以此来表示一对键值对(空格不能省略);以空格的缩进来控制层级关系,只要是左边对齐的一列数据都是同一个层级的;字面量直接写在后面就可以,字符串默认不用加上双引号或者单引号;以#作为注释符
(2) SpringBoot数据访问管理
SpringBoot 数据访问管理数据源配置首先,为了连接数据库需要引入 jdbc 支持,在 pom.xml 中引入如下配置:< dependency >< groupId >org.springframework.boot</ groupId >< artifactId >spring-boot-starter-jdbc</ artifactId ></ dependency >记得添加 mysql 驱动依赖
(3)在 application.yml 中配置数据源信息
spring:
datasource:
url:
jdbc:mysql://127.0.0.1:3306/ssmdb?serverTimezone=Asia/Shanghai
username: root
password: root
driver-class-name: com.mysql.cj.jdbc.Driver
(4)SpringBoot整合阿里数据源
导入阿里数据源 jar
在 yml 文件中注册阿里数据库连接池,连接数据库
type: com.alibaba.druid.pool.DruidDataSource
initialSize: 5 初始化时建立物理连接的个数
maxActive: 20 最大连接池数量
<!--阿里数据源--> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.1.10</version> </dependency>
(5)SpringBoot的注解
springboot 实现自动装配的核心仍然是使用注解标签,@SpringBootApplication 是 springboot 核心注解,其中包含@SpringBootConfiguration,@EnableAutoConfiguration, @ComponentScan.@Configuration加入@Configuration 注解,表明这就是一个配置类。有一个 myBean()的方法并用@Bean 进行注释,返回一个 MyBean()的实例,表明这个方法是需要被Spring 进行管理的 bean。@Bean 如果不指定名称的话,默认使用 myBean名称,也就是小写的名称。@Bean相当于 XML 中的<bean></bean>,放在方法的上面,而不是类,意思是产生一个 bean,并交给 spring 管理
package com.ffyc.news.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.cors.CorsConfiguration;
import org.springframework.web.cors.UrlBasedCorsConfigurationSource;
import org.springframework.web.filter.CorsFilter;
import java.util.Collections;
@Configuration
public class CorsConfig {
@Bean
public CorsFilter corsFilter() {
CorsConfiguration corsConfiguration = new CorsConfiguration();
//1,允许任何来源
corsConfiguration.setAllowedOriginPatterns(Collections.singletonList("*"));
//2,允许任何请求头
corsConfiguration.addAllowedHeader(CorsConfiguration.ALL);
//3,允许任何方法
corsConfiguration.addAllowedMethod(CorsConfiguration.ALL);
//4,允许凭证
corsConfiguration.setAllowCredentials(true);
UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
source.registerCorsConfiguration("/**", corsConfiguration);
return new CorsFilter(source);
}
}
(6)SpringBoot集成mybatis
jar包< dependency >< groupId >org.mybatis.spring.boot</ groupId >< artifactId >mybatis-spring-boot-starter</ artifactId >< version >2.1.4</ version ></ dependency >
在 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
启动类上添加@MapperScan("接口所在的包地址")@MapperScan("接口所在
的包地址")
(7)SpringBoot统一异常处理
日常开发过程中,难免有的程序会因为某些原因抛出异常,而这些异常一 般都是利用 try ,catch 的方式处理异常或者 throw,throws 的方式抛出异常 不管。这种方法对于程序员来说处理也比较麻烦,所以我们希望既能方便程序员 编写代码,不用过多的自己去处理各种异常编写重复的代码又能提升用户的体 验,这时候全局异常处理就显得很重要也很便捷了,是一种不错的选择。
package com.ffyc.news.util;
import com.ffyc.news.model.Result;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestController;
/*@RestControllerAdvice 注解以及 @ExceptionHandler 注解,前者是用来
开启全局的异常捕获,后者则是说明捕获哪些异常,对那些异常进行处理。*/
@RestController
public class GlobalExceptionHandler {
@ExceptionHandler(Exception.class)
public Result globalExceptionHandler(Exception e){
Result result=new Result(500,"系统忙"+e.getMessage(),null);
e.printStackTrace();
return result;
}
}