亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

使用kotlin開發(fā)最新版的spring boot應(yīng)用 | SpringBoot實(shí)踐

mj / 3277人閱讀

摘要:官方定義項(xiàng)目介紹長期目標(biāo)是使用開發(fā)一個完整的應(yīng)用,目前搭建了最小量的腳手架。測試程序和都提供了強(qiáng)大的測試套件,能夠很好的和集成,進(jìn)行集成測試和單元測試。編寫一些基本的集成測試,檢查接口是否正常。

kotlin是由IntelliJ IDEA的開發(fā)商Jetbrain推出的一種基于JVM的開發(fā)語言,目標(biāo)是簡化Java中很多繁瑣的設(shè)計(jì),可以和Java無縫的集成,之前一直在單元測試的時候試著使用,最近正好由契機(jī),試著用來寫一下Spring Boot腳手架。

官方定義: Statically typed programming language for the JVM, Android and the browser

項(xiàng)目介紹

長期目標(biāo)是使用kotlin開發(fā)一個完整的spring boot應(yīng)用,目前搭建了最小量的腳手架。

在本次實(shí)踐中增加了gradle docker插件的使用,使用gradle一站式的完成從開發(fā)、測試、打包到發(fā)布docker鏡像的整個過程。

項(xiàng)目結(jié)構(gòu)

SpringBootKotlon
│
├─── build.gradle
└─── src
     ├───main
     │   ├─── docker
     │   ├─── java
     │   ├─── kotlin
     │   └─── resources
     │        └─── config/application.properties
     └───test
          ├─── java
          ├─── kotlin
          └─── resources

在main目錄的java、kotlin、resources下面,包名是一樣的。也就是說在kotlin/com/app和java/com/app下的類,在classpath引用的時候是同一個包。

創(chuàng)建Spring Boot項(xiàng)目

Spring Boot項(xiàng)目的創(chuàng)建,可以參考《用Gradle和SpringBoot實(shí)現(xiàn)簡單的RESTful框架應(yīng)用》。

為了支持kotlin本項(xiàng)目的build.gradle中需要增加kotlin的支持,并且配置docker插件。

buildscript {
    ext.kotlin_version = "1.1.0"
    ext.spting_boot_version = "1.5.2.RELEASE"

    ... ...

    dependencies {
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
        classpath("org.springframework.boot:spring-boot-gradle-plugin:$spting_boot_version")
    }
}

... ...
apply plugin: "kotlin"
apply plugin: "org.springframework.boot"

dependencies {
    ... ...

    compile "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
    compile "org.jetbrains.kotlin:kotlin-reflect:$kotlin_version"

    testCompile "org.jetbrains.kotlin:kotlin-test:$kotlin_version"
    testCompile "org.jetbrains.kotlin:kotlin-test-junit:$kotlin_version"
}

sourceSets{
    main{
        ... ...
        kotlin {srcDir "src/main/kotlin"}
    }
    test{
        ... ...
        kotlin {srcDir "src/test/kotlin"}
    }
}

配置完之后,運(yùn)行gradle idea,下載相應(yīng)的gradle依賴包。在repositories中使用國內(nèi)鏡像和自建的本地nexus,可以加快依賴包的下載速度maven{ url "http://maven.aliyun.com/nexus/content/groups/public/"}

配置sourceSets增加kotlin的包之后,可以自己創(chuàng)建一個gradle task,自動創(chuàng)建sourceSets對應(yīng)的目錄;gradle createJavaProject會根據(jù)sourceSets中配置的路徑,創(chuàng)建指定set對應(yīng)的目錄。

task createJavaProject << {
    sourceSets*.java.srcDirs*.each { it.mkdirs() }
    sourceSets*.kotlin.srcDirs*.each { it.mkdirs() }
    sourceSets*.resources.srcDirs*.each { it.mkdirs()}
}
運(yùn)行spring boot程序

