SpringBoot【冲啊!】

什么是SpringBoot

SpringBoot就是一个javaweb的开发框架,和SpringMVC类似,对比其他JavaWeb框架的好处,是简化开发,约定大于配置,几行代码开发一个http接口。

SpringBoot基于Spring开发,SpringBoot本身不提供Spring框架的核心特性以及扩展功能,只是用于快速、敏捷的开发新一代基于Spring的框架的应用程序。他并不是用来替代Spring的解决方案,而是和Spring框架紧密结合用于提升Spring开发者体验的工具。SpringBoot约定大于配置的核心思想,默认帮我们进行了很多设置,多数SpringBoot应用只需要很少的Spring配置。同时集成了大量常用的第三方库配置(例如:Redis、MongoDB、Jpa、RabbitMQ、Quartz等等),SpringBoot应用中这些第三方库几乎可以零配置的开箱即用。

SpringBoot的主要优点:

  • 为所有的Spring开发者更快的入门;
  • 开箱即用;
  • 内嵌式容器简化Web项目;
  • 没有冗余代码生成和XML配置的要求。

什么是微服务

微服务

微服务是一种架构风格,它要求我们在开发应用的时候,这个应用必须构建成一系列小服务的组合;可以通过http的方式进行互通。

单体应用架构

所谓单体应用架构(all in one)是指,我们将一个应用的所有应用服务都封装在一个应用中。

无论是ERP、CRM或是其他系统,都把数据库访问,web访问,等各个功能放到一个war包内。

这样做的好处:易于开发和测试;也十分方便部署,当需要扩展时,只需要将war复制多份,然后放到多个服务器上,再做个负载均衡即可。
缺点是:哪怕我要修改一个非常小的地方,我都需要停掉整个服务,重新打包,部署这个应用war包。特别是对于一个大型应用,我们不可能把所有内容都放在一个应用内,如何维护、如何分工合作都是问题。

微服务架构

all in one 的架构方式,我们把所有的功能单元放在一个应用里面。然后我们把整个应用部署到服务器上。如果负载能力不行,我们将整个应用进行水平复制,进行扩展,然后再负载均衡。

所谓微服务架构,就是打破之前all in one 的架构方式,把每个功能元素独立出来。把独立出来的功能元素的动态组合,需要的功能元素才去拿来组合,需要多一些时间可以整合多个功能元素。所以微服务架构是对元素进行复制,而没有对整个应用进行复制。

这样做的好处:节省了调用资源;每个功能元素的服务都是一个可替换的、可独立升级的软件代码。

第一个SpringBoot程序

  • jdk 1.8
  • maven 3.6.1
  • springboot:最新版
  • IDEA

官方:提供了一个快速生成的网站!IDEA集成了这个网站。

  • 可以在官网直接下载后,导入idea开发;
  • 直接使用idea创建一个Springboot项目(一般开发直接在IDEA中创建)。

截图步骤:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

原理初探

自动装配原理

pom.xml

  • spring-boot-dependencies: 核心依赖在父工程中;
  • 我们在写或者引入一些Springboot依赖时,不需要指定版本,就因为有这些版本仓库。

启动器

<!--启动器-->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter</artifactId>
</dependency>
  • 启动器:就是Springboot的启动场景;
  • 比如Spring-boot-starter-web,会帮我们自动导入web环境所有的依赖。
  • Springboot会将所有的功能场景,都变成一个个启动器。
  • 我们要使用什么功能,只需要找到对应的启动器就可以 starter。

主程序

@SpringBootApplication // 标注这个类是一个springboot的应用
public class Springboot01HelloworldApplication {

    public static void main(String[] args) {
        SpringApplication.run(Springboot01HelloworldApplication.class, args);
    }

}

结论:springboot所有自动配置都是在启动的时候扫描并加载:spring.factories所有的自动配置类都在这里,但不一定生效,要判断条件是否成立,只要导入了对应的start,就有对应的启动器了,有了启动器,我们的自动装配就会生效,然后就配置成功。

@SpringBootApplication // 标注这个类是一个springboot的应用:

  1. springboot在启动时,从类路径下 /META-INF/spring.factories 获取指定的值;
  2. 将这些自动配置的类导入容器,自动配置就会生效,进行自动配置;
  3. 以前我们需要自动配置的东西,现在springboot帮我们做了;
  4. 整合javaEE,解决方案和自动配置的东西都在spring-boot-autoconfigure包下;
  5. 他会把所有需要导入的组件,,以类名的方式返回,这些组件就会被添加到容器中;
  6. 容器中也会存在非常多的 xxxAutoConfiguration的文件(@Bean),就是这些类给容器中导入了这个场景需要的所有组件,并自动配置,@Configuration, JavaConfig;
  7. 有了自动配置类,免去了我们手动编写配置文件的工作。

