Spring Boot Starters简介及其优劣势

简介

在启动任何项目(无论是小型项目还是企业级应用程序)之前,其中关键的方面之一是依赖管理,手动为小型应用程序执行依赖管理并不是一项困难的工作,但对于复杂的应用程序,手动管理所有项目依赖并不理想,容易出现许多问题以及浪费时间,而这些时间可以用于项目的其他一些重要方面。

Spring Boot背后的基本原理之一就是解决类似的问题。Spring Boot Starter是一套方便的依赖描述符,可以很容易地包含在任何级别的应用程序中。这些Starters作为Spring相关技术的引导过程,我们 不再需要担心依赖关系,它们将由Spring Boot Starters自动管理。

Starters包含了许多你需要的依赖项,以使项目快速启动和运行,并且具有一致的、被支持的一组管理传递依赖项。

1. 为什么我们需要Starters?

当我们用Spring Boot开始开发应用时,我们想到的一个基本问题就是为什么我们需要Spring Boot Starters? 或者这些Starters在我的应用中如何帮助到我?

如前所述,这些Starters用于引导应用程序,我们需要的只是在应用程序中包括正确的Starters,而Spring Boot将确保所选Starters所需的所有依赖项都在你的classpath中。

为了更清楚地理解它,我们举一个例子,我们想构建一个简单的Spring Web MVC应用程序,我们需要在开始编写我们的Web应用程序代码之前考虑以下几点。

  • 正确的Spring MVC依赖
  • Web技术所需的依赖(例如,我们想要使用Thymeleaf)
  • 我们需要确保所有这些依赖是兼容的

使用Spring Boot Starters来引导我们的Spring MVC Web应用程序非常简单,我们需要在我们的pom.xml中包含spring-boot-starter-web 这个starter:

<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-web</artifactId>
</dependency>

以上pom.xml中的条目将确保所有必需的依赖项都应位于classpath中,因此我们都准备好开始开发web应用程序了。

目前,Spring Boot提供的Starters约有50多个,这还不包括第三方的Starters。有关Starters的更新列表,请参阅Spring Boot Starter

接下来,我将介绍一些常用的Starters。

2. Web Starter

这是最常用的Spring Boot Starter之一,该Starter将确保创建Spring Web应用程序(包括REST)所需的所有依赖包括在你的calsspath中,它还将添加tomcat-starter作为默认服务器来运行我们的Web应用程序。 要在我们的应用程序中包含Web Starter,请在pom.xml中添加以下条目。

<dependency>
 <groupId>org.springframework.boot</groupId>
 <artifactId>spring-boot-starter-web</artifactId>
</dependency>

现在我们可以创建我们的Spring MVC Controller

 @RestController
 public class SampleController{

  @RequestMapping("/greeting")
  Stringhello(){
    return "HelloWorld!";
  }
}

如果你运行应用程序并访问 http://localhost:8080/greeting,你应该能够获得"Hello Word”作为响应。我们使用最少的代码创建了一个REST控制器。

3. Data JPA Starter

大多数应用程序需要一些持久性机制,而JPA是持久性的标准,Spring Boot Starters带有JPA Starters,你不再需要手动配置这些JPA依赖,而是可以通过在应用程序中添加JPA Starter轻松实现。

<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
  <groupId>com.h2database</groupId>
  <artifactId>h2</artifactId>
</dependency>

Spring JPA Starter提供对H2,Derby和Hsqldb的自动支持。让我们看看使用JPA starter创建一个JPA样例应用程序是多么容易。

@Entity
public class User{
  @Id
  @GeneratedValue(strategy = GenerationType.AUTO)
  private Long id;
  private String firstName;
  private String lastName;
  protected User(){
  }
  public User(String firstName, String lastName){
    //this.id = id;
    this.firstName = firstName;
    this.lastName = lastName;
  }
  public Long getId(){
    return id;
  }
  public void setId(Long id){
    this.id = id;
  }
  public String getFirstName(){
    return firstName;
  }
  public void setFirstName(String firstName){
    this.firstName = firstName;
  }
  public String getLastName(){
    return lastName;
  }
  public void setLastName(String lastName){
    this.lastName = lastName;
  }
  @Override
  public String toString(){
    return "User{" +
        "id=" + id +
        ", firstName='" + firstName + '\'' +
        ", lastName='" + lastName + '\'' +
        '}';
  }
}

如下是我们的UserRepository:

public interface UserRepositoryextends CrudRepository<User,Long>{
  List<User>findUserByLastName(String lastName);
}

