夜间模式暗黑模式
字体
阴影
滤镜
圆角
主题色
SpringBoot
  • 在项目开发中,需要使用各种技术来实现不同需求的功能模块。例如:开发基于Spring框架的Web项目步骤如下:

    • 创建一个Web项目

    • 下载第三方相关库

      • 手动
      • maven
    • 配置web.xml

      • DespatcherServlet
      • session
      • mapping
      • 编码
    • 开发业务

    • 开发非业务功能

    • 下载、安装、配置Tomcat

    • 构建war包

    • 部署项目到Tomcat

    • 以上的操作步骤为传统的开发方式,无论项目的难易程度,都需要这些步骤

    • 以上步骤的缺点:

      • 下载jar包

        • 太多的jar包,会产生冲突问题
        • 需要记住各jar包的版本
      • Spring配置

        • 每开发Spring项目,都需要配置这些

          • scan
          • viewResolver
          • converter
          • 等等……
      • 集成问题

        • 与各种技术进行整合

          • redis
          • mybatis
          • rabbitMQ
          • mail
          • kafka
      • tomcat问题

        • 必须下载并配置Tomcat
      • 部署war包

        • 将项目打包成war,然后部署到tomcat中
    • 总结

      • 创建一个新项目的要做很多重复性高、繁琐且易出错的工作
      • 依赖复杂、编码复杂、配置复杂、部署复杂
  • 传统Spring项目需要大量的xml来进行配置及复杂的依赖管理

  • SpringBoot改变了传统的Spring开发方式,不需要配置xml,真正做到了快速构建

SpringBoot 简介

  • SpringBoot是一个基于Spring 的一个全新框架

  • 它提供了一个全新的开发方式(解决了传统开发的弊端)

  • SpringBoot使用了特定的开发方式

    • Stater:启动器
    • 约定优先于配置
  • SpringBoot是基于Spring4 进行设计的

  • SpringBoot从某种角度来说,是一个新框架

  • SpringBoot本质更像一套工具库

  • SpringBoot是一个微服务框架,它可以快速开发一个Spring项目

  • 两个重要的核心:

    • stater
    • 自动配置
    • 即 0 配置

微服务简述

  • 微:即小

  • 服务:一个或一组较小且独立的功能单元

  • 微服务

    • 指微小的功能单元
    • 将一个打的系统拆分成多个功能独立的服务
    • 多个服务之间可以协同工作
  • 微服务和单体框架的区别

    • 单体框架,所有的模块全部耦合在一起,代码量大,维护困难
    • 微服务,每个模块相当于一个单独的项目,代码量少,遇到问题相对来说比较好解决
    • 单体框架,所有的模块都公用一个数据库,存储方式比较单一
    • 微服务,每个模块都可以使用不同的存储方式,也可以对应独立的数据库
    • 单体框架,所有的模块开发所使用的技术相同
    • 微服务,每个模块都可以使用不同的开发技术
  • SpringBoot 微服务框架的特点

    • 创建独立的Spring应用程序,使用编码更简单
    • 嵌入Tomcat,无需部署war文件
    • 简化了Maven的配置,使配置变得更简单
    • 自动配置Spring
  • SpringBoot微服务框架缺点

    • 依赖太多,随便一个SpringBoot项目都几十M
    • 缺少服务注册、监控、安全管理等
    • 参考资料相对较少
  • SpringBoot应用场景

    • JavaWeb应用
    • 微服务

