查看原文
其他

干货丨Kotlin在Spring Boot中的应用

博文视点 博文视点Broadview 2021-07-07


随着Kotlin在移动端开发的普及,它也逐步走入后端开发者的视野。Kotlin是JVM体系的语言,和Java有着良好的互操作性,上手较容易,且可以使用Java强大的生态,其还具有函数式编程的优点。另外,Spring Initializr提供了对Java、Kotlin语言的支持。

Kotlin是JetBrains公司开发的,目前流行的IntelliJ IDEA软件也是该公司开发的。IDEA对Kotlin支持较好,可以将Java代码转换为Kotlin代码。IDEA还支持Java、Kotlin混合编程,历史代码使用Java编写,新的代码可以尝试使用Kotlin编写。

本文作者袁康研究使用Kotlin、Spring Boot做后端开发,取得了不错的效果。市面上介绍使用Kotlin进行后端开发的图书和文章也比较少,袁康在大量实践的基础上,萌生了写一本书的想法,希望和更多的Java开发人员分享Kotlin在后端开发中的实践经验。

《基于Kotlin的Spring Boot微服务实战》一书因此而生。

本文选自书中“Kotlin在常用中间件中的应用”一章,这一章主要介绍Kotlin在常用中间件中的应用,通过示例程序,将展示Kotlin集成Spring Boot、Redis、JPA、QueryDSL、MongoDB、Spring Security、RocketMQ、Elasticsearch、Swagger的方法。读者可以掌握使用Kotlin操作常用中间件的技巧。

下面我们一起来学习了解下本章中“Kotlin集成Spring Boot”部分。


Kotlin集成Spring Boot

Spring Boot是由Pivotal团队开发的,设计的目的是简化Spring应用的初始搭建和开发过程。

Spring Boot介绍

从2014年4月发布1.0.0.RELEASE到现在的最新版本2.2.2.RELEASE,从最初的基于Spring 4到现在基于Spring 5,从同步阻塞编程到异步响应式编程,Spring Boot经历了数十个RELEASE版本,发展迅速,表现稳定,其各版本发行时间如下表。越来越多的企业在生产中使用Spring Boot进行企业级应用开发。

 Spring Boot、Spring版本的发行时间

时间

Spring Boot版本
Spring版本
2014年
1.0.x
4.0.x.RELEASE
2014—2015年
1.1.x
4.0.x.RELEASE
2015年
1.2.x
4.1.x.RELEASE
2015—2016年
1.3.x
4.2.x.RELEASE
2016—2017年
1.4.x
4.3.x.RELEASE
2017—2018年
1.5.x
4.3.x.RELEASE
2018—2019年
2.0.x
5.0.x.RELEASE
2018—2020年
2.1.x
5.1.x.RELEASE
2019—2020年
2.2.x
5.2.x.RELEASE

Spring Boot基于约定优于配置的思想,让开发人员不必在配置与逻辑业务之间进行思维的切换。Spring Boot简化了Spring应用的开发,不再需要XML配置文件,使用注解方式提高了开发效率。Spring Boot默认配置了很多框架的使用方式,提供starter包,简化配置,开箱即用。Spring Boot尽可能地根据项目依赖来自动配置Spring框架。Spring Boot提供了可以直接在生产环境中使用的功能,如性能指标、应用信息和应用健康检查。

Spring Boot内嵌Tomcat、Jetty、Undertow等容器,直接用Jar包的方式进行部署,而传统的Spring应用需要用war包方式进行部署。Spring Boot的部署方法非常简单,一行命令就可以部署一个Spring Boot应用;可以很方便地用Docker、Kubernetes进行部署,适用于云原生应用,使系统的扩容、运维更加方便。

Spring Boot广泛应用于企业级应用和微服务开发。Spring Cloud微服务框架就是在Spring Boot基础上开发的。此外,很多开源项目提供了Spring Boot的集成,如rocketmq- spring-boot-starter,方便用户使用。


用Kotlin开发一个Spring Boot项目

在Spring网站上创建一个基于Maven的Kotlin Spring Boot项目。填写Group、Artifact,选择依赖的包Spring Web,然后下载到本地,如图。

Spring Initializr

解压文件,用IDEA打开这个工程,可以看到pom文件如下:该pom文件定义了父依赖,通过父依赖可以自动找到dependencies中依赖包的版本号;此外,还指定了Kotlin的版本是1.3.61,Spring Boot的版本是2.2.2.RELEASE。

1  <?xml version="1.0" encoding="UTF-8"?>  
2  <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/ 2001/XMLSchema-instance"  
3      xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">

