关键词:
目录
前言
在小白新手SpringCloud开发简单总结(一)-SpringCloud概念中提到了SpringCloud是一个微服务治理框架。而SpringCloud中的每个服务是基于SpringBoot框架创建的。那么先看下SpringBoot的一些概念。
一 SpringBoot概念
1.基本概念的引入
在前面的小白新手web开发简单总结笔记系列中在创建一个web应用的项目的时候,从最基本的一个maven工程,逐渐在这个基础上累加下面的功能,才得到一个完整的web应用:
- 1.配置web应用的入口文件web.xml,加载Spring的基本配置文件信息以及Spring mvc相关的内容;
- 2.增加配置数据库连接信息;
- 3.增加配置Spring事务管理
- 4.增加配置ORM;
- 5.增加配置日志文件
- .....
而SpringBoot就是为了解决这些繁琐的配置、整合第三方框架的配置等引起开发和部署效率降低等问题。SpringBoot本身集成了很多第三方库的配置,开箱即用。
2.SpringBoot的特点
(1)快速搭建
SpringBoot集成Spring,可快速搭建web应用。
(2)简化编码
在之前的web应用开发中,如果要创建一个web应用,需要在pom.xml中添加多个依赖,如
- 需要配置spring-web,才可以在Tomcat容器中使用IoC容器中的组件;可见小白新手web开发简单总结(八)-数据库HSQLDB实例
- 需要配置spring-webmvc才可以使用DispatcherServlet分发请求;可见小白新手web开发简单总结(十六)-Web层优化(DispatcherServlet源码分析)
- 需要配置tomcat-embed-core等才可以通过Tomcat类来加载整个web应用;可见小白新手web开发简单总结(三)-一个简单的Web开发项目
- ……
而现在使用SpringBoot,只需要在pom.xml中配置如下:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
那么就可以快速启动一个web开发场景中使用的底层所有依赖。通过查看下spring-boot-starter-web的pom.xml中的源码如下:
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
<version>2.5.0</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-json</artifactId>
<version>2.5.0</version>
<scope>compile</scope>
</dependency>
<!--集成tomcat-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<version>2.5.0</version>
<scope>compile</scope>
</dependency>
<!--集成spring-web-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>5.3.7</version>
<scope>compile</scope>
</dependency>
<!--集成spring-webmvc-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.3.7</version>
<scope>compile</scope>
</dependency>
</dependencies>
从这个pom.xml文件中,并不是所有的提供所有的场景的依赖的启动器,像配置数据源的启动器,就需要额外的进行配置。当然这些数据源框架厂商,也提供了针对SpringBoot框架提供了这些数据源的启动器,如mybatis-spring-boot-starter、druid-spring-boot-starter等。这里要注意一个问题:在使用这些启动器的时候,要注意配置对应的版本号。
(3)简化配置
在Spring项目中,一般我们在使用一些依赖库的时候,都需要添加各种配置xml文件,如下
例如在小白新手web开发简单总结(十四)-MySQL的安装与简单使用中的三 在Spring中通过JDBC访问MySql数据库为MySql数据库增加DataSource的时候,配置文件的内容如下:
<bean id="mysqlDataSource" class="org.apache.commons.dbcp.BasicDataSource"
name="mysqlDataSource">
<property name="driverClassName" value="$jdbc.mysql.driverClass"/>
<property name="url" value="$jdbc.mysql.url"/>
<property name="username" value="$jdbc.mysql.user"/>
<property name="password" value="$jdbc.mysql.password"/>
<property name="maxActive" value="500"/>
<property name="initialSize" value="2"/>
<property name="minIdle" value="2"/>
</bean>
但是使用SpringBoot仅仅在全局唯一一个配置文件application.properties中添加如下代码即可:
#配置DBCP数据源
spring.datasource.type=org.apache.commons.dbcp.BasicDataSource
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/xbook
spring.datasource.username=root
spring.datasource.password=12345678
SpringBoot会自动加载datasource的配置,数据源会自动注入到sqlSessionFactory中。
那么这些配置在SpringBoot中怎么生效的呢?
主要原因在于@SpringBootApplication注解。进入到这个@SpringBootApplication源码,有一个开启自动配置的注解EnableAutoConfiguration,如下
@AliasFor(
annotation = EnableAutoConfiguration.class
)
在进入到EnableAutoConfiguration.class中,如下:
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@AutoConfigurationPackage
@Import(AutoConfigurationImportSelector.class)
public @interface EnableAutoConfiguration
String ENABLED_OVERRIDE_PROPERTY = "spring.boot.enableautoconfiguration";
Class<?>[] exclude() default ;
String[] excludeName() default ;
其关键作用是由 AutoConfigurationImportSelector.class 中加载了在META-INF/spring.factories中的内容,该文件路径为
里面有一个有一些key/value的类名列表,说明这下面的这些类都会在自动配置。
# Auto Configure
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\\
....
org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration,\\
....
在SpringBoot启动的时候,通过SpringApplication.run(),将这些自动配置的类加载到Spring容器中。
(4)简化部署
在Spring项目,一般都是需要打包成war包,然后部署到Tomcat服务器。
而SpringBoot在前面添加的spring-boot-starter-web依赖中,我们也发现已经集成了Tomcat,现在只需要将项目打包成jar包,通过"java -jar xxx.jar"即可启动项目。也就是已经无需配置Tomcat环境,只需要配置JDK即可。
(5)简化监控
通过引入spring-boot-start-actuator依赖,可直接通过REST来获取进程的运行性能参数。由于SpringBoot只是一个服务,所以通常需要结合SpringCloud进行服务治理。
二 快速搭建SpringBoot项目
在IDEA中,一个project可以包含多个module。在平时使用IDEA中,可以为自己公司的项目统一建立一个project,然后来管理不同项目的module,这样不用重复配置maven。而平时自己写的小demo会是一个project,然后每次demo都会在这个project中单独去创建module。
- 1.通过new->Project... ,创建一个Empty project
如果本地没有project,可以先在本地路径下创建一个文件夹来存放project。然后通过new->Project...创建一个Empty Project,如图:
如果本地已有project文件夹,此步忽略。
- 2.通过new-Module...,创建一个Module
在该project下创建一个新的module,如图:
- 3.在pom.xml中添加最基本的依赖
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.wj</groupId>
<artifactId>wj-cloud-1</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>
<name>wj-cloud-1</name>
<!--Spring boot-->
<parent>
<artifactId>spring-boot-starter-parent</artifactId>
<groupId>org.springframework.boot</groupId>
<version>2.5.0</version>
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>2.2.6.RELEASE</version>
</plugin>
</plugins>
</build>
</project>
- 4.添加@Controller类
@Controller
public class WjCloudController
@ResponseBody
@RequestMapping("/")
public String helloWjCloud()
return "Hello wj cloud! Come on";
- 5.添加SpringBoot项目的启动类
@SpringBootApplication
public class WjCloudApplication
public static void main( String[] args )
System.out.println( "Hello World!" );
SpringApplication.run(WjCloudApplication.class,args);
运行该类,成功之后下面的控制台输出:
Hello World!
. ____ _ __ _ _
/\\\\ / ___'_ __ _ _(_)_ __ __ _ \\ \\ \\ \\
( ( )\\___ | '_ | '_| | '_ \\/ _` | \\ \\ \\ \\
\\\\/ ___)| |_)| | | | | || (_| | ) ) ) )
' |____| .__|_| |_|_| |_\\__, | / / / /
=========|_|==============|___/=/_/_/_/
:: Spring Boot :: (v2.5.0)
2021-05-28 15:26:32.614 INFO 5809 --- [ main] org.wj.cloud.WjCloudApplication : Starting WjCloudApplication using Java 1.8.0_151 on liuwenjingMacBook-Pro.local with PID 5809 (/Users/j1/Documents/java/pc/self-project/wj-cloud-1/target/classes started by j1 in /Users/j1/Documents/java/pc/self-project)
2021-05-28 15:26:32.616 INFO 5809 --- [ main] org.wj.cloud.WjCloudApplication : No active profile set, falling back to default profiles: default
2021-05-28 15:26:33.455 INFO 5809 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat initialized with port(s): 8080 (http)
2021-05-28 15:26:33.467 INFO 5809 --- [ main] o.apache.catalina.core.StandardService : Starting service [Tomcat]
2021-05-28 15:26:33.467 INFO 5809 --- [ main] org.apache.catalina.core.StandardEngine : Starting Servlet engine: [Apache Tomcat/9.0.46]
2021-05-28 15:26:33.551 INFO 5809 --- [ main] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring embedded WebApplicationContext
2021-05-28 15:26:33.552 INFO 5809 --- [ main] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 881 ms
2021-05-28 15:26:33.855 INFO 5809 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port(s): 8080 (http) with context path ''
2021-05-28 15:26:33.865 INFO 5809 --- [ main] org.wj.cloud.WjCloudApplication : Started WjCloudApplication in 1.582 seconds (JVM running for 3.19)
2021-05-28 15:26:33.866 INFO 5809 --- [ main] o.s.b.a.ApplicationAvailabilityBean : Application availability state LivenessState changed to CORRECT
2021-05-28 15:26:33.867 INFO 5809 --- [ main] o.s.b.a.ApplicationAvailabilityBean : Application availability state ReadinessState changed to ACCEPTING_TRAFFIC
Process finished with exit code 130 (interrupted by signal 2: SIGINT)
在浏览器中输入http://localhost:8080,看到如下内容
项目运行成功。这个相比之前在学习web开发(见小白新手web开发简单总结笔记系列)的时候,在启动一个项目方便多了。
三 总结
功夫不负有心人,因为有了小白新手web开发简单总结笔记系列前面的一系列的积累,现在在看SpringBoot的时候,感觉还不是那么难理解。当然后面还有许多东西需要自己去持续学习,加油。
简单总结下这次收获内容:
- 1.SpringBoot是一个快读搭建web应用项目的框架,相比于Spring应用开发,可以减少很多繁琐配置、整合第三方框架等工作;
- 2.区别于SpringCloud,SpringBoot仅仅是一个用来实现一个服务,而SpringCloud是一个服务治理框架,是用来多个SpringBoot项目创建的服务相互调用等一系列问题;
- 3.通常SpringCloud和SpringBoot结合去使用。
快速构建springcloud工程
springcloud简介 springcloud为开发人员提供了快速构建分布式系统的一些工具,包括配置管理、服务发现、断路器、路由、微代理、事件总线、全局锁、决策竞选、分布式会话等等。它运行环境简单,可以在开发人员的电脑上跑... 查看详情
01:新手学springcloud前需知道的5点
...点:什么是微服务架构第二点:为什么需要学习SpringCloud第三点:SpringCloud是什么第四点:SpringCloud的优缺点1、SpringCloud优点2、SpringCloud缺点第五点:SpringCloud由什么组成1)SpringCloudEureka2)SpringCloudZuul3... 查看详情
springcloud学习笔记总结(代码片段)
文章目录1.SpringCloudBus之消息总线介绍2.SpringCloudBus之搭建RabbitMQ3.SpringCloudBus之动态刷新全局广播的设计思想和选型4.SpringCloudBus之动态刷新全局广播配置实现5.SpringCloudStream之消息驱动介绍6.SpringCloudStream之设计思想7.SpringCloudStream之... 查看详情
springcloud学习笔记总结(代码片段)
文章目录1.SpringCloudBus之消息总线介绍2.SpringCloudBus之搭建RabbitMQ3.SpringCloudBus之动态刷新全局广播的设计思想和选型4.SpringCloudBus之动态刷新全局广播配置实现5.SpringCloudStream之消息驱动介绍6.SpringCloudStream之设计思想7.SpringCloudStream之... 查看详情
个人前端学习总结(纯小白和新手及初级向)
... 虽然进入前端这个行业时间不长,但也不再是纯小白了(技术依然菜鸡,路漫漫其修远兮) 写这篇文章的初衷是因为身边偶尔会有朋友跟我说对前端感兴趣,想要入坑,怎样入门等等。。。 一般我会问一个... 查看详情
用springboot简单搭建一个微服务项目
...源|CSDN博客前言:工欲善其事,必先利其器。在对SpringCloud各部分组件进行具体介绍之前,我们会对SpringCloud微服务的基础SpringBoot进行介绍。SpringBoot是Spring一套快速配置开发的脚手架,可以基于SpringBoot快速集成开... 查看详情
94.springboot和springcloud的关系
参考技术A很多人新手对于SpringBoot和SpringCloud的关系说不清楚、理解不清楚,本文抽出点时间来进行分享下自己的理解,以帮助大家更好的理解两者之间的关系。其设计目的之初是用来简化Spring应用的初始搭建以及开发过程。很... 查看详情
springcloud总结(代码片段)
什么是Springcloud 构建分布式系统不需要复杂和容易出错。SpringCloud为最常见的分布式系统模式提供了一种简单且易于接受的编程模型,帮助开发人员构建有弹性的、可靠的、协调的应用程序。SpringCloud构建于SpringBoot之上,使... 查看详情
新手小白学习网络技术的小白贴
新人的几大问题,总结一下1.我是新手,学不会咋办。或者是,我不是IT这一行的,贸然入行,万一听不懂咋办答:谁也不是天生就是搞IT的,相信只要小学数学能毕业的人,能听懂中文的人,没有入不了门的。只有不努力的懒鬼... 查看详情
springcloud微服务升级总结
...发人员不再需要耗费大量精力去定义模板化的配置文件。SpringCloud是一个基于SpringBoot实现的云应用开发工具,它为基于JVM的云应用开发中的配置管理、服务注册,服务发现、断路器、智能路由、微代理、控制总线、全局锁、决策... 查看详情
一文讲完springcloud,2w字超详细总结
...话,我希望你们看完我这篇文章会恍然大悟。什么是Springcloud构建分布式系统不需要复杂和容易出错。SpringCloud为最常见的分布式系统模式提供了一种简单且易于接受的编程模型,帮助开发人员 查看详情
springcloud开发学习总结——客户端负载均衡ribbon
通过上一章《SpringCloud开发学习总结(三)——服务治理Eureka》,我们已经搭建起微服务架构中的核心组件——服务注册中心(包括单点模式和高可用模式)。同时还注册了一个服务,命名为hello-service。现在我们已经有了服... 查看详情
新手小白学java基础内容拓展链接汇总
JAVA基础内容拓展链接汇总Java基础部分需要学习很多的内容,其实学习就是一个逐步深入递进的过程从易到难,我们可以进行进一步的拓展希望本文可以帮助到你,本文是程序媛泡泡给大家总结的链接汇总,欢迎食用可以关注后... 查看详情
串口屏开发之新手入门引导——嵌入式小白也能开发出靓丽的ui界面
【系列专栏】:博主结合工作实践输出的,解决实际问题的专栏,朋友们看过来!《QT开发实战》《嵌入式通用开发实战》《嵌入式Linux开发实战 查看详情
一个编程小白,如何入门app软件开发领域?
...困难的事情。但是,App开发人员的工资那么诱人,让很多小白也跃跃欲试想学一下。那么,一个编程小白如何入门App软件开发领域呢?如何快速掌握App开发技术呢? 对于APP开发,如何选择原生与混合,小编的意见就是选择... 查看详情
springcloud-最简单的实战
技术储备Springcloud并不是面向零基础开发人员,它有一定的学习曲线。语言基础:springcloud是一个基于Java语言的工具套件,所以学习它需要一定的Java基础。当然,springcloud同样也支持使用Scala,Groovy等语言进行开发。Springboot:Spring... 查看详情
springcloud学习总结
最近花了一周的时间对springcloud的常用组件进行了一些入门级的了解,也破天荒的积极起来用博客进行了学习的记录,只是希望以后用的时候能对自己有所帮助,也希望给跟我一样对springcloud毫无了解的程序员一个springcloud常用组件... 查看详情
springcloud开发学习总结——结合注解的aop示例(代码片段)
面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术。AOP是OOP的延续,是软件开发中的一个热点,也是Spring框架中的一个重要内容,是函数式编程的一种衍生范型。利用AOP可以对业务逻辑的... 查看详情