SpringBoot 详解

  • 定义启动类

    • 在与逆行SpringBoot项目时,不需要将项目放入到Tomcat服务器中
    • 可以使用Boot项目中的启动类来运行项目
    @SpringBootApplication
    public class DemobootApplication {
    	public static void main(String[] args) {
    		SpringApplication.run(DemobootApplication.class, args);
    	}
    }
    
    • 定义控制器:指SpringMVC
    @RestController
    public class HelloHandler {
    	@RequestMapping("/hello")
    	public String Hello() {
    		return "Hello, World";
    	}
    }
    
    • <parent> 标签

      • <parent> 父项用来管理SpringBoot所有依赖的版本,也称为SpringBoot版本仲裁中心
      • 在导入依赖时,默认是不需要写版本的
    • <dependencies> 标签

      • <dependencies> 中的spring-boot-starter-web,被称为场景启动器,它导入了Web模块正常启动所需的组件
      • 注意:在项目中要引入启动器,就导入了相关场景的依赖。体现了 “约定大于配置”

修改 SpringBoot 依赖的 jar

  • 在实际开发中,通常情况下是不需要修改SpringBoot依赖 jar 版本

  • 因为所有依赖都由SpringBoot管理,不需要指定依赖版本

  • 如果特殊情况,需要修改个别依赖jar版本,可以在pom.xml文件中进行修改

  • 在pom.xml文件中的<properties>中进行设置

  • 注意:

    • 如果使用<properties>中修改以来版本失败,可以在父级启动器中进行修改。
    • <artifactId>spring-boot-starter-parent</artifactId>里面的<artifactId>spring-boot-dependencies<artifactId>中的版本

SpringBoot启动的三种方式

  • SpringBoot启动类

    • 执行主函数
    • SpringApplication.run方法启动SpringBoot
  • Maven Project窗口

    • spring-boot 执行 run
  • SpringBoot 打包 jar

    • Maven Project 窗口执行 package
    • 运行 jar

Spring 三种配置方式

  • xml 配置

  • Annotation

    • 开启自动扫描
  • Java 配置

    • 以 Java 类的形式替代xml文件

常用注解

  • @SpringBootApplication

    • 表明是SpringBoot 的主配置类

    • SpringBoot会运行这个类的main方法

    • 用来启动SpringBoot应用

    • 其中包含的注解有:

      • @SpringBootConfiguration

        • 标注一个类是SpringBoot的配置类
        • 用配置类取代配置文件
      • @EnableAutoConfiguration

        • 开启自动配置功能
        • 将当前类所在的包下的所有类及子包类扫描注册为Bean
      • @ComponentScan

        • 开启自动扫描

 

零配置实现原理

  • SpringBoot提供了对项目的相关配置信息 (默认提供),例如JDBC、tomcat等

  • 默认配置文件

    • spirng-boot-autoconfigure 包下的web包下的ServerProperties

目录结构

  • static

    • 保存的是所有静态资源

      • html
      • js
      • css
      • image等
  • template

    • 保存所有的模板页面
    • SpringBoot默认是jar包,使用嵌入式tomcat,默认不支持jsp
    • 可以使用模板引擎(freemarker、thymeleat)替代jsp
  • application.properties

    • SpringBoot应用的配置文件

    • 该配置文件分为两种类型

      • application.properties
      • application.yml
      • 注意:配置文件名称为固定名称

SpringBoot的配置文件

  • SpringBoot可以使用默认提供的配置信息,所有,称之为零配置

  • 但也可以更改默认的配置项,可以通过SpringBoot配置文件来进行设置

  • 配置文件分类

    • properties文件
    • yml文件
    • 注意:文件的名称与文件存放的位置是有要求的

