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