小白新手SpringCloud开发简单总结-SpringBoot概念

Posted 好人静

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了小白新手SpringCloud开发简单总结-SpringBoot概念相关的知识,希望对你有一定的参考价值。

目录

前言

一 SpringBoot概念

1.基本概念的引入

2.SpringBoot的特点

(1)快速搭建

(2)简化编码

(3)简化配置

(4)简化部署

(5)简化监控

二  快速搭建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中添加多个依赖,如

而现在使用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概念

小白新手SpringCloud开发简单总结-SpringBoot概念

SpringCloud 学习笔记总结

SpringCloud 学习笔记总结

快速构建Spring Cloud工程

用 Spring boot 简单搭建一个微服务项目