Spring Boot浅谈(是什么/能干什么/优点和不足)

SpringBoot(看这一篇就够了) Spring是一个非常优秀的轻量级框架,以IOC(控制反转)和AOP(面向切面)为思想内核,极大简化了JAVA企业级项目的开发。虽然Spring的组件代码是轻量级的,但它的配置却是重量级的。使用Spring进行项目开发需要在配置文件中写很多代码,所有这些配置都代表了开发时的损耗。除此之外,Spring项目的依赖管理也是一件耗时耗力的事情。在环境搭建时,需要分析要导入哪些库的坐标,而且还需要分析导入与之有依赖关系的其他库的坐标,一旦选错了依赖的版本,随之而来的不兼容问题就会严重阻碍项目的开发进度。比如Spri 阅读详情

原博客:https://blog.youkuaiyun.com/fly_zhyu/article/details/76407830

1. Spring Boot是什么,解决哪些问题

     1) Spring Boot使编码变简单

     2) Spring Boot使配置变简单

     3) Spring Boot使部署变简单

     4) Spring Boot使监控变简单

     5) Spring Boot的不足

2. Spring Boot在平台中的定位,相关技术如何融合

     1) SpringBoot与SEDA +MicroService + RESTful

     2) SpringBoot与Mock

3. 采用了SpringBoot之后,技术管理应该如何进行

 

首先,我们来看一下spring boot是什么,它帮助我们解决了哪些问题:

 

SpringBoot是伴随着Spring4.0诞生的;

从字面理解,Boot是引导的意思,因此SpringBoot帮助开发者快速搭建Spring框架;

SpringBoot帮助开发者快速启动一个Web容器;

SpringBoot继承了原有Spring框架的优秀基因;

SpringBoot简化了使用Spring的过程。

 

Spring由于其繁琐的配置,一度被人认为“配置地狱”,各种XML、Annotation配置,让人眼花缭乱,而且如果出错了也很难找出原因。

Spring Boot更多的是采用Java Config的方式,对Spring进行配置。

 

 

 

可以看到,采用了spring-boot-start-actuator之后,直接以REST的方式,获取进程的运行期性能参数。

当然这些metrics有些是有敏感数据的,spring-boot-start-actuator为此提供了一些Basic Authentication认证的方案,这些方案在实际应用过程中也是不足的。

 

Spring Boot作为一个微框架,离微服务的实现还是有距离的。

没有提供相应的服务发现和注册的配套功能,自身的acturator所提供的监控功能,也需要与现有的监控对接。没有配套的安全管控方案,对于REST的落地,还需要自行结合实际进行URI的规范化工作。

下面,我们研究一下Spring Boot在平台中的定位,相关技术如何融合。

 

 

上图比较复杂,整体是采用SEDA,也就是Stage-EDA。可以看到,整体是以处理顺序进行展示的,响应过程类似。在处理过程中,主要会有前置过滤,核心功能处理,后置过滤几大部分。

图中的过滤器都是可插拔式的,并且可以根据实际场景进行扩展开发。每个过滤器都是Stage,比如ClientInstance合法性检查、调用鉴权、解密、限流等等。

一个请求Stage与Stage的转换,实现上是切换不同的线程池,并以EDA的方式驱动。

对于业务逻辑的开发者而言,只需要关心CORE部分的业务逻辑实现,其他的非功能都由框架进行统一实现。

 

Mock不应当再是测试的专有名词了,当然对于测试这个角色而言,mockito这样的工具,依然可以为他们提升不少效率。

SpringBoot为创建REST服务提供了简便的途径,相比之下,采用阿里的dubbo在做多团队、多进程联调时,mock的难度就陡增。

Mock是解耦并行开发的利器,在理性的情况下,软件从开发期Mock联调,到开发与开发的真实联调,只需要切换一个依赖的域名即可,比如:

mockURI:http://mock.service.net/v1/function?param1=value1

devURI:http://dev.service.net/v1/function?param1=value1

而上述的域名切换,只需要在开发期定义好一个配置项,在做环境切换的时候自动注入即可,省时、省心、省力。

 

如上图和docker的集成可以有AB两种方案:

• A方案的核心是,把docker作为操作系统环境的交付基线,也就是不同的fat jar 使用相同的操作系统版本、相同的JVM环境。但对于docker image来说都是一样的。

• B方案的核心是,不同的fat jar,独立的编译为docker image,在启动时直接启动带有特定版本的image。

A相比与B方案的特点是对于docker registry(也就是docker的镜像仓库)的依赖性较低,对于前期编译过程的要求也较低。

采用了Spring Boot之后,技术管理应该如何进行?

 

正因为Spring Boot是与Spring一脉相承的,所以对于广大的Java开发者而言,对于Spring的学习成本几乎为零。

在实践Spring Boot时学习重点,或者说思维方式改变的重点在于:

1)对于REST的理解,这一点尤为重要,需要从设计、开发多个角色达成共识,很多时候都是对于HTTP 1.1协议以及REST的精髓不理解,导致REST被「盲用」而产生一些不好的效果。

