SpringBoot的学习
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员工管理系统
SpringBoot的学习的更多相关文章
- Springboot 框架学习
Springboot 框架学习 前言 Spring Boot是Spring 官方的顶级项目之一,她的其他小伙伴还有Spring Cloud.Spring Framework.Spring Data等等 ...
- SpringBoot+Shiro学习(七):Filter过滤器管理
SpringBoot+Shiro学习(七):Filter过滤器管理 Hiwayz 关注 0.5 2018.09.06 19:09* 字数 1070 阅读 5922评论 1喜欢 20 先从我们写的一个 ...
- MacOS下SpringBoot基础学习
学于黑马和传智播客联合做的教学项目 感谢 黑马官网 传智播客官网 微信搜索"艺术行者",关注并回复关键词"springboot"获取视频和教程资料! b站在线视 ...
- springboot入门学习-helloworld实例
今天学习了springboot,发现使用springboot创建项目确实非常方便,创建第一个springboot项目之前先看一下下面两个问题. 一.什么是springboot? Spring Boot ...
- springBoot AOP学习(一)
AOP学习(一) 1.简介 AOp:面向切面编程,相对于OOP面向对象编程. Spring的AOP的存在目的是为了解耦.AOP可以让一切类共享相同的行为.在OOP中只能通过继承类或者实现接口,使代码的 ...
- SpringBoot入门学习记录(一)
最近,SpringBoot.SpringCloud.Dubbo等框架非常流行,作为Coder里的一名小学生,借着改革开放的东风,自然也是需要学习学习的,于是将学习经历记录于此,以备日后查看. 官网:h ...
- SpringBoot入门学习(一)
Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程.该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置.用我 ...
- springboot + sharding-jdbc 学习
官网地址:http://shardingsphere.io/document/current/cn/overview/ sharding-jdbc事务:https://blog.csdn.net/ya ...
- java Spring-Boot框架学习视频-百度云盘
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明.本文链接:https://blog.csdn.net/lk142500/article/deta ...
- springboot之学习搭建
什么是**SpringBoot?** Spring Boot 是由 Pivotal 团队提供的全新框架,其设计目的是用来简化新 Spring 应用的初始搭建以及开发过程.该框架使用了特定的方式来进行配 ...
随机推荐
- postgresql 查询表结构
sql查询 SELECT A.attnum, ( SELECT description FROM pg_catalog.pg_description WHERE objoid = A.attrelid ...
- 如果在安装32位Oracle客户端组件的情况下64位模式运行, 将出现此问题.
场景重现 在一台Windows 7 32-bit电脑上 安装了Oracle 11gR2 32-bit的客户端 用 VS2010 写的一个基于数据库驱动的项目 操作Oracle数据库都挺正常的 后来.. ...
- Nodejs与管道和信号
Nodejs与管道 Linux的其中一个设计哲学就是小而精,一个程序只做一件事情,然后通过管道将多个程序连接起来完成复杂的任务. 比如如下的命令: ps -ef | grep node cat aaa ...
- 基于Spring Boot的HTTP请求签名验证实现解析
概述 在分布式系统交互中,API接口的安全性至关重要.本文将深入解析基于Spring Boot实现的HTTP请求签名验证机制,该方案支持GET/POST等多种请求方式,提供时效性验证和数据完整性保障. ...
- 如何开发 MCP 服务?保姆级教程!
最近这段时间有个 AI 相关的概念特别火,叫 MCP,全称模型上下文协议(Model Context Protocol).这是由 Anthropic 推出的一项开放标准,目标是为大型语言模型和 AI ...
- 【深度解析】SkyWalking 10.2.0版本安全优化与性能提升实战指南
前言 Apache SkyWalking 作为云原生可观测性领域的佼佼者,在微服务架构监控中扮演着至关重要的角色.然而,官方版本在安全性.镜像体积和功能扩展方面仍有优化空间.本文将分享一套完整的 Sk ...
- [转自洛谷]洛谷KateX公式大全【LateX】
前言 由于在洛谷,有很多人对于\(\KaTeX\)和\(\LaTeX\)之间的关系并不清楚,导致很多人去搜\(\LaTeX\)的资料,然后发现有许多指令无法在洛谷运行. 但是事实上,\(\KaTeX\ ...
- python3安装xlutils模块
下载: https://www.cnpython.com/pypi/xlutils/dl-xlutils-2.0.0-py2.py3-none-any.whl#google_vignette 安装: ...
- 在 Spring Boot 2 中集成 JCasbin 并实现 ClassPath 模型文件加载
在 Spring Boot 2 中集成 JCasbin 并实现 ClassPath 模型文件加载 概述 在现代Web应用开发中,权限管理和认证是不可或缺的一部分.JCasbin 是一个强大的.高效的开 ...
- 企业级分布式MCP方案
飞书原文档链接地址:https://ik3te1knhq.feishu.cn/wiki/D8kSwC9tFi61CMkRdd8cMxNTnpg 企业级分布式 MCP 方案 背景:现阶段 MCP Cli ...