Maven + Spring Boot + Spring Cloud + 微服务

文章目录

    • Maven
      • 概述
      • 提问
    • Spring Boot
      • 概述
      • 优点
      • 核心注解
      • 自动配置原理
      • 启动过程
      • Spring Boot VS Spring MVC VS Spring
      • Spring Boot VS Spring Cloud
    • 微服务
      • 概念
      • 优点
      • 缺点
      • 微服务中如何实现 session 共享
      • 提问

Maven

概述

Maven 是服务于 Java 平台的项目构建依赖管理自动化构建工具。其作用是改进项目的开发和管理。

  1. 管理 jar 文件
  2. 自动下载 jar 文件及其文档、源代码
  3. 管理 jar 文件之间的依赖
  4. 编译程序,将 .java 编译成 .class
  5. 测试代码是否正确
  6. 打包文件,形成 jar 文件或者 war 文件
  7. 部署项目

提问

  • 为什么要用 Maven 构建项目

    如果不使用 Maven ,写完代码后还需要进行编译、生成 war 包,以便部署到 Tomcat。

    在编写 Java 代码时,我们需要调用 JDK 的 API 、第三方的 API 。假如没有构建工具,那程序员就需要把 jar 包下载到本地、添加进工程、在 IDEA 中进行添加配置。这种方式过于繁琐,并且在遇到版本升级、Git 同步等时候,程序会变得非常脆弱、易产生未知错误。

    因此,有了构建工具的产生,它可以让我们专注于写代码而不需要考虑如何导 jar 包、如何升级 jar 包、以及 Git 多人协作等等问题。

    以上是在编译过程中的优势,在运行和发布的过程中,构建工具依然可以帮助我们将工程生成指定格式的文件。

    第一,Maven 是一个优秀的项目构建工具,使用 Maven 可以很方便的对项目进行分模块构建,这样的话在开发与测试打包部署时,效率会提高很多。

    第二,Maven 可以进行依赖的管理,将不同系统的依赖进行统一管理,并且可以进行依赖之间的传递与继承。

  • Maven 规约是什么

    /src/main/java/ :Java 源码。

    /src/main/resource :Java 配置文件,资源文件。

    /src/test/java/ :Java 测试代码。

    /src/test/resource :Java 测试配置文件,资源文件。

    /target :文件编译过程中生成的 .class 文件、jar、war 等等。

    pom.xml必须有,配置文件,Maven 的核心文件

    Maven 主要负责项目的自动化构建。以编译为例,Maven 要想自动完成编译,那么它必须知道 Java 的源文件保存在哪里,有了以上的约定之后,程序员就不用手动地去指定位置了,Maven 能够自动获取位置从而帮我们完成自动编译。

    遵守约定 > 配置 > 编码,即能进行配置的就不要用编码指定,能事先约定规则的就不要进行配置。

  • Maven 常用命令

    mvn eclipse:clean :清除 Project 中以前编译的东西,重新再来

    mvn eclipse:eclipse :开始编译 Maven 的 Project

    mvn clean package :清除以前的包后重新打包

    mvn archetype:create :创建 Maven 项目

    mvn compile :编译源代码

    mvn deploy :发布项目

    mvn test-compile :编译测试源代码

    mvn test :运行应用程序中的单元测试

    mvn site :生成项目相关信息的网站

    mvn clean :清除项目目录中的生成结果

    mvn package :根据项目生成的 jar/war 等

    mvn install :在本地 Repository 中安装 jar

    mvn eclipse:eclipse :生成 Eclipse 项目文件

    mvn jetty:run :启动 Jetty 服务

    mvn tomcat:run :启动 Tomcat 服务

    mvn clean package -Dmaven.test.skip=true :清除以前的包后重新打包,跳过测试类

  • Maven 优缺点

    1. 优点:简化项目依赖管理;易于上手;便于与持续集成工具整合;便于项目升级;有助于多模块项目的开发(一个项目开发好后发布到仓库,以来该模块时就可以直接从仓库中更新,而不用自己手动编译);Maven 有很多插件,便于功能扩展(生产站点、自动发布版本)。
    2. 缺点:Maven 是一个庞大的构建系统,学习难度大;Maven 采用约定大于配置的策略,一旦出错,难于调试;依赖很多时,Eclipse 会很卡,使用 IDEA 就可解决;我国网络环境不允许 Maven 访问某些仓库(Google Code、JBoss等),这个问题可以在 中增加阿里巴巴的 Maven 私服进行解决。

Spring Boot

概述

Spring Boot 是简化 Spring 应用开发的一个框架,是整个 Spring 技术栈的大整合,约定大于配置,去繁化简。

用来简化 Spring 应用的初始搭建以及开发过程,使用特定的方式来进行配置;创建独立的 Spring 引用程序 main 方法运行;嵌入的 Tomcat 无需部署 war 文件;简化 Maven 配置;自动配置 Spring 添加对应的功能 。

优点

  • 独立运行:Spring Boot 内嵌了各种 Servlet 容器(Tomcat、Jetty 等),不再需要打成 war 包部署到容器中,Spring Boot 只要打成一个可执行的 jar 包就能独立运行,所有的依赖包都在一个 jar 包内。
  • 简化配置:spring-boot-starter-web 启动器自动依赖其他组件,减少了 maven 配置。
  • 自动配置:Spring Boot 能根据当前类路径下的类、jar 包来自动配置 bean,如添加一个 spring-boot-starter-web 启动器就能拥有 web 的功能,无需其他配置。
  • 无代码生成和无 XML 配置:Spring Boot 配置过程中无代码生成,也无需 XML 配置文件就能完成所有配置工作,这一切都是借助于条件注解完成的。
  • 避免大量的 Maven 导入和各种版本冲突。
  • 应用监控:Spring Boot 提供一系列端点可以监控服务及应用,做健康检测。

