我尝试了入门Gradle + Kotlin + Spring
由于经常听到Kotlin非常好的评价,所以我首先创建了一个运行环境,以便于尝试Kotlin的开发。以下是在Spring和Gradle下创建运行环境时的备忘录。
这次的目标
试着创建一个简单的API,仅返回字符串的GET请求。
制作原型
首先,我们要创建项目的草图。我们可以使用SpringInitializer快速地创建它。
请查看下方图片以查看设置。
在生成的项目中,主文件已经以Kotlin状态创建。
package com.example.demo
import org.springframework.boot.autoconfigure.SpringBootApplication
import org.springframework.boot.runApplication
@SpringBootApplication
class DemoApplication
fun main(args: Array<String>) {
runApplication<DemoApplication>(*args)
}
进行Gradle设置。
在项目的根目录下直接创建一个名为gradle.build.kts的文件,这将作为gradle的配置文件。
根据文件名可以看出,我们将使用kotlin来编写gradle的配置。
最初阶段API功能尚未提供,因此我们将提供一个包来使用它。另外,我们也会添加一个连接器,以便稍后连接到数据库。
所以将其添加到依赖项中。
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
import sun.security.pkcs.PKCS8Key.version
plugins {
id("org.springframework.boot") version "2.2.5.RELEASE"
id("io.spring.dependency-management") version "1.0.9.RELEASE"
kotlin("jvm") version "1.3.61"
kotlin("plugin.spring") version "1.3.61"
}
group = "com.example"
version = "0.0.1-SNAPSHOT"
java.sourceCompatibility = JavaVersion.VERSION_1_8
repositories {
mavenCentral()
}
dependencies {
implementation("org.springframework.boot:spring-boot-starter-jooq")
implementation("org.jetbrains.kotlin:kotlin-reflect")
implementation("org.jetbrains.kotlin:kotlin-stdlib-jdk8")
implementation("mysql:mysql-connector-java") // 追加
implementation("org.springframework.boot:spring-boot-starter-web") // 追加
testImplementation("org.springframework.boot:spring-boot-starter-test") {
exclude(group = "org.junit.vintage", module = "junit-vintage-engine")
}
}
tasks.withType<Test> {
useJUnitPlatform()
}
tasks.withType<KotlinCompile> {
kotlinOptions {
freeCompilerArgs = listOf("-Xjsr305=strict")
jvmTarget = "1.8"
}
}
顺便配置数据库。在src/main/resources/application.properties文件中追加以下内容。
spring.datasource.url=jdbc:mysql://localhost:3306/demo
spring.datasource.username=root
spring.datasource.password=root
创建API。
现在建筑周围的准备工作已经完成,接下来我将编写Kotlin代码。
我要创建一个简单的API,它将返回一个简单的字符串,代码如下所示。
package com.example.demo.presentation.controller
import org.springframework.web.bind.annotation.RequestMapping
import org.springframework.web.bind.annotation.RequestMethod
import org.springframework.web.bind.annotation.RestController
@RestController
class HelloController {
@RequestMapping(value = ["/hello"],method = [RequestMethod.GET])
fun helloRouter(): String {
return "hello";
}
}
我实际写下来并思考后认为,只能通过数组形式接收RequestMapping的value和method。
试试看
进入项目的根目录,执行以下命令。
./gradlew bootRun
这样的话,服务器将会一直保持运行状态,
如果成功的话,
<==========---> 80% EXECUTING [7m 23s]
> IDLE
> :compileKotlin > Resolve files of :compileClasspath > jackson-datatype-jdk8-2.10.2.jar
> IDLE
> IDLE
> :bootRun
> IDLE
请访问下方链接,如果出现“hello”字样则表示成功。
http://localhost:8080/hello
这样就可以停止了。
最后
环境搭建和简单的API都有些改变,Gradle变成了Kotlin,注解的参数类型也有所不同,感觉有些变化。我想要逐渐学习并前进。