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. 搭建自己的OCR服务,第一步:选择合适的开源OCR项目

    一.OCR是什么? 光学字符识别(Optical Character Recognition, OCR)是指对文本资料的图像文件进行分析识别处理,获取文字及版面信息的过程. 亦即将图像中的文字进行识别 ...

  2. Ansible忽略任务失败

    在默认情况下,任务失败时会中止剧本任务,不过可以通过忽略失败的任务来覆盖此类行为.在可能出错且不影响全局的段中使用ignore_errors关键词来达到目的. 环境: 受控主机清单文件: [dev] ...

  3. 裸金属架构之服务器安装VMWare ESXI虚拟化平台详细流程

    目录1. 裸金属架构(Vcent)2. Vcent安装流程2.1 远程控制端(个人电脑)安装VMware-viclien2.2 服务器部署安装VMWare ESXI2.3 VMware-viclien ...

  4. Docker镜像相关-查看镜像信息

    主要涉及Docker镜像的ls.tag和inspect子命令. 使用images命令列出镜像 使用docker images或docker image ls命令可以列出本地主机上已有镜像的基本信息,字 ...

  5. Redis 原理 - List

    List 数据结构 Redis 3.2 前,使用 压缩列表zipList 或 双向链表linkedList 当同时满足下面两个条件时,使用zipList存储数据 list保存的每个元素长度小于64字节 ...

  6. apisix~key-auth多消费的使用

    在 APISIX 中使用 key-auth 插件实现基于密钥的认证,以下是详细的配置步骤,包括如何保存密钥和证书,以及如何将这些信息分配给客户端 A 和 B. 场景说明 服务 C 是后端服务,需要通过 ...

  7. CoreOS 重启策略

    对于已经启动了的 CoreOS 集群,可以通过编辑/etc/coreos/update.conf文件来修改重启策略. 重启策略有以下4种: best-effort(默认):如果 etcd 运行正常则相 ...

  8. docker发布简单python服务

    进入机器创建一个目录mkdir dockerbuild1.编写简单flask代码vi flaskapp.pyfrom flask import Flaskimport os app = Flask(_ ...

  9. PyInstaller 常用用法

    PyInstaller 常用用法 PyInstaller 是一个跨平台的 Python 应用打包工具,支持 Windows/Linux/MacOS 三大主流平台,能够把 Python 脚本及其所在的 ...

  10. nginx代理静态页面添加二级目录

    location /wash { # root html; alias /home/cxq/wash-html/dist; index index.html index.htm; try_files ...