首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >干货丨Kotlin在Spring Boot中的应用

干货丨Kotlin在Spring Boot中的应用

作者头像
博文视点Broadview
发布2023-05-19 19:52:33
发布2023-05-19 19:52:33
1.8K0
举报

随着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。

代码语言:javascript
复制
 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的代码如下:

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

IndexController.kt的代码如下:

代码语言:javascript
复制
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微服务的程序。

(扫码获取本书详情)

代码语言:javascript
复制
如果喜欢本文欢迎 在看丨留言丨分享至朋友圈 三连
 热文推荐  
算数or算卦,和业务人谈“预测”到底在谈啥?
Python之父加入微软,一开口就知道是老“凡学家”了
秒懂商用区块链关键技术:智能合约
演说泰斗加尔·雷纳德亲自解读《演说之禅》的奥秘

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

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-11-19,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 博文视点Broadview 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档