配置文件的设置

  • application.properties配置

    • 可以在application.properties中修改SpringBoot默认的匹配值

      • server.port=80 #修改端口号
      • server.servlet.context-path=/boot #添加项目目录
    • @Value("${对象.属性}")

      • 可以将配置文件中的数据绑定到VO类中的数据

      • 注意:

        • application.properties文件中的key没名称要与@Value中的信息一致
        • idea默认的字符编码是utf-8,而properties文件默认是unicode编码,需要进行设置
      • 注解的形式

        • ${}:从配置文件中读取数据值
        • #{}:使用表达式运算,支持SPEL表达式
        • 字面值:
        @Value(${person.age})
        private int age;
        @Value(#{person.age>18?1:0})
        private int score;
        @value("true") //字面值
        private boolean bool;
        
    • @ConfigurationProperties

      • 自定义配置
      • 使用ConfigurationProperties前缀设置的方式也可以实现数据注入
      • 需要在pom文件中配置以下信息
      <dependency>
      	<groupId>org.springframework.boot</groupId>
      	<artifactId>spring-boot-configuration-processor</artifactId>
      	<optional>true</optional>
      </dependency>
      
  • YAML配置方式

    • YAML:YAML Ain't a Markup Language,不是一种标记语言

    • 是一种配置文件。特点是以“数据为中心”

    • 它币XML更适合做配置文件

    • YAML语法:

      • 格式:

      • key: value

      • 表示一个键值对,注意冒号后面需要加一个空格,不加可能会出现格式错误

      • 特性:

        • 以空格缩进的方式来控制层级关系
        • 缩进的空格数量不重要,只需要相同层级的元素左侧对齐即可
        • 大小写敏感
      • YAML中的数据结构

        • 字面值,例如:数字、字符串、布尔
        • 对象:由键/值对组成
        • 数组:用 “ – ” 表示数组元素
      • 例:

        # emp对象
        emp:
        	name: james
        	age: 20
        
        # dept对象行内写法
        dept: {name: tom,age: 25}
        
        # 数组
        animal:
        	- cat
        	- dog
        	- pig
        	
        # 数组的行内写法
        gun: [AK47,M4A1,N94]
        
        # 复杂对象
        person:
        	name: jerry
        	age: 28
        	birth: 1992/02/05
        	map: {k1: v1,k2: v2}
        	firends:
        		- zhangsan
        		- lisi
        	dog:
        		dog_name: kiki
        		dog_age: 1
        
    • 读取配置文件方式

      • @Value(${})

      • @ConfigurationProperties(prefix="前缀")

      • 区别:

        @ConfigurationProperties @value
        批量注入 一个一个注入
        支持松散绑定 不支持松散绑定
        不支持SPEL表达式 支持SPEL表达式
        支持JSR303数据校验 不支持JSR303数据校验
        支持复杂类型的对象数据 不支持复杂类型的对象数据
    • 其他注解使用

      • @PropertySource:

        • 指定配置文件
        • 由于@ConfigurationProperties是从全局配置文件进行配置(application),当配置信息分离出来的时候,可以使用指定配置文件的方式进行配置
        • 格式:@PropertySource("classpath:配置文件全称")
        • 可以与@Value,@ConfigurationProperties结合使用
      • @ImportResource

        • 导入Spring的配置文件
        • 需要在SpringBoot主启动类中进行注解导入
        • 格式:ImportReSource("classpath:配置文件全称")

多配置文件处理

  • 在项目实际开发中,分为开发、测试、发布等几个阶段,不同阶段需要使用不同的配置信息。

  • 可以使用多配置文件,处理不同阶段开发的需求

  • 在SpringBoot中提供了proFile,针对不同环境提供不同配置功能的支持

  • 可以通过激活、指定参数等方式快速切换环境

  • 格式:

    • application-{profile}.properties/yml
    • 其中{profile}为自定义名称,但是文件前缀必须以application-开头
  • 激活格式:

    • 在全局配置文件中使用以下命令

      • Spring.profiles.active={profile}
  • 配置文件加载的优先级

    • SpringBoot按照以下优先级,从高到低加载配置文件

      • file: ./config
      • file: ../
      • classpath: /config
      • classpath: /
      • 注意:四个位置加载配置文件,形成互补配置

YAML多文档模块

  • 可以将整个YAML文件按区域划分成多个配置模块

  • 语法:

    • —:使用三个减号分隔每个配置模块

JSR303 数据校验

  • 需要在pom文件中添加以下配置
<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-validation</artifactId>
</dependency>
  • 在vo类上添加注解,并且在对应的对象上方添加想要校验的类型约束注解
@Validated
public String User(){
    @Email
    private String Email;
}

SpringBoot Web开发

  • 静态资源管理

    • 在SpringBoot中,有四个目录可存放静态资源

      • classpath:

        • /META-INF/resource/
        • /resource/
        • /static/
        • /public/
      • 注意

        • 在实际开发当中,不需要全部创建,使用idea默认提供的即可
  • SpringBoot Web资源

    • 在实际开发中可能需要使用的Web相应的技术,如Jquery、bootstrap等

    • WebJars

      • https://www.webjars.org/

      • 所有webJars/**下的资源都在classpath:/MATE-INF/resource/webjars中

      • 使用webjars静态资源

        • 需要在pom.xml中进行配置
        • 需要将相应的webjar-xxx,通过<dependency>添加
  • favicon.ico 图标

    • 可以设置页面图标
    • 图标文件必须是:favicon.ico
    • 存储位置:static的根目录
    • 页面导入:<link rel="shortcut icon" href="favicon.ico">
  • Thymeleaf 模板引擎

    • 什么是模板引擎

      • 是为了使用户界面与业务数据分离,而产生的技术
      • 可以生成特定格式的文档
      • 用于网站的模板引擎就会生成一个标准的HTML文档
    • 简介

      • 当前流行的引擎
      • 该引擎采用java语言开发
      • 在web环境下,可以像jsp一样从后台接收数据并替换
    • 常用引擎:

      • Thymeleaf
      • Freemarker
      • Velocity
      • 注意:SpringBoot官方推荐使用Thymeleaf模板引擎,语法简单,功能强大
    • Thymeleaf的使用

      • 两种形式

        • pom文件配置

          • spring-boot-starter-thymeleaf
        • 创建项目添加

          • 选择Template,勾选
      • 引入Thymeleaf

        <html xmlns:th="http://www.thymeleaf.org">

Thymeleaf 语法

  • Thymeleat 标准表达式

    • 变量表达式

      • Variable Expressions:${…}
      姓名:<input type="text" name=username" th:value="${username}"/><br/>
      爱好:<input type="text" name="hobby" th:each="h:${hobby}" th:text="${h}"/>
      

       

    • 选择表达式

      • selection Variable:*{…}
      <div th:object="${person}">
      	<p th:text="*{personName}"/>
          <p th:text="*{personAge}">    
      </div>
      
    • 消息表达式

      • Message Expressions:#{…}
      • 通常用于实现国际化
      • 消息表达式可以获取properties配置文件中的常用数据
      • 也可以实现 i18n 国际化操作
    • 链接表达式

      • link URL Expressions:@{…}
    • 片段表达式

      • Fragment Expressions:~{..}
      • 用于引用或包含
      • 类似于JSTL中的include标签
      • th:fragment,用来声明片段
      • th:insert,用来引入片段
  • Thymeleaf中的对象

    • 基本表达式对象

      • Thymeleaf中提供了类似于JSP中的内置对象
      • #ctx:上下文对象
      • #var:上下文变量
      • #local:上下文区域设置
      • #request
      • #response
      • #session
      • #servletContext
    • 工具表达式

      • #execinfo:模板信息
      • #message:用于在变量表达式中获取外部消息

SpringBoot:Restful 风格

  • HTTP的Restful风格:get post put delete

  • 注意事项:

    • 开启hidden过滤

      • 默认情况下为 false

        • Spring.mvc.hiddenmethod.filter.enabled=true
      • 作用:

        • 当提交请求时,可以过滤请求中的hidden

        • 根据name 的名字来判断是否使用put、delete请求。name的值必须是 _mehtod

        • value的值为请求类型。put post delete

          • <input type="hidden" name="_method" value="delete">
      • 后端控制器注解

        • @GetMapping
        • @PutMapping
        • @PostMapping
        • @DeleteMapping

SpringBoot 中的数据源

  • Boot数据访问

    • 配置数据源
    • Spring数据访问模板
    • 整合数据访问框架(MyBatis)
  • 配置数据源

    • Boot中默认的数据源

      • tomcat
      • hikari (默认数据源)
      • tomcat
    • 操作步骤

      • 导入mysql驱动依赖
      • 配置默认数据源的信息
      spring.datasource.url=jdbc:mysql://localhost:3306/mynewdatabase
      spring.datasource.driver-class-name=com.mysql.jdbc.Driver
      spring.datasource.username=root
      spring.datasource.password=passwd
      
    • 第三方数据源

      • c3p0

      • dbcp2

      • druid

      • 操作步骤

        • 导入依赖
        • 配置文件
        • 注意:配置数据源的操作方式基本一致

SpringBoot整合mybatis

  • 注解版

    • 使用@Mapper

      • 在接口上使用此注解
    • 四个注解

      • 在dao方法中使用

        • @select
        • @update
        • @delete
        • @insert
    # 导入依赖
    <dependency>
    	<groupId>org.mybatis.spring.boot</groupId>
    	<artifactId>mybatis-spring-boot-starter</artifactId>
    	<version>1.3.1</version>
    </dependency>
    
  • xml配置版

    • 导入依赖

    • 创建MyBatis相关的配置目录

      • mapper映射文件
      • mybatis核心的配置文件
    • 在SpringBoot配置文件中配置mybatis

      • 配置MyBatis-Mapper的映射文件
      • 配置MyBatis核心配置文件
      • 使用MyBatis前缀来设置

SpringBoot 整合缓存及Redis

  • 在Java中实现缓存机制的规范(JSR107):扩展

  • 提供了五个核心的接口

    • CachingProvider

      • 定义了创建、配置、获取、管理和控制多个CacheManager
    • CacheManager

      • 定义了创建、配置、获取、管理和控制多个唯一命名的Cache
      • 这些Cache存在于CacheManager的上下文中
      • 一个ChacheManager仅被一个CachingProvider所拥有
    • Cache

      • 是一个类似于Map的数据结构,并临时存储key为索引的值
      • 一个Cache仅被一个CacheManager所拥有
    • Entry

      • 是一个存储再Cache中的key-value对象
    • Exprity

      • 每一个存储再Cache中的条目有一个定义的有效期
  • Spring的缓存抽象

    • Spring从3开始定义了一个org.springframework.cache.Cache和Cachemanager接口同一缓存技术
  • 重要的缓存注解

    • 两个接口

      • Cache

        • 缓存接口

        • 实现缓存操作

          • RedisCache
          • EhCacheCache
          • ConcurrentMapCache
      • CacheManager

        • 缓存管理器
        • 管理各种缓存
    • 四个注解

      • @Cacheable

        • 配置缓存
      • @CacheEvict

        • 清除缓存
      • @CachePut

        • 缓存修改
      • @EnableCaching

        • 开启缓存扫描
  • 操作步骤

    • 导入依赖
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-cache</artifactId>
    </dependency>
    
    • 开启缓存扫描,让缓存生效

      • 需要在SpringBoot启动类中进行设置
      • @EnableCaching
    • 设置缓存

      • 设置缓存@Cacheable(value="mynewtable",key="#a0") # value中是缓存的名字,key为键名,#必须加
      • 清除缓存@CacheEvict(value="mynewtable")
    • 开启缓存设置

      • mybatis.configuration.cache-enabled=true #在application.properties中
    • 开启缓存debug

      • debug=true
      • logging.level.com.oracle.demo=debug

     

整合 Redis

  • 导入依赖
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
  • 在application.properties中配置
spring.redis.host=192.168.229.128    
spring.redis.port=6397    # 默认6379
spring.redis.password=passwd
  • 在service中配置操作对象
@Autowired
StringRedisTemplate stringRedisTemplate;  //在redis中操作字符串数据
@Autowired
RedisTemplate redisTemplate;  //在redis中操作对象

 

 


暂无评论

发送评论 编辑评论


				
上一篇
下一篇