日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

Spring启动教程

發(fā)布時間:2023/12/3 javascript 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Spring启动教程 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

1.簡介

如果您一直想使用一個Web框架,它使您能夠快速開始API開發(fā),而無須設置Web服務器,收集所有有線依賴項,安裝各種工具的麻煩,那么您將擁有一個出色的框架,即Spring開機 Spring Boot的主要座右銘是約定優(yōu)于配置

在本課程中,我們將研究設置Spring Boot項目并提供一些RESTful服務在不到20分鐘的時間內(nèi)與數(shù)據(jù)庫進行交互的難易程度! 確實,Spring Boot就是這么簡單。 Spring Boot使我們能夠制作可以“運行”的基于生產(chǎn)級的基于Spring的應用程序。 Spring Boot應用程序最好的部分是它只需要很少的配置。

2.使用Maven制作Spring Boot項目

我們將使用許多Maven原型之一為我們的示例創(chuàng)建一個示例項目。 要創(chuàng)建項目,請在將用作工作空間的目錄中執(zhí)行以下命令:

mvn archetype:generate -DgroupId=com.javacodegeeks.example -DartifactId=JCG-SpringBoot-example -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false

如果您是第一次運行maven,則完成生成命令將花費幾秒鐘,因為maven必須下載所有必需的插件和工件才能完成生成任務。

創(chuàng)建項目后,請隨時在您喜歡的IDE中打開它。 下一步是向項目添加適當?shù)腗aven依賴關(guān)系。 我們將在項目中處理四個依賴項:

  • spring-boot-starter-web :此依賴關(guān)系將該項目標記為Web項目,并且添加了依賴關(guān)系以創(chuàng)建控制器并創(chuàng)建與Web相關(guān)的類。
  • spring-boot-starter-data-jpa :此依賴關(guān)系為項目提供了JPA支持,我們可以在其中執(zhí)行許多與數(shù)據(jù)庫相關(guān)的操作
  • h2 :H2是一個內(nèi)存數(shù)據(jù)庫,在本課中我們將使用它來演示數(shù)據(jù)庫操作
  • spring-boot-starter-test :此依賴項將所有與測試相關(guān)的JAR收集到項目中,例如JUnit和Mockito 。

這是帶有適當依賴項的pom.xml文件:

pom.xml

<parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>1.5.10.RELEASE</version><relativePath/> <!-- lookup parent from repository --> </parent><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding><java.version>1.8</java.version> </properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-jpa</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>com.h2database</groupId><artifactId>h2</artifactId><scope>runtime</scope></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency></dependencies>

要將代碼打包到JAR中,我們將使用spring-boot-maven-plugin ,它是管理應用程序自身打包到JAR或WAR中的出色工具。 這是我們可以添加到依賴文件中的方法:

pom.xml

<build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins> </build>

在Maven Central上找到最新的Maven依賴項。

最后,要了解添加此依賴項時添加到項目中的所有JAR,我們可以運行一個簡單的Maven命令,當我們向其添加一些依賴項時,該命令使我們能夠查看項目的完整依賴關(guān)系樹。 這是我們可以使用的命令:

檢查依賴樹

mvn dependency:tree

當我們運行此命令時,它將向我們顯示以下依賴關(guān)系樹:

依賴樹

