对于Spring,相信大家都非常熟悉,从出现开始,一直是企业级开发的主流。但是随着软件的发展和应用开发的不断演化,它的一些缺点也逐渐暴露了出来。下面看一下Spring的发展历程并且认识一下Spring Boot。

由来

在Spring1.x的时候,所有的配置都通过XML实现,随着项目的扩大,需要频繁地在Java和XML之间切换。

在Spring 2.x的时候,已经开始逐步替换掉XML配置。在Spring 3.x的时候,已经开始提供Java的配置方式,在Spring 4.x的时候,已经全部推荐使用Java配置的方式。随着动态语言的流行,Java的开发显得格外烦琐,主要体现在配置的复杂、开发效率低下,以及与第三方集成的繁杂等方面,这个时候Spring Boot应运而生。

Spring Boot是由Pivotal 团队提供的全新框架,其设计目的是用来简化Spring应用的初始搭建和开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。简化了基于Spring的应用开发,通过少量的代码就能创建一个独立的、 产品级别的Spring应用。Spring Boot为Spring平台及第三方库提供开箱即用的设置,减少与第三方库集成的复杂度。

Spring Boot 的核心思想就是约定大于配置,多数Spring Boot 应用只需要很少的Spring配置。采用Spring Boot可以大大简化开发模式,所有想集成的常用框架,它都有对应的组件支持。

特性

方便地创建独立的Spring应用,为基于Spring 的开发提供更快的入门体验。内置Tomcat,无须生成WAR文件。简化Maven配置。自动配置Spring,更快、更方便地与第三方应用整合,比如消息队列、缓存等在企业级开发中常用的组件。提供大型项目中的非功能特性,如指标、安全、健康检查及外部配置。开箱即用,无须代码生成,也无须XML配置,同时能够通过修改默认值来满足待定的需求。四大神器

自动配置SpringBoot的自动配置功能可基于类路径检测自动为运行中的应用配置依赖关系,不需要提供额外的XML配置。

StartersSpring Boot可提供一系列称 为POM Starters的精细依赖关系。Spring Boot熟知如何配置这些依赖关系,同时让组织能够扩展SpringBoot来配置自定义的依赖关系。

ActuatorActuator可提供运行状况检查和指标等生产就绪型功能。这些功能通过Spring Boot应用内的REST终端提供,只需要简单的配置就可以实现强大的监控和检查。

开发工具这些工具旨在缩短开发和测试周期,其中包括一个可在资源变更时触发浏览器刷新的嵌入式LiveReload 服务器。这些工具还提供了应用自动重启功能,只要类路径上的文件发生更改,该功能即可启动。

重启技术使用两种类加载器,未更改的分类(例如,来自第三方JAR的类)被加载到基础类加载器,而开发中的分类则被加载到重启类加载器。当应用重启时,重启类加载器会被丢弃,同时创建-一个新的类加载器。这种方法意味着应用重启的速度通常要比“冷启动”的速度快得多,因为基础类加载器已准备就绪且已填充完毕,从而快速实现应用的热部署,对于简单的修改这种场景能够非常有效地提高效率。

快速集成第三方的Starter

介绍

Spring Boot的Starter主要用来简化依赖,对于企业级开发中与第三方的集成,可以通过一段简单的配置来完成,这样开发人员无须再对包依赖的问题头疼。SpringBoot为我们提供了简化企业级开发的绝大多数场景的Starterpom,只需要指定需要配置的Starter,SpringBoot会自动为我们提供配置好的Bean。

原理

Spring Boot常用的Starter (启动器)如下。

Spring-boot- strterlogging:使用Spring Boot默认的日志框架Logback。Spring-boot-starter-log4j:添加Log4j的支持。Spring-boot-starter-web:支持Web应用开发,包含Tomcat和Spring mvc。Spring-boot-starter-tomcat:使用Spring Boot默认的Tomcat作为应用服务器。Spring-boot- sarerjetty:使用Jetty而不是默认的Tomcat作为应用服务器。Spring-boot- starter-test:包含常用的测试所需的依赖,如JUnit、Hamcrest、 Mockito 和Spring-test等。Spring-boot-starter-AOP:包含Spring-AOP和AspectJ来支持面向切面编程(AOP)。Spring-boot-starter-security:包含Spring-security。Spring-boot-starter-jdbc:支持使用JDBC访问数据库。Spring-boot-starter-redis:支持使用Redis.Spring-boot-starter-data-mongodb:包含Spring-data-mongodb 来支持MongoDB。Spring-boot-starter-data-jpa:包含Spring-data-jpa、 Spring-orm 和Hibernate来支持JPA。Spring- boot starter amqp:通过Spring-rabbit支持AMQP。Spring-boot-starter-actuator:添加适用于生产环境的功能,如性能指标和监测等功能。降低开发复杂度之面向切面

