SpringBoot
SpringBoot最核心的东西:自动装配!!! 很重要! 以及他的SpringApplication.run(); 方法
配置用什么写:可以用xml, 和springboot自带的 yaml
自动装配原理? 重要:涉及谈资
新服务框架:服务网格
微服务的jar包,在打包后 把程序分为一个一个的块儿,用java -jar.\xxx.jar 就可以打开服务,可以直接访问
也就是微服务项目 , 一个由后端提供的web接口
通过maven打包后的jar包在target文件下的test-class下面,右键openin explorer
如何在当前文件下打开命令窗口 按住shift+鼠标右键
spring中的aop 拦截器和过滤器还要学一下!
学习任务:
- 是什么
- 他就是一个javaweb的一个开发框架,和spring mvc类似,简化开发,约定大于配置
- 配置如何编写yaml
- 自动装配原理:重要:谈资
- 集成web开发:业务的核心集成数据库 Druid
- 分布式开发:Dubbo+zookeeper
- swagger:接口文档
- 任务调度
- SpringSecurity : Shiro
第一个SpringBoot程序
- JDK 1.8
- maven 3.6.1
- SpringBoot 最新版
- IDEA
官方:提供了一个快速生成的网站! IDEA集成了这个网站!
- 可以在官网直接下载后,导入idea开发(官网在哪)
- 直接使用idea创建一个springboot项目(一般开发直接在IDEA中创建)
原理初探 以后再说吧。。。
springboot中的所有依赖都是以spring-boot-starter开头的
spring-boot-starter 启动器
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
spring boot banner 生成好玩儿的字体 横幅 放在启动前
@Configuration的使用
从Spring3.0,@Configuration用于定义配置类,可替换xml配置文件,被注解的类内部包含有一个或多个被@Bean注解的方法,这些方法将会被AnnotationConfigApplicationContext或AnnotationConfigWebApplicationContext类进行扫描,并用于构建bean定义,初始化Spring容器。
yaml配置文件
-
application.properties
- 语法结构: key=value
-
application.yaml
- 语法结构: key: 空格 value
-
例如 :
-
server: port: 8080 # 对空格要求很严 # 普通的key-value name: qinjiang #对象 student: name: qinjiang # age: 3 如果他们没有对其,那么这个age就是name下的一个属性 age: 3 #行内写法 student: {name: qinjiang,age: 3} #数组 pets: - cat - dog - pig pets: [cat,dog,pig] # 这是yaml配置
-
server.port=8080 # 这是properties配置
-
<server> <port>8080</port> </server> <!--这是xml配置-->
-
yaml配置 可以直接给实体类赋值
-
松散绑定:比如我yaml中写的是last-name,name他跟lastName是一样的,-后面字母默认大写
-
赋值的方法里面只需要熟悉一种即可 推荐yaml配置
如何给实体类上的属性赋值? 我们可以使用Spring中的 @Value注解
但是在springboot中
我们可以使用 @ConfigurationProperties(perfix = "xxx") ,他会默认帮我们寻找yaml配置文件
xxx表示yaml配置文件中的前缀名 例如 student
他会将配置文件中的每一个值与我们实体类属性进行映射,前提是名字要相同
占位符 el表达式 ${ }
person:
name: maomao${random.uuid} # 随机uuid
age: ${random.int} # 随机int
happy: false
birth: 2022/03/23
maps: {k1: v1,k2: v2}
lists:
- code
- girl
- music
dog:
name: ${person.hello:other}_旺财
age: 1
举例
-
yaml配置
-
person: name: maomao age: 3 happy: false birth: 2022/3/23 maps: {k1: v1,k2: v2} lists: - code - girl - music dog: name: 旺财 age: 1
-
实体类
-
/* @ConfigurationProperties作用: 将配置文件中配置的每一个属性的值,映射到这个组件中; 告诉SpringBoot将本类中的所有属性和配置文件中相关的配置进行绑定 参数 prefix = “person” : 将配置文件中的person下面的所有属性一一对应 */ @Component //注册bean @ConfigurationProperties(prefix = "person") public class Person { private String name; private Integer age; private Boolean happy; private Date birth; private Map<String,Object> maps; private List<Object> lists; private Dog dog; }
JSR303校验
记得添加依赖包
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-validation</artifactId> </dependency>
它是用来规范命名的
首先要在实体类上使用注解
@Validated //数据校验
然后在属性上可用的方法有:@NotNull(message="名字不能为空") private String userName; @Max(value=120,message="年龄最大不能查过120") private int age; @Email(message="邮箱格式错误") private String email; 空检查 @Null 验证对象是否为null @NotNull 验证对象是否不为null, 无法查检长度为0的字符串 @NotBlank 检查约束字符串是不是Null还有被Trim的长度是否大于0,只对字符串,且会去掉前后空格. @NotEmpty 检查约束元素是否为NULL或者是EMPTY. Booelan检查 @AssertTrue 验证 Boolean 对象是否为 true @AssertFalse 验证 Boolean 对象是否为 false 长度检查 @Size(min=, max=) 验证对象(Array,Collection,Map,String)长度是否在给定的范围之内 @Length(min=, max=) string is between min and max included. 日期检查 @Past 验证 Date 和 Calendar 对象是否在当前时间之前 @Future 验证 Date 和 Calendar 对象是否在当前时间之后 @Pattern 验证 String 对象是否符合正则表达式的规则 .......等等 除此以外,我们还可以自定义一些数据校验规则
多环境配置
可以使用properties配置,但是要创建多个文件
命名的时候例如application-dev.properties,使用的时候在默认的配置文件中输入:spring.profiles.active=dev
使用yaml配置,一个文件即可,用 --- 分隔开
server:
port: 8081
#选择要激活那个环境块
spring:
profiles:
active: prod
---
server:
port: 8083
spring:
profiles: dev #配置环境的名称
---
server:
port: 8084
spring:
profiles: prod #配置环境的名称
Web开发
静态资源导入
默认访问resources目录下的,按优先级进行排名的
- resources
- static
- public
HTML页面
如果想要访问templates下面的静态资源,必须先引入thymeleaf依赖
他会自己配置设计图解析器,在classpath:/templates 下面 的 .html
使用了thymeleaf路径后,不需要/static 那些默认静态资源目录,直接可以访问子级目录
它里面的templates包,其实就可以当做web项目中的web-inf包
它的目录下面的所有页面,都只能通过controller来跳转
首页
就在静态资源目录下创建一个名为index.html的文件即可
thymeleaf语法
(前提:需要模板引擎的支持 thymeleaf)
导入thymeleaf依赖
<!--thymeleaf-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
导入依赖后需要在页面引用命名空间,${msg}也依旧是后端controller通过Model获取的值
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<!--th:text就是将div中的内容设置为它指定的值,和之前学习的Vue一样 取值 -->
<div th:text="${msg}"></div>
创建一个MVC配置文件
在主程序的同级目录下创建一个名为config的包
该包下面的类需要实现 WebMvcConfigurer 类
并注解为配置类@Configuration
@EnableWebMvc的注解要注意,他会覆盖我们原有的配置
注:实现了视图解析器接口的类,我们就可以称之为视图解析器
public interface ViewResolver
连接数据库
spring:
profiles:
active: dev
datasource:
url: jdbc:mysql://localhost:3306/test1?useSSL=false&characterEncoding=utf8
username: root
password: 258025
driver-class-name: com.mysql.jdbc.Driver
在配置文件中的classpath也就代表了resources目录
p34
https://gitee.com/ENNRIAAA/spring-security-material?_from=gitee_search资源地址
开启某个功能@Enablexxx
web安全框架SpringSecurity
身份验证和访问控制框架
shiro
具体请访问我另一篇文章:
总体来看,对Shiro的操作,是围绕Realm的对象来进行操作的,Realm提供的是待校验数据的比对值,即安全数据源
Subject currentuser = SecurityUtils.getSubject();
Session session = currentuser.getSession();
currentUser.isAuthenticated()
currentUser. getPrincipal()
currentUser.hasRo1e ("schwartz")
currentUser.isPermitted("7ightsaber:wie1d")currentUser. logout();
<!-- shiro -->
<dependency>
<groupId>org.apache.shiro</groupId>
<artifactId>shiro-spring</artifactId>
<version>1.9.0</version>
</dependency>
- 创建一个Shiro的 Configuration 类 需要使用 @Configuration 注解
- 先创建 realm 对象,UserRealm
- 创建 DefaultWebSecurityManager 对象
- 创建 ShiroFilterFactoryBean 对象
都需要使用@Bean注册bean
- 自定义一个UserRealm类 继承AuthorizingRealm
业务一般写这里
一般创建顺序:- 重写里面的两个方法 授权和认证
- AuthorizationInfo
- AuthenticationInfo
- 登录拦截:
- SimpleAuthenticationInfo
MD5加密,MD5盐值加密:会在后面加上你的username
原文链接:https://blog.csdn.net/weixin_38297879/article/details/81317625
Swagger
-
号称世界上最流行的API框架
-
Restful Api 文档在线自动生成器 => API 文档 与API 定义同步更新
-
直接运行,在线测试API
-
支持多种语言 (如:Java,PHP等)
-
- 如何才能运行?
- 导入两个依赖 springfox-swagger2 和 springfox-swagger-ui
现在只需要一个整合的依赖springfox-boot-starter - 创建一个config类
- 第二步在config类上使用@EnableOpenApi注解 第三步在启动类上使用@EnableWebMvc注解
一定记住启动类加入@EnableWebMvc注解,不然会空指针异常 - 类上使用@Configuration注解,并使用@EnableSwagger2开启
- 出现问题就需要降版本,版本问题
Dubbo - Zookeeper
分布式微服务
SpringBoot-狂神(20. Springboot+Dubbo+Zookeeper)学习笔记
Dubbo是一款高性能、轻量级的开源Java RPC框架,它提供了三大核心能力:面向接口的远程方法调用,智能容错和负载均衡,以及服务自动注册和发现。
Zookeeper ZooKeeper也可以作为注册中心。
- ZooKeeper主要服务于分布式系统,可以用ZooKeeper来做:统一配置管理、统一命名服务、分布式锁、集群管理。
- 使用分布式系统就无法避免对节点管理的问题(需要实时感知节点的状态、对节点进行统一管理等等),而由于这些问题处理起来可能相对麻烦和提高了系统的复杂性,ZooKeeper作为一个能够通用解决这些问题的中间件就应运而生了。
Dubbo是一种分布式的服务架构,用于改进 RPC远程服务呼叫机制,并提供 SOA服务管理。
SpringCloud是一组有序的框架。
Spring Boot开发的便利,使得分布式系统架构的开发变得更加简单,比如服务发现,配置中心,消息总线,负载平衡,断路器,数据监控等等。Spring并不是一个重复的过程,而是将各个公司开发的更加成熟、更加可靠的服务架构结合在一起,通过 Spring Boot的重新包装,避免了那些繁琐的设计和实现,从而为开发者提供了一系列易于理解、易于部署和维护的分布式系统开发工具箱。
Dubbo的性能更高,但是开发更难
测试Demo
- zookeeper的默认端口号为:2181 即注册中心的端口号
- zookeeper:服务注册与发现
- Dubbo的默认端口号为:20880 即一个管理注册中心的容器
- 它提供了三大核心能力:面向接口的远程方法调用,智能容错和负载均衡,以及服务自动注册和发现。
-
导入Dubbo和zookeeper的Maven依赖
-
配置文件配置Dubbo相关配置
-
提供者provider-server
-
#服务应用名字 dubbo.application.name=provider-server #注册中心地址 dubbo.registry.address=zookeeper://127.0.0.1:2181 #哪些服务要被注册 有@DubboService注解的 dubbo.scan.base-packages=com.mao.service
-
在被扫描的包下的Bean(也就是想要注册的服务上)上使用 @DubboService + Spring的@Service 注解
@DubboService //可以被扫描到,在项目已启动就自动注册到注册中心 @Service public class TicketserviceImpl implements Ticketservice { @Override public string getTicket() i return "《毛毛学Java》"; } }
-
消费者customer-server
-
#服务应用名字 dubbo.application.name=customer-server #注册中心地址 127.0.0.1:2181 可以是任何一个电脑的zookeeper端口 dubbo.registry.address=zookeeper://127.0.0.1:2181
- 使用@DubboReference引入服务接口(前提是消费者的接口位置要跟提供者的接口位置相同)
@Service public class CustomerService { //想拿到provider-server提供的票,要去注册中心拿到服务 @DubboReference //引用, Pom坐标,可以定义路径相同的接口名 Ticketservice ticketService; public void buyTicket(){ string ticket= ticketservice.getTicket(); } }
-
-
运行SpringApplication
- 运行zookeeper服务
- 运行dubbo-admin服务(监控中心)
- 访问 localhost:7001 (他是一个管理注册中心服务的一个可视化web界面)
异步任务
-
@Async 注解 写在方法上面,高速程序这是异步执行的
-
@EnableAsync 在主程序类上开启这个功能,就能实现异步了
-
就是例如
//你进行了延时 3s 他会在三秒后才返回结果 // 这个时候前端页面会一直处于加载状态 Thread.sleep(3000); System.out.printLn("数据正在处理,,,,");
但是此时你开启了异步任务 那么他会前端先返回前端的数据,后端按照程序延时后执行
邮件发送
定时任务~表达式
TaskScheduler 任务调度者
TaskExecutor 任务执行者
@EnableScheduling // 开启定时功能的注解
@Scheduled // 什么时候执行
// cron 表达式~ 可以直接百度搜索cron表达式生成器
@Scheduled(cron = "")
注意:
整个项目中,只要是thymelef中的静态资源都只能通过访问controller中的映射地址来访问
学习网站
(22条消息) springboot项目简单介绍、启动和部署_Survivor001的博客-CSDN博客_springboot项目怎么启动
员工管理系统
请移步我的另一篇文章:
SpringBoot员工管理系统