1.spring boot介绍

1.1spring boot概述

1.微服务概述

微服务:是一种软件架构风格,它是以专注单一责任于功能的小型功能区块为基础.利用模块化的方式的组合出复杂的大型应用程序.各个功能区块使用与语言无关的API集相互通信.

2014年,Martin Fowler 与 James Lewis 共同提出了微服务的概念,定义了微服务是以开发一组小型服务的方式来开发一个独立的应用系统的。

其中每个小型服务都运行在自己的进程中,并经常采用HTTP资源API这样轻量的机制来相互通信。

这些服务围绕业务功能进行构建,并能通过全自动的部署机制来进行独立部署。

这些微服务可以使用不同的语言来编写,并且可以使用不同的数据存储技术。对这些微服务我们仅做最低限度的集中管理。

2.单体应用

(1)单体应用:一个单块应用系统是以一个单个单元的方式来构建的。

企业应用系统经常包含三个主要部分:客户端用户界面、数据库和服务端应用系统,这里的服务端应用系统就是一个单体的应用,系统中任意逻辑发生变化都会导致重新构建部署一个新版本的服务端应用系统。

针对单体应用,当访问量变大时,通常采用负载均衡,横向扩展的方式将多个单体应用部署到多个服务器上访问

(2)单体应用缺点:

软件变更受到了很大的限制,应用系统的一个很小的部分的一处变更,也需要将整个单块应用系统进行重新构建和部署

不能根据用户需求部署应用系统中的功能模块,只能扩展部署整个应用系统。

3.微服务应用搭建

要搭建一个微服务,运维和部署都变得非常复杂,spring提供了一套解决方案:

springBoot:快速构建单个服务;
springcloud:是一系列有序框架的集合,其主要的设施有,服务发现与注册,配置中心,消息总线,负载均衡,断路器,数据监控等,通过Spring Boot的方式,可以实现一键启动,和部署。

自我理解:微服务就是把所有的model都单独的都做成单独的功能,减少服务器访问压力

1.2Spring boot 简介

Spring-Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。个人理解来说Spring-Boot其实不是什么新的框架,它默认配置了很多框架的使用方式,就像maven整合了所有的jar包,Spring-Boot整合了其他相关联框架。

1.3spring boot的优势

1.快速构建项目

2.对主流开发框架的无配置集成

3.项目可独立性质,无须外部依赖servlet容器.

4.极大的提高了开发,部署效率

1.4spring boot 的核心功能介绍

1.独立运行spring项目

Spring Boot 可以以jar包形式独立运行,运行一个Spring Boot项目只需要通过java -jar xx.jar来运行。

2、内嵌servlet容器
  Spring Boot可以选择内嵌Tomcat、jetty或者Undertow,这样我们无须以war包形式部署项目。

3、提供starter简化Maven配置

spring提供了一系列的start pom来简化Maven的依赖加载,例如,当你使用了spring-boot-starter-web,会自动加入springmvc项目开发所需的依赖包。

4、自动装配Spring
  Spring Boot会根据在类路径中的jar包,类、为jar包里面的类自动配置Bean,这样会极大地减少我们要使用的配置。


2.spingBoot入门程序

2.1创建springBoot项目可能出现的问题

错误信息如下:

解决办法:

第一步:

打开idea最上角file选项的new->project…

第二步:

点击spring initalizr 选择Server URL,把值设置为:http://start.springboot.io/

2.2-Spring Initializer快速创建Spring Boot项目(jar)

2.创建完成

3.加入web场景启动器依赖包到pom.xml文件

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId>
</dependency>

4.创建controller

5..测试 启动springboot项目

6.访问测试即可

补充:所有的文件必须在appliction下或者同级目录否则会扫描不到

在启动appliction时默认启动servlet

mavne项目如何转为springboot项目:

答在pom中加入对应依赖

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><!--springboot的版本就是因为当前项目继承了spring-boot-starter-parent,就成为了springboot项目--><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.6.8</version><relativePath/> <!-- lookup parent from repository --></parent><!-- Generated by https://start.springboot.io --><!-- 优质的 spring/boot/data/security/cloud 框架中文文档尽在 => https://springdoc.cn --><groupId>com.springboot</groupId><artifactId>_23-7-7springboot_demo01</artifactId><version>0.0.1-SNAPSHOT</version><name>_23-7-7springboot_demo01</name><description>_23-7-7springboot_demo01</description><properties><java.version>11</java.version></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build></project>

2.在包下加入

文件内容如下:

@SpringBootApplication
public class Application {public static void main(String[] args) {SpringApplication.run(Application.class, args);}}

2.2项目打包运行

1.先打包

2.运行包 java -jar 包名

##就可以运行jar包 javaw -jar 包名

##就可以后台启动

3.跑起来后访问测试

​​​


​​​​3.1Spring Initializer快速创建Spring Boot项目(war)

1.创建

效果:

项目创建好了,可以修改一下版本号:

项目会自动加入web模块场景启动器依赖:

Spring Boot将所有的功能场景都抽取出来,做成一个个的starters(启动器),只需要在项目里面引入这些starter ,相关场景的所有依赖都会导入进来。要用什么功能就导入什么场景的启动器 。

Spring Boot将所有的功能场景都抽取出来,做成一个个的starters(启动器),只需要在项目里面引入这些starter ,相关场景的所有依赖都会导入进来。要用什么功能就导入什么场景的启动器 。

2.项目结构解析

1.java文件夹目录结构中自动创建好指定包和Spring Boot启动主程SpringbootApplication.class;

2、resources文件夹中目录结构

static:保存所有的静态资源; js css images;

templates:保存所有的模板页面,(Spring Boot默认jar包使用嵌入式的Tomcat,默认不支持JSP页面),可以使用模板引擎(freemarker、thymeleaf);

application.properties:Spring Boot应用的配置文件;可以修改一些默认设置;

3.查看springboot的主程序

@SpringBootApplication注解说明:这个类是SpringBoot的主配置类,SpringBoot 就应该运行这个类的main方法来启动SpringBoot应用;并将主配置类(@SpringBootApplication标注的类)的所在包及下面所有子包里面的所有组件扫描到Spring容器,就不需要再写注解扫描器了

也就类似于他代替了扫描器

4.编写Controller代码

5.运行主程序进行测试

访问hello:

6.注意:如果使用外部tomcat部署当前war类型的springboot项目要在项目中加入以下类:  建议使用springboot内置tomcat

外部tomcat启动后,springboot项目会自动调用该类的 configure方法,并加载主程序,加载springboot初始化配置;

理解:相当于tomcat调用他,进入访问springbootapplication.java文件,从而执行服务器


4.1.配置文件的作用及规范

Spring Boot使用一个全局的配置文件,配置文件名是固定的,配置文件被自动读取;

默认使用以下两种格式:

•application.properties

•application.yml或者application.yaml

配置文件的作用:修改SpringBoot自动配置的默认值;Spring Boot启动时会根据配置文件自动注册相关的应用组件;

优先级:yml文件>properties

4.2yaml配置文件

yaml:以数据为中心,比json.xml等更加适合做配置文件:

4.2.1基本语法

– 使用缩进表示层级关系

– 缩进的空格数目不重要,只要相同层级的元素左侧对齐即可

- 键值对中间必须要有空格k:(空格)v


4.2.2.值的写法

yaml支持的三种数据结构:

1.字面量:

  1. 普通的值(数字,字符串,布尔)

server:

port: 8081

注意:字符串默认不用加上单引号或者双引号;

双引号:特殊符号表示转义符本身;

name: "zhangsan \n lisi":输出;zhangsan 换行 lisi

单引号;特殊字符就表示字符本身;

name: ‘zhangsan \n lisi’:输出;zhangsan \n lisi

2.对象、Map(属性和值)(键值对)

person:

name: zhangsan

age: 12