在软件业,AOP为Aspect Oriented Programming的缩写,意为面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术。AOP是OOP的延续,是软件开发中的一个热点,也是Spring框架中的一个重要内容,是函数式编程的一种衍生范型。利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高了程序的可重用性,同时提高了开发的效率

AOP把软件系统分为两个部分:核心关注点和横切关注点。业务处理的主要流程是核心关注点,与之关系不大的部分是横切关注点。横切关注点的一个特点是,它们经常发生在核心关注点的多处,而各处都基本相似,比如权限认证、日志、事务处理。AOP的作用在于分离系统中的各种关注点,将核心关注点和横切关注点分离开来。

AOP中的一些名词如下。

切面(Aspect):一个关注点的模块化,这个关注点可能会横切多个对象。事务管理是J2EE应用中一个关于横切关注点的很好的例子。在Spring AOP中,切面可以使用基于模式或者基于@ Aspect注解的方式来实现。连接点(Joinpoint):在程序执行过程中某个特定的点,比如某方法调用的时候或者处理异常的时候。在SpringAOP中,一个连接点总是表示-一个方法的执行。通知( Advice):在切面的某个特定的连接点上执行的动作,其中包括“around”、“before和“after”等不同类型的通知(通知的类型将在后面部分进行讨论)。许多AOP框架(包括Spring)都以拦截器作为通知模型,并维护一个以连接点为中心的拦截器链。切入点(Pointcut):匹配连接点的断言。通知和一个切入点表达式关联,并在满足这个切入点的连接点上运行(例如,当执行某个特定名称的方法时)。切入点表达式如何和连接点匹配是AOP的核心: Spring 默认使用AspectJ 切入点语法进行匹配。引入(Introduction):用来给一个类型声明额外的方法或属性(也被称为连接类型声明(inter-type declaration))。Spring允许引入新的接口(以及一个对应的实现)到任何被代理的对象。例如,可以使用引入来使一个Bean实现IsModified接口,以便简化缓存机制。目标对象(TargetObject):被一个或者多个切面所通知的对象,也被称为被通知(advised)对象。既然Spring AOP是通过运行时代理实现的,那么这个对象永远是一个被代理(proxied)对象。AOP代理(AOP Proxy):AOP框架创建的对象,用来实现切面契约(例如,通知方法执行,等等)。在Spring中,AOP代理可以是JDK动态代理或者CGLIB代理。织入(Weaving):把切面连接到其他应用程序类型或者对象上,并创建一个被通知的对象。这些可以在编译时(例如,使用AspectJ编译器)、类加载时和运行时完成。Spring和其他纯Java AOP框架一样,在运行时完成织入。AOP小结

AOP为我们提供了一种以切面方式编程的方法,在业务处理过程中,日志的记录、数据源的切换、事务的处理都可以用AOP的方式解决,而跟Spring Boot的整合,让我们开发AOP又进一步地简化,使面向对象能够更加方便地发挥所长。

并不复杂的持久化

数据的访问或者跟数据库的交互在任何应用中都是非常重要的一个环节。我们的应用中有可能使用关系型数据库,也有可能使用非关系型数据库。非关系型数据库也就是我们经常说的NoSQL (Not Only SQL)。简言之,就是说在一个应用中,可以根据业务自身的特点和需要,选择适合的数据库,除了常用的关系型数据库,使用非关系型数据库也是不错的选择。

简介

持久化,即把数据(如内存中的对象)保存到可永久保存的存储设备中(如磁盘)。持久化的主要应用是将内存中的对象存储到数据库中,或者存储到磁盘文件中。持久化是将程序数据在持久状态和瞬时状态间转换的机制。JDBC和文件I/O操作就是--种典型的持久化机制。