2)对于YAML的理解和对于JavaConfig的理解,这两点相对较为简单,本质上是简化了xml文件,并提供等价的配置表述能力。

 

1. 丰富的工具链为SpringBoot的推广带来了利好。

2. SpringBoot的工具链主要来自于两个方面:

    1) 原有Spring积累的工具链;

    2) SpringMVC或者其他REST框架使用HTTP协议,使得HTTP丰富的工具成为SpringBoot天然的资源。

 

SpringBoot自身对于前面提到的配置文件:“application.yml”提供了多个「Profile」,可以便于开发者描述不同环境的配置,这些配置例如数据库的连接地址、用户名和密码。

但是对于企业用户而言,把不同环境的配置,写到同一个配置文件中,是极其不安全的,是一个非常危险的动作。

有一个经常被提及的例子是,随着开源的进行,很多互联网公司,都由于把相关的代码提交到github之类的开源代码社区,并且没有对代码进行严格的配置审查,导致一些”password”被公开。有些不良用心的人,就利用搜索工具,专门去挖掘这些关键字,进而导致数据库被「拖库」。

所以对于企业用户,更多的应该是采用集中式的配置管理系统,将不同环境的配置严格区分地存放。

虽然SpringBoot的actuator自身提供了基于「用户名+口令」的最简单的认证方式,但它保护的是对框架自身运行期的性能指标敏感数据的最基本的保护。这种保护在实际应用过程中,「用户名+口令」的管理是缺乏的,「用户名+口令」的安全配置过程是缺失的。

SpringBoot也不提供对于我们自己开发的功能的任何防护功能。

一般来讲,一个安全的信道(信息传输的通道),需要通信双方在进行正式的信息传输之前对对方进行身份认证,服务提供方还需要在此基础之上,对请求方的请求进行权限的校验,以确保业务安全。这些内容也需要基于SpringBoot进行外围的安全扩展,例如采用前面提到的S-EDA进行进程级别的安全管控。这些还需要配套的安全服务提供支持。

一般来说,只要企业与互联网对接,那么随便一个面向消费者的「市场活动」,就有可能为企业带来井喷的流量。

传统企业内,更多的系统是管理信息类的支撑系统,这类系统在设计时的主要用户是企业内部员工以及有限的外部供应商。这类系统存在于企业内部的时间一直很长,功能耦合也很多,在功能解耦前,是非常不适合的,或者说绝对不可以直接为互联网的用户进行服务的。

SpringBoot自身并没有提供这样的流控措施,所以需要结合前面提到的S-EDA进行流量的控制,并结合下层的水平扩展能力(例如,Kubernets)进行流量负载合理的动态扩容。

另外,在长业务流程的设计上,也尽可能地采用异步的方式,比如接口调用返回的是一个「受理号」,而不是业务的处理结果,避免井喷业务到来时,同步调用所带来的阻塞导致系统迅速崩溃,这些也都是SpringBoot自身并不解决的问题。

以上是我分享的主要内容,下面我们总结一下:

SpringBoot详解 Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。通过这种方式,Spring Boot致力于在蓬勃发展的快速应用开发领域(rapid application development)成为领导者。...... 阅读详情

相关推荐

SpringBoot介绍。

