技术沉淀转型学习笔记总结(三) Springboot入门总结和微服务和单体服务介绍

1、Springboot是什么?
SpringBoot的微服务的开发的解决框架方案,同时也是为简化Spring配置的快速开发整合包,但是springboot的核心的优势从技术上来讲是大大提升开发过程配置的和依赖的效率。

2、springboot帮我们做了什么?
通常搭建一个基于spring的web应用,我们需要做以下工作:(典型SSM架构如下:)
1、pom文件中引入相关jar包,包括spring、springmvc、redis、mybaits、log4j、mysql-connector-java 等等相关jar ...
2、配置web.xml,Listener配置、Filter配置、Servlet配置、log4j配置、error配置 ...
3、配置数据库连接、配置spring事务
4、配置视图解析器
5、开启注解、自动扫描功能
6、配置完成后部署tomcat、启动调试
......

2.1、springBoot服务中关于:只需要一个非常简单的配置,可以完成上面的所有工作:

让开发者能核心重点关注:POJO->DAO->Service->Controller相关的设计和实现即可。大大提升开发效率。


springboot的pom.xml 配置文件如下:一个配置就可以完成所有的包的引入。

<parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.6.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    
    <groupId>com.yijy</groupId>
    <artifactId>spring-boot01</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>spring-boot01</name>
    <description>Demo project for Spring Boot</description>

    <properties>
        <java.version>1.8</java.version>
    </properties>

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

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>


2.2、运行代码简要案例:

运行主体类:

@SpringBootApplication
public class SpringBoot01Application {

    public static void main(String[] args) {
        //SpringApplication.run(SpringBoot01Application.class, args);
        SpringApplication sa = new SpringApplication(SpringBoot01Application.class);
        sa.run(args);
    }

}

控制器类

@RestController
public class TestController {
@RequestMapping("/index")
    public String index(){
        return "hello world";
    }
}

应用属性配置:
application.properties中增加配置
server.port=7668

入门案例:腾讯课堂的操作参考。

https://ke.qq.com/course/361814?taid=2906408664532310


一个最单的springboot应用就构建完毕,运行应用,springboot就自动完成spring、springmvc、tomcat等加载,连tomcat都不用自动配置是不是很爽。

运行应用后SpringBoot01Application ,自动完成配置加载、类的依赖和注入、web.xml的配置依赖、并自动加载tomcat容器:

输入地址:http://localhost:7668/index 即可以访问应用了。


是不是超级简单。

2.3、运行原理简述:

核心关键注解:@SpringBootApplication 此注解对调用maven管理的jar包中的
spring-boot-autoconfigure-2.1.6.RELEASE.jar!/META-INF/spring.factories
文件中的配置信息:

配置较多,仅截取一部分:
# Initializers
org.springframework.context.ApplicationContextInitializer=\
org.springframework.boot.autoconfigure.SharedMetadataReaderFactoryContextInitializer,\
org.springframework.boot.autoconfigure.logging.ConditionEvaluationReportLoggingListener

# Application Listeners
org.springframework.context.ApplicationListener=\
org.springframework.boot.autoconfigure.BackgroundPreinitializer

# Auto Configuration Import Listeners
org.springframework.boot.autoconfigure.AutoConfigurationImportListener=\
org.springframework.boot.autoconfigure.condition.ConditionEvaluationReportAutoConfigurationImportListener

# Auto Configuration Import Filters
org.springframework.boot.autoconfigure.AutoConfigurationImportFilter=\
org.springframework.boot.autoconfigure.condition.OnBeanCondition,\
org.springframework.boot.autoconfigure.condition.OnClassCondition,\
org.springframework.boot.autoconfigure.condition.OnWebApplicationCondition核心运行函数:
 SpringApplication sa = new SpringApplication(SpringBoot01Application.class);
        sa.run(args);
        
详细的运行原理分析文章可以参见:
https://blog.csdn.net/qq_34975710/article/details/87898620

2.4、springBoot的优点:
2.4.1、可以快速上手,整合一些子项目
2.4.2、可以依赖很少的配置就能运行整个项目
2.4.3、基于Spring,门槛低很容易上手
2.4.4、Springboot创建可以独立运行,不依赖于容器,如Tomcat。
2.4.5、不需要打包成war包,可以jar直接放入tomcat中直接运行
2.4.6、提供Maven极简配置,不需要版本号等
2.4.7、提供了可视化的功能,方便监控应用健康状态,以及性能等,后期维方便
2.4.8、抛弃xml,改用极简化配置


