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 注解

    1. 先创建 realm 对象,UserRealm
    2. 创建 DefaultWebSecurityManager 对象
    3. 创建 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等)

  • 官网:https://swagger.io/

    • 如何才能运行?
  1. 导入两个依赖 springfox-swagger2 和 springfox-swagger-ui

    现在只需要一个整合的依赖springfox-boot-starter
  2. 创建一个config类
  3. 第二步在config类上使用@EnableOpenApi注解 第三步在启动类上使用@EnableWebMvc注解

    一定记住启动类加入@EnableWebMvc注解,不然会空指针异常
  4. 类上使用@Configuration注解,并使用@EnableSwagger2开启
  5. 出现问题就需要降版本,版本问题

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 即一个管理注册中心的容器
    • 它提供了三大核心能力:面向接口的远程方法调用,智能容错和负载均衡,以及服务自动注册和发现。
  1. 导入Dubbo和zookeeper的Maven依赖

  2. 配置文件配置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();
      }
      }
  3. 运行SpringApplication

    • 运行zookeeper服务
    • 运行dubbo-admin服务(监控中心)
      1. 访问 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的学习的更多相关文章

  1. Springboot 框架学习

    Springboot 框架学习 前言 Spring Boot是Spring 官方的顶级项目之一,她的其他小伙伴还有Spring Cloud.Spring Framework.Spring Data等等 ...

  2. SpringBoot+Shiro学习(七):Filter过滤器管理

    SpringBoot+Shiro学习(七):Filter过滤器管理 Hiwayz 关注  0.5 2018.09.06 19:09* 字数 1070 阅读 5922评论 1喜欢 20 先从我们写的一个 ...

  3. MacOS下SpringBoot基础学习

    学于黑马和传智播客联合做的教学项目 感谢 黑马官网 传智播客官网 微信搜索"艺术行者",关注并回复关键词"springboot"获取视频和教程资料! b站在线视 ...

  4. springboot入门学习-helloworld实例

    今天学习了springboot,发现使用springboot创建项目确实非常方便,创建第一个springboot项目之前先看一下下面两个问题. 一.什么是springboot? Spring Boot ...

  5. springBoot AOP学习(一)

    AOP学习(一) 1.简介 AOp:面向切面编程,相对于OOP面向对象编程. Spring的AOP的存在目的是为了解耦.AOP可以让一切类共享相同的行为.在OOP中只能通过继承类或者实现接口,使代码的 ...

  6. SpringBoot入门学习记录(一)

    最近,SpringBoot.SpringCloud.Dubbo等框架非常流行,作为Coder里的一名小学生,借着改革开放的东风,自然也是需要学习学习的,于是将学习经历记录于此,以备日后查看. 官网:h ...

  7. SpringBoot入门学习(一)

    Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程.该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置.用我 ...

  8. springboot + sharding-jdbc 学习

    官网地址:http://shardingsphere.io/document/current/cn/overview/ sharding-jdbc事务:https://blog.csdn.net/ya ...

  9. java Spring-Boot框架学习视频-百度云盘

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明.本文链接:https://blog.csdn.net/lk142500/article/deta ...

  10. springboot之学习搭建

    什么是**SpringBoot?** Spring Boot 是由 Pivotal 团队提供的全新框架,其设计目的是用来简化新 Spring 应用的初始搭建以及开发过程.该框架使用了特定的方式来进行配 ...

随机推荐

  1. postgresql 查询表结构

    sql查询 SELECT A.attnum, ( SELECT description FROM pg_catalog.pg_description WHERE objoid = A.attrelid ...

  2. 如果在安装32位Oracle客户端组件的情况下64位模式运行, 将出现此问题.

    场景重现 在一台Windows 7 32-bit电脑上 安装了Oracle 11gR2 32-bit的客户端 用 VS2010 写的一个基于数据库驱动的项目 操作Oracle数据库都挺正常的 后来.. ...

  3. Nodejs与管道和信号

    Nodejs与管道 Linux的其中一个设计哲学就是小而精,一个程序只做一件事情,然后通过管道将多个程序连接起来完成复杂的任务. 比如如下的命令: ps -ef | grep node cat aaa ...

  4. 基于Spring Boot的HTTP请求签名验证实现解析

    概述 在分布式系统交互中,API接口的安全性至关重要.本文将深入解析基于Spring Boot实现的HTTP请求签名验证机制,该方案支持GET/POST等多种请求方式,提供时效性验证和数据完整性保障. ...

  5. 如何开发 MCP 服务?保姆级教程!

    最近这段时间有个 AI 相关的概念特别火,叫 MCP,全称模型上下文协议(Model Context Protocol).这是由 Anthropic 推出的一项开放标准,目标是为大型语言模型和 AI ...

  6. 【深度解析】SkyWalking 10.2.0版本安全优化与性能提升实战指南

    前言 Apache SkyWalking 作为云原生可观测性领域的佼佼者,在微服务架构监控中扮演着至关重要的角色.然而,官方版本在安全性.镜像体积和功能扩展方面仍有优化空间.本文将分享一套完整的 Sk ...

  7. [转自洛谷]洛谷KateX公式大全【LateX】

    前言 由于在洛谷,有很多人对于\(\KaTeX\)和\(\LaTeX\)之间的关系并不清楚,导致很多人去搜\(\LaTeX\)的资料,然后发现有许多指令无法在洛谷运行. 但是事实上,\(\KaTeX\ ...

  8. python3安装xlutils模块

    下载: https://www.cnpython.com/pypi/xlutils/dl-xlutils-2.0.0-py2.py3-none-any.whl#google_vignette 安装: ...

  9. 在 Spring Boot 2 中集成 JCasbin 并实现 ClassPath 模型文件加载

    在 Spring Boot 2 中集成 JCasbin 并实现 ClassPath 模型文件加载 概述 在现代Web应用开发中,权限管理和认证是不可或缺的一部分.JCasbin 是一个强大的.高效的开 ...

  10. 企业级分布式MCP方案

    飞书原文档链接地址:https://ik3te1knhq.feishu.cn/wiki/D8kSwC9tFi61CMkRdd8cMxNTnpg 企业级分布式 MCP 方案 背景:现阶段 MCP Cli ...