另一种行内写法:

person: {name: zhangsan,age: 12}

3.集合(List,Set)

hobbies:

- singing

- dancing

- running

用-(空格)值表示集合中的一个元素

另一种行内写法:

hobbies: [singing,dancing,running]


3.2.3.配置文件值的注入

(1)构建bean对象

//只有spring容器中的对象才能自动进行数据绑定
@Component
// ConfigurationProperties将本类中的所有属性和配置文件中相关的配置进行绑定;
// prefix指定要绑定的配置文件中的属性前缀;
@ConfigurationProperties(prefix = "person")
public class Person {private String pname;private int age;private boolean success;private Date birth;private Car car;private Map<String,Object> maps;
private List<Object> lists;
get/set …
}public class Car {private int cid;private String cname;private double cprice;
}
get/set …

(2)构建配置文件

person:pname: zhangsanage: 12birth: 2020/12/12success: truecar:cname: 奔驰cprice: 200.0lists: [唱歌,跳舞]maps: {key1: v1,key2: v2}

(3)执行单元测试查看person对象的值

@SpringBootTestclass SpringbootApplicationTests {@Autowiredprivate Person person;@Testvoid contextLoads() {System.out.println(person);}}

(4)引入配置文件处理器插件


4.Spring Boot配置文件(properties)

4.1.properties配置文件

4.1.1.properties语法

以KEY=VALue键值对的方式设置值

  1. 字面量:普通的值(数字,字符串,布尔)

name=张三

2.对象、Map(属性和值)(键值对)

#指定访问当前项目的名称server.servlet.context-path=/demo02person.name=张三person.age=12maps.key1=value1maps.key2=value2

3.集合(List,Set)

hobbies=singing,dancing,running

4.1.2.配置文件值的注入

1.构建bean对象

//只有spring容器中的对象才能自动进行数据绑定@Component//将本类中的所有属性和配置文件中相关的配置进行绑定;// prefix指定要绑定的配置文件中的属性前缀;@ConfigurationProperties(prefix = "person")public class Person {private String pname;private int age;private boolean success;private Date birth;private Car car;private Map<String,Object> maps;private List<Object> lists;}

2.构建配置文件

person.pname=张三person.age=12person.birth=2019/12/12person.success=trueperson.car.cname=宝马person.car.cprice=100.0person.lists=唱歌,跳舞,跑步person.maps.k1=value1person.maps.k2=value2

3.执行单元测试查看person对象的值

@SpringBootTestclass SpringbootApplicationTests {@Autowiredprivate Person person;@Testvoid contextLoads() {System.out.println(person);}}

注意:如果输出有中文乱码问题修改idea编码格式后,删除properties配置文件重新创建


5..多环境支持

1.说明

们在实际开发的过程中,由于涉及多个环境,需要配置多套不同的配置。

就拿数据库来说,分为测试环境配置和生成环境配置,他们的链接信息肯定是不一样的。

那么,我们在实际的工作中,是如何来确保在对应环境下读取对应的配置信息呢?

这时候就用到了多环境配置

2.指定环境的配置方式

Profile是Spring对不同环境提供不同配置功能的支持,可以通过激活、指定参数等方式快速切换环境;

1、多文件多环境形式:

格式:application-{profile}.properties/yml

例如:可以在项目中创建如下主配置文件:

application-dev.properties、

application-test.properties、

application-prod.properties、

application.properties,

默认使用application.properties,可以通过配置spring.profiles.active=profile指定使用某个环境的配置文件。

2、yml支持单文件多环境形式:

例如:可以在项目中创建如下主配置文件:

application-dev.yml、

application-test.yml、

application-prod.yml、

application.yml,

默认使用application.yml,可以通过以下配置指定使用某个环境的配置文件。

spring:

profiles:

active: test

3、激活方式:

在配置文件中指定 spring.profiles.active=dev

命令行  java -jar springboot-0.0.1-SNAPSHOT.jar --spring.profiles.active=dev

3.案例

