javascript
spring boot示例_Spring Boot完成示例
spring boot示例
這篇文章提供了一個使用Spring Boot開發(fā)松耦合的REST服務(wù)的完整示例。 使用spring boot,我們可以開發(fā)可獨立運行的生產(chǎn)就緒的Java應(yīng)用程序,使其成為獨立的應(yīng)用程序,它具有最小的依賴關(guān)系并且與其他應(yīng)用程序的耦合較少。 大多數(shù)時候,Spring Boot應(yīng)用程序?qū)⑻峁┮粋€內(nèi)聚的服務(wù),并且服務(wù)的邊界是明確定義的。 讓我們深入我們的示例。
在本教程中,我將使用Spring Boot 2.0.3.RELEASE,它需要Java 8或9和Maven 3.2 +,Eclipse作為IDE。
創(chuàng)建Maven jar模塊
由于我們將應(yīng)用程序打包為.jar文件,因此在將maven與Eclipse IDE集成之后,我們可以使用eclipse IDE支持來生成maven jar模塊。 Eclipse的最新版本帶有集成的maven插件。 因此,您無需將Maven插件顯式添加到eclipse中。 我不會在這篇文章中解釋如何使用Eclipse創(chuàng)建Maven jar模塊。 如果您想知道它,可以在這里閱讀我的另一篇文章,其中清楚地說明了有關(guān)使用Eclipse創(chuàng)建Maven模塊的信息。
如果使用quickstart工件創(chuàng)建maven項目,則將獲得類似于以下內(nèi)容的項目結(jié)構(gòu)。
我創(chuàng)建了一個名為'customer'的maven模塊,其中'com.semika'為groupId,而'customer'為工件ID。 您可以選擇所需的包裝結(jié)構(gòu)。 您的內(nèi)部包裝結(jié)構(gòu)將因此而改變。
App.java和AppTest.java文件將很快刪除。 看一下pom.xml文件,該文件包含有關(guān)項目的信息以及Maven用于構(gòu)建項目的配置詳細(xì)信息。 由于本教程不涉及單元測試功能,因此您現(xiàn)在可以刪除Junit依賴項。
我想在這里強調(diào)一個重要因素。
<packaging> jar </ packaging>
在這里,我們告訴maven將我們的應(yīng)用程序捆綁為.jar文件進(jìn)行部署。
添加Spring Boot功能
現(xiàn)在,我們有了典型的maven jar模塊。 我們?nèi)绾螌⑵滢D(zhuǎn)換為Spring Boot應(yīng)用程序?
所有的Spring Boot依賴項都在Maven存儲庫中的org.springframework.boot組ID下定義。 spring-boot-starter-parent是一個項目,具有一些默認(rèn)設(shè)置和基本必需的配置,我們可以使用它們來快速開始使用spring boot。
我們可以通過將以下元素添加到我們的pom.xml文件中來繼承這些默認(rèn)設(shè)置。
<!-- Inherit defaults from Spring Boot --> <parent> <groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId> <version>2.0.3.RELEASE</version> </parent>連接到數(shù)據(jù)庫
現(xiàn)在,讓我們看看如何將Spring Boot應(yīng)用程序與數(shù)據(jù)庫連接,或者如何將數(shù)據(jù)源集成到Spring Boot應(yīng)用程序。 Spring框架為通過直接JDBC訪問Hibernate等ORM技術(shù)訪問數(shù)據(jù)庫提供了強大的支持。
javax.sql.DataSource接口提供標(biāo)準(zhǔn)方法,以便通過使用連接池創(chuàng)建數(shù)據(jù)源來與數(shù)據(jù)庫一起使用。 有幾種實現(xiàn)方式,例如BoneCP,Apache通用DBCP2和spring的默認(rèn)HikariCP。如果我們使用spring-boot-starter-jdbc或spring-boot-starter-data-jpa “啟動器”,我們將自動獲得對HikariCP的依賴。 在本教程的后面,我們將使用spring-boot-starter-data-jpa進(jìn)行數(shù)據(jù)訪問。
現(xiàn)在,該將application.properties文件添加到我們的項目了。 在Spring Boot應(yīng)用程序中,此文件包含所有配置屬性,并且該文件應(yīng)在classpath上可用。 我將刪除App.java和AppTest.java文件,并在與main文件夾平行的main文件夾中創(chuàng)建一個新文件夾作為resources 。 使用maven構(gòu)建模塊時,“資源”文件夾中的文件可用于classpath。 我們不需要提取任何東西。
讓我們在資源文件夾中創(chuàng)建一個文件作為application.properties 。 我將把我的spring boot應(yīng)用程序連接到MySql數(shù)據(jù)庫。
為Spring Boot應(yīng)用程序創(chuàng)建數(shù)據(jù)存儲所需的最小屬性如下。
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的數(shù)據(jù)源配置屬性應(yīng)以spring.datasource.*為前綴。 如果要設(shè)置特定的數(shù)據(jù)源實現(xiàn),則應(yīng)使用相應(yīng)的前綴指定屬性名稱,例如spring.datasource.hikari.* , spring.datasource.tomcat.* , spring.datasource.dbcp2.* 。
由于我們將要連接到MySql數(shù)據(jù)庫,因此應(yīng)如下所示將mysql-java connector maven依賴項添加到我們的pom.xml文件中。
<dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> </dependency>添加主應(yīng)用程序類
每個spring boot應(yīng)用程序都應(yīng)該有一個定義了main()方法的主類。 通常,此類被命名為Application.java并且應(yīng)位于其他類上方的根包中。 此類通常帶有少量注釋。
- @EnableAutoConfiguration-此注釋為我們的Spring Boot應(yīng)用程序啟用自動配置,該應(yīng)用程序嘗試根據(jù)添加的jar依賴項自動配置我們的Spring應(yīng)用程序。
- @ComponentScan –這通過使用@Autowired注釋啟用Spring bean依賴項注入功能。 我們所有的應(yīng)用程序組件這是使用了@Component注解,@Service,@Repository或@Controller被自動注冊為Spring Bean。 可以使用@Autowired批注注入這些bean。
- @Configuration –這可以為Spring Boot應(yīng)用程序啟用基于Java的配置。 通常,定義main方法的類是使用此注釋進(jìn)行注釋的很好的候選者。
我要在com.semika包中創(chuàng)建一個新類Application.java ,這是我的Spring Boot應(yīng)用程序的根。
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及其默認(rèn)屬性,如以下示例所示。
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添加數(shù)據(jù)訪問功能
現(xiàn)在,讓我們看看如何將數(shù)據(jù)訪問功能集成到我們的Spring Boot應(yīng)用程序中。 數(shù)據(jù)訪問類在Spring Boot應(yīng)用程序中稱為Repositories 。 JPA ( Java持久性API )是一種標(biāo)準(zhǔn)技術(shù),可讓我們將對象“映射”到關(guān)系數(shù)據(jù)庫。
spring-boot-starter-data-jpa啟動程序項目提供了一種快速啟動Spring Boot應(yīng)用程序數(shù)據(jù)訪問的方法。 它提供以下關(guān)鍵依賴性:
- 使用Hibernate映射對象與數(shù)據(jù)庫表。
- Spring Data JPA,可用于編寫基于JPA的存儲庫。
- Spring框架對ORM的核心支持。
為了將數(shù)據(jù)訪問功能添加到我們的Spring Boot應(yīng)用程序中,我們應(yīng)該將以下maven依賴項添加到我們的pom.xml文件中。
添加波紋管依賴性之后,我們可以使用常規(guī)的JPA批注來映射具有關(guān)系數(shù)據(jù)庫表的對象。
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency>讓我們在com.semika根文件夾中創(chuàng)建一個新的customer包,該根文件夾是Application.java類現(xiàn)在所在的目錄。 在客戶文件夾中,新的實體類創(chuàng)建為Customer.java 。
現(xiàn)在,我的客戶數(shù)據(jù)庫表具有以下三個屬性。
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數(shù)據(jù)JPA存儲庫是可以定義為訪問數(shù)據(jù)的接口。 JPA查詢是根據(jù)方法名稱自動創(chuàng)建的。 例如, CustomerRepository.java類中的findAll()方法獲取所有客戶。 findByFirstName (String firstName)方法將獲取給定名字的所有客戶。
Spring Data存儲庫抽象中的中央接口是Repository接口。 它使用要管理的域類以及域類的ID類型作為類型參數(shù)CrudRepository接口為要管理的實體類提供復(fù)雜的CRUD功能。 我們的存儲庫接口應(yīng)從CrudRepository接口擴展。
我們的CustomerRepository.java接口將如下所示:
package com.semika.customer;import org.springframework.data.repository.CrudRepository;public interface CustomerRepository extends CrudRepository<Customer Long> {}您可能會找到實現(xiàn)類? Spring數(shù)據(jù)JPA為大多數(shù)數(shù)據(jù)訪問方案提供了實現(xiàn)。 我們不需要顯式實現(xiàn)那些方法。 如果您想了解有關(guān)Spring數(shù)據(jù)JPA的更多信息,可以在此處閱讀參考文檔。
此外,我將添加CustomerService.java接口及其實現(xiàn)CustomerServiceImpl.java類,以將我們的業(yè)務(wù)邏輯保持在單獨的層中。
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(); } }您可以看到,使用@Autowired批注將CustomerServiceImpl注入到CustomerServiceImpl類。 我們確實通過在本教程的開頭通過@SpringBootApplication將@ComponentScan批注添加到我們的Application.java類中來實現(xiàn)了這一點。
添加網(wǎng)絡(luò)功能
現(xiàn)在,是時候構(gòu)建和測試我們的應(yīng)用程序了。 假設(shè)客戶端發(fā)出HTTP請求以獲取所有客戶數(shù)據(jù)。 因此,我們的spring boot應(yīng)用程序應(yīng)該響應(yīng)HTTP請求。 Spring MVC提供了接受HTTP請求和響應(yīng)的Controllers 。 在這里,我們將向我們的Spring Boot應(yīng)用程序添加一些spring MVC功能。 通過使用spring-boot-starter-web項目,我們可以將一些基本的MVC功能集成到我們的spring boot應(yīng)用程序中,以便我們可以編寫簡單的Controller類來響應(yīng)客戶端的HTTP請求。
我們應(yīng)該將以下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中的構(gòu)造型注釋,它為人們閱讀代碼提供了提示,并為Spring提供了類扮演特定角色的提示。 也就是說,它包含進(jìn)入應(yīng)用程序的門。 在這種情況下,我們的類是一個Web @Controller ,因此Spring在處理傳入的Web請求時會考慮使用它。
@RestController注釋告訴Spring將結(jié)果字符串直接呈現(xiàn)回調(diào)用方。
@RequestMapping批注提供“路由”信息。 它告訴Spring,任何帶有/customers路徑的HTTP請求都應(yīng)映射到findAll()方法。
這兩個注釋是Spring MVC注釋。 它們不特定于Spring Boot。 我們在今年Spring增加了MVC Web功能,以便通過發(fā)出一些Web請求來測試我們的應(yīng)用程序。 通過將spring-boot-starter-web到spring boot應(yīng)用程序中,在運行它時,spring boot應(yīng)用程序?qū)铀约旱腤eb容器并在其中運行。
所以現(xiàn)在,我們的項目結(jié)構(gòu)應(yīng)該如下。
建筑應(yīng)用
Spring Boot jar文件被稱為一個獨立的可執(zhí)行jar文件,我們可以在生產(chǎn)環(huán)境中直接運行該文件。 可執(zhí)行的jar是包含您的已編譯類以及代碼需要運行的所有jar依賴項的歸檔文件。 在我們的示例中,由于我們使用了pring-boot-starter-web ,因此在運行jar文件時,它將啟動內(nèi)部Web容器以運行應(yīng)用程序。
要創(chuàng)建一個可執(zhí)行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 ,因此我們不必?fù)?dān)心這些,因為這些已包含在父項目中。 例如,父項目POM包含<executions>配置以綁定重新打包目標(biāo)。
現(xiàn)在讓我們看一下最終的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>讓我們來構(gòu)建應(yīng)用程序。 轉(zhuǎn)到pom.xml文件所在的項目根文件夾,然后運行以下命令。
mvn package在目標(biāo)文件夾中,您可以看到我們的可執(zhí)行jar文件創(chuàng)建為customer-0.0.1-SNAPSHOT.jar 。
運行應(yīng)用程序
在同一文件夾中,運行以下命令以運行jar文件。
java -jar target/customer-0.0.1-SNAPSHOT.jar如果在啟動應(yīng)用程序時分析日志,則會發(fā)現(xiàn)許多重要的事情。
服務(wù)器啟動時的控制臺輸出如下:
如果在底部附近看到日志,它將在端口8080上啟動Tomcat服務(wù)器。如果從瀏覽器訪問http://localhost:8080/customers URL,則將獲得客戶的JSON響應(yīng)作為響應(yīng)。
如果要在默認(rèn)端口以外的其他端口上啟動應(yīng)用程序,則可以通過使用--server.port選項指定端口,如下所示。
java --server.port=9000 -jar target/customer-0.0.1-SNAPSHOT.jar如果要在啟用調(diào)試的情況下啟動應(yīng)用程序,則可以使用以下命令:
java -Xdebug -Xrunjdwp:server=y,transport=dt_socket,address=8000,suspend=n -jar target/customer-0.0.1-SNAPSHOT.jar要在啟用調(diào)試日志的情況下啟動應(yīng)用程序,可以使用以下命令:
java -jar target/customer-0.0.1-SNAPSHOT.jar --debug如果要在“ application.properties ”文件中指定服務(wù)器正在運行的端口,則可以在文件中包含以下屬性。
server.port=${port:9000}使用application.properties文件中的上述條目,而不是使用--server.port選項,只需使用java -jar命令使用--port選項即可指定端口。
大多數(shù)情況下,環(huán)境之間的配置屬性是不同的。 對于開發(fā),生產(chǎn)和測試等環(huán)境,您可能需要保留不同的配置屬性集。 您可以通過為每個環(huán)境保留不同的配置配置文件來做到這一點。
為了實現(xiàn)此目的,您應(yīng)該以以下格式創(chuàng)建配置屬性文件。
application-${profile}.properties假設(shè)您需要分別為“開發(fā)”和“生產(chǎn)”環(huán)境保留兩個配置文件。 在這種情況下,您應(yīng)該創(chuàng)建兩個屬性文件,例如application-development.properties和application-production.properties 。
使用java -jar命令啟動應(yīng)用程序時,應(yīng)使用-D參數(shù)指定概要文件,如下所示:
java -jar -Dspring.profiles.active=production customer-0.0.1-SNAPSHOT.jar我希望這篇文章對嘗試學(xué)習(xí)Spring Boot應(yīng)用程序和Micro服務(wù)的初學(xué)者特別有用。
參考: Spring Boot參考指南
翻譯自: https://www.javacodegeeks.com/2018/07/spring-boot-complete-example.html
spring boot示例
總結(jié)
以上是生活随笔為你收集整理的spring boot示例_Spring Boot完成示例的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 电脑号信鸽(电脑号信鸽血统起源)
- 下一篇: 一加的相机有哪些功能