Spring Boot Starters簡介及其優(yōu)劣勢
簡介
在啟動任何項(xiàng)目(無論是小型項(xiàng)目還是企業(yè)級應(yīng)用程序)之前,其中關(guān)鍵的方面之一是依賴管理,手動為小型應(yīng)用程序執(zhí)行依賴管理并不是一項(xiàng)困難的工作,但對于復(fù)雜的應(yīng)用程序,手動管理所有項(xiàng)目依賴并不理想,容易出現(xiàn)許多問題以及浪費(fèi)時間,而這些時間可以用于項(xiàng)目的其他一些重要方面。
Spring Boot背后的基本原理之一就是解決類似的問題。Spring Boot Starter是一套方便的依賴描述符,可以很容易地包含在任何級別的應(yīng)用程序中。這些Starters作為Spring相關(guān)技術(shù)的引導(dǎo)過程,我們 不再需要擔(dān)心依賴關(guān)系,它們將由Spring Boot Starters自動管理。
Starters包含了許多你需要的依賴項(xiàng),以使項(xiàng)目快速啟動和運(yùn)行,并且具有一致的、被支持的一組管理傳遞依賴項(xiàng)。
1. 為什么我們需要Starters?
當(dāng)我們用Spring Boot開始開發(fā)應(yīng)用時,我們想到的一個基本問題就是為什么我們需要Spring Boot Starters? 或者這些Starters在我的應(yīng)用中如何幫助到我?
如前所述,這些Starters用于引導(dǎo)應(yīng)用程序,我們需要的只是在應(yīng)用程序中包括正確的Starters,而Spring Boot將確保所選Starters所需的所有依賴項(xiàng)都在你的classpath中。
為了更清楚地理解它,我們舉一個例子,我們想構(gòu)建一個簡單的Spring Web MVC應(yīng)用程序,我們需要在開始編寫我們的Web應(yīng)用程序代碼之前考慮以下幾點(diǎn)。
- 正確的Spring MVC依賴
- Web技術(shù)所需的依賴(例如,我們想要使用Thymeleaf)
- 我們需要確保所有這些依賴是兼容的
使用Spring Boot Starters來引導(dǎo)我們的Spring MVC Web應(yīng)用程序非常簡單,我們需要在我們的pom.xml中包含spring-boot-starter-web 這個starter:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency>
以上pom.xml中的條目將確保所有必需的依賴項(xiàng)都應(yīng)位于classpath中,因此我們都準(zhǔn)備好開始開發(fā)web應(yīng)用程序了。
目前,Spring Boot提供的Starters約有50多個,這還不包括第三方的Starters。有關(guān)Starters的更新列表,請參閱Spring Boot Starter
接下來,我將介紹一些常用的Starters。
2. Web Starter
這是最常用的Spring Boot Starter之一,該Starter將確保創(chuàng)建Spring Web應(yīng)用程序(包括REST)所需的所有依賴包括在你的calsspath中,它還將添加tomcat-starter作為默認(rèn)服務(wù)器來運(yùn)行我們的Web應(yīng)用程序。 要在我們的應(yīng)用程序中包含Web Starter,請在pom.xml中添加以下條目。
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency>
現(xiàn)在我們可以創(chuàng)建我們的Spring MVC Controller
@RestController public class SampleController{ @RequestMapping("/greeting") Stringhello(){ return "HelloWorld!"; } }
如果你運(yùn)行應(yīng)用程序并訪問 http://localhost:8080/greeting,你應(yīng)該能夠獲得"Hello Word”作為響應(yīng)。我們使用最少的代碼創(chuàng)建了一個REST控制器。
3. Data JPA Starter
大多數(shù)應(yīng)用程序需要一些持久性機(jī)制,而JPA是持久性的標(biāo)準(zhǔn),Spring Boot Starters帶有JPA Starters,你不再需要手動配置這些JPA依賴,而是可以通過在應(yīng)用程序中添加JPA Starter輕松實(shí)現(xiàn)。
<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創(chuàng)建一個JPA樣例應(yīng)用程序是多么容易。
@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()); } }
正如我們在上面的代碼中看到的那樣,你不再需要指定那些數(shù)據(jù)庫配置或額外的數(shù)據(jù)庫配置,通過添加JPA starter,我們無需配置或編碼即可獲得許多開箱即用的功能。
如果需要,你始終可以修改或自定義這些配置。
4. Mail Starter
從應(yīng)用程序發(fā)送電子郵件是非常常見的任務(wù),現(xiàn)在每個應(yīng)用程序都需要從系統(tǒng)發(fā)送電子郵件。Spring Boot Mail starter提供了一種隱藏所有復(fù)雜性的簡單方法來處理此功能。
我們可以通過在應(yīng)用程序中添加Mail starter來啟用電子郵件支持。
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-mail</artifactId> </dependency>
我正在使用Mailgun作為我的SMTP服務(wù)器,以下是添加到我的application. properties文件中的SMTP詳細(xì)信息:
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類負(fù)責(zé)發(fā)送郵件:
@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來發(fā)送電子郵件。 JUnit測試代碼如下:
@RunWith(SpringRunner.class) @SpringBootTest public class EmailTest{ @Autowired JavaEmailService javaEmailService; @Test public void sendEmail(){ javaEmailService.sendEmail(); } }
同樣,只需簡單的代碼和配置即可發(fā)送一封簡單的電子郵件,Spring Boot Mail Starter確保所有必需的工具已經(jīng)到位,以快速開始解決實(shí)際問題。
請注意,我們在JavaEmailService bean中使用JavaMailSender - 該bean是由Spring Boot自動創(chuàng)建的。
5. Test Starter
我們通常使用Junit、Mockito或Spring Test來測試我們的應(yīng)用程序。我們可以通過添加Spring Boot Test starter輕松地將所有這些庫包含在我們的應(yīng)用程序中。
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> </dependency>
Spring Boot會自動找到我們正確的版本用于我們的應(yīng)用程序測試。 這是一個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的最新列表。
總結(jié)
本文提供了一個Spring Boot Starters簡介,我們討論了為什么我們需要這些Starter以及他們?nèi)绾螏椭覀兛焖僖龑?dǎo)我們的應(yīng)用程序。 我們探索了一些最常用的Spring Boot Starter。
- SpringBoot啟動器Starters使用及原理解析
- springboot中如何使用自定義兩級緩存
- SpringBoot自定義注解API數(shù)據(jù)加密和簽名校驗(yàn)
- SpringBoot實(shí)現(xiàn)自定義配置文件提示的方法
- 詳解如何為SpringBoot項(xiàng)目中的自定義配置添加IDE支持
- Springboot實(shí)現(xiàn)自定義錯誤頁面的方法(錯誤處理機(jī)制)
- SpringBoot中干掉Whitelabel Error Page返回自定義內(nèi)容的實(shí)現(xiàn)
- Prometheus 入門教程之SpringBoot 實(shí)現(xiàn)自定義指標(biāo)監(jiān)控
- Springboot Druid 自定義加密數(shù)據(jù)庫密碼的幾種方案
- SpringBoot 利用thymeleaf自定義錯誤頁面
- SpringBoot中自定義注解實(shí)現(xiàn)參數(shù)非空校驗(yàn)的示例
- SpringBoot自定義注解使用讀寫分離Mysql數(shù)據(jù)庫的實(shí)例教程
- 使用SpringBoot自定義starter的完整步驟
- 淺談SpringBoot如何自定義Starters
相關(guān)文章
MyEclipse整合ssh三大框架環(huán)境搭載用戶注冊源碼下載
這篇文章主要為大家詳細(xì)介紹了如何使用MyEclipse整合ssh三大框架進(jìn)行環(huán)境搭載,具有一定的參考價值,感興趣的小伙伴們可以參考一下2016-10-10SpringBoot整合Mybatis,解決TypeAliases配置失敗的問題
這篇文章主要介紹了SpringBoot整合Mybatis,解決TypeAliases配置失敗的問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-07-07spring boot org.junit.jupiter.api不存在的解決
這篇文章主要介紹了spring boot org.junit.jupiter.api不存在的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-09-09SpringCloud引入feign失敗或找不到@EnableFeignClients注解問題
這篇文章主要介紹了SpringCloud引入feign失敗或找不到@EnableFeignClients注解問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-03-03