摘要:官方定義項目介紹長期目標是使用開發一個完整的應用,目前搭建了最小量的腳手架。測試程序和都提供了強大的測試套件,能夠很好的和集成,進行集成測試和單元測試。編寫一些基本的集成測試,檢查接口是否正常。
kotlin是由IntelliJ IDEA的開發商Jetbrain推出的一種基于JVM的開發語言,目標是簡化Java中很多繁瑣的設計,可以和Java無縫的集成,之前一直在單元測試的時候試著使用,最近正好由契機,試著用來寫一下Spring Boot腳手架。
項目介紹官方定義: Statically typed programming language for the JVM, Android and the browser
長期目標是使用kotlin開發一個完整的spring boot應用,目前搭建了最小量的腳手架。
在本次實踐中增加了gradle docker插件的使用,使用gradle一站式的完成從開發、測試、打包到發布docker鏡像的整個過程。
項目結構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引用的時候是同一個包。
創建Spring Boot項目Spring Boot項目的創建,可以參考《用Gradle和SpringBoot實現簡單的RESTful框架應用》。
為了支持kotlin本項目的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"} } }
配置完之后,運行gradle idea,下載相應的gradle依賴包。在repositories中使用國內鏡像和自建的本地nexus,可以加快依賴包的下載速度maven{ url "http://maven.aliyun.com/nexus/content/groups/public/"}
配置sourceSets增加kotlin的包之后,可以自己創建一個gradle task,自動創建sourceSets對應的目錄;gradle createJavaProject會根據sourceSets中配置的路徑,創建指定set對應的目錄。
task createJavaProject << { sourceSets*.java.srcDirs*.each { it.mkdirs() } sourceSets*.kotlin.srcDirs*.each { it.mkdirs() } sourceSets*.resources.srcDirs*.each { it.mkdirs()} }運行spring boot程序
項目的application入口類,使用kotlin語言實現,在kotlin中是沒有靜態方法的,所以如果要實現main函數,有兩種方法,一種是將main函數寫在class的外面;或者使用companion object {},將需要靜態調用的方法寫在{}中。
@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配置文件說明通過在配置文件中設置server.port屬性,可以指定spring boot運行時綁定的端口。
spring.freemarker.* 是spring boot提供的freemarker相關配置,可以配置的屬性,和注解或者xml文件是一樣的,要使用spring.freemarker配置,需要在gradle中,引入org.springframework.boot:spring-boot-starter-freemarker這個包。
此外,spring boot的application配置文件,還可以配置包括數據庫在內的各種常見第三方工具或者庫,應該是將提供了一系列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來初始化數組;
對于不指定類型或者Obejct型的變量,kotlin使用Any類型
method方法中可以指定對種請求頭,很靈活
在consumes中,可以指定接受的contentType為JSON格式
如果請求是json格式,用ResponseBody就可以接收JSON對象
完成所有代碼之后,運行gradle bootRun就可以啟動服務。
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都提供了強大的測試套件,能夠很好的和JUnit集成,進行集成測試和單元測試。編寫一些基本的集成測試,檢查接口是否正常。
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開發最新版的spring boot應用 | SpringBoot實踐
著作權歸作者所有,轉載請聯系作者獲得授權,并標注“簡書作者”。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/66836.html
摘要:是一門最近比較流行的靜態類型編程語言,而且和一樣同屬系。這個生成的構造函數是合成的,因此不能從或中直接調用,但可以使用反射調用。 showImg(https://segmentfault.com/img/remote/1460000012958496); Kotlin是一門最近比較流行的靜態類型編程語言,而且和Groovy、Scala一樣同屬Java系。Kotlin具有的很多靜態語言...
摘要:下一代服務端開發下一代服務端開發第部門快速開始第章快速開始環境準備,,快速上手實現一個第章企業級服務開發從到語言的缺點發展歷程的缺點為什么是產生的背景解決了哪些問題為什么是的發展歷程容器的配置地獄是什么從到下一代企業級服務開發在移動開發領域 《 Kotlin + Spring Boot : 下一代 Java 服務端開發 》 Kotlin + Spring Boot : 下一代 Java...
摘要:概述進行的開發過程中,我們很多時候經常需要重啟服務器才能保證修改的源代碼文件或者一些諸如的配置文件以及一些靜態文件生效,這樣耗時又低效。 showImg(https://segmentfault.com/img/remote/1460000015363888); 概述 進行SpringBoot的Web開發過程中,我們很多時候經常需要重啟Web服務器才能保證修改的 源代碼文件、或者一些...
摘要:微服務的基本思想在于考慮圍繞著業務領域組件來創建應用,這些應用可獨立地進行開發管理和加速。在分散的組件中使用微服務云架構和平臺,使部署管理和服務功能交付變得更加簡單。 showImg(https://segmentfault.com/img/remote/1460000014332184); 概述 當下web服務端開發中最火的名詞中絕對有微服務的一席之地,其也成為當下互聯網后端服務架...
摘要:概述在我之前的應用監控實戰一文中,講述了如何利用版本來可視化地監控應用。接下來我們就來創建一個待監控的示例。 showImg(https://segmentfault.com/img/remote/1460000015671446); 概述 在我之前的 《Spring Boot應用監控實戰》 一文中,講述了如何利用 Spring Boot Admin 1.5.X 版本來可視化地監控 ...
閱讀 3283·2021-09-30 09:47
閱讀 2296·2021-09-10 10:51
閱讀 1900·2021-09-08 09:36
閱讀 2934·2019-08-30 12:56
閱讀 3036·2019-08-30 11:16
閱讀 2628·2019-08-29 16:40
閱讀 3000·2019-08-29 15:25
閱讀 1638·2019-08-29 11:02