Spring Boot的特性
1)快速构建独立Spring应用程序
2)嵌入式Tomcat,Jetty容器,无需部署WAR包
3)简化Maven及Gradle配置
4)尽可能的自动化配置Spring,无代码生成和xml配置
5)直接植入产品环境下的实用功能,比如度量指标、健康检查及扩展配置等
6)对主流开发框架和工具链做无配置集成
Spring Boot优缺点
优点:
1)解决配置繁琐的问题,最大化的实现convention over configuration(约定大于配置);
2)springboot 要解决的问题, 精简配置是一方面, 另外一方面是非常方便的让spring生态圈和其他工具链整合(比如redis, email, elecsearch)
3)有Pivotal和Netflix这两个干爹罩着, 个人认为SpringBoot(由Pivotal团队提供)前途一片光明(国内的一些大厂其实早就再用了)
缺点:
1)因为刚出不久,文档略少,加上对Spring Boot的auto configuration loading等机制的封装, 给人感觉入门容易,但是如果没有完整学习spring的体系,碰到问题就一脸懵逼。据我所知,很多玩spring boot的人连怎么打开底层包的log都不知道,怎么可能能发现问题呢?比如很多人会碰到启动时不知道框架哪里抽风,会导致系统无法启动,报的错都很神奇,搜完百度和谷歌和stackflow都没解决方案。(后来有人说@DependsOn注解就能搞定,没试过不清楚行不行);
2)版本迭代速度太快(最近太火了), 一些模块改动很大, 比如 springboot-test的1.3.5 vs 1.4
总结
Spring boot给我的感觉是入门容易,深入难。它实现了我们之前常用的Spring技术,并通过零配置或者说约定大于配置的方式将其集成在一起,方便开发者快速开发应用,这种封装的方式有好有坏,当然操作变简单这是最真实的体验。Boot的诞生依靠的是近几年SOA式的微服务架构的流行,也正是这个原因,他多数应用在微服务中充当个体。
最后
下节我们将按照结构复杂的单一系统 > 微服务 > Docker化 > 自动化,演变思路,讲解过渡到Spring cloud使用上
先说说它们的区别,如下几点:
-
微服务架构强调业务系统需要彻底的组件化和服务化,一个组件就是一个产品,可以独立对外提供服务。
-
微服务不再强调传统 SOA 架构里面比较重的 ESB 企业服务总线。
-
微服务强调每个微服务都有自己独立的运行空间,包括数据库资源。
-
微服务架构本身来源于互联网的思路,因此组件对外发布的服务强调了采用 HTTP Rest API 的方式来进行。
-
微服务的切分粒度会更小。
总结:微服务架构是 SOA 架构思想的一种扩展,更加强调服务个体的独立性、拆分粒度更小。
为什么考虑 Spring Cloud
考虑 Spring Cloud 的原因有如下几点:
-
Spring Cloud 来源于 Spring,质量、稳定性、持续性都可以得到保证。
-
Spirng Cloud 天然支持 Spring Boot,更加便于业务落地。
-
Spring Cloud 发展非常的快,从 2016 年开始接触的时候相关组件版本为 1.x,到现在将要发布 2.x 系列。
-
Spring Cloud 是 Java 领域最适合做微服务的框架。
-
相比于其它框架,Spring Cloud 对微服务周边环境的支持力度最大。
-
对于中小企业来讲,使用门槛较低。
-
Spring Cloud 是微服务架构的最佳落地方案。
Spring Cloud 的特性
以下为 Spring Cloud 的核心特性:
-
分布式/版本化配置。
-
服务注册和发现。
-
路由。
-
服务和服务之间的调用。
-
负载均衡。
-
断路器。
-
分布式消息传递。
这些特性都是由不同的组件来完成,在架构的演进过程中扮演着重要的角色,接下来我们一起看看。
微服务架构
Spring Cloud 解决的第一个问题就是:服务与服务之间的解耦。很多公司在业务高速发展的时候,服务组件也会相应的不断增加
****************************************************************************************************************************
Maven + SpringBoot 框架搭建
创建第一个父工程,MavenProject 选择pom
CTRL+SHIFT+F 格式化调整代码的样式
我们在父工程中规定好了<java.version>1.8</java.version>JDK的版本是1.8,还有项目的格式是UTF-8 ,Spring-Boot 1.5.2,
规定好了fastjson包
<properties> <java.version>1.8</java.version> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <spring-boot.version>1.5.2.RELEASE</spring-boot.version> <fastjson.version>1.2.21</fastjson.version> <dubbo-spring-boot>1.0.0</dubbo-spring-boot> </properties> 让父工程继承上面的包的版本号,就是让子工程一实现以上的版本号 |
我们需要创建两个项目,一个是消费者一个是提供者,配置(Spring Boot Dubbo 依赖),无论是dubbo或者是zookeeper都要和Spring整合,消费者需要使用dubbo, 提供者也需要使用dubbo
<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.5.2.RELEASE</version> </parent> <dependencyManagement> <dependencies> <!-- Spring Boot Dubbo 依赖 --> <dependency> <groupId>io.dubbo.springboot</groupId> <artifactId>spring-boot-starter-dubbo</artifactId> <version>${dubbo-spring-boot}</version> </dependency> <!-- 引入json的包 依赖 --> <dependency><groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>${fastjson.version}</version> </dependency> </dependencies> </dependencyManagement> 我们需要把公共的部分的jar包提取出来,提供不同的项目使用 |
现在需要创建两个父工程的子工程,
子工程一,(消费者) ,消费者里面写的是Controller,用户访问的时候需要访问的地方,用户访问的页面也要放在Controller,把请求访问提交给Controller,Controller在把所有的请求交给Service,Service进行处理,把所有的压力都交给Service,只需要多启动几台服务器就好啦
继承父工程 <parent> <groupId>com.kong</groupId><artifactId>kong-maven</artifactId> <version>0.0.1-SNAPSHOT</version> </parent> <groupId>com.kong</groupId> <artifactId>kong-Customer</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>war</packaging> |
第一步:继承父工程 格式(war)
第二步:导入子工程依赖的jar包 包中有tomcat的启动包,
我们还需要创建一个提供者,提供者又分为两部分,一部分是接口,一部分是实现类,接口是留着被别人(消费者)来调用的,实现类才是真正的来处理业务,就是给接口和实现类创建一个父工程,但是这个父工程又继承类比他大一级的父工程
创建提供者的父工程 (pom)
创建两个子工程,一个接口一个实现类,接口的那个项目,什么都不需要依赖jar
接口要调用实现类,实现类要调用dao,dao操作增删改查
创建Controller层 加上注解 @Controller 和 @RestController:表示这个方法下的所有方法都不需要添加(@RequestBody注解)
mvn compile springboot框架加载文件命令