SpringBoot` 是由Pivotal团队提供的全新框架,其设计目的是用来简化Spring应用的初始搭建以及开发过程。原始 `Spring` 环境搭建和开发存在以下问:● 配置繁琐● 依赖设置繁琐`SpringBoot` 程序优点恰巧就是针对 `Spring` 的缺点● 自动配置。这个是用来解决 `Spring` 程序配置繁琐的问题● 起步依赖。这个是用来解决 `Spring` 程序依赖设置繁琐的问题● 辅助功能(内置服务器,...)。

yzh2776680982的博客 8287

Spring Boot+Bootstrap开发小而完整web项目

跟着本课程Demo完整的动手写一次,会发现你已经可以直接利用Spring Boot上手中小型web项目了。  Spring Boot框架是现在比较热门的微服务框架,很多软件公司都在使用,本课程涵盖Spring Boot和Bootstrap较为多面的知识点,针对Spring Boot开发web项目中每个阶段的关键内容和痛点,一步步进行条理清晰的讲解,学员在听课过程中建立起自己较为完备的前端、后端知识体系,具备较好的项目开展能力和自信。 课程特点是不炫技、条理清晰、生动浅显、化繁为简,每个章节都会围绕Spring Boot、Bootstrap的知识点“是什么、有什么用、怎么用”展开,并根据精心准备的简洁清晰的示例进行讲解。   学完该套课程后,可以很快上手Spring Boot实战开发,一个人就能完成一个基于Spring Boot+Bootstrap的完整WEB项目!  

Spring Boot 有哪些优点

Spring Boot 是一个非常强大且灵活的框架,极大地提升了开发者的开发效率。通过减少配置和简化开发流程,它使得开发者可以更专注于业务逻辑和功能实现。无论是传统的 Web 应用开发,还是基于微服务架构的开发,Spring Boot 都能提供很好的支持。

些许风霜罢了 1951

springboot基础篇(快速入门+要点总结)

本文详细的介绍了springboot的来源以及和spring的关系,和为什么使用springboot,然后介绍了两种搭建springboot项目的方法,以及热部署,properties配置文件的使用,在最后对于日志做出了详细的说明和用法。

zhaolk的博客 6万+

时间卷积网络(TCN):结构+pytorch代码

文章目录TCNTCN结构1-D FCN的结构因果卷积(Causal Convolutions)膨胀因果卷积(Dilated Causal Convolutions)膨胀非因果卷积(Dilated Non-Causal Convolutions)残差块结构pytorch代码讲解 TCN   TCN(Temporal Convolutional Network)是由Shaojie Bai et al....

Leon_winter的博客 11万+

Python 爬虫实战:爬取知乎问答与评论数据并分析

摘要:本文以Python为核心工具,系统讲解知乎问答与评论数据爬取的技术方案。通过分析知乎API接口结构,详细阐述Requests库结合正则表达式的数据获取方法,涵盖请求头构造、鉴权参数处理等关键技术。文章对比了HTML解析、API调用和Selenium模拟三种爬取方案的优劣,提供完整的代码实现,包括问题信息获取、回答列表爬取和评论数据提取。同时介绍了数据存储(JSON/Excel)和基础文本分析(词云生成)方法,并给出合规使用建议和技术优化方向,为开发者提供了一套可落地的知乎数据爬取与分析解决方案。

2503_91057718的博客 1820

springboot干什么的_Spring Boot浅谈(是什么/能干什么/优点和不足)

1. Spring Boot是什么,解决哪些问题1) Spring Boot使编码变简单2) Spring Boot使配置变简单3) Spring Boot使部署变简单4) Spring Boot使监控变简单5) Spring Boot的不足2. Spring Boot在平台中的定位,相关技术如何融合1) SpringBoot与SEDA +MicroService + RESTful2) Spri...

weixin_39867125的博客 535

3 ATK2(AUTOSAR OS)代码移植-目标硬件及编译环境简介

该部分介绍ATK2代码移植的目标硬件以及编译环境

xiaoduanduansad的博客 719

springboot如何盈利_Spring Boot浅谈(是什么/能干什么/优点和不足)

---恢复内容开始---1. Spring Boot是什么,解决哪些问题1) Spring Boot使编码变简单2) Spring Boot使配置变简单3) Spring Boot使部署变简单4) Spring Boot使监控变简单5) Spring Boot的不足2. Spring Boot在平台中的定位,相关技术如何融合1) SpringBoot与SEDA +MicroService + RE...

weixin_39743369的博客 220

宇树G1机器人遥控器音频控制实战

本文介绍了宇树G1人形机器人遥控器控制音频播放的核心实现方案。通过DDS消息订阅获取遥控器输入,采用非阻塞的subprocess调用aplay命令控制外接音响设备。系统支持播放、暂停和重播功能,采用50ms轮询间隔实现实时响应。关键点包括遥控器初始化、音频进程管理(Popen)、退出机制。文章还提供了设备配置指南、遥控器按键说明和常见问题解决方案。该方案从复杂音频播放器中提炼出核心控制逻辑,可作为机器人交互开发的参考模板。

m0_47999117的博客 542

Python内置函数zip()——《Python内置函数手册》Python老吕编著

zip()函数是 Python 中的一个内置函数,用于将多个可迭代对象(如列表、元组、字符串等)中对应的元素打包成一个个元组,然后返回由这些元组组成的迭代器。zip()函数常用于将多个序列并行迭代,或者用于数据对齐。zip()它返回一个迭代器,这意味着你可以逐个获取打包后的元素,而不是一次性将所有元素加载到内存中。如果输入的可迭代对象长度不一致,zip()会以最短的可迭代对象为准,只打包到最短对象的末尾。它可以用来并行迭代多个序列,使得代码更加简洁和高效。在接下来的章节中,我们将详细介绍。

Python老吕的博客 680

Spring Boot 系列一:Spring boot的概念及其优点

SpringBoot基于Spring开发,SpirngBoot本身并不提供Spring框架的核心特性以及扩展功能,只是用于快速、敏捷地开发新一代基于Spring框架的应用程序。SpringBoot可以快速整合常用依赖(开发库,例如spring-webmvc、jackson-json、validation-api和tomcat等),提供的POM可以简化Maven的配置。SpringBoot提供了一些现有的功能,如量度工具,表单数据验证以及一些外部配置这样的一些第三方功能。.........

退役复学在校大学生,目光所至,皆为华夏 1万+

YOLO11改进|卷积篇|引入多样化分支块DBB

YOLO11中添加多样化分支块DBB

A1983Z的博客 1448
上一篇: java基础环境搭建(centos7)
下一篇: redhat linux/CentOS 6/7 如何关闭防火墙?
javaee1234
博客等级 码龄10年 49粉丝 24原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值