狂神说springboot
1.说在前面
javase: oop
mysql: 持久化
html+css+js+jquery+框架: 视图
javaweb: 独立开发mvc三层架构的网站(原始版)
ssm: 框架,简化我们的开发流程,但是随着发展,配置开始较为复杂
在这之前,程序都是打包成war包,在tomcat上运行,从springboot开始打包成jar包(内嵌tomcat来运行)
spring再简化: springboot横空出世,微服务架构
服务增多:springcloud来管理微服务
1.1 优点
- 为所有spring开发者更快入门
- 开箱即用,提供各种默认配置来简化项目配置
- 内嵌式容器简化web项目
- 没有冗余代码生成和xml配置要求
1.2 什么是微服务?
微服务是一种架构风格,他要求我们在开发一个应用的时候,这个应用必须构建成一系列小服务的组合:可以通过http的方式进行互通.
单体应用架构
(all in one) 将一个应用的中的所有内容封装到一个应用中.放到一个war包内.
- 这样做的好处是,易于开发和测试,部署也十分方便,需要拓展时,只需要将war复制多份,然后放到多个服务器上,再做个负载均衡就可以了
- 缺点是,哪怕修改了很小的一个地方,我们都需要停掉整个服务,重新打包,部署这个应用的war包.特别是对于一个大型项目.我们不可能把所有的内容放到一个war里面,我们如何维护和分工都是问题…
微服务架构
所谓微服务架构就是打破all in one的模式,把每个功能元素单独拿出来.把独立的功能元素动态组合,需要的功能才去拿来组合,需要多一些的功能时整合多个功能元素,所以微服务架构就是对功能元素进行复制,而没有对整个应用进行复制.
好处
- 节省资源
- 每个功能元素都是可替换的,可独立升级的软件代码
2.第一个springboot程序
环境
- jdk 1.8
- maven 3.6.3
- springboot
- idea 2021.1.1
官方:提供了一个快速生成的网站
- 可以再官网直接下载后导入idea开发 https://start.spring.io/
- 直接使用idea创建一个springboot项目(一般直接在idea中创建)
在idea中直接生成
选择springweb
这个时候可能会遇到war包下载失败的问题
** 解决方案: **https://blog.csdn.net/weixin_36827459/article/details/108317079?utm_medium=distribute.pc_relevant.none-task-blog-2defaultbaidujs_title~default-1.no_search_link&spm=1001.2101.3001.4242
https://blog.csdn.net/weixin_41450959/article/details/106109392
如果还是无法解决,就调低springboot的版本继续尝试.通常问题可以得到解决
建包时的注意点
新建的包要和application类同一级否则无法识别到
类
package com.example.demo.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
@Controller
public class HelloController {
// http://localhost:8080/hello
@ResponseBody
@RequestMapping("/hello")
public String test01(){
return "hello,world!";
}
}
结果
修改端口号
在resources文件夹下application.properties中==# server.port=8081 修改端口号==
2.1 小彩蛋
修改springboot启动页面的图标
**网站:**https://bootschool.net/ascii
在resource下新建banner.txt文件夹
效果
3.sprinboot自动装配原理(待补充)
自动配置
pom.xml
- spring-boot-dependencies : 核心依赖在父工程中
- 我们在写或者引入sprinboot依赖的时候,不需要指定版本,因为有这些版本仓库
启动器
-
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> </dependency>
-
启动器就是springboot的启动场景
-
比如spring-boot-starter-web,他就会帮我们自动导入web依赖的环境
-
springboot会将所有的功能场景,都变成一个个启动器
-
我们要使用什么功能,就只需要找到一个个启动器就可以了
主程序
package com.example.demo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
/*
* 本身就是spring的一个组件
* */
@SpringBootApplication
public class Demo2Application {
public static void main(String[] args) {
SpringApplication.run(Demo2Application.class, args);
}
}
注解
@SpringBootConfiguration springboot配置
@Configuration spring配置类
@Component spring组件
@EnableAutoConfiguration 自动配置
@AutoConfigurationPackage 自动配置包
@Import({
Registrar.class}) 导入了选择器
4.springboot配置
springboot的配置文件application.properties到底可以配置一些什么呢?
springboot使用一个全局的配置文件,配置文件名称是固定的
- application.properties
- 语法: key=value
- application.yml
- 语法: key:(空格)value
4.1 yaml
YAML是"YAML Ain’t a Markup Language"(YAML不是一种标记语言)的递归缩写。在开发的这种语言时,YAML 的意思其实是:“Yet Another Markup Language”(仍是一种标记语言),但为了强调这种语言以数据做为中心,而不是以标记语言为重点,而用反向缩略语重命名。
标记语言
以前的配置文件大多使用xml来配置,但是xml配置起来不如yaml轻巧
# k: v
name: kuquan
# object
student:
name: kuquan
age: 3
# object inline
stuent: {
name: kuquan, age: 3}
# array
petsArr1:
-dog
-cat
# array inline
petsArr2: [cat, pig, dog]
properties只能存键值对
yml的值可以注入到我们的配置类中
4.2 给属性赋值的几种方法
4.2.1 yaml赋值
注入
不影响运行
==@ConfigurationProperties(prefix = “person”)==和配置文件中的属性绑定
结果
如果想避免爆红
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
4.2.2 properties配置
通过properties来配置
对比
- spEL:springbootEL表达式
- 松散绑定:yaml中的last-name可以和类中的lastName绑定,也就是-后面的字母默认大写的,这就是松散绑定.
- JSR303数据校验:我们可以在字段上增加一层过滤器验证,可以保证数据的合法性.
结论
- 配置yml和配置properties都可以获取到值,强烈推荐yml
- 如果我们在某个业务中,只需要获取文件中的某个值,可以使用@value
- 如果说,我们专门编写了一个javaBean来和配置文件进行映射,就直接使用@ConfigurationProperties(prefix = “xxx”)
4.3 JSR303校验
@Validated 数据校验
类上加完数据校验的注解之后,之后的成员变量上可以加注解
4.4 多环境配置及配置文件位置
4.4.1 yaml多文件模块
springboot的多环境配置,选择选择激活哪一个配置文件
spring.profiles.active=(跟application-后面的那个值)
yaml多文件模块
# 选择激活的模块
spring:
profiles:
active: dev
---
server:
port: 8081
# 配置环境名称
spring:
profiles: dev
---
server:
port: 8082
相当于配置了三个文件
4.4.2 springboot配置文件加载优先级
- 优先级1:项目路径下config文件夹下配置文件
- 优先级2:项目路径下配置文件
- 优先级3:资源路径下config文件夹配置文件
- 优先级4:资源路径下配置文件
4.4.3 配置项目访问路径
# 配置项目的访问路径(默认是/)
server:
servlet:
context-path: /edu
4.5 自动装配再理解(待补充)
查看哪些自动配置类生效了
debug: true
5.springboot WEB开发
要解决的问题:
- 导入静态资源
- 首页
- jsp,模板引擎thymleaf
- 装配扩展springmvc
- 视图解析器
- 增删改查
- 拦截器
- 国际化
5.1 静态资源问题
静态资源就放置在这里
静态资源导入的源码
public void addResourceHandlers