前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >SpringBoot 2.0 系列(二):流程详解(上)

SpringBoot 2.0 系列(二):流程详解(上)

作者头像
山禾说
发布2019-01-21 10:01:24
7320
发布2019-01-21 10:01:24
举报
文章被收录于专栏:Vi的技术博客Vi的技术博客

写在前面

本节将详细介绍如何使用Spring Boot。它涵盖了诸如项目管理及自动构建工具、自动配置以及如何运行应用程序等主题。我们还介绍了一些Spring Boot最佳实践。Spring Boot没有什么特别之处(它只是另一个我们可以使用的库),但是有一些约定俗成的建议(“习惯优于配置"),如果遵循这些建议,将使我们的开发过程变得更容易一些。

项目管理及自动构建工具

强烈建议您选择一个支持依赖项管理的构建系统,我们可以使用该系统得到发布到Maven中心仓库的组件。这里建议选择Maven或Gradle。虽然Spring Boot可以与其他构建系统(例如Ant)一起工作,但是它们并没有得到很好的支持。

1. 依赖关系管理

Spring Boot的每一个版本都提供了它所支持的一个被整理的依赖项列表。实际上,我们不需要为构建配置中的任何依赖项提供版本,因为Spring Boot会为我们管理这些依赖项,当我们升级Spring Boot的时候,这些依赖项也会以一致的方式升级。

当然如果需要,我们仍然可以指定一个版本并覆盖Spring Boot的默认项。 Spring引导的每个版本都与Spring框架的一个基本版本相关联。我们强烈建议您不要指定它的版本。

2. Maven

Maven用户可以从spring-boot-starter-parent项目继承来获得合理的默认值。parent项目提供以下特性:

  1. Java 1.8作为默认的编译器级别。
  2. UTF - 8编码。
  3. 一个继承自spring-boot-dependencies pom的依赖管理部分,管理通用依赖项的版本。
  4. 合理的插件配置
  5. 合理的资源过滤
2.1 继承 Parent POM

如果需要将项目配置为从spring-boot-starter-parent继承,请将 parent 设置为:

代码语言:javascript
复制
<!-- Inherit defaults from Spring Boot -->
<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.0.2.RELEASE</version>
</parent>

我们应该仅在此依赖项上指定Spring Boot版本号。如果我们导入其他starter,我们可以放心地省略版本号。

通过这种设置,我们还可以通过在自己的项目中覆盖属性来覆盖各个依赖项。例如,要升级到另一个Spring-Data release系列,我们可以在我们的pom.xml中添加以下内容:

代码语言:javascript
复制
<properties>
    <spring-data-releasetrain.version>Fowler-SR2</spring-data-releasetrain.version>
</properties>
2.2 不继承Parent POM

不是每个人都喜欢从spring-boot-starter那里继承。我们可能需要使用您自己的企业标准parent,或者我们可能希望显式声明所有的Maven配置。 如果我们不想使用spring-boot-starter-parent,我们仍然可以通过使用scope=import dependency来保持依赖关系管理(而不是插件管理)的好处,如下所示:

代码语言:javascript
复制
<dependencyManagement>
        <dependencies>
        <dependency>
            <!-- Import dependency management from Spring Boot -->
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-dependencies</artifactId>
            <version>2.0.2.RELEASE</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

前面的示例设置不允许我们通过使用属性来覆盖各个依赖项,如上所述。要实现相同的结果,我们需要在spring-boot-dependencies条目之前在我们的项目的依赖项管理中添加一个条目。例如,要升级到另一个Spring Data release,我们可以在我们的pom.xml中添加以下元素:

代码语言:javascript
复制
<dependencyManagement>
    <dependencies>
        <!-- Override Spring Data release train provided by Spring Boot -->
        <dependency>
            <groupId>org.springframework.data</groupId>
            <artifactId>spring-data-releasetrain</artifactId>
            <version>Fowler-SR2</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-dependencies</artifactId>
            <version>2.0.2.RELEASE</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

在前面的示例中,我们指定了一个BOM,但是任何依赖类型都可以以相同的方式重写。

3. 使用Spring Boot Maven Plugin

Spring Boot包含一个Maven插件,可以将项目打包为可执行jar。如果我们想使用这个插件,请将这个插件添加到< plugins>部分,如下例所示:

代码语言:javascript
复制
<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
    </plugins>
</build>
3. Gradle

springboot与gradle的结合篇幅较长,将放在后面单独来讲,敬请期待~

4. Starters

starters是一组依赖描述符,我们可以在应用程序中包括这些描述符。我们可以为所有Spring和相关技术提供一站式服务,而无需通过示例代码和复制粘贴的依赖描述符来进行搜索。例如,如果我们希望开始使用Spring和JPA进行数据库访问,在项目中包含Spring -boot-starter-data- JPA依赖项就好。 starters包含许多依赖项,我们需要这些依赖项来快速启动和运行项目,并且具有一组一致的、受支持的托管传递依赖项。

代码构建

Spring Boot不需要任何特定的代码布局来工作。然而,有一些最佳实践对于我们来说显然是很有帮助的。

1. 使用默认包

当一个类不包含包声明时,它被认为是在“默认包”中。一般不建议使用“默认包”,应该避免使用。它会给使用@ComponentScan、@EntityScan或@SpringBootApplication注解的Spring引导应用程序带来特别的问题,因为每个jar的每个类都被读取。

我们建议您遵循Java推荐的包命名约定,并使用一个反向的域名(例如,com.example.project)。

2. 定位 main application class

我们通常建议您将main class置于其他类之上的root packge中。@SpringBootApplication注释通常放在主类上,它隐式地为某些项定义了基本的“搜索包”。例如,如果我们正在编写一个JPA应用程序,则使用@ SpringBootApplication带注释的类的包来搜索@Entity项。使用根包还允许组件扫描只应用于项目。

如果我们不想使用@SpringBootApplication,那么它导入的@EnableAutoConfiguration和@ComponentScan注释定义了这种行为,因此我们也可以使用它。

下面的清单展示了一个典型的布局:

代码语言:javascript
复制
com
 +- example
 +- myapplication
     +- Application.java
     |
     +- customer
     |   +- Customer.java
     |   +- CustomerController.java
     |   +- CustomerService.java
     |   +- CustomerRepository.java
     |
     +- order
         +- Order.java
         +- OrderController.java
         +- OrderService.java
         +- OrderRepository.java

Application.java文件将声明主方法和基本的@SpringBootApplication,如下所示:

代码语言:javascript
复制
package com.example.myapplication;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class Application {

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }

}