[INFO] -------------------- [INFO] Building JCG-SpringBoot-example 1.0-SNAPSHOT [INFO] --------------------------------[ jar ]--------------------------------- [INFO] [INFO] --- maven-dependency-plugin:2.10:tree (default-cli) @ JCG-SpringBoot-example --- [INFO] com.javacodegeeks.example:JCG-SpringBoot-example:jar:1.0-SNAPSHOT [INFO] +- org.springframework.boot:spring-boot-starter-data-jpa:jar:1.5.10.RELEASE:compile [INFO] | +- org.springframework.boot:spring-boot-starter:jar:1.5.10.RELEASE:compile [INFO] | | +- org.springframework.boot:spring-boot:jar:1.5.10.RELEASE:compile [INFO] | | +- org.springframework.boot:spring-boot-autoconfigure:jar:1.5.10.RELEASE:compile [INFO] | | +- org.springframework.boot:spring-boot-starter-logging:jar:1.5.10.RELEASE:compile [INFO] | | | +- ch.qos.logback:logback-classic:jar:1.1.11:compile [INFO] | | | | \- ch.qos.logback:logback-core:jar:1.1.11:compile [INFO] | | | +- org.slf4j:jul-to-slf4j:jar:1.7.25:compile [INFO] | | | \- org.slf4j:log4j-over-slf4j:jar:1.7.25:compile [INFO] | | \- org.yaml:snakeyaml:jar:1.17:runtime [INFO] | +- org.springframework.boot:spring-boot-starter-aop:jar:1.5.10.RELEASE:compile [INFO] | | +- org.springframework:spring-aop:jar:4.3.14.RELEASE:compile [INFO] | | \- org.aspectj:aspectjweaver:jar:1.8.13:compile [INFO] | +- org.springframework.boot:spring-boot-starter-jdbc:jar:1.5.10.RELEASE:compile [INFO] | | +- org.apache.tomcat:tomcat-jdbc:jar:8.5.27:compile [INFO] | | | \- org.apache.tomcat:tomcat-juli:jar:8.5.27:compile [INFO] | | \- org.springframework:spring-jdbc:jar:4.3.14.RELEASE:compile [INFO] | +- org.hibernate:hibernate-core:jar:5.0.12.Final:compile [INFO] | | +- org.jboss.logging:jboss-logging:jar:3.3.1.Final:compile [INFO] | | +- org.hibernate.javax.persistence:hibernate-jpa-2.1-api:jar:1.0.0.Final:compile [INFO] | | +- org.javassist:javassist:jar:3.21.0-GA:compile [INFO] | | +- antlr:antlr:jar:2.7.7:compile [INFO] | | +- org.jboss:jandex:jar:2.0.0.Final:compile [INFO] | | +- dom4j:dom4j:jar:1.6.1:compile [INFO] | | \- org.hibernate.common:hibernate-commons-annotations:jar:5.0.1.Final:compile [INFO] | +- org.hibernate:hibernate-entitymanager:jar:5.0.12.Final:compile [INFO] | +- javax.transaction:javax.transaction-api:jar:1.2:compile [INFO] | +- org.springframework.data:spring-data-jpa:jar:1.11.10.RELEASE:compile [INFO] | | +- org.springframework.data:spring-data-commons:jar:1.13.10.RELEASE:compile [INFO] | | +- org.springframework:spring-orm:jar:4.3.14.RELEASE:compile [INFO] | | +- org.springframework:spring-context:jar:4.3.14.RELEASE:compile [INFO] | | +- org.springframework:spring-tx:jar:4.3.14.RELEASE:compile [INFO] | | +- org.springframework:spring-beans:jar:4.3.14.RELEASE:compile [INFO] | | +- org.slf4j:slf4j-api:jar:1.7.25:compile [INFO] | | \- org.slf4j:jcl-over-slf4j:jar:1.7.25:compile [INFO] | \- org.springframework:spring-aspects:jar:4.3.14.RELEASE:compile [INFO] +- org.springframework.boot:spring-boot-starter-web:jar:1.5.10.RELEASE:compile [INFO] | +- org.springframework.boot:spring-boot-starter-tomcat:jar:1.5.10.RELEASE:compile [INFO] | | +- org.apache.tomcat.embed:tomcat-embed-core:jar:8.5.27:compile [INFO] | | | \- org.apache.tomcat:tomcat-annotations-api:jar:8.5.27:compile [INFO] | | +- org.apache.tomcat.embed:tomcat-embed-el:jar:8.5.27:compile [INFO] | | \- org.apache.tomcat.embed:tomcat-embed-websocket:jar:8.5.27:compile [INFO] | +- org.hibernate:hibernate-validator:jar:5.3.6.Final:compile [INFO] | | +- javax.validation:validation-api:jar:1.1.0.Final:compile [INFO] | | \- com.fasterxml:classmate:jar:1.3.4:compile [INFO] | +- com.fasterxml.jackson.core:jackson-databind:jar:2.8.10:compile [INFO] | | +- com.fasterxml.jackson.core:jackson-annotations:jar:2.8.0:compile [INFO] | | \- com.fasterxml.jackson.core:jackson-core:jar:2.8.10:compile [INFO] | +- org.springframework:spring-web:jar:4.3.14.RELEASE:compile [INFO] | \- org.springframework:spring-webmvc:jar:4.3.14.RELEASE:compile [INFO] | \- org.springframework:spring-expression:jar:4.3.14.RELEASE:compile [INFO] +- com.h2database:h2:jar:1.4.196:runtime [INFO] \- org.springframework.boot:spring-boot-starter-test:jar:1.5.10.RELEASE:test [INFO] +- org.springframework.boot:spring-boot-test:jar:1.5.10.RELEASE:test [INFO] +- org.springframework.boot:spring-boot-test-autoconfigure:jar:1.5.10.RELEASE:test [INFO] +- com.jayway.jsonpath:json-path:jar:2.2.0:test [INFO] | \- net.minidev:json-smart:jar:2.2.1:test [INFO] | \- net.minidev:accessors-smart:jar:1.1:test [INFO] | \- org.ow2.asm:asm:jar:5.0.3:test [INFO] +- junit:junit:jar:4.12:test [INFO] +- org.assertj:assertj-core:jar:2.6.0:test [INFO] +- org.mockito:mockito-core:jar:1.10.19:test [INFO] | \- org.objenesis:objenesis:jar:2.1:test [INFO] +- org.hamcrest:hamcrest-core:jar:1.3:test [INFO] +- org.hamcrest:hamcrest-library:jar:1.3:test [INFO] +- org.skyscreamer:jsonassert:jar:1.4.0:test [INFO] | \- com.vaadin.external.google:android-json:jar:0.0.20131108.vaadin1:test [INFO] +- org.springframework:spring-core:jar:4.3.14.RELEASE:compile [INFO] \- org.springframework:spring-test:jar:4.3.14.RELEASE:test [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------

注意到了什么? 通過向項目中添加四個依賴項,添加了如此多的依賴項。 Spring Boot本身會收集所有相關(guān)的依賴項,因此在此方面不做任何事情。 最大的優(yōu)勢在于, 所有這些依賴項都保證相互兼容

3.構(gòu)建文件的等效Gradle

盡管Maven是一個出色的構(gòu)建系統(tǒng),但如果您更喜歡Gradle,則以下是pom.xml構(gòu)建文件的Gradle等效項:

build.gradle

buildscript {ext {springBootVersion = '1.5.10.RELEASE'}repositories {mavenCentral()}dependencies {classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")} }apply plugin: 'java' apply plugin: 'eclipse' apply plugin: 'org.springframework.boot'group = 'com.javacodegeeks.example' version = '0.0.1-SNAPSHOT' sourceCompatibility = 1.8repositories {mavenCentral() }dependencies {compile('org.springframework.boot:spring-boot-starter-data-jpa')compile('org.springframework.boot:spring-boot-starter-web')runtime('com.h2database:h2')testCompile('org.springframework.boot:spring-boot-starter-test') }

我們展示了完全相同的依賴項和版本,以提供完全相同的依賴項。

4.項目結(jié)構(gòu)

在繼續(xù)進行并開始處理該項目的代碼之前,讓我們在此介紹一下將所有代碼添加到項目后將擁有的projet結(jié)構(gòu):

Spring Boot項目結(jié)構(gòu)

我們將項目分為多個包,以便遵循關(guān)注點分離的原則,并且代碼保持模塊化。

5.定義實體

讓我們看看如何做到這一點:

人.java

package com.javacodegeeks.example.model;import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.Id;@Entity public class Person {@Id@GeneratedValueprivate Long id;private String name;private int age;//standard getters and setters@Overridepublic String toString() {return String.format("Person{id=%d, name='%s', age=%d}", id, name, age);} }

為了簡潔起見,我們省略了標準的getter和setter方法,但是由于Jackson在對象的序列化和反序列化過程中使用它們,因此必須將它們制成。

@Entity注釋將該POJO標記為對象,該對象將由Spring Data API管理,并且其字段將被視為表列(除非標記為transient )。

最后,我們?yōu)閠oString()方法添加了一個自定義實現(xiàn),以便在測試應用程序時可以打印相關(guān)數(shù)據(jù)。

6.定義JPA存儲庫以訪問H2數(shù)據(jù)庫

JPA為我們提供了一種非常簡單的定義JPA存儲庫接口的方法。

在了解如何定義JPA信息庫之前,我們需要記住,只有在利用與JPA相關(guān)的功能時,才使每個JPA接口與數(shù)據(jù)庫表的單個實體進行交互。 如果我們看一下接口定義,我們將對此有深刻的理解:

PersonRepository.java

package com.javacodegeeks.example.repository;import com.javacodegeeks.example.model.Person; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Repository;@Repository public interface PersonRepository extends JpaRepository<Person, Long> { }

盡管上面的接口定義是空的,但我們?nèi)匀恍枰私庖恍┮c:

  • @Repository批注將此接口標記為Spring Bean,該Bean在應用程序啟動時初始化。 有了這個注釋,Spring可以很好地管理異常數(shù)據(jù)庫的交互拋出
  • 我們使用Person作為參數(shù)來表示此JPA接口將管理Person實體
  • 最后,我們還傳遞了數(shù)據(jù)類型Long作為參數(shù)。 這表示Person實體包含一個唯一的標識符,該標識符的類型為Long 。

7.制作一個RESTful控制器

一個RESTful控制器,我們將應用程序的數(shù)據(jù)公開給客戶端。 我們將使用GET,POST,PUT和DELETE等幾個HTTP動詞來支持與它們相關(guān)的功能。

首先,讓我們定義一個PersonController類,該類標記為@RestController 。 @RestController注釋向Spring容器發(fā)出信號, @RestController中引發(fā)的任何異常都可以傳遞給客戶端本身。 與存儲庫bean相比,這是不同的行為。

PersonController.java

package com.javacodegeeks.example.controller;import com.javacodegeeks.example.model.Person; import com.javacodegeeks.example.repository.PersonRepository; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*;import java.util.List;@RestController public class PersonController {private final Logger LOG = LoggerFactory.getLogger(getClass().getName());private final PersonRepository personRepository;@Autowiredpublic PersonController(PersonRepository personRepository) {this.personRepository = personRepository;}... }

讓我們通過添加執(zhí)行實際操作的特定API為此Controller提供一些功能。

7.1使用POST插入數(shù)據(jù)

我們將首先添加一個API,通過該API我們可以將數(shù)據(jù)添加到H2數(shù)據(jù)庫。 由于此方法在其@RequestBody接受一個Person對象,因此Person對象的JSON必須傳遞到請求中的API。

PersonController.java

@RequestMapping(value = "", method = RequestMethod.POST) public Person createPerson(@RequestBody Person person) {LOG.info("Saving Person: {}.", person);personRepository.save(person);LOG.info("Person saved: {}.", person);return person; }

我們使用Personrepository Bean訪問一種方法,該方法在我們先前定義的用于處理Person Entity的JpaRepository接口中預定義。

在接下來的部分中,我們將在REST客戶端Postman中嘗試此API。

7.2構(gòu)造一個GET API

現(xiàn)在我們有了將數(shù)據(jù)插入數(shù)據(jù)庫的API,我們可以構(gòu)造一個API以獲取ID為ID的Person對象。 在這里, personId作為PathVariable傳遞:

PersonController.java

@RequestMapping(value = "/{personId}", method = RequestMethod.GET) public Person getPerson(@PathVariable Long personId) {Person person = personRepository.findOne(personId);LOG.info("Got person from DB: {}.", person);return person; }

為了獲取數(shù)據(jù)庫中存在的所有數(shù)據(jù),我們將使用另一個GET API從數(shù)據(jù)庫中獲取所有數(shù)據(jù):

PersonController.java

@RequestMapping(value = "/all", method = RequestMethod.GET) public List<Person> getAllPerson() {List<Person> persons = personRepository.findAll();LOG.info("Getting all Data: {}.", persons);return persons; }

它只是利用JPA Repository的findAll方法來獲取數(shù)據(jù)庫中Person所有數(shù)據(jù)并將其收集到一個List中。

7.3使用PUT更新數(shù)據(jù)

現(xiàn)在,我們將允許客戶端更新數(shù)據(jù)庫中的現(xiàn)有數(shù)據(jù)。 為此,我們再次使用save方法。 當save方法看到JSON對象中填充了id字段時,它首先找到具有該ID的Object,然后更新提供的字段。

PersonController.java

@RequestMapping(value = "", method = RequestMethod.PUT) public Person editPerson(@RequestBody Person person) {LOG.info("Updating Person: {}.", person);personRepository.save(person);LOG.info("Person updated: {}.", person);return person; }

7.4使用DELETE刪除數(shù)據(jù)

現(xiàn)在,我們將完成最后的操作,即當一個人的ID作為PathVariable傳遞時刪除數(shù)據(jù):

PersonController.java

@RequestMapping(value = "/{personId}", method = RequestMethod.DELETE) public void deletePerson(@PathVariable Long personId) {LOG.info("Deleting Person with ID {}.", personId);personRepository.delete(personId);LOG.info("Person deleted."); }

8.包含請求攔截器

盡管并非嚴格要求這樣做,但在此示例中我們還將包括一個請求攔截器。 通過請求攔截器,我們可以在請求對象到達控制器之前對其進行處理。 一旦Controller完成請求并返回響應,該響應對象將再次通過Request Interceptor。 讓我們在這里定義請求攔截器:

JCGRequestInterceptor.java

package com.javacodegeeks.example.interceptor;import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Component; import org.springframework.web.servlet.ModelAndView; import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse;@Component public class JCGRequestInterceptor extends HandlerInterceptorAdapter {private final Logger LOG = LoggerFactory.getLogger(getClass().getName());@Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {LOG.info("Incoming request.");return super.preHandle(request, response, handler);}@Overridepublic void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {LOG.info("Outgoing request.");super.postHandle(request, response, handler, modelAndView);} }

9.使用Maven運行項目

在運行項目之前,我們還需要為項目定義一個主類。 這是Request Interceptor bean的主要類定義:

運行項目

package com.javacodegeeks.example;import com.javacodegeeks.example.interceptor.JCGRequestInterceptor; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.context.annotation.Bean;@SpringBootApplication public class BootApp {public static void main(String[] args) {SpringApplication.run(BootApp.class, args);}@Beanpublic JCGRequestInterceptor requestInterceptor() {return new JCGRequestInterceptor();} }

現(xiàn)在已經(jīng)完成,我們可以運行我們的項目了。 使用maven可以輕松運行應用程序,只需使用以下命令:

運行項目

mvn spring-boot:run

現(xiàn)在該項目正在運行,我們可以使用Postman工具訪問API,并查看它們是否按預期工作。

10.在Postman中訪問API

我們將從使用我們制作的POST API將一些數(shù)據(jù)插入H2數(shù)據(jù)庫開始:

將數(shù)據(jù)插入H2

現(xiàn)在,我們可以為該Person對象分配ID JPA,即1:

通過ID獲取對象

我們還可以嘗試獲取所有數(shù)據(jù)API,以查看是否返回了此對象:

獲取所有數(shù)據(jù)

讓我們更新我們創(chuàng)建的對象的字段之一:

更新資料

最后,我們嘗試通過將URL中的ID作為PathVariable傳遞來刪除數(shù)據(jù):

刪除資料

11.包含和運行單元測試

沒有至少一個單元測試用例,任何Spring應用程序都是不完整的。 在此示例中,我們將包括一個已準備就緒的單個單元測試用例。 它去了:

ControllerTests.java

package com.javacodegeeks.example;import com.javacodegeeks.example.controller.PersonController; import com.javacodegeeks.example.repository.PersonRepository; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.InjectMocks; import org.mockito.Mock; import org.mockito.MockitoAnnotations; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import org.springframework.test.web.servlet.MockMvc; import org.springframework.test.web.servlet.setup.MockMvcBuilders;import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;@RunWith(SpringJUnit4ClassRunner.class) public class ControllerTest {private MockMvc mockMvc;@InjectMocksprivate PersonController controller;@Mockprivate PersonRepository repository;@Beforepublic void setUp() {MockitoAnnotations.initMocks(this);controller = new PersonController(repository);mockMvc = MockMvcBuilders.standaloneSetup(controller).build();}@Testpublic void getAllPerson_Pass() throws Exception {mockMvc.perform(get("/all")).andExpect(status().is2xxSuccessful());} }

我們在上述示例測試用例中做了幾件事。 讓我們一次了解這些:

  • 我在@RunWith(SpringJUnit4ClassRunner.class)標記了@RunWith(SpringJUnit4ClassRunner.class)批注,該批注為測試用例提供了運行程序。
  • 使用Mockito時,需要啟用其注釋。 這是通過initMocks(...)方法調(diào)用完成的。
  • 我們使用了mockMvc對象的get mockMvc來檢查/all GET API返回的狀態(tài)碼,并將其與任何2XX狀態(tài)碼進行比較。

當我們在IntelliJ中運行此測試用例時,我們看到以下輸出:

運行Spring Boot測試用例

看到一個帶有綠色的測試用例是一種很棒的感覺,不是嗎?

12.使用Spring Boot CLI

Spring Boot命令行界面是一種軟件,我們可以使用它從命令行運行和測試Spring Boot應用程序。 Spring Boot CLI在內(nèi)部使用Spring Boot啟動器和自動配置組件來收集所需的依賴關(guān)系并運行應用程序。

要開始使用CLI,最快的方法是下載ZIP并更改為bin目錄,然后檢查命令,如下所示:

下載和使用Spring CLI

要從任何地方使用Spring CLI,請將此JAR添加到PATH。

現(xiàn)在,讓我們快速展示一下Spring Boot CLI的強大功能。 CLI可用于執(zhí)行基于單個Groovy的nad運行腳本,而無需提供任何依賴關(guān)系。 我們將制作一個文件并將其命名為“ HelloWorld.groovy”。 請在此處注意文件擴展名,因為有必要使該文件僅是groovy類型的。 在文件中,我們將放置簡單的代碼片段:

HelloWorld.groovy

@RestController class HelloWorld {@RequestMapping("/")String hello() {"Hello World!"} }

現(xiàn)在,移至創(chuàng)建此腳本的文件夾,然后運行以下命令:

HelloWorld.groovy

spring run HelloWorld.groovy

此命令將在默認端口8080上運行上述Grovvy腳本。讓我們現(xiàn)在嘗試訪問此端口:

CLI的Hello World

容易嗎? 請注意,編寫Groovy腳本時沒有依賴關(guān)系,沒有配置,也沒有導入語句。 這是因為Spring Boot核心組件,Groovy編譯器( groovyc )和Groovy Grape(Groovy的JAR依賴管理器)承擔了這一責任。

13.結(jié)論

在本課程中,我們研究了使用Spring Boot構(gòu)建生產(chǎn)級API的便捷性。 我們設法制作了一些功能齊全的API,這些API可以與數(shù)據(jù)庫通信并可以運行單元測試用例。

我們在生產(chǎn)級RESTful客戶端Postman中試用了API,并看到我們的API可以按預期響應調(diào)用。 我們在本課中使用的H2數(shù)據(jù)庫很容易被MySQL,MongoDB或任何其他數(shù)據(jù)庫之類的真實數(shù)據(jù)庫替換。

14.下載源代碼

在這個例子中,我們研究了如何開始一個基本的Spring Boot項目。

下載
您可以在此處下載此示例的完整源代碼: JCG-SpringBoot-Example

翻譯自: https://www.javacodegeeks.com/2018/04/spring-boot-tutorial.html

總結(jié)

以上是生活随笔為你收集整理的Spring启动教程的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 两个小y头稚嫩紧窄h文 | 无码专区久久综合久中文字幕 | 96国产在线 | 国产成人精品综合久久久久99 | 极品少妇xxxx精品少妇偷拍 | 中文字幕+乱码+中文乱码91 | aaaaa毛片 | 精品国产精品三级精品av网址 | 成人欧美一区二区三区黑人 | wwwxxx在线播放| 青青操原| 色偷偷在线观看 | 四虎精品在永久在线观看 | 日韩高清免费观看 | 一二三四国产精品 | av黄色小说 | 成人在线观看网址 | 蜜臀av一区二区 | 伊甸园精品区 | 黑人巨大精品人妻一区二区 | 黄色激情视频在线观看 | 国产妇女馒头高清泬20p多 | 国产成人av免费 | 无码专区久久综合久中文字幕 | 米奇久久 | 国产精品爽爽爽 | 国产亚洲精品久久久久动 | 天天宗合网| 天天视频亚洲 | 成人xxxxx| 杨幂毛片午夜性生毛片 | 欧美色欧美色 | 丰满少妇乱子伦精品看片 | 国产女主播一区 | 青青青视频免费观看 | 亚洲精品视频在线观看免费 | 波多野吉衣伦理片 | 亚洲欧美国产毛片在线 | 欧美草逼网 | 九九热视频精品 | 亚洲国产一二三 | 91高清免费视频 | 美国伊人网 | 国产精品美女视频 | 嫩草国产在线 | 欧美91精品久久久久国产性生爱 | 天堂网视频在线 | 操操干| 在线观看日韩一区二区 | 午夜桃色| 亚洲av无一区二区三区怡春院 | 欧美日韩精品国产 | 91久久精品一区二区三区 | 天天干夜夜怕 | 国产免费看av | 国产剧情一区二区三区 | 色姑娘av | 少女忠诚电影高清免费 | 91麻豆精品国产91久久久久久久久 | 欧美顶级黄色大片免费 | 一级黄色大毛片 | 丰满少妇被猛烈进入无码 | 欧美日韩亚洲免费 | 琪琪秋霞午夜被窝电影网 | 日日涩| 在线观看日韩视频 | 69激情网| 国产成人专区 | 国产亚洲精品久久777777 | 久久久久久一区二区 | 精品日韩一区二区三区 | 男人操女人的网站 | 国产成人精品一区二区无码呦 | 天天插视频| 亚洲性激情 | 黄色在线视频播放 | 亚洲国产成人自拍 | 青青草手机视频在线观看 | 日本少妇吞精囗交 | 色中文字幕 | 亚洲经典一区二区 | 日本美女黄视频 | 精品午夜一区二区 | 色小姐在线视频 | 色婷婷综合久久久久中文 | 天天插天天射天天干 | 2022av视频| 国产精品日韩在线 | 日韩久操| 91午夜理伦私人影院 | 国产a久久 | 污网站在线免费看 | 雪花飘电影在线观看免费高清 | 亚洲夜夜夜 | 丁香婷婷成人 | 国产精品毛片一区 | 欧美日本一区二区三区 | 69视频免费观看 | 国产3p露脸普通话对白 |