接下来我们可以测试我们的代码了,如下是JUnit代码:

@RunWith(SpringRunner.class)
@SpringBootTest
public class JpademoApplicationTests{
  @Autowired
  UserRepository userRepository;
  @Test
  public void contextLoads(){
    User user = userRepository.save(new User("Demo","User"));
    User searchUser= userRepository.findOne(user.getId());
    assertNotNull(searchUser);
    assertEquals(user.getFirstName(),searchUser.getFirstName());
  }
}

正如我们在上面的代码中看到的那样,你不再需要指定那些数据库配置或额外的数据库配置,通过添加JPA starter,我们无需配置或编码即可获得许多开箱即用的功能。

如果需要,你始终可以修改或自定义这些配置。

4. Mail Starter

从应用程序发送电子邮件是非常常见的任务,现在每个应用程序都需要从系统发送电子邮件。Spring Boot Mail starter提供了一种隐藏所有复杂性的简单方法来处理此功能。

我们可以通过在应用程序中添加Mail starter来启用电子邮件支持。

<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-mail</artifactId>
</dependency>

我正在使用Mailgun作为我的SMTP服务器,以下是添加到我的application. properties文件中的SMTP详细信息:

spring.mail.host=smtp.mailgun.org
spring.mail.username=postmaster@domain.com
spring.mail.password=mypassword
spring.mail.properties.mail.transport.protocol=smtp
spring.mail.properties.mail.smtp.port=587
spring.mail.properties.mail.smtp.auth=true

我们的EmailService类负责发送邮件:

@Component
public class JavaEmailService{
  private JavaMailSender mailSender;
  public JavaEmailService(JavaMailSender mailSender){
    this.mailSender = mailSender;
  }
  public void sendEmail(){
    MimeMessagePreparator messagePreparator = mimeMessage -> {
      MimeMessageHelper helper = new MimeMessageHelper(mimeMessage);
      helper.setFrom("noreply@javadevjournal.com");
      helper.setTo("xxx@gmail.com");
      helper.setSubject("Sample mail subject");
      helper.setText("Test Email");
    };
    mailSender.send(messagePreparator);
  }
}

我们使用Spring提供的JavaMailSender来发送电子邮件。 JUnit测试代码如下:

@RunWith(SpringRunner.class)
@SpringBootTest
public class EmailTest{
  @Autowired
  JavaEmailService javaEmailService;
  @Test
  public void sendEmail(){
    javaEmailService.sendEmail();
  }
}

同样,只需简单的代码和配置即可发送一封简单的电子邮件,Spring Boot Mail Starter确保所有必需的工具已经到位,以快速开始解决实际问题。

请注意,我们在JavaEmailService bean中使用JavaMailSender - 该bean是由Spring Boot自动创建的。

5. Test Starter

我们通常使用Junit、Mockito或Spring Test来测试我们的应用程序。我们可以通过添加Spring Boot Test starter轻松地将所有这些库包含在我们的应用程序中。

<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-test</artifactId>
</dependency>

Spring Boot会自动找到我们正确的版本用于我们的应用程序测试。 这是一个JUnit示例测试:

@RunWith(SpringRunner.class)
@SpringBootTest
public class EmailTest{
  @Autowired
  JavaEmailService javaEmailService;
  @Test
  public void sendEmail(){
    javaEmailService.sendEmail();
  }
}

除了这些starter之外,下面还有其他常用的Spring Boot Starter

spring-boot-starter-security
spring-boot-starter-web-services
spring-boot-starter-integration
spring-boot-starter-validation
spring-boot-starter-actuator

如前所述,请参阅 Spring Boot Starter获取Spring Boot提供的Starter的最新列表。

总结

本文提供了一个Spring Boot Starters简介,我们讨论了为什么我们需要这些Starter以及他们如何帮助我们快速引导我们的应用程序。 我们探索了一些最常用的Spring Boot Starter。

(0)

