文章目录

  • Web Start
  • Test Starter
  • Data JPA Starter
  • Mail Starter
  • 结论

对于任何一个复杂项目来说,依赖关系都是一个非常需要注意和消息的方面,虽然重要,但是我们也不需要花太多的时间在上面,因为依赖毕竟只是框架,我们重点需要关注的还是程序业务本身。

这就是为什么会有Spring Boot starters的原因。Starter POMs 是一系列可以被引用的依赖集合,只需要引用一次就可以获得所有需要使用到的依赖。

Spring Boot有超过30个starts, 本文将介绍比较常用到的几个。

Web Start

如果我们需要开发MVC程序或者REST服务,那么我们需要使用到Spring MVC,Tomcat,JSON等一系列的依赖。但是使用Spring Boot Start,一个依赖就够了:

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

现在我们就可以创建REST Controller了:

@RestController
public class GenericEntityController {private List<GenericEntity> entityList = new ArrayList<>();@RequestMapping("/entity/all")public List<GenericEntity> findAll() {return entityList;}@RequestMapping(value = "/entity", method = RequestMethod.POST)public GenericEntity addEntity(GenericEntity entity) {entityList.add(entity);return entity;}@RequestMapping("/entity/findby/{id}")public GenericEntity findById(@PathVariable Long id) {return entityList.stream().filter(entity -> entity.getId().equals(id)).findFirst().get();}
}

这样我们就完成了一个非常简单的Spring Web程序。

Test Starter

在测试中,我们通常会用到Spring Test, JUnit, Hamcrest, 和 Mockito这些依赖,Spring也有一个starter集合:

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

注意,你并不需要指定artifact的版本号,因为这一切都是从spring-boot-starter-parent 的版本号继承过来的。后面升级的话,只需要升级parent的版本即可。具体的应用可以看下本文的例子。

接下来让我们测试一下刚刚创建的controller:

这里我们使用mock。

@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest(classes = Application.class)
@WebAppConfiguration
public class SpringBootApplicationIntegrationTest {@Autowiredprivate WebApplicationContext webApplicationContext;private MockMvc mockMvc;@Beforepublic void setupMockMvc() {mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext).build();}@Testpublic void givenRequestHasBeenMade_whenMeetsAllOfGivenConditions_thenCorrect()throws Exception {MediaType contentType = new MediaType(MediaType.APPLICATION_JSON.getType(),MediaType.APPLICATION_JSON.getSubtype(), Charset.forName("utf8"));mockMvc.perform(MockMvcRequestBuilders.get("/entity/all")).andExpect(MockMvcResultMatchers.status().isOk()).andExpect(MockMvcResultMatchers.content().contentType(contentType)).andExpect(jsonPath("$", hasSize(4)));}
}

上面的例子,我们测试了/entity/all接口,并且验证了返回的JSON。

这里@WebAppConfiguration 和 MockMVC 是属于 spring-test 模块, hasSize 是一个Hamcrest 的匹配器, @Before 是一个 JUnit 注解.所有的一切,都包含在一个starter中。

Data JPA Starter

如果想使用JPA,我们可以这样:

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

我们接下来创建一个repository:

public interface GenericEntityRepository extends JpaRepository<GenericEntity, Long> {}

然后是JUnit测试:

@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest(classes = Application.class)
public class SpringBootJPATest {@Autowiredprivate GenericEntityRepository genericEntityRepository;@Testpublic void givenGenericEntityRepository_whenSaveAndRetreiveEntity_thenOK() {GenericEntity genericEntity =genericEntityRepository.save(new GenericEntity("test"));GenericEntity foundedEntity =genericEntityRepository.findById(genericEntity.getId()).orElse(null);assertNotNull(foundedEntity);assertEquals(genericEntity.getValue(), foundedEntity.getValue());}
}

这里我们测试了JPA自带的save, findById方法。 可以看到我们没有做任何的配置,Spring boot自动帮我们完成了所有操作。

Mail Starter

在企业开发中,发送邮件是一件非常常见的事情,如果直接使用 Java Mail API会比较复杂。如果使用Spring boot:

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

这样我们就可以直接使用JavaMailSender,前提是需要配置mail的连接属性如下:

spring.mail.host=localhost
spring.mail.port=25
spring.mail.default-encoding=UTF-8

接下来我们来写一些测试案例。

为了发送邮件,我们需要一个简单的SMTP服务器。在本例中,我们使用Wiser。

<dependency><groupId>org.subethamail</groupId><artifactId>subethasmtp</artifactId><version>3.1.7</version><scope>test</scope>
</dependency>

下面是如何发送的代码:

@RunWith(SpringRunner.class)
@SpringBootTest(classes = Application.class)
public class SpringBootMailTest {@Autowiredprivate JavaMailSender javaMailSender;private Wiser wiser;private String userTo = "user2@localhost";private String userFrom = "user1@localhost";private String subject = "Test subject";private String textMail = "Text subject mail";@Beforepublic void setUp() throws Exception {final int TEST_PORT = 25;wiser = new Wiser(TEST_PORT);wiser.start();}@Afterpublic void tearDown() throws Exception {wiser.stop();}@Testpublic void givenMail_whenSendAndReceived_thenCorrect() throws Exception {SimpleMailMessage message = composeEmailMessage();javaMailSender.send(message);List<WiserMessage> messages = wiser.getMessages();assertThat(messages, hasSize(1));WiserMessage wiserMessage = messages.get(0);assertEquals(userFrom, wiserMessage.getEnvelopeSender());assertEquals(userTo, wiserMessage.getEnvelopeReceiver());assertEquals(subject, getSubject(wiserMessage));assertEquals(textMail, getMessage(wiserMessage));}private String getMessage(WiserMessage wiserMessage)throws MessagingException, IOException {return wiserMessage.getMimeMessage().getContent().toString().trim();}private String getSubject(WiserMessage wiserMessage) throws MessagingException {return wiserMessage.getMimeMessage().getSubject();}private SimpleMailMessage composeEmailMessage() {SimpleMailMessage mailMessage = new SimpleMailMessage();mailMessage.setTo(userTo);mailMessage.setReplyTo(userFrom);mailMessage.setFrom(userFrom);mailMessage.setSubject(subject);mailMessage.setText(textMail);return mailMessage;}
}