SpringApplication.run():

两部分:一部分是SpringApplication的实例化;二是run方法的执行。

SpringApplication:

  1. 推断应用的类型是普通的项目还是Web项目;
  2. 查找并加载所有可用初始化器,设置到initializers属性中;
  3. 找出所有的应用程序监听器,设置到listeners属性中;
  4. 推断并设置main方法的定义类,找到运行的主类。

Springboot:配置文件及自动配置原理

配置文件

Springboot使用一个全局的配置文件,配置文件名称是固定的;

  • application.properties 【语法结构 key=value】
  • application.yaml 【语法结构 key: 空格 value】
    配置文件的作用:修改Springboot自动配置的默认值,因为Springboot在底层都给我们配置好了。

Yaml

标记语言:以前的配置文件,大多数都是使用xml来配置;比如一个简单的端口配置,我们来对比下yaml和xml:
yaml配置:

server:
	poprt: 8080

xml配置:

<server>
	<port>8081</port>
</server>
name: laomao

# 对象
student:
	name: laomao
	age: 5

# 行内写法
student: {name: laomao,age: 5}

# 数组
pets:
	- cat
	- dog
	- pig
	- bird

pets: [cat,dog,pig,bird]
# 只能保存键值对
name=laomao

student.name=laomao
student.age=5

给属性赋值的几种方式

yaml可以直接给实体类赋值

在这里插入图片描述
解决@ConfigruationProperties()报错需要导入依赖

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-configuration-processor</artifactId>
    <optional>true</optional>
</dependency>

解决乱码问题
在这里插入图片描述
配置文件除了yaml,还有我们之前常用的properties
在这里插入图片描述
@value值注入

对比:
在这里插入图片描述
松散绑定:驼峰命名可以和短横线绑定【last-name 与 lastName】;
JSR303数据校验,就是我们可以在字段增加一层过滤器验证,可以保证数据的合法性;
复杂类型封装,yml中可以封装对象,使用@value不支持。

JSR303校验

@Validated // 数据校验
百度搜索 JSR303校验注解即可!

在这里插入图片描述

多环境配置及配置文件位置

yaml文件位置
优先级排序
yaml可以实现多文档模块

server:
	port: 8081
spring:
	profiles:
		active: dev

---
server:
	port: 8082
spring:
	profiles: dev
---
server:
	port: 8083
spring:
	profiles: test

SpringBoot Web 开发

jar: webapp!
自动装配
springboot到底帮我们配置了什么?我们能不能修改?能修改哪些东西?能不能扩展?

  • xxxAutoConfiguration… 向容器中自动配置组件
  • xxxProperties: 自动装配类,装配配置文件中自定义的一些内容。

要解决的问题:

  • 导入静态资源
  • 首页
  • jsp,模板引擎 Thymeleaf
  • 装配和扩展SpringMVC
  • 增删改查
  • 拦截器
  • 国际化

静态资源

  1. 在springboot中,我们可以用以下方式处理静态资源
  • webjars
  • public, static, /**,resources localhost:8080/
  1. 优先级:resource>static(默认)>public

首页和图标定制

在这里插入图片描述
index.html文件可以放在 public、resources、statics、templates【一般将index.html放在templates下,通过Controller才能访问到这个文件夹】。

Thymeleaf 模板引擎

前端交给后端的页面,是html页面。如果我们之前开发,需要把他们转成jsp页面,jsp好处就是当我们查出一些数据转发到JSP页面后,可以用jsp轻松实现数据的显示,及交互等。jsp支持非常强大的功能,包括能写java代码。

但是现在,Springboot这个项目首先是以jar的方式,不是war;此外,我们使用的是嵌入式的Tomcat,默认不支持jsp。如果我们直接用纯静态页面的方式,会给开发带来很大的麻烦,Springboot推荐使用模板引擎。

模板引擎 是jsp就是一个模板引擎,还有freemarker。

模板引擎原理
thymeleaf在github的主页:https://github.com/thymeleaf/thymeleaf
thymeleaf官网:https://www.thymeleaf.org/
spring官方文档:找对应版本。

添加依赖

<dependency>
    <groupId>org.thymeleaf</groupId>
    <artifactId>thymeleaf-spring5</artifactId>
</dependency>
<dependency>
    <groupId>org.thymeleaf.extras</groupId>
    <artifactId>thymeleaf-extras-java8time</artifactId>
</dependency>

结论:
只要需要使用thymeleaf,只需要导入对应的依赖就可以了,我们将html放在我们的templates目录下。

使用thymeleaf:
导入约束

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

thymeleaf语法
text&utext:
Controller
html
运行页面

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值