相关推荐

  • 深入浅析Spring-boot-starter常用依赖模块

    Spring-boot的2大优点: 1.基于Spring框架的"约定优先于配置(COC)"理念以及最佳实践之路. 2.针对日常企业应用研发各种场景的Spring-boot-starter自动配置依赖模块,且"开箱即用"(约定spring-boot-starter- 作为命名前缀,都位于org.springframenwork.boot包或者命名空间下). 应用日志和spring-boot-starter-logging 常见的日志系统大致有:java.util默认提

  • Spring boot创建自定义starter的完整步骤

    前言: Springboot的出现极大的简化了开发人员的配置,而这之中的一大利器便是springboot的starter,starter是springboot的核心组成部分,springboot官方同时也为开发人员封装了各种各样方便好用的starter模块,例如: spring-boot-starter-web//spring MVC相关 spring-boot-starter-aop //切面编程相关 spring-boot-starter-cache //缓存相关 starter的出现极大的

  • 如何实现自己的spring boot starter

    前言 在使用spring boot开发的时候,我们有时候想要把自己的代码打包成类似spring-boot-starter-web的样式来导入到自己的中央仓库,然后其他项目就可以引用类似springboot那样的引用了,下面我们就实现一个类似的项目. 1.新建一个spring boot 项目,取名为mybootspringbootstarter,groupId和artifactId如下所示 <groupId>com.my.boot</groupId> <artifactId&g

  • SpringBoot封装自己的Starter的实现方法

    一.说明 我们在使用SpringBoot的时候常常要引入一些Starter,例如spring-boot-starter-web,官方为我们提供了几乎所有的默认配置,很好的降低了使用框架时的复杂度,所以在用xxx-starter的时候,可以不用费心去写一些繁琐的配置文件,即使必要的配置在application.properties或application.yml中配置就可以了,当你实现了一个Starter,可以在不同的项目中复用,非常方便,今天我们来编写自己的Starter以之前的短信业务为例.

  • springboot手写一个自己的starter源码

    springboot的最强大的就是那些xxxAutoconfiguration,但是这些xxxAutoConfiguration又依赖那些starter,只有导入了这些场景启动器(starter),我们很多自动配置类才能有用,并且还会新增一些功能,这次就来一起写个简单的starter,来看看内部到底是什么原理! 脑中大概有个印象:我们要用一个场景(比如web),直接导入下图所示的依赖,但是在jar包里面去看这个,你会发现里面只有一些基本的配置文件,什么类都没有,就能够想到这个一类就类似一个公司前

  • Spring Boot 自定义starter的示例代码

    SpringBoot 个人感觉特点: 1)众多库的集合(各种Starter),方便快速构建应用系统. 2)自动配置spring(通过AutoConfiguration机制),简化配置,也方便扩展新的Starter. 3)内嵌web容器,无需WAR部署. 创建一个用maven构建的springboot项目 pom文件配置如下: <?xml version="1.0" encoding="UTF-8"?> <project xmlns="ht

  • spring boot 自定义starter的实现教程

    spring boot 使用 starter 解决了很多配置问题, 但是, 他是怎么来解决这些问题的呢? 这里通过一个简单的例子, 来看一下, starter是怎么来设置默认配置的. 一. 建 starter 项目 自定义的starter, 项目命名规范是: 自定义名-spring-boot-starter 先来看一下, 我最后的目录结构 1. 修改pom.xml文件 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns

  • SpringBoot自定义starter实例代码

    一.简介 SpringBoot 最强大的功能就是把我们常用的场景抽取成了一个个starter(场景启动器),我们通过引入SpringBoot 为我提供的这些场景启动器,我们再进行少量的配置就能使用相应的功能.即使是这样,SpringBoot也不能囊括我们所有的使用场景,往往我们需要自定义starter,来简化我们对SpringBoot的使用. 下面话不多说了,来一起看看详细的介绍吧 二.如何自定义starter 1.实例 如何编写自动配置 ? 我们参照@WebMvcAutoConfigurati

  • 深入浅析 Spring Boot Starter

    Spring Boot 简介 Spring框架功能很强大,但是就算是一个很简单的项目,我们也要配置很多东西.因此就有了Spring Boot框架,它的作用很简单,就是帮我们自动配置.Spring Boot框架的核心就是自动配置,只要存在相应的jar包,Spring就帮我们自动配置.如果默认配置不能满足需求,我们还可以替换掉自动配置类,使用我们自己的配置.另外,Spring Boot还集成了嵌入式的Web服务器,系统监控等很多有用的功,让我们快速构建企业及应用程序. 依赖管理是任何复杂项目的关键部

  • springboot自定义Starter的具体流程

    自定义Starter命名规则 注意artifactId的命名规则,Spring官方Starter通常命名为spring-boot-starter-{name}如 spring-boot-starter-web, Spring官方建议非官方Starter命名应遵循{name}-spring-boot-starter的格式, 如mybatis-spring-boot-starter.这里创建的项目的artifactId为helloworld-spring-boot-starter 开发Starter

随机推荐