3、Spring,SpringMVC,SpringBoot,SpringCloud有什么区别和联系?

Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架。Spring使你能够编写更干净、更可管理、并且更易于测试的代码。Spring更具体的介绍:https://spring.io/
Spring MVC是Spring的一个模块,一个web框架。通过Dispatcher Servlet, ModelAndView 和 View Resolver,开发web应用变得很容易。主要针对的是网站应用程序或者服务开发——URL路由、Session、模板引擎、静态Web资源等等。
Spring配置复杂,繁琐,所以推出了Spring boot,约定优于配置,简化了spring的配置流程。
Spring Cloud构建于Spring Boot之上,是一个关注全局的服务治理框架。


Spring是核心,提供了基础功能;
Spring MVC 是基于Spring的一个 MVC 框架 ;
Spring Boot 是为简化Spring配置的快速开发整合包;
Spring Cloud是构建在Spring Boot之上的服务治理框架。


4、微服务架构和单体服务架构?
系统架构遵循的三大原则
提升用户体验:提升用户体验,减少用户流失
提高敏捷性:及时响应业务需求,促进企业发展
降低成本:降低增加产品、客户或业务方案的成本
传统单体架构
先来看看传统单体项目架构图

从单体应用架构图得出如下结论:

传统的单体应用架构功能集中,代码和数据中心化,一个发布包部署后运行在同一个进程中的应用程序。
复杂性高:由于是单个归档文件,所以整个项目文件包含的模块非常多,导致模块的边界模糊、依赖关系不清晰、代码的质量参差不齐,混乱的堆在一起,使得整个项目非常复杂。以致每次修改代码,都非常小心,可能添加一个简单的功能,或者修改一个Bug都会带来隐藏的缺陷。
技术债务:随着时间的推移、需求的变更和技术人员的更替,会逐渐形成应用程序的技术债务,并且越积越多。
扩展能力受限:单体应用只能作为一个整体进行扩展,无法根据业务模块的需要进行伸缩。

 

再看下微服务的架构图:


从微服务架构图得出如下结论:

微服务把每一个职责单一的功能放在一个独立的服务中 。
每个服务有多个实例在运行,每个实例可以运行在容器化平台内,达到平滑伸缩的效 果,单个微服务启动较快。
每个服务应该有自己的运营平台,以及独享的运营人员,这包括技术运维和业务运营人 员:每个服务都高度自治,内部的变化对外透明。
易于开发和维护:一个微服务只会关注一个特定的业务功能,所以业务清晰、代码量较少。开发和维护单个微服务相对简单。
局部修改容易部署:单体应用只要有修改,就得重新部署整个应用。微服务解决了这样的问题。一般来说,对某个微服务进行修改,只需要重新部署这个服务即可。
技术栈不受限制:在微服务架构中,可以结合项目业务及团队的特点,合理的选择技术栈。
也可以看看漫画版的微服务:【很简单】
http://www.sohu.com/a/221400925_100039689

 

5、什么时候采用微服务架构?

单体架构与微服务架构

就像很难用一个绝对的方式去判断架构好坏一样,在大多数场景下,我们也很难从一个外部的视角去判断服务拆分粒度的合理性,需要对上下文非常了解才能做出一个好决策。例如,团队规模多大,代码规模多大,有没有平台化,有没有工具链,是否需要持续交付,团队文化如何等。因此,一个外部的架构师是很难在短时间内将架构规划合理的,这需要一个过程,当真正了解这一切之后,不断权衡才能最终确定。在规划之前,有必要参考下面这张表,综合各方面的情况,最终做出决策。

 

单体架构与微服务架构对比

产品初期优先选择单体架构。面对一个新的领域,对业务的理解很难在开始阶段就比较清晰,往往是经过一段时间之后,才能逐步弄清楚。很多时候,从一个已有的单体架构中逐步划分服务,要比一开始就构建微服务简单得多。另外,在资源受限的情况下,采用微服务架构风险较大,很多优势无法体现,性能上的劣势反而会比较明显。

单体、组件化、微服务架构成本趋势,如下图。当业务复杂度达到一定程度后,微服务架构消耗的成本才会体现优势,并不是所有的场景都适合采用微服务架构,服务的划分应逐步进行,持续演进。产品初期业务复杂度不高的时候,应该尽量采用单体架构。 SpringBoot也是可以创建单体的服务应用的。

