小白新手SpringCloud开发简单总结-SpringBoot概念
Posted 好人静
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了小白新手SpringCloud开发简单总结-SpringBoot概念相关的知识,希望对你有一定的参考价值。
目录
前言
在小白新手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开发简单总结-SpringBoot概念的主要内容,如果未能解决你的问题,请参考以下文章
小白新手SpringCloud开发简单总结-SpringBoot概念