1.微服务相关概念
1.1 什么是微服务?
微服务的架构理念,是将我们原本庞大的业务细化为一个一个小的业务单元,其中每个小型服务都运行在自己的进程中,并经常采用HTTP资源API这样轻量的机制来相互通信。这些服务围绕业务功能进行构建,并能通过全自动的部署机制来进行独立部署。这些微服务可以使用不同的语言来编写,并且可以使用不同的数据存储技术。每一个微服务都有自己的业务逻辑和适配器。一些微服务还会发布API给其它微服务和应用客户端使用,运行时,每一个实例可能是一个云VM或者是Docker容器,他们集合到一起对外提供一个整体大型应用的服务
1.2 微服务和传统服务相比,有什么好处呢?
- 易于开发和维护 (基于 Springboot 配置少 开发框)
- 启动较快
- 局部修改容易部署 (使用docker容器打包镜像 非常封边)
- 技术栈不受限 (不同的服务间比较独立)
- 按需伸缩 (来业务了就加服务,业务部挣钱了就砍服务)
- DevOps (全自动、持续集成的部署理念 -> docker jenkens maven rancher)
1.3 什么是restful风格?
- restful是软件API接口的一种设计风格,现在前后台分离、以及前端的各种移动设备的流行使得前后端分离架构更加的流行,
前台和后台的交互更是变得愈加重要, 而restful风格就是该对如何进行web接口的设计进行了设计,让我们的Web接口更加统一和规范。
具体来说:- 1)每一个URI代表一种资源;
访问用户 /user
访问日志 /log - (2)客户端通过四个HTTP动词,对服务器端资源进行操作,实现"表现层状态转化"。
通过请求的 method 代表 这次请求要做什么 常用的 GET 请求获取 POST 添加 PUT 修改 DELETE 删除 - (3)需要单个主键类的,如获取ID为1的用户 都是使用路径传参的格式传递ID
查询 http://localhost:8080/user/1 method=GET
删除 http://localhost:8080/user/1 method=DELETE
- 1)每一个URI代表一种资源;
1.4 SpringBoot、SpringCloud及微服务三者间的区别和联系
SpringBoot 是一个脚手架项目,主要是用特有的方式来快速的配置和启动基于Spring的项目,让我们开发基于Spring的企业级应用变得更加简单。
微服务呢上面有说 ,是一种架构理念。
只要是架构就得有人来实现,而SpringCloud提供了大量的组件实现了一站式的微服务解决方案。
而SpringCloud开发的过程当中是基于SpringBoot开发的。
2.SpringBoot知识点汇总
2.1 SpringBoot 是什么?为什么我们选择使 SpringBoot 开发?(必会)
- Spring Boot 被称为搭建程序的脚手架。其最主要作用就是帮我们快速的构建庞大的 spring 项目,并且尽可能的减少一切 xml 配置,做到开箱即用,迅速上手,让我们关注与业务而非配置。
- 传统的 Java 语言开发一直被人认为是臃肿和麻烦的,主要原因是:复杂的配置和一个混乱的的依赖管理。而 Spring Boot 简化了基于 Spring 的应用开发,只需要“run”就能创建一个独立的、生产级别的 Spring 应用。Spring Boot 为Spring 平台及第三方库提供开箱即用的设置(提供默认设置,存放默认配置的包就是启动器 starter),这样我们就可以简单的开始。多数 Spring Boot 应用只需要很少的 Spring 配置。
2.2 SpringBoot 常用的 starter 有哪些
- spring-boot-starter-web (嵌入tomcat和web开发需要servlet与jsp支持)
- spring-boot-starter-data-jpa (数据库支持)
- spring-boot-starter-data-Redis (Redis 数据库支持)
- spring-boot-starter-data-solr (solr 搜索应用框架支持)
- mybatis-spring-boot-starter (第三方的 mybatis 集成 starter)
2.3 SpringBoot 自动配置的原理
在spring程序main方法中 添加@SpringBootApplication或者@EnableAutoConfiguration 会自动去maven中读取每个starter中的spring.factories文件 该文件里配置了所有需要被创建spring容器中的bean
2.4 如何重新加载Spring Boot上的更改,而无需重新启动服务器?
这可以使用DEV工具来实现。通过这种依赖关系,您可以节省任何更改,嵌入式tomcat将重新启动。
Spring Boot有一个开发工具(DevTools)模块,它有助于提高开发人员的生产力。Java开发人员面临的一个主要挑战是将文件更改自动部署到服务器并自动重启服务器。
开发人员可以重新加载Spring Boot上的更改,而无需重新启动服务器。这将消除每次手动部署更改的需要。Spring Boot在发布它的第一个版本时没有这个功能。
这是开发人员最需要的功能。DevTools模块完全满足开发人员的需求。该模块将在生产环境中被禁用。它还提供H2数据库控制台以更好地测试应用程序。
org.springframework.boot
spring-boot-devtools
2.5 什么是 Spring Data?
SpringData 是一个用于简化数据库访问,并支持云服务的开源框架。主要目标是使得数据库的访问变得方便快捷,并支持 map-reduce 框架和云计算机数据服务。它支持基于关系型数据库的数据服务,如 OracleRAC等。对于拥有海量数据的项目,可以用 SpringData 来简化项目的开发,就如Spring Framework 对 JDBC,ORM 的支持一样,SpringData 会让数据访问变得更加方便。
2.6 SpringBoot 的核心配置文有哪几个?它们的区别是什么?(了解)
- SpringBoot 的核心配置文件是 application 和 bootstrap 配置文件。
- application 配置文件这个容易理解,主要用于 Spring boot 项目的自动化配置。
- bootstrap 配置文件有以下几个应用场景。
使用 SpringCloud Config 配置中心时 SpringBoot,这时需要在 bootstrap配置文件中添加连接到配置中心的配置属性来加载外部配置中心的配置信息;一些固定的不能被覆盖的属性;一些加密/解密的场景;
2.7 运行 SpringBoot 有哪几种方式?
- 打包用命令或者放到容器中运行
- 用 Maven/ Gradle 插件运行
- 直接执行 main 方法运行
2.8 如何在 SpringBoot 启动的时候运行一些特定的代
码?(了解)
- 可以实现接口 ApplicationRunner 或者CommandLineRunner,这两个接口实现方式一样,它们都只提供了一个 run 方法。具体实现如下:
- 第一种方法实现 ApplicationRunner 接口
- 第二种方法实现 CommandLineRunner 接口
2.9 SpringBoot 有哪几种读取配置的方式?
Spring Boot 获 取 文 件 总 的 来 说 有 三 种 方 式 , 分 别 是 @Value 注 解 ,
- @ConfigurationProperties 注解和 Environment 接口。这三种注解可以配合着
- @PropertySource 来使用,@PropertySource 主要是用来指定具体的配置文
件。- encoding():指定编码,因为 properties 文件的编码默认是 ios8859-1,
读取出来是乱码。 - factory():自定义解析文件类型,因为该注解默认只会加载 properties 文件,如果想要指定 yml 等其他格式的文件需要自定义实现
- encoding():指定编码,因为 properties 文件的编码默认是 ios8859-1,
2.10 SpringBoot 支持哪些日志框架?推荐和默认的日志框架是哪个?(必会)
Spring Boot 在所有内部日志中使用 Commons Logging,但是默认配置也提供了对常用日志的支持,如:Java Util Logging,Log4J, Log4J2 和Logback。每种 Logger 都可以通过配置使用控制台或者文件输出日志内容。
默认日志 Logback
SLF4J——Simple Logging Facade For Java,它是一个针对于各类Java 日志框架的统一 Facade 抽象。Java 日志框架众多——常用的有java.util.logging, log4j, logback,commons-logging, Spring 框架使用的是Jakarta Commons Logging API (JCL)。而 SLF4J 定义了统一的日志抽象接口,而真正的日志实现则是在运行时决定的——它提供了各类日志框架的binding。
Logback 是 log4j 框架的作者开发的新一代日志框架,它效率更高、能够适应诸多的运行环境,同时天然支持 SLF4J。
默认情况下,Spring Boot 会用 Logback 来记录日志,并用 INFO 级别输出到控制台。在运行应用程序和其他例子时,你应该已经看到很多 INFO 级别的日志了。