核心注解

启动类上 @SpringBootApplication 是 Spring Boot 的核心注解。

主要组合包含了以下3个注解:

@SpringBootConfiguration:组合 @Configuration 注解,实现配置文件的功能。

@EnableAutoConfiguration:打开自动配置的功能,也可以关闭某个自动配置的选项(如关闭数据源自动配置功能:@SpringBootApplication(exclude={DataSourceAutoConfiguration.class})

@ComponentScan:Spring 组件扫描。

自动配置原理

  1. Spring Boot 启动会加载大量的自动配置类;
  2. 首先看程序需要的功能有没有在 Spring Boot 默认写好的自动配置类中;
  3. 再看这个自动配置类中到底配置了哪些组件,只要我们需要用到的组件存在其中,就不需要再手动配置了;
  4. 给容器中自动配置类添加组件时,会从 properties 类中获取某些属性,我们只需要在配置文件中指定这些属性的值即可。

启动过程

  1. 从类路径下的 META-INF/spring.factories 中获取 EnableAutoConfiguration 指定的值;
  2. 将这些值作为自动配置类导入容器,自动配置类就生效,进行自动配置工作;
  3. 整个 J2EE 的整体解决方案和自动配置都在 springboot-autoconfigure 的 jar 包中;
  4. 它会给容器中导入非常多的自动配置类 (xxxAutoConfiguration),就是给容器中导入这个场景需要的所有组件,并配置好这些组件;
  5. 有了自动配置类,免去了我们手动编写配置注入功能组件等的工作;

Spring Boot VS Spring MVC VS Spring

  • Spring:最重要的特征是依赖注入 DI,所有的 Spring Modules 不是依赖注入 DI 就是 IOC 控制反转,好处是开发出松耦合应用。
  • Spring MVC:提供一种分离式的方法来开发 Web 应用。通过运用像 DispatcherServlet、ModelAndView、ViewResolver 等一些简单的概念,开发 Web 应用将会变得非常简单。
  • Spring Boot:Spring 和 Spring MVC 的问题在于需要配置大量的参数。Spring Boot 通过一个自动配置和启动的项来解决这个问题。

Spring Boot VS Spring Cloud

  • Spring Boot:是一个快速开发框架,通过用 Maven 依赖的继承方式,帮助快速整合第三方常用框架,完全采用注解化(使用注解方式启动 Spring MVC ),简化 XML 配置,内置 HTTP 服务器(Tomcat,Jetty),最终以 Java应用程序进行执行。
  • Spring Cloud:是目前一套完整的微服务框架,它是一系列框架的有序集合。将目前各家公司比较成熟的服务框架组合起来,通过 Spring Boot 风格进行再封装,屏蔽掉复杂的配置和实现原理,最终给开发者留出了一套简单易懂、易部署、易维护的分布式系统开发工具包。它利用 Spring Boot 的开发便利性,简化了分布式系统基础设施的开发。
  • Spring Boot 可以离开 Spring Cloud 单独使用,而Spring Cloud 离不开 Spring Boot。

微服务

概念

微服务是一种架构模式(架构风格),提倡单一应用程序划分为一组小的服务,每个服务在其独立的进程中,服务之间相互协调、互相配合,为用户提供最终价值。

服务之间采用轻量级的通信机制互相沟通(基于 Http 的 Restful API),每个服务都围绕着具体的业务进行构建,并且能够被独立地部署到生产环境,类生产环境进行构建。可以有一个非常轻量级的集中式管理来协调这些服务,可以使用不同的语言来编写服务,也可以使用不同的数据存储。

优点

  1. 每个服务足够内聚,足够小,代码容易理解,开发简单、效率提高,能聚焦一个指定的业务功能或业务需求;
  2. 松耦合,开发阶段与部署阶段都是独立的;
  3. 能使用不同的语言开发;
  4. 允许容易且灵活的方式集成自动部署,易于和第三方集成;
  5. 仅仅是业务逻辑的代码,不会和 HTML、CSS 或其他界面组件混合;
  6. 每个微服务都有自己的存储能力,可以有自己的或者统一的数据库。

缺点

  1. 开发人员要处理分布式系统的复杂性;
  2. 多服务运维难度随服务的增加而增大,系统集成测试;
  3. 系统部署依赖、数据一致性、性能监控
  4. 服务间通信成本

微服务中如何实现 session 共享

在微服务中,一个完整的项目被拆分成多个不相同的独立的服务,各个服务独立部署在不同的服务器上,各自的 session 被从物理空间上隔离开了。

但是,我们经常需要在不同微服务之间共享 session,常见的方案就是 Spring Session + Redis 来实现 session 共享。将所有微服务的 session 统一保存在 Redis 上,当各个微服务对 session 有相关的读写操作时,都去操作 Redis 上的 session ,这样就实现了 session 共享。

Spring Session 基于 Spring 中的代理过滤器实现,使得 session 的同步操作对开发人员而言是透明的,非常简便。

提问

  • Spring Boot 是微服务框架吗

    不是,它仅仅是一个用来快速开发地框架,底层还是 SSM 。

    Spring Cloud 实现微服务开发:Spring Cloud 具备微服务开发的核心技术(RPC 远程调用技术),Spring Cloud 底层使用了 Spring Boot,Spring Boot 的 web 组件默认集成了 Spring MVC ,可以实现 HTTP + JSON 的轻量级传输,编写微服务接口,所以 Spring Cloud 依赖 Spring Boot 框架实现微服务开发。

你可能感兴趣的:(Java,maven,spring,boot,spring,cloud)