项目中设置多个开发环境的配置文件:

设置使用指定的配置文件:

spring:profiles:active: test

运行测试:

运行后先加载application.properties配置文件,再加载application-test.properties配置文件,如果两个文件中内容重复,后加载的配置文件覆盖先加载的配置文件;


6.springboot关于静态资源的处理

springboot启动时会根据配置文件自动配置相应场景的组件xxxAutoConfiguration,web项目启动时会初始化WebMvcAutoConfiguration组件处理请求相关的操作,其中有默认处理静态资源的方法:

@Override
protected void addResourceHandlers(ResourceHandlerRegistry registry) {super.addResourceHandlers(registry);if (!this.resourceProperties.isAddMappings()) {logger.debug("Default resource handling disabled");return;}ServletContext servletContext = getServletContext();addResourceHandler(registry, "/webjars/**","classpath:/META-INF/resources/webjars/");addResourceHandler(registry,
this.mvcProperties.getStaticPathPattern(), (registration) -> {registration.addResourceLocations(
this.resourceProperties.getStaticLocations());if (servletContext != null) {registration.addResourceLocations(
new ServletContextResource(servletContext, SERVLET_LOCATION));}});
}

注:this.resourceProperties.getStaticLocations()获取初始化指定放在静态资源的默认位置

6.2.静态资源存放的位置

由于我们在springboot项目中加入了spring-boot-starter-web,也就是web场景启动器;springboot项目启动后,会自动加载web场景启动器,web场景启动器会进行自动化初始配置,设置静态资源的默认存放位置为:

{"classpath:/META-INF/resources/", "classpath:/resources/", "classpath:/static/", "classpath:/public/"}

从该方法中可以发现:

1、默认情况下:

(1)匹配/webjars/** 的请求,都去 classpath:/META-INF/resources/webjars/ 找资源;

(2)匹配 "/**" 的请求,都去(静态资源的文件夹)找映射,静态资源文件夹路径如下:

"classpath:/META‐INF/resources/"

"classpath:/resources/"

"classpath:/static/"

"classpath:/public/"

"/":当前项目的根路径

2、自定义配置静态资源路径:

spring.web.resources.static-locations=自定义路径

(1)设置自定义静态资源路径,默认静态资源位置不生效。

(2)自定义:此时寻找静态资源就会从/pages 去寻找

spring.web.resources.static-locations=classpath:/pages/

注意:自定义静态资源路径后,默认静态资源路径失效!

6.3.案例

spring:web:resources:static-locations: ['classpath:/myFile/','classpath:/static/']

SpringBoot-23.7.7学习相关推荐

  1. 设计模式——23种设计模式学习总结

    声明:本文为个人笔记,用于学习研究使用非商用,内容为个人研究及综合整理所得,若有违规,请联系,违规必改. 系列文章目录 简单工厂模式 策略模式模式 装饰模式(进行中) 代理模式(进行中) 工厂方法模式 ...

  2. (23) 基于深度学习框架的出租车OD需求预测应用对比

    交通预见未来(23): 基于深度学习框架的出租车OD需求预测应用对比 文章信息 前面看了 OD需求预测的文章,有一些相似之处,拿出来放到一起对比下. 一.<Contextualized Spat ...

  3. SpringBoot整合第三方技术学习笔记(自用)

    SpringBoot整合第三方技术学习笔记 搬运黑马视频配套笔记 KF-4.数据层解决方案 KF-4-1.SQL 回忆一下之前做SSMP整合的时候数据层解决方案涉及到了哪些技术?MySQL数据库与My ...

  4. [AI助力] 2023.2.23 考研英语学习 2010 英语二翻译

    [AI助力] 2023.2.23 考研英语学习 2010 英语二翻译 文章目录 [AI助力] 2023.2.23 考研英语学习 2010 英语二翻译 2010年英语二翻译真题 自己写的 积累

  5. springboot毕设项目书籍学习平台yqzh1(java+VUE+Mybatis+Maven+Mysql)

    springboot毕设项目书籍学习平台yqzh1(java+VUE+Mybatis+Maven+Mysql) 项目运行 环境配置: Jdk1.8 + Tomcat8.5 + Mysql + HBui ...

  6. springboot毕设项目java学习平台m55rv(java+VUE+Mybatis+Maven+Mysql)

    springboot毕设项目java学习平台m55rv(java+VUE+Mybatis+Maven+Mysql) 项目运行 环境配置: Jdk1.8 + Tomcat8.5 + Mysql + HB ...

  7. 2022年最新最全的Java零基础入门,零基础入门springboot,MySQL的学习

    今天就来开始带领大家零基础入门Java开发 写在前面 为什么学习Java Java用途很广泛,如下图所示,Java可以做很多工作 JAVA语言发展史 2019年3月,JDK12版本发布. 2019年9 ...

  8. 23种设计模式学习记录之代理模式

    想说的话: 在大学的时候曾经学过这23种设计模式,但是那时没啥编程经验,糊里糊涂过了一遍,没多久就忘记了,工作之后将精力主要集中在学习新技术上,比如springboot,cloud,docker,vu ...

  9. Java+SpringBoot+vue英语单词学习网站

    .计算机英语单词学习系统是通过对计算机英语单词学习管理核心要素的闭环整合,实现了工作流.信息流.资源流和办公自动化的整合管理,提供了一个科学.开放.先进的英语单词信息化学习平台,实现了单词信息的语种管 ...

  10. springboot+mysql古诗文学习系统-计算机毕业设计源码91747

    摘  要 随着科学技术的飞速发展,社会的方方面面.各行各业都在努力与现代的先进技术接轨,通过科技手段来提高自身的优势,古诗文学习系统当然也不能排除在外.古诗文学习系统是以实际运用为开发背景,运用软件工 ...

最新文章

  1. 数据算法——Spark的TopN实现
  2. oracle 备份与恢复学习总结
  3. 电脑不能访问服务器指定端口6,windows server2008 无法访问本机及其他服务器的所有端口...
  4. Linux入门——文件管理
  5. Copy修饰的NSArray
  6. python 三维数据绘图_Python中三维坐标空间绘制的实现
  7. 对“相亲节目整风”的看法
  8. COMCMS_CORE 起步篇,如何运行和部署
  9. Galaxy s4怎么安装一个预装软件的签名不一致的新版本
  10. extjs 前后端分离_为什么我不喜欢「前后端分离」(个人观点,欢迎来喷)
  11. 解决Android Studio不停的Indexing的问题
  12. oracle blob 转 varchar2,oracle varchar2与clob、blob互转
  13. 华北电力大学\华电计算机考研复试经验分享
  14. 1.javascript 自动定时刷新网页脚本
  15. 【雅思大作文考官范文】——第八篇:recycling essay(垃圾回收)
  16. 【C语言经典100例】-- 11 不死神兔问题
  17. 百度地图api根据地图缩放等级显示不同的marker点,功能二
  18. 【coppeliasim】高效传送带
  19. 华为matebooke升级鸿蒙,由华为MateBook E引发的猜测:ARM+鸿蒙OS改变笔记本的未来...
  20. (shell批量版)二进制高可用安装k8s集群v1.23.5版本,搭配containerd容器运行时

热门文章

  1. DTO(数据传输对象)
  2. 将递归函数转换为非递归形式
  3. 约2万字-Vue源码解读汇总篇(续更)
  4. python数据处理电脑配置_视频剪辑,Python跑数据,diy电脑组装怎么配置?
  5. Cocos2d-JS坐标系
  6. Opensbot 复合机器人|熵洛科技
  7. 电力系统中-输电、配电、变电、送电各代表什么意思
  8. 7、SpringBoot之实现登陆界面的中英切换
  9. 主流计算机语言_使计算机成为主流的10位计算机科学家
  10. const char*类型的实参与LPCTSTR类型的形参不兼容 MFC