配置类

Spring Boot支持基于java的配置。虽然可以将SpringApplication与XML源一起使用,但是我们通常建议您的配置源是一个@Configuration类。通常,定义主方法的类作为主要的@Configuration是一个很好的选择。

许多Spring配置示例已经在Internet上发布,它们使用XML配置。如果可能的话,始终尝试使用等效的基于java的配置。搜索Enable*注释可能是一个很好的起点。

1. 导入额外的配置类

不需要将所有的@Configuration放在一个类中。可以使用@Import注释来导入其他配置类,或者我们可以使用@ComponentScan自动提取所有Spring组件,包括@Configuration类。

2. 导入XML配置

如果必须使用基于XML的配置,建议从一个@Configuration类开始。然后可以使用@ImportResource注释来加载XML配置文件。


下节预告:

  • Auto-configuration
  • Spring bean和依赖项注入
  • 使用@SpringBootApplication注释 ...... 敬请期待 ~
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-06-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Vi的技术博客 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 写在前面
  • 项目管理及自动构建工具
    • 1. 依赖关系管理
      • 2. Maven
        • 2.1 继承 Parent POM
        • 3. 使用Spring Boot Maven Plugin
      • 3. Gradle
        • 4. Starters
        • 代码构建
          • 1. 使用默认包
            • 2. 定位 main application class
            • 配置类
              • 1. 导入额外的配置类
                • 2. 导入XML配置
                • 下节预告:
                相关产品与服务
                项目管理
                CODING 项目管理(CODING Project Management,CODING-PM)工具包含迭代管理、需求管理、任务管理、缺陷管理、文件/wiki 等功能,适用于研发团队进行项目管理或敏捷开发实践。结合敏捷研发理念,帮助您对产品进行迭代规划,让每个迭代中的需求、任务、缺陷无障碍沟通流转, 让项目开发过程风险可控,达到可持续性快速迭代。
                领券
                问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档