項(xiàng)目的application入口類,使用kotlin語言實(shí)現(xiàn),在kotlin中是沒有靜態(tài)方法的,所以如果要實(shí)現(xiàn)main函數(shù),有兩種方法,一種是將main函數(shù)寫在class的外面;或者使用companion object {},將需要靜態(tài)調(diào)用的方法寫在{}中。

@SpringBootApplication
open class SpringBootKotlinApplication

fun main(args: Array){
    SpringApplication.run(SpringBootKotlinApplication::class.java,*args)
}

相比spring mvc,spring boot給人最大的感觸就是,用簡單的注解和application.properties配置的方式,避免了spring mvc中繁瑣而且容易出錯的xml配置文件,極大的簡化了spring boot的配置。值得一提的是,application配置文件,也可以使用yaml文件。

application配置文件說明
端口

通過在配置文件中設(shè)置server.port屬性,可以指定spring boot運(yùn)行時綁定的端口。

freemarker

spring.freemarker.* 是spring boot提供的freemarker相關(guān)配置,可以配置的屬性,和注解或者xml文件是一樣的,要使用spring.freemarker配置,需要在gradle中,引入org.springframework.boot:spring-boot-starter-freemarker這個包。

此外,spring boot的application配置文件,還可以配置包括數(shù)據(jù)庫在內(nèi)的各種常見第三方工具或者庫,應(yīng)該是將提供了一系列starter包,將注解和配置過程包裝起來了。

配置完成之后,就可以在Application類的子目錄中編寫Spring MVC的控制器代碼。

編寫restful controller

一個最基本的RestController代碼如下:

@RestController
@RequestMapping(value = "/api/data")
class DataController {

    @RequestMapping(value = "",method = arrayOf(RequestMethod.GET,RequestMethod.PUT))
    fun index():Map{
        val resultMap = HashMap()

        resultMap["status"] = true
        resultMap["msg"] = "success"
        return resultMap
    }

    @RequestMapping(value = "show",method = arrayOf(RequestMethod.PUT),consumes = arrayOf(MediaType.APPLICATION_JSON_UTF8_VALUE))
    fun test(@RequestBody reqMap:Map):Map{
        return reqMap
    }
}

代碼解讀:

kotlin中使用arrayof來初始化數(shù)組;

對于不指定類型或者Obejct型的變量,kotlin使用Any類型

method方法中可以指定對種請求頭,很靈活

在consumes中,可以指定接受的contentType為JSON格式

如果請求是json格式,用ResponseBody就可以接收J(rèn)SON對象

完成所有代碼之后,運(yùn)行gradle bootRun就可以啟動服務(wù)。

curl "http://localhost:8080/api/data/show"  
    -X "PUT"  
    -H "content-type: application/json"  
    -H "accept: application/json"  
    --data-binary "{"data":"hello","who":"echo"}" --compressed
測試spring boot程序

spring boot和kotlin都提供了強(qiáng)大的測試套件,能夠很好的和JUnit集成,進(jìn)行集成測試和單元測試。編寫一些基本的集成測試,檢查接口是否正常。

spring boot starter test集成了JUnit?、Mockito、AssertJ?、Hamcrest?、Spring Test & Spring Boot Test可以方便的開始測試

@RunWith(SpringJUnit4ClassRunner::class)
@WebMvcTest(HomeController::class)
class HomeControllerStandaloneTest {

    @Autowired
    private var mvc: MockMvc? = null

    @Test
    @Throws(Exception::class)
    fun indexTest() {
        mvc!!.perform(MockMvcRequestBuilders.get("/").accept(MediaType.TEXT_HTML))
                .andExpect(status().isOk)
                .andExpect(model().attributeExists("data"))
                .andExpect { content().string(containsString("Spring Boot Kotlin")) }
    }
}

MockMvc可以依賴注入綁定通過WebMvcTest注解的HomeController控制器,然后針對指定的controller模擬請求。andExpect方法,檢查response的header,body是否符合測試的期望。

源代碼:https://github.com/liuwill-projects/SpringBootKotlin

