Spring Boot Starters简介及其优劣势
简介
在启动任何项目(无论是小型项目还是企业级应用程序)之前,其中关键的方面之一是依赖管理,手动为小型应用程序执行依赖管理并不是一项困难的工作,但对于复杂的应用程序,手动管理所有项目依赖并不理想,容易出现许多问题以及浪费时间,而这些时间可以用于项目的其他一些重要方面。
SpringBoot背后的基本原理之一就是解决类似的问题。SpringBootStarter是一套方便的依赖描述符,可以很容易地包含在任何级别的应用程序中。这些Starters作为Spring相关技术的引导过程,我们不再需要担心依赖关系,它们将由SpringBootStarters自动管理。
Starters包含了许多你需要的依赖项,以使项目快速启动和运行,并且具有一致的、被支持的一组管理传递依赖项。
1.为什么我们需要Starters?
当我们用SpringBoot开始开发应用时,我们想到的一个基本问题就是为什么我们需要SpringBootStarters?或者这些Starters在我的应用中如何帮助到我?
如前所述,这些Starters用于引导应用程序,我们需要的只是在应用程序中包括正确的Starters,而SpringBoot将确保所选Starters所需的所有依赖项都在你的classpath中。
为了更清楚地理解它,我们举一个例子,我们想构建一个简单的SpringWebMVC应用程序,我们需要在开始编写我们的Web应用程序代码之前考虑以下几点。
- 正确的SpringMVC依赖
- Web技术所需的依赖(例如,我们想要使用Thymeleaf)
- 我们需要确保所有这些依赖是兼容的
使用SpringBootStarters来引导我们的SpringMVCWeb应用程序非常简单,我们需要在我们的pom.xml中包含spring-boot-starter-web这个starter:
org.springframework.boot spring-boot-starter-web
以上pom.xml中的条目将确保所有必需的依赖项都应位于classpath中,因此我们都准备好开始开发web应用程序了。
目前,SpringBoot提供的Starters约有50多个,这还不包括第三方的Starters。有关Starters的更新列表,请参阅SpringBootStarter
接下来,我将介绍一些常用的Starters。
2.WebStarter
这是最常用的SpringBootStarter之一,该Starter将确保创建SpringWeb应用程序(包括REST)所需的所有依赖包括在你的calsspath中,它还将添加tomcat-starter作为默认服务器来运行我们的Web应用程序。要在我们的应用程序中包含WebStarter,请在pom.xml中添加以下条目。
org.springframework.boot spring-boot-starter-web
现在我们可以创建我们的SpringMVCController
@RestController publicclassSampleController{ @RequestMapping("/greeting") Stringhello(){ return"HelloWorld!"; } }
如果你运行应用程序并访问http://localhost:8080/greeting,你应该能够获得"HelloWord”作为响应。我们使用最少的代码创建了一个REST控制器。
3.DataJPAStarter
大多数应用程序需要一些持久性机制,而JPA是持久性的标准,SpringBootStarters带有JPAStarters,你不再需要手动配置这些JPA依赖,而是可以通过在应用程序中添加JPAStarter轻松实现。
org.springframework.boot spring-boot-starter-data-jpa com.h2database h2
SpringJPAStarter提供对H2,Derby和Hsqldb的自动支持。让我们看看使用JPAstarter创建一个JPA样例应用程序是多么容易。
@Entity publicclassUser{ @Id @GeneratedValue(strategy=GenerationType.AUTO) privateLongid; privateStringfirstName; privateStringlastName; protectedUser(){ } publicUser(StringfirstName,StringlastName){ //this.id=id; this.firstName=firstName; this.lastName=lastName; } publicLonggetId(){ returnid; } publicvoidsetId(Longid){ this.id=id; } publicStringgetFirstName(){ returnfirstName; } publicvoidsetFirstName(StringfirstName){ this.firstName=firstName; } publicStringgetLastName(){ returnlastName; } publicvoidsetLastName(StringlastName){ this.lastName=lastName; } @Override publicStringtoString(){ return"User{"+ "id="+id+ ",firstName='"+firstName+'\''+ ",lastName='"+lastName+'\''+ '}'; } }
如下是我们的UserRepository:
publicinterfaceUserRepositoryextendsCrudRepository{ List findUserByLastName(StringlastName); }
接下来我们可以测试我们的代码了,如下是JUnit代码:
@RunWith(SpringRunner.class) @SpringBootTest publicclassJpademoApplicationTests{ @Autowired UserRepositoryuserRepository; @Test publicvoidcontextLoads(){ Useruser=userRepository.save(newUser("Demo","User")); UsersearchUser=userRepository.findOne(user.getId()); assertNotNull(searchUser); assertEquals(user.getFirstName(),searchUser.getFirstName()); } }
正如我们在上面的代码中看到的那样,你不再需要指定那些数据库配置或额外的数据库配置,通过添加JPAstarter,我们无需配置或编码即可获得许多开箱即用的功能。
如果需要,你始终可以修改或自定义这些配置。
4.MailStarter
从应用程序发送电子邮件是非常常见的任务,现在每个应用程序都需要从系统发送电子邮件。SpringBootMailstarter提供了一种隐藏所有复杂性的简单方法来处理此功能。
我们可以通过在应用程序中添加Mailstarter来启用电子邮件支持。
org.springframework.boot spring-boot-starter-mail
我正在使用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 publicclassJavaEmailService{ privateJavaMailSendermailSender; publicJavaEmailService(JavaMailSendermailSender){ this.mailSender=mailSender; } publicvoidsendEmail(){ MimeMessagePreparatormessagePreparator=mimeMessage->{ MimeMessageHelperhelper=newMimeMessageHelper(mimeMessage); helper.setFrom("noreply@javadevjournal.com"); helper.setTo("xxx@gmail.com"); helper.setSubject("Samplemailsubject"); helper.setText("TestEmail"); }; mailSender.send(messagePreparator); } }
我们使用Spring提供的JavaMailSender来发送电子邮件。JUnit测试代码如下:
@RunWith(SpringRunner.class) @SpringBootTest publicclassEmailTest{ @Autowired JavaEmailServicejavaEmailService; @Test publicvoidsendEmail(){ javaEmailService.sendEmail(); } }
同样,只需简单的代码和配置即可发送一封简单的电子邮件,SpringBootMailStarter确保所有必需的工具已经到位,以快速开始解决实际问题。
请注意,我们在JavaEmailServicebean中使用JavaMailSender-该bean是由SpringBoot自动创建的。
5.TestStarter
我们通常使用Junit、Mockito或SpringTest来测试我们的应用程序。我们可以通过添加SpringBootTeststarter轻松地将所有这些库包含在我们的应用程序中。
org.springframework.boot spring-boot-starter-test
SpringBoot会自动找到我们正确的版本用于我们的应用程序测试。这是一个JUnit示例测试:
@RunWith(SpringRunner.class) @SpringBootTest publicclassEmailTest{ @Autowired JavaEmailServicejavaEmailService; @Test publicvoidsendEmail(){ javaEmailService.sendEmail(); } }
除了这些starter之外,下面还有其他常用的SpringBootStarter
spring-boot-starter-security spring-boot-starter-web-services spring-boot-starter-integration spring-boot-starter-validation spring-boot-starter-actuator
如前所述,请参阅SpringBootStarter获取SpringBoot提供的Starter的最新列表。
总结
本文提供了一个SpringBootStarters简介,我们讨论了为什么我们需要这些Starter以及他们如何帮助我们快速引导我们的应用程序。我们探索了一些最常用的SpringBootStarter。