购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

2.2 快速启动Spring Boot

首先,我们将使用Spring Boot快速构建一个最基础的应用框架。我们可以通过Spring Boot初始化工具( https://start.spring.io/ ),如图2-1所示,完成项目框架的搭建,也可以从本书源码中获取项目代码,或从这里( https://github.com/cd826/springcloud-demo )下载示例项目源码。此外,在本书中都会使用Maven来进行项目的依赖管理,如果读者还对Maven不熟悉,可以从这里( http://t.cn/zHwU8G4 )进行了解。假如读者想在项目中使用Gradle而不是Maven,那么可以在IDE环境中直接将Maven脚本转换为Gradle,或通过手工进行转换。

图2-1 Spring Boot初始化工具

2.2.1 编写pom.xml文件

一旦创建或下载了该示例项目的框架代码,就可以开始着手编写Maven脚本代码了。Maven脚本文件默认为pom.xml,存放在项目根目录下。下面列出了本示例项目所使用的Maven脚本代码:


<?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/maven-v4_0_0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <!-- 这里将项目的父项目设置为Spring Boot,所使用版本为1.5.2.RELEASE -->
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.5.2.RELEASE</version>
    </parent>
    <!-- 这里设置本项目的groupId、artifactId和版本等信息 -->
    <groupId>cd826dong.cloud</groupId>
    <artifactId>cd826dong-clouds-boot</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>jar</packaging>
    <name>SpringCloud Demo Projects -- Spring Boot</name>
    <properties>
        <!-- 定义项目所使用的编码为UTF-8 -->
        <project.build.sourceEncoding>UTF-8</project.build.source
        Encoding> 
        <!-- 项目所用JDK 1.8,也可以使用低版本,但建议还是使用JDK 1.8以上版本-->
        <java.version>1.8</java.version>
        <maven.compiler.source>${java.version}</maven.compiler.source>
        <maven.compiler.target>${java.version}</maven.compiler.target>
        <!-- 项目所使用第三方包的版本,建议以后都采用这种方式,统一在一个地方声明版本
           号,这样对项目可以进行统一管理,方便以后升级 -->
        <guava.version>20.0</guava.version>
        <swagger.version>2.6.1</swagger.version>
    </properties>
    <dependencies>
        <!-- 项目所用Spring Boot starters:web -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>        
        <!-- Guava可以为我们提供缓存、集合等一些方便的工具类 -->
        <dependency>
            <groupId>com.google.guava</groupId>
            <artifactId>guava</artifactId>
            <version>${guava.version}</version>
        </dependency>
        <!-- test -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>
    <build>
        <plugins>
            <!-- 该插件限定Maven打包时所使用的版本,避免出现版本不匹配问题 -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.5.1</version>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                </configuration>
            </plugin>
            <!-- 该插件可以让Maven将工程直接打包成一个可以直接运行的JAR -->
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
</project>

对于本Maven脚本需要说明以下几个关键点。

·Spring Boot版本:这里采用1.5.2.RELEASE;

·Spring Boot Starter:这里仅添加了Web,说明这是一个Web应用;

·Guava:这是一个非常有用的工具库;

·spring-boot-maven-plugin插件:该插件可以将项目打包成一个Fat Jar,然后直接通过java-jar的方式运行。至于什么是Fat Jar,后面会详细说明。

说明: 在后续章节中,Maven脚本文件不会像这里一样全部列出,仅会列出关键或需要修改的部分。

2.2.2 编写应用引导类

对于Spring Boot应用来说,首先需要创建一个应用引导类。引导类的作用是让Spring Boot框架启动并初始化应用。引导类需要一个main(String[]args)主函数,并需要使用@SpringBootApplication注解标识。代码如下:


package com.cd826dong.clouddemo;
// 为了保持代码列表的清晰,这里及后续都会省略import相关的代码
import …;
// @SpringBootApplication注解可以让Spring Boot框架通过该类启动整个应用
@SpringBootApplication
public class Application {    
    public static void main(String[] args) throws Exception {
        // 调用SpringApplication启动一个Spring Boot应用
        SpringApplication.run(Application.class, args);
    }
}

在基于Spring Boot框架的应用中,@SpringBootApplication注解告诉Spring容器:使用该类作为所有Bean源,通过该起始点构建应用的上下文。@SpringBootApplication注解继承自@EnableAutoConfiguration和@ComponentScan,通过该注解使得项目在启动时Spring就会对该类所属目录下的所有子包进行扫描并根据Spring Boot的自动配置机制进行配置。

引导类如不在应用的根包中可能会造成部分配置或Bean无法被Spring扫描到,从而造成系统配置出错,导致启动失败。因此,建议读者在开始进行项目时始终将该引导类放在根包中,在我们的示例项目中根包就是com.cd826dong.clouddemo。如果项目中由于某些原因不能这么做的话,可以通过@ComponentScan注解进行修正,在@ComponentScan注解中可以配置需要扫描包的位置,代码如下:


package com.cd826dong.clouddemo.XXX.XX.application;
import …
@SpringBootApplication
// 这里我们通过@ComponentScan注解,将配置自动扫描的起始位置设置为com.cd826dong
@ComponentScan("com.cd826dong.**")
@EntityScan(basePackageClasses=User.class)
public class Application {
    public static void main(String[] args) throws Exception {
        SpringApplication.run(Application.class, args);
    }
}

假如在项目中所要扫描的包有多个,那么可以在注解中通过逗号(,)将这多个包路径分开,如@ComponentScan("com.cd826dong.**,com.cd825dong.**")。

上面示例代码中,Application类的main()方法调用了SpringApplication.run(),该方法会在项目启动时构建一个Spring容器,并返回一个ApplicationContext对象,也就是项目应用的上下文。对于ApplicationContext重要性,使用过Spring开发的读者都应该明白,但在这里因为不需要该对象做后续任何处理,所以没有列出来。

因此,在后续使用Spring Boot进行微服务应用开发时,一定要记得在引导类中添加@SpringBootApplication注解。对于引导类的类名,可以不是Application,读者可以根据项目实际需要进行改动。

还有一点需要说明的是,对于引导类来说其是整个应用启动的初始点,因此,如果在应用启动时需要进行某些初始化处理,那么最好都在该类中完成。

2.2.3 编写配置文件

对于一个Spring Boot应用,通常会有一个或多个配置文件,在配置文件中会存放应用所需的各项配置,如数据源、日志、启动端口等。Spring Boot配置文件支持properties和yml两种格式,默认文件名称都是application,存放在resources目录中。在本书的示例中会采用properties格式,如果读者喜欢使用yml格式,那么可以自行根据转换规则进行转换。本示例项目的配置文件(application.properties)内容如下:


# 应用启动后所监听的端口,可以不配置,默认就是8080端口
server.port=8080
# 配置日志输出级别,将Spring框架设置为INFO级别,而我们所编写的代码设置为DEBUG级别
logging.level.org.springframework=INFO
logging.level.com.cd826dong=DEBUG

2.2.4 运行项目

接下来就可以运行该项目了。启动运行方式有多种,比如可以选择直接在IDE中运行,如在笔者开发所用的IDEA中可以通过如图2-2所示的配置直接运行。

图2-2 在IDEA中直接启动项目

上面的方式开发调试非常方便。但是,对后续将要编写的微服务来说,更多的时候是打包成一个部署单元。在打包时就会使用之前我们在Maven脚本中所配置的spring-boot-maven-plugin插件,然后通过mvn clean package命令将项目打包成一个Fat Jar,在生产环境下可以直接使用下面的命令启动运行:


# 通过-jar直接启动
$ java -jar cd826dong-clouds-boot-0.0.1-SNAPSHOT.jar

应用成功启动后,在控制台中会看到如图2-3所示的输出。

图2-3 通过控制台启动项目

那么什么是Fat Jar呢?从字面意义上可以理解为胖Jar,也就是通过Maven打包所生成的这种Jar不仅仅包含本项目中源码所编译生成的Java类文件,还会包含项目所依赖的第三方库及有关项目启动的相关信息。比如,如果我们通过解压缩工具查看上面示例项目打包所生成的cd826dong-clouds-boot-0.0.1-SNAPSHOT.jar文件,可以看到在文件中会包含以下3个内容。

·项目代码:项目中所有源码经编译后会统一存放在BOOT-INF/classes目录下。

·项目依赖包:存放在BOOT-INF/lib目录下。

·应用启动相关文件:在org/springframework/boot/loader目录下则包含了Spring Boot启动时所需要的类。

还有一点需要说明的是,在本示例项目中我们只构建了一个简单的Java类,并通过该类中的main()函数启动运行,并没有在打包之后将文件部署到任何Web容器中进行运行。那么示例项目为何就可以作为一个Web应用启动了呢?Spring Boot又到底施展了什么“魔法”呢?如果仔细查看项目所依赖的包就会发现spring-boot-starter-web默认依赖了spring-boot-starter-tomcat,通过该依赖,Spring Boot在启动应用时就会启动一个内嵌的Tomcat容器,并在该容器中运行项目。如果不想使用Tomcat作为启动容器,而是使用Jetty,那么可以在pom.xml文件中排除对Tomcat的依赖,并增加spring-boot-starter-jetty即可。 Pjj5QpMTPsU7yYpcp2jqNPUyfKcwpp6gJcIHMEWYBuP7JHgX6OjQLbZMZjiltMyw

点击中间区域
呼出菜单
上一章
目录
下一章
×