4      <modelVersion>4.0.0</modelVersion>  
5      <!— 父pom,定义包的依赖 -->
6      <parent>  
7          <groupId>org.springframework.boot</groupId>  
8          <artifactId>spring-boot-starter-parent</artifactId>  
9          <version>2.2.2.RELEASE</version>  
10          <relativePath/> <!-- lookup parent from repository -->  
11      </parent>  
12      <!— 子工程相关信息 -->
13      <groupId>io.kang.example</groupId>  
14      <artifactId>kolinspringboot</artifactId>  
15      <version>0.0.1-SNAPSHOT</version>  
16      <name>kolinspringboot</name>  
17      <description>Demo project for Spring Boot</description>  
18      <!— 定义属性 -->
19      <properties>  
20          <java.version>1.8</java.version>  
21          <kotlin.version>1.3.61</kotlin.version>  
22      </properties>  
23      <dependencies>  
24           <!— Spring Boot启动包 -->
25          <dependency>  
26              <groupId>org.springframework.boot</groupId>  
27              <artifactId>spring-boot-starter</artifactId>  
28          </dependency>  
29           <!— Kotlin相关依赖包 -->
30          <dependency>  
31              <groupId>org.jetbrains.kotlin</groupId>  
32              <artifactId>kotlin-reflect</artifactId>  
33          </dependency>  
34          <dependency>  
35              <groupId>org.jetbrains.kotlin</groupId>  
36              <artifactId>kotlin-stdlib-jdk8</artifactId>  
37          </dependency>  
38          <dependency>  
39              <groupId>org.springframework.boot</groupId>  
40              <artifactId>spring-boot-starter-test</artifactId>  
41              <scope>test</scope>  
42              <exclusions>  
43                  <exclusion>  
44                      <groupId>org.junit.vintage</groupId>  
45                      <artifactId>junit-vintage-engine</artifactId>  
46                  </exclusion>  
47              </exclusions>  
48          </dependency>  
49      </dependencies>  
50      <build>  
51           <!— Kotlin源码路径 -->
52          <sourceDirectory>${project.basedir}/src/main/kotlin</sourceDirectory>  
53          <testSourceDirectory>${project.basedir}/src/test/kotlin</testSourceDirectory>
54          <plugins>  
55               <!— Spring Boot Maven打包插件 -->
56              <plugin>  
57                  <groupId>org.springframework.boot</groupId>  
58                  <artifactId>spring-boot-maven-plugin</artifactId>  
59              </plugin> 
60               <!— Kotlin Maven插件 -->
61              <plugin>  
62                  <groupId>org.jetbrains.kotlin</groupId>  
63                 <artifactId>kotlin-maven-plugin</artifactId>  
64                  <configuration>  
65                      <args>  
66                          <arg>-Xjsr305=strict</arg>  
67                      </args>  
68                      <compilerPlugins>  
69                          <plugin>spring</plugin>  
70                      </compilerPlugins>  
71                  </configuration>  
72                  <dependencies>  
73                      <dependency>  
74                          <groupId>org.jetbrains.kotlin</groupId>  
75                          <artifactId>kotlin-maven-allopen</artifactId>  
76                          <version>${kotlin.version}</version>  
77                      </dependency>  
78                  </dependencies>  
79              </plugin>  
80          </plugins>  
81      </build>  
82  </project>  


下面用Kotlin编写一个简单的Spring Boot Web应用:定义一个Spring Boot启动类,加上@SpringBootApplication注解;定义一个接口,通过http://localhost:8080/index可以访问这个接口;相关的配置放在application.yml中。

和用Java开发Spring Boot项目类似,Kotlin在main函数中启动应用,用GetMapping定义一个get接口,使用@RestController后就不用为每个方法添加@ResponseBody注解了。Kotlin的语法更加简洁。

KotlinSpringbootApplication.kt的代码如下:

1  @SpringBootApplication  
2  class KotlinSpringbootApplication  
3  // 主函数,启动类
4  fun main(args: Array<String>) {  
5      runApplication<KotlinSpringbootApplication>(*args);  
6  }  


IndexController.kt的代码如下:

1  @RestController  
2  class IndexController {  
3      // 定义index接口
4      @GetMapping("/index")  
5      fun index(): String {  
6         return "Hello, Kotlin for Spring Boot!!"  
7      }  
8  } 


通过浏览器访问“index”接口,显示“Hello,Kotlin for Spring Boot!!”。仅通过短短几行代码就开发了一个简单的Kotlin Web应用,非常便捷。


更多精彩内容欢迎大家阅读《基于Kotlin的Spring Boot微服务实战》一书。

本书专注于Kotlin在Spring Boot微服务开发中的实践,介绍了函数式编程思想、Kotlin的语法、Kotlin在常用中间件中的应用,以及其在微服务注册中心、微服务配置中心、微服务网关、Spring Cloud Alibaba、服务监控和服务链路监控方面的应用。还给出了详细的实例代码和一个完整的博客示例,可以帮助读者使用Kotlin开发基于Spring Boot微服务的程序。

(扫码获取本书详情)

如果喜欢本文
欢迎 在看留言分享至朋友圈 三连

 热文推荐  





▼点击阅读原文,了解本书详情!

    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存