Spring Boot使持久化集成变成了- -项非常简单的任务,因为它具有自动配置Spring Data以访问数据库的能力。只需在工程中将Spring boot-starter- data-jpa包含进来,Boot 的自动配置引擎就能探测到工程需要数据访问功能,并且会在Spring应用上下文中创建必要的Bean。

JPA是Java Persistence API的简称,中文名是Java持久层API,是JDK 5.0注解或XML描述对象一关系表的映射关系,并将运行期的实体对象持久化到数据库中。严格来说,它是一套持久层的规范,用作为持久化的统一标准接口。

Spring Data JPA是Spring为JPA提供的一套实现,可以极大地简化JPA的写法,可以在几乎不用写实现的情况下,实现对数据的访问和操作。除CRUD外,还包括如分页、排序等一些常用的功能。

Mybatis和Hibernate都对JPA有相应的实现,使用此规范的实现,可以极大地简化开发,这也是微服务所提倡的。

事务处理

事务管理对于企业应用来说是至关重要的,即使出现异常情况,它也可以保证数据的一致性。

Spring Framework对事务管理提供了一致的抽象, 包括:

为不同的事务API 提供一致的编程模型,比如JTA(Java Transaction API)、 JDBC、Hibernate、JPA(Java Persistence API和JDO(Java Data Objects)。支持声明式事务管理,特别是基于注解的声明式事务管理,简单易用。提供比其他事务API (如JTA)更简单的编程式事务管理API。与Spring数据访问抽象的完美集成。而我们所说的事务的关键属性,也就是我们经常说的ACID包括:

原子性(atomicity) 一事务 是一个原子操作,由一系列动作组成。 事务的原子性确保动作要么全部完成,要么完全不起作用。一致性(consistency) 一旦所有事务动作完成, 事务就被提交。数据和资源就处于一种满足业务规则的一致性状态中。隔离性(isolation) 一可能有许多事务同时处理相同的数据,因此每个事务都应该与其他事务隔离开来,防止数据损坏。持久性(durability)一旦事务完成,无论发生什么系统错误,它的结果都不应该受到影响。通常情况下,事务的结果被写到持久化存储器中。

如果没有事务存在,则按照REQUIRED属性执行,该属性只对DataSource TransationManager事务管理器有效。

并发引起的事务问题

同一个应用程序或者不同应用程序中的多个事务在同一个数据集上并发执行时,可能会出现许多意外的问题。

并发事务所导致的问题可以分为以下三类。

脏读:脏读发生在一个事务读取了另一个事务改写但尚未提交的数据时。如果改写在稍后被回滚了,那么第一个事务获取的数据就是无效的。不可重复读:不可重复读发生在一个事务执行相同的查询两次或两次以上,但是每次都得到不同的数据时。通常是因为另一个并发事务在两次查询期间更新了数据。幻读:幻读与不可重复读类似。它发生在一个事务(T1) 读取了几行数据,接着另一个并发事务(T2) 插入了一些数据时。在随后的查询中,第一个事务(T1) 就会发现多了一些原本不存在的记录。以上就是小编简单整理的微服务架构中的Spring Boot解析,只是小编个人的理解,有哪里不合适的地方,还请大家多多指出,咱们共同进步!!!

喜欢文章请多多点赞评论分享,予人玫瑰,手留余香。关注小编,后续小编会再带来更丰富的微服务学习内容,咱们每天进步一点点哦~~~

boot入门思想 spring_微服务架构之SpringBoot详解,夯实底层知识,带你轻松入门开发...相关推荐

  1. 全网最全微服务架构—Spring Cloud详解,没有比这更详细的了!

    原文地址: https://blog.51cto.com/14570694/2482244 本文不是讲解如何使用Spring Cloud的教程,而是探讨Spring Cloud是什么,以及它诞生的背景 ...

  2. 微服务架构实施原理详解

    作者:风中程序猿 原文:cnblogs.com/fangfuhai 1 题记 基于微服务架构和Docker容器技术的PaaS云平台建设目标是给我们的开发人员提供一套服务快速开发.部署.运维管理.持续开 ...

  3. Java程序员进阶必读,最全微服务架构技术点详解来啦

    前言 微服务作为这个互联网时代最火的技术之一,想必大家即使没有学习过也有所了解,它提倡将单一应用程序划分成一组小的服务,服务之间相互协调.互相配合,为用户提供最终价值.每个服务运行在其独立的进程中,服 ...

  4. 使用Spring Boot和Kubernetes构建微服务架构

    "我喜欢编写身份验证和授权代码." 〜从来没有Java开发人员. 厌倦了一次又一次地建立相同的登录屏幕? 尝试使用Okta API进行托管身份验证,授权和多因素身份验证. 在本教程 ...

  5. Windows 网络服务架构系列课程详解(六) ---利用NLB群集实现WEB服务器的可靠性...

    Windows 网络服务架构系列课程详解(六) -----利用NLB群集实现WEB服务器的可靠性   实验背景: 在大型网络环境中存在这样一种情景,公司内部的FTP服务器出现故障或脱机了,而且不能快速 ...

  6. Windows 网络服务架构系列课程详解(一) ----DHCP服务器的搭建与配置

    Windows 网络服务架构系列课程详解(一) ---------DHCP服务器的搭建与配置   实验背景: 企业网络环境中在没有配置DHCP服务器时,经常会遇到这样的情况,用户不懂怎么去配置IP地址 ...

  7. 云原生与微服务架构基础:01 | 为什么说云原生重构了互联网产品开发模式

    为什么说云原生重构了互联网产品开发模式? 云原生的概念 云计算的前世今生 阶段1:虚拟化技术 阶段2:虚拟机的市场化应用 阶段3:容器化和容器编排的兴起 云原生到底是什么? 云原生出现的背景 云原生解 ...

  8. 微服务架构方案 springBoot+dubbo

    微服务架构方案 使用到的相关技术如下: 基础框架:springBoot+springGateway+dubbo+mybatisPlus 中间件:nginx+rabbitMq+redis 存储:mysq ...

  9. 微服务架构工作笔记003---了解认识google Kubernetes 容器管理

    技术交流QQ群[JAVA,C++,Python,.NET,BigData,AI]:170933152 下面这个是官网: https://kubernetes.io/zh/docs/concepts/o ...

最新文章

  1. 继承QTreeWidgetItem发生error: 'staticMetaObject' is not a member of 'QTreeWidgetItem' 错误
  2. 使用Eclipse更新软件时出现Unable to locate secure storage module错误的解决方法
  3. 【深度学习】Keras实现回归和二分类问题讲解
  4. poj1190深搜 生日蛋糕
  5. 阿里有一帮吃货工程师,在食堂玩起了“黑科技”
  6. 华硕台式机安装linux进不去系统,[已解决]求助,无法进入系统
  7. ftk学习记(窗口全屏设置篇)
  8. MYSQL到ORACLE法式迁徙的注意变乱
  9. 硬件知识储备01_一文看懂W25Qxx系列芯片(W25Q16、W25Q32、W25Q64...)
  10. 十种经典运放电路分析
  11. 2022山东省安全员C证考试试题及答案
  12. 如何冻结excel表格前二列
  13. java和c制作游戏软件,游戏软件制作,游戏软件制作入门教程
  14. 【Python】完美解决Pycharm网站无法访问问题
  15. 思科交换机创建子接口
  16. Verilog学习笔记(06)
  17. (附源码)springboot高校社团管理系统的开发毕业设计231128
  18. 民间第一高手—牵牛队长 韭菜队长
  19. 初识OFDM(六):从零开始的OFDM误码率仿真
  20. ios 10以上 ssh连不上的解决办法

热门文章

  1. android 设置drawable大小,在Android中调整Drawable大小
  2. mongodb java 执行js脚本_MongoDB编写并执行js脚本
  3. Leetcode每日一题:168.excel-sheet-column-title(Excel表名称)
  4. Python学习手册之内部方法、操作符重载和对象生命周期
  5. java多线程-生产者消费者模式
  6. vue如何使用原生js写动画效果_Vue中的动画效果
  7. python网络编程需要学什么,python网络编程学习笔记(五):socket的一些补充 Python 网络编程需要学习哪些网络相关的知识...
  8. 11.12 Ext JS 的Uncaught (in promise) Error: Cannot load package问题和解决分析
  9. [BlockChain]比特币交易快速上手(基于测试链)
  10. JavaScript 中的日期和时间