首页 > 其他分享 >SpringBoot的学习

SpringBoot的学习

时间:2022-12-21 17:44:07浏览次数:67  
标签:SpringBoot 配置文件 spring 配置 学习 yaml 注解 name

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>

image-20220331185243304

创建一个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,配置文件,spring,配置,学习,yaml,注解,name
From: https://www.cnblogs.com/maomao777/p/16250080.html

相关文章

  • 无监督学习
    邱锡鹏NNDL学习笔记  ......
  • 西蒙学习法
     “西蒙学习法”是指诺贝尔经济学奖获得者西蒙教授提出的一个理论:“对于一个有一定基础的人来说,只要真正肯下功夫,在6个月内就可以掌握任何一门学问。”西蒙教授立论所......
  • PyTorch 深度学习实践第二讲(线性模型)
    写在前面:B站刘二大人 ,传送门 ​​PyTorch深度学习实践——线性模型​​​​学习步骤准备数据集模型的选择和设计训练的过程(确定权重)推理和测试工作(infering) Traininglo......
  • java 实现文件夹上传(springBoot 框架)
    有时我们后台管理等服务可能会有这样一个简单需求,就是根据文件夹将整个文件夹下的所有资源都上传到我们的服务器上,本人也是搜索了大量资料,最终以最简单便捷的方式实现该功......
  • 正点原子STM32-串口协议学习笔记
    bit15bit14bit13~0接收完成标志接收到0x0d接收到的有效字节数过程:接收abcd然后/n最后立结束标志位为1对数组USART2_RX_BUF[]处理时,发现数组不......
  • Python学习笔记--文件的相关操作
    文件的读取操作读操作实现:read()--读完read(10)--读取10个字节readline()--将所有行并到一行输出readlines()--一次读取一行文件的关闭:实现:上面的这种用法,使用完成......
  • 【源码透视】SpringBoot的SPI机制
    一、从java类加载机制说起java中的类加载器负载加载来自文件系统、网络或者其他来源的类文件。jvm的类加载器默认使用的是双亲委派模式。三种默认的类加载器BootstrapCla......
  • C语言学习初识day1
    全局变量,局部变量:      放在大括号里的变量就是局部变量;全局变量生命周期是整个程序。当局部变量和全局变量辆重名时,局部变量优先。常量,变量,常变量:C语言中的常量分......
  • 【源码透视】SpringBoot的SPI机制
    一、从java类加载机制说起java中的类加载器负载加载来自文件系统、网络或者其他来源的类文件。jvm的类加载器默认使用的是双亲委派模式。三种默认的类加载器BootstrapCl......
  • 机器学习——植物叶片病害识别
    机器学习——植物叶片病害识别一、选题背景随着现代科技的发展,人们对于人工智能领域的研究越发的深入。机器学习作为人工智能和识别领域研究的重要课题非常值得我们......