单体、组件化、微服务架构成本趋势

摘自Martin Fowler 博客的内容简单翻译如下。

当我听到关于使用微服务架构的故事的时候,我注意到了一种通用的模式。

1.几乎所有成功的微服务架构都是从一个巨大的单体架构开始的,并且都是由于单体架构太大而被拆分为微服务架构。

2.几乎在所有我听说过从一开始就构建为微服务架构的故事中,最终都有人遇到了巨大的麻烦。

在服务划分之前,应该保证基础设施及公共基础服务已经准备完毕。可以通过监控快速定位故障,通过工具自动化部署、管理服务,通过服务化框架降低服务开发的复杂度,通过灰度发布提升可用性,通过资源调度服务快速申请、释放资源,通过弹性伸缩快速扩展应用。

 

6、结束语:

关于springboot快速开发的特征,适应微服务的结构服务,以及相关的生态、springbootadmin 监控和管理、springcloud 服务治理 的内容还有很多去理解和实践,本篇文章只是一个入门的尝试和微服务的梳理和分析。不同类型的IT系统(管理型、OA、CRM、ERP等)、分析型系统(BI、大数据平台、智能报表平台、智能分析平台)、一线客户业务强交互服务系统(新闻、电商、微博、微信、以及客户一线服务系统) 如何选择微服务架构,这些问题都是需要在实际工作中做进一步的思考和实践,才能有更好的答案。希望后面在工作中一起思考分享。

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring Boot 是基于 Spring 框架的一个快速开发框架,它能够简化 Spring 应用的初始化过程、开发和部署,提高开发效率。下面是 Spring Boot学习笔记: ## 1. Spring Boot 简介 Spring Boot 是 Spring 家族的一个全新的框架,它的设计目的是为了快速开发基于 Spring 的应用程序。 Spring Boot 采用了约定大于配置的原则,通过自动配置、快速开发、可插拔的特性,让开发者可以更加专注于业务逻辑。 ## 2. Spring Boot 的优点 - 简化配置:Spring Boot 通过自动配置的方式,避免了繁琐的配置。 - 快速开发:Spring Boot 集成了很多常用的框架和工具,使得开发过程更加快速。 - 易于部署:Spring Boot 可以将应用程序打包成 jar 包或 war 包,方便部署和运行。 - 微服务支持:Spring Boot 对于微服务的支持非常好,可以使用 Spring Cloud 进行服务治理。 ## 3. Spring Boot 的核心原理 Spring Boot 的核心原理是通过自动配置和约定大于配置来简化开发过程。 自动配置是指 Spring Boot 会根据项目的依赖和配置,自动为项目进行配置。开发者只需要添加相应的依赖,就可以使用相应的功能,无需进行繁琐的配置。 约定大于配置是指 Spring Boot 对于一些常见的配置,采用一些约定的方式进行配置。开发者只需要按照约定的方式进行开发,就可以使用相应的功能。 ## 4. Spring Boot 的常用注解 - @SpringBootApplication:Spring Boot 应用程序的入口,同时也是 Spring 的配置文件。 - @RestController:用于定义 RESTful 接口的控制器。 - @RequestMapping:用于定义请求的 URL 和请求方法。 - @Autowired:用于自动注入依赖。 - @Value:用于获取配置文件中的属性值。 ## 5. Spring Boot 的常用组件 - Spring MVC:用于定义 RESTful 接口和处理请求。 - Spring Data:用于简化数据库操作。 - Spring Security:用于实现安全认证和授权。 - Spring Boot Actuator:用于监控和管理应用程序。 ## 6. Spring Boot 的开发步骤 - 创建 Spring Boot 项目。 - 添加项目依赖。 - 编写业务代码。 - 运行项目。 ## 7. Spring Boot 的部署方式 - 打包成 jar 包,使用 java -jar 命令运行。 - 打包成 war 包,部署到 Tomcat 或其他 Servlet 容器中。 ## 8. Spring Boot 的监控和管理 Spring Boot Actuator 提供了一系列的监控和管理功能,包括健康检查、性能监控、日志记录等。可以通过 HTTP 接口或 JMX 进行访问和管理。 ## 9. Spring Boot 的测试 Spring Boot 提供了很好的测试支持,可以使用 JUnit 进行单元测试和集成测试。同时也可以使用 Spring Boot Test 提供的测试框架进行测试。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值