javascript
Spring Boot完成示例
這篇文章提供了一個使用Spring Boot開發松耦合REST服務的完整示例。 使用spring boot,我們可以開發可獨立運行的生產就緒Java應用程序,它是獨立的應用程序,具有最小的依賴性,并且與其他應用程序的耦合較少。 大多數時候,Spring Boot應用程序將提供一個內聚的服務,并且服務的邊界是明確定義的。 讓我們深入研究我們的示例。
在本教程中,我將使用Spring Boot 2.0.3.RELEASE,它需要Java 8或9和Maven 3.2+(Eclipse)作為IDE。
創建Maven jar模塊
由于我們將應用程序打包為.jar文件,因此在將maven與Eclipse IDE集成之后,我們可以使用eclipse IDE支持來生成maven jar模塊。 Eclipse的最新版本帶有集成的maven插件。 因此,您無需將Maven插件顯式添加到Eclipse中。 我不會在這篇文章中解釋如何使用Eclipse創建Maven jar模塊。 如果您想知道它,可以在這里閱讀我的另一篇文章,其中清楚地說明了如何使用Eclipse創建Maven模塊。
如果使用quickstart工件創建maven項目,則將獲得類似于以下內容的項目結構。
我創建了一個名為“ customer”的maven模塊,其中“ com.semika”為groupId,“ customer”為工件ID。 您可以選擇所需的包裝結構。 您的內部包裝結構將因此而改變。
App.java和AppTest.java文件將很快刪除。 看一下pom.xml文件,其中包含有關項目的信息以及Maven用于構建項目的配置詳細信息。 由于本教程不涉及單元測試功能,因此您現在可以刪除Junit依賴項。
我想在這里強調一個重要因素。
<packaging> jar </ packaging>
在這里,我們告訴maven將應用程序捆綁為.jar文件進行部署。
添加Spring Boot功能
現在,我們有了典型的maven jar模塊。 我們如何將其轉換為Spring Boot應用程序?
所有Spring Boot依賴項都在Maven存儲庫中的org.springframework.boot組ID下定義。 spring-boot-starter-parent是一個項目,具有一些默認設置和基本必需的配置,我們可以使用它們來快速開始使用spring boot。
我們可以通過將以下元素添加到我們的pom.xml文件中來繼承這些默認設置。
<!-- Inherit defaults from Spring Boot --> <parent> <groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId> <version>2.0.3.RELEASE</version> </parent>連接到數據庫
現在,讓我們看看如何將Spring Boot應用程序與數據庫連接,或者如何將數據源集成到Spring Boot應用程序中。 Spring框架為通過直接JDBC訪問Hibernate等ORM技術訪問數據庫提供了強大的支持。
javax.sql.DataSource接口提供標準方法,以便通過使用連接池創建數據源來與數據庫一起使用。 有幾種實現,例如BoneCP,Apache通用DBCP2和spring的默認HikariCP。如果我們使用spring-boot-starter-jdbc或spring-boot-starter-data-jpa “啟動器”,我們將自動獲得對HikariCP的依賴。 在本教程的后面,我們將使用spring-boot-starter-data-jpa進行數據訪問。
現在,該將application.properties文件添加到我們的項目了。 在Spring Boot應用程序中,此文件包含所有配置屬性,并且該文件應在classpath上可用。 我將刪除App.java和AppTest.java文件,并在與main文件夾平行的main文件夾中創建一個新文件夾作為resources 。 使用maven構建模塊時,“資源”文件夾中的文件可用于classpath。 我們不需要提取任何東西。
讓我們在資源文件夾中創建一個文件作為application.properties 。 我將把我的spring boot應用程序連接到MySql數據庫。
為Spring Boot應用程序創建數據存儲所需的最小屬性如下。
spring.datasource.url=jdbc:mysql://localhost/springboot?useSSL=false spring.datasource.username=root spring.datasource.password=abc123 spring.datasource.driver-class-name=com.mysql.jdbc.Driverspring.jpa.database-platform=org.hibernate.dialect.MySQLDialect spring.jpa.show-sql=false在這里,屬性名稱約定不是隨機選擇的。 Spring的數據源配置屬性應以spring.datasource.*為前綴。 如果要設置特定的數據源實現,則應使用相應的前綴指定屬性名稱,例如spring.datasource.hikari.* , spring.datasource.tomcat.* , spring.datasource.dbcp2.* 。
由于我們將要連接到MySql數據庫,因此應如下所示將mysql-java connector maven依賴項添加到我們的pom.xml文件中。
<dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> </dependency>添加主應用程序類
每個spring boot應用程序都應該有一個定義了main()方法的主類。 通常,此類被命名為Application.java并且應位于其他類上方的根包中。 此類通常帶有少量注釋。
- @EnableAutoConfiguration –此批注為我們的Spring Boot應用程序啟用自動配置,該應用程序嘗試根據添加的jar依賴項自動配置我們的Spring應用程序。
- @ComponentScan –這通過使用@Autowired注釋啟用Spring bean依賴項注入功能。 我們所有的應用程序組件這是使用了@Component注解,@Service,@Repository或@Controller被自動注冊為Spring Bean。 可以使用@Autowired批注來注入這些bean。
- @Configuration –這可以為Spring Boot應用程序啟用基于Java的配置。 通常,定義main方法的類是使用此注釋進行注釋的很好的候選者。
我將在com.semika包內創建一個新類Application.java ,這是我的Spring Boot應用程序的根。
package com.semika;import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration;@EnableAutoConfiguration @ComponentScan @Configurationpublic class Application {public static void main(String[] args) {SpringApplication app = new SpringApplication(Application.class);app.run(args); } }代替使用所有三個注釋,我們只能使用@SpringBootApplication注釋,這等效于使用@ Configuration , @ EnableAutoConfiguration和@ComponentScan及其默認屬性,如以下示例所示。
package com.semika;import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration;@SpringBootApplication public class Application {public static void main(String[] args) {SpringApplication app = new SpringApplication(Application.class);app.run(args); } }使用spring-data-JPA添加數據訪問功能
現在,讓我們看看如何將數據訪問功能集成到我們的Spring Boot應用程序中。 數據訪問類在Spring Boot應用程序中稱為Repositories 。 JPA ( Java持久性API )是一種標準技術,可讓我們將對象“映射”到關系數據庫。
spring-boot-starter-data-jpa入門項目提供了一種快速啟動Spring Boot應用程序數據訪問的方法。 它提供以下關鍵依賴性:
- 使用Hibernate映射對象與數據庫表。
- Spring Data JPA,可用于編寫基于JPA的存儲庫。
- Spring框架對ORM的核心支持。
為了將數據訪問功能添加到我們的Spring Boot應用程序中,我們應該將以下maven依賴項添加到我們的pom.xml文件中。
添加波紋管依賴性之后,我們可以使用常規的JPA批注來映射具有關系數據庫表的對象。
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency>讓我們在com.semika根文件夾中創建一個新的customer包,該根文件夾是Application.java類現在所處的位置。 在客戶文件夾中,新的實體類創建為Customer.java 。
現在,我的客戶數據庫表具有以下三個屬性。
package com.semika.customer;import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.Table;@Entity @Table(name="customer") public class Customer {@Id@GeneratedValue(strategy = GenerationType.AUTO)private Long id;@Column(name="first_name")private String firstName;@Column(name="last_name")private String lastName;@Column(name="address")private String address;public Customer() {super();}// getters and setters }
Spring數據JPA存儲庫是可以定義為訪問數據的接口。 JPA查詢是根據方法名稱自動創建的。 例如, CustomerRepository.java類中的findAll()方法獲取所有客戶。 findByFirstName (String firstName)方法將獲取給定名字的所有客戶。
Spring Data存儲庫抽象中的中央接口是Repository接口。 它使用要管理的域類以及域類的ID類型作為類型參數CrudRepository接口為要管理的實體類提供復雜的CRUD功能。 我們的存儲庫接口應從CrudRepository接口擴展。
我們的CustomerRepository.java接口將如下所示:
package com.semika.customer;import org.springframework.data.repository.CrudRepository;public interface CustomerRepository extends CrudRepository<Customer Long> {}您可能會找到實現類? Spring數據JPA為大多數數據訪問方案提供了實現。 我們不需要顯式實現那些方法。 如果您想了解有關Spring數據JPA的更多信息,可以在此處閱讀參考文檔。
此外,我將添加CustomerService.java接口及其實現CustomerServiceImpl.java類,以將業務邏輯保持在單獨的層中。
package com.semika.customer;public interface CustomerService {public Iterable<Customer> findAll(); }package com.semika.customer; package com.semika.customer;import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service;@Service public class CustomerServiceImpl implements CustomerService {@Autowiredprivate CustomerRepository customerRepository;public Iterable<Customer> findAll() {return customerRepository.findAll(); } }您可以看到,CustomerRepository使用@Autowired批注注入到CustomerServiceImpl類。 我們確實通過在本教程的開頭通過@SpringBootApplication將@ComponentScan批注添加到我們的Application.java類中來實現了這一點。
添加網絡功能
現在,是時候構建和測試我們的應用程序了。 假設客戶端發出HTTP請求以獲取所有客戶數據。 因此,我們的spring boot應用程序應該響應HTTP請求。 Spring MVC提供了接受HTTP請求和響應的Controllers 。 在這里,我們將向我們的Spring Boot應用程序添加一些spring MVC功能。 通過使用spring-boot-starter-web項目,我們可以將一些基本的MVC功能集成到我們的spring boot應用程序中,以便我們可以編寫簡單的Controller類來響應客戶端的HTTP請求。
我們應該將以下Maven依賴項添加到我們的項目中。
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency>package com.semika.customer;import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.bind.annotation.RestController;@RestController public class CustomerController {@Autowiredprivate CustomerService customerService;@RequestMapping("/customers") @ResponseBodypublic Iterable<Customer> findAll() {Iterable<Customer> customers = customerService.findAll();return customers;} } @RestController是Spring MVC中的構造型注釋,它為人們閱讀代碼提供了提示,并為Spring提供了類扮演特定角色的提示。 也就是說,它包含進入應用程序的門。 在這種情況下,我們的類是一個Web @Controller ,因此Spring在處理傳入的Web請求時會考慮使用它。
@RestController注釋告訴Spring將結果字符串直接呈現回調用方。
@RequestMapping批注提供“路由”信息。 它告訴Spring,任何帶有/customers路徑的HTTP請求都應映射到findAll()方法。
這兩個注釋是Spring MVC注釋。 它們不特定于Spring Boot。 我們在今年Spring增加了MVC Web功能,以便通過發出一些Web請求來測試我們的應用程序。 通過將spring-boot-starter-web到spring boot應用程序中,在運行它時,spring boot應用程序將啟動它自己的Web容器并在其中運行。
所以現在,我們的項目結構應該如下。
建筑應用
Spring Boot jar文件被稱為一個獨立的可執行jar文件,我們可以在生產環境中直接運行它。 可執行的jar是包含您的已編譯類以及代碼需要運行的所有jar依賴項的歸檔文件。 在我們的示例中,由于我們使用了pring-boot-starter-web ,因此在運行jar文件時,它將啟動內部Web容器以運行應用程序。
要創建可執行jar,我們需要將spring-boot-maven-plugin到我們的pom.xml 。 為此,請在“插件”部分下方插入以下幾行。
<plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins>您可能會注意到此處缺少上述插件的某些配置。 由于我們使用的是spring-boot-starter-parent ,因此我們不必擔心這些,因為這些已包含在父項目中。 例如,父項目POM包含<executions>配置以綁定重新打包目標。
現在讓我們看一下最終的pom.xml文件:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.semika.user</groupId><artifactId>customer</artifactId><version>0.0.1-SNAPSHOT</version><packaging>jar</packaging><!-- Inherit defaults from Spring Boot --><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.0.3.RELEASE</version></parent><name>customer</name><url>http://maven.apache.org</url><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding></properties><!-- Building an executable jar file --><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build><dependencies><!-- Adding spring data jpa features --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-jpa</artifactId></dependency><!-- Java MySQL connector --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId></dependency><!-- Integrating spring MVC features --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency></dependencies> </project>讓我們來構建應用程序。 轉到pom.xml文件所在的項目根文件夾,然后運行以下命令。
mvn package在目標文件夾中,您可以看到我們的可執行jar文件創建為customer-0.0.1-SNAPSHOT.jar 。
運行應用程序
在同一文件夾中,運行以下命令以運行jar文件。
java -jar target/customer-0.0.1-SNAPSHOT.jar如果在啟動應用程序時分析日志,則會發現許多重要的事情。
服務器啟動時的控制臺輸出如下:
如果在底部附近看到日志,它將在端口8080上啟動Tomcat服務器。如果從瀏覽器訪問http://localhost:8080/customers URL,則將獲得客戶的JSON響應作為響應。
如果要在默認端口之外的其他端口上啟動應用程序,則可以通過使用--server.port選項指定端口,如下所示。
java --server.port=9000 -jar target/customer-0.0.1-SNAPSHOT.jar如果要在啟用調試的情況下啟動應用程序,則可以使用以下命令:
java -Xdebug -Xrunjdwp:server=y,transport=dt_socket,address=8000,suspend=n -jar target/customer-0.0.1-SNAPSHOT.jar要在啟用調試日志的情況下啟動應用程序,可以使用以下命令:
java -jar target/customer-0.0.1-SNAPSHOT.jar --debug如果要在“ application.properties ”文件中指定服務器正在運行的端口,則可以在文件中包括以下屬性。
server.port=${port:9000}使用application.properties文件中的上述條目,而不是使用--server.port選項,只需使用java -jar命令使用--port選項即可指定端口。
大多數時候,您的配置屬性因環境而異。 對于開發,生產和測試等環境,您可能需要保留不同的配置屬性集。 您可以通過為每個環境保留不同的配置配置文件來做到這一點。
為了實現此目的,您應該以以下格式創建配置屬性文件。
application-${profile}.properties假設您需要分別為“開發”和“生產”環境保留兩個配置文件。 在這種情況下,您應該創建兩個屬性文件,分別為application-development.properties和application-production.properties 。
使用java -jar命令啟動應用程序時,應使用-D參數指定概要文件,如下所示:
java -jar -Dspring.profiles.active=production customer-0.0.1-SNAPSHOT.jar我希望這篇文章對嘗試學習Spring Boot應用程序和Micro服務的初學者特別有用。
參考: Spring Boot參考指南
翻譯自: https://www.javacodegeeks.com/2018/07/spring-boot-complete-example.html
總結
以上是生活随笔為你收集整理的Spring Boot完成示例的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux文件行数统计(linux 文件
- 下一篇: rest spring_Spring R