在上面的例子中,@Before 和 @After 分别用来启动和关闭邮件服务器。

结论

本文介绍了一些常用的starts,具体例子可以参考 spring-boot-starts

更多精彩内容且看:

  • 区块链从入门到放弃系列教程-涵盖密码学,超级账本,以太坊,Libra,比特币等持续更新
  • Spring Boot 2.X系列教程:七天从无到有掌握Spring Boot-持续更新
  • Spring 5.X系列教程:满足你对Spring5的一切想象-持续更新
  • java程序员从小工到专家成神之路(2020版)-持续更新中,附详细文章教程

更多教程请参考 flydean的博客

Spring Boot Starters介绍相关推荐

  1. 服务监控 Spring Boot Actuator 介绍

    服务监控 Spring Boot Actuator 介绍 1. 概述 在本文中,我们将介绍Spring Boot Actuator.首先介绍一些Actuator的基础知识,然后详细讨论Spring B ...

  2. Spring Boot开发介绍

    Spring Boot开发介绍 Spring Boot介绍 安装Spring Boot插件 创建Spring Boot项目 Idea 创建Spring Boot项目失败 解决方法1-更换为aliyun ...

  3. Spring Boot Starters是什么?

    这个是Springboot的新发明 降低了项目开始开发的复杂程度. 但是starters到底是什么呢? 如果我们想要在spring中用JPA 传统的做法是: 在Maven中引入使用数据库的依赖(JDB ...

  4. Spring Boot Starters

    Spring Boot Starters 摘自 https://www.nosuchfield.com/2017/10/15/Spring-Boot-Starters/ 2017-10-15 Spri ...

  5. Spring Boot Starters启动器的简介说明

    转自: Spring Boot Starters启动器的简介说明 下文笔者将讲述Spring Boot starter启动器的简介说明,如下所示: Starter是什么 Starters英文意思是:启 ...

  6. 官方Spring Boot starters整理

    Spring Boot starters Spring Boot 的功能组件(例如 spring-boot-starter-actuator. spring-boot-starter-data-red ...

  7. Spring Boot Starters简单介绍

    1.概述 依赖管理是任何复杂项目的关键方面.手动完成此操作并不理想; 你花在它上面的时间越多,你在项目的其他重要方面所花费的时间就越少. 构建Spring Boot启动器是为了解决这个问题.Start ...

  8. Spring Boot 框架介绍和使用

    本文参考自Spring Boot文档. Spring Boot 简介 Spring框架功能很强大,但是就算是一个很简单的项目,我们也要配置很多东西.因此就有了Spring Boot框架,它的作用很简单 ...

  9. spring boot入门 -- 介绍和第一个例子

    "越来越多的企业选择使用spring boot 开发系统,spring boot牛在什么地方?难不难学?心动不如行动,让我们一起开始学习吧!" 使用Spring boot ,可以轻 ...

最新文章

  1. KubeNode:阿里巴巴云原生 容器基础设施运维实践
  2. boost::metis_reader用法的测试程序
  3. 常见Java面试题 线程和进程的区别?
  4. duilib入门问题集
  5. 简单的选项卡功能实现
  6. python turtle画熊猫人_Python 使用turtle插件,画小猪佩奇
  7. Msmq设计文档(赋源代码)
  8. 分享一个帮助你有效避免SQL Injection攻击的在线手册 - bbobby-tables.com
  9. gopython 获取python 全局线程锁失败_Python之路(第四十三篇)线程的生命周期、全局解释器锁...
  10. 空间频率(lp/mm,cycles/mm,lp/mrad,cycles/mrad)
  11. 数据清洗挑战Day1 | 手把手教你处理数据集中的缺失值
  12. 记录从网页下载ppt的过程。
  13. 大学生搜题软件哪个好?2020搜题软件排行榜
  14. mysql提权(mof udf 反弹端口)
  15. Guided Anchor论文笔记
  16. 那场泡沫破碎的一刻,已宣判了一生。
  17. 求一元二次方程根(含虚根)
  18. 监控服务器时间无法修改怎么办,监控服务器目录修改时间
  19. 7-1 树的同构 【已改正】
  20. STC89C52RC单片机额外篇 | 04 - 认识头文件<intrins.h>与_nop_函数

热门文章

  1. 工资管理信息系统java_java+sql server,工资管理信息系统,源程序+数据库+报告
  2. 二进制位交换,反转,与统计1的个数
  3. 视音频数据处理入门:AAC音频码流解析
  4. 最简单的基于FFmpeg的AVDevice例子(屏幕录制)
  5. 交换网络中的嗅探和ARP欺骗
  6. 单元测试之带你搞懂Mockito使用
  7. SQL 查找是否存在,别再 COUNT 了,很耗费时间的
  8. 科普|什么是负载均衡
  9. 它来了,阿里架构师的“Java多线程+并发编程”知识点详解手册,限时分享
  10. 什么是 Go runtime.KeepAlive?