文/liuwill(簡書作者)
原文鏈接:使用kotlin開發(fā)最新版的spring boot應(yīng)用 | SpringBoot實(shí)踐
著作權(quán)歸作者所有,轉(zhuǎn)載請聯(lián)系作者獲得授權(quán),并標(biāo)注“簡書作者”。

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://www.ezyhdfw.cn/yun/66836.html

相關(guān)文章

  • 初探Kotlin+SpringBoot聯(lián)合編程

    摘要:是一門最近比較流行的靜態(tài)類型編程語言,而且和一樣同屬系。這個生成的構(gòu)造函數(shù)是合成的,因此不能從或中直接調(diào)用,但可以使用反射調(diào)用。 showImg(https://segmentfault.com/img/remote/1460000012958496); Kotlin是一門最近比較流行的靜態(tài)類型編程語言,而且和Groovy、Scala一樣同屬Java系。Kotlin具有的很多靜態(tài)語言...

    xiaokai 評論0 收藏0
  • Kotlin + Spring Boot : 下一代 Java 服務(wù)端開發(fā)

    摘要:下一代服務(wù)端開發(fā)下一代服務(wù)端開發(fā)第部門快速開始第章快速開始環(huán)境準(zhǔn)備,,快速上手實(shí)現(xiàn)一個第章企業(yè)級服務(wù)開發(fā)從到語言的缺點(diǎn)發(fā)展歷程的缺點(diǎn)為什么是產(chǎn)生的背景解決了哪些問題為什么是的發(fā)展歷程容器的配置地獄是什么從到下一代企業(yè)級服務(wù)開發(fā)在移動開發(fā)領(lǐng)域 《 Kotlin + Spring Boot : 下一代 Java 服務(wù)端開發(fā) 》 Kotlin + Spring Boot : 下一代 Java...

    springDevBird 評論0 收藏0
  • SpringBoot熱部署加持

    摘要:概述進(jìn)行的開發(fā)過程中,我們很多時候經(jīng)常需要重啟服務(wù)器才能保證修改的源代碼文件或者一些諸如的配置文件以及一些靜態(tài)文件生效,這樣耗時又低效。 showImg(https://segmentfault.com/img/remote/1460000015363888); 概述 進(jìn)行SpringBoot的Web開發(fā)過程中,我們很多時候經(jīng)常需要重啟Web服務(wù)器才能保證修改的 源代碼文件、或者一些...

    ixlei 評論0 收藏0
  • SpringBoot應(yīng)用Docker化

    摘要:微服務(wù)的基本思想在于考慮圍繞著業(yè)務(wù)領(lǐng)域組件來創(chuàng)建應(yīng)用,這些應(yīng)用可獨(dú)立地進(jìn)行開發(fā)管理和加速。在分散的組件中使用微服務(wù)云架構(gòu)和平臺,使部署管理和服務(wù)功能交付變得更加簡單。 showImg(https://segmentfault.com/img/remote/1460000014332184); 概述 當(dāng)下web服務(wù)端開發(fā)中最火的名詞中絕對有微服務(wù)的一席之地,其也成為當(dāng)下互聯(lián)網(wǎng)后端服務(wù)架...

    U2FsdGVkX1x 評論0 收藏0
  • Spring Boot Admin 2.0開箱體驗(yàn)

    摘要:概述在我之前的應(yīng)用監(jiān)控實(shí)戰(zhàn)一文中,講述了如何利用版本來可視化地監(jiān)控應(yīng)用。接下來我們就來創(chuàng)建一個待監(jiān)控的示例。 showImg(https://segmentfault.com/img/remote/1460000015671446); 概述 在我之前的 《Spring Boot應(yīng)用監(jiān)控實(shí)戰(zhàn)》 一文中,講述了如何利用 Spring Boot Admin 1.5.X 版本來可視化地監(jiān)控 ...

    CastlePeaK 評論0 收藏0

發(fā)表評論

0條評論

mj

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<