点击上方蓝色“程序猿DD”,关注我

每周福利送不停!

随着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微服务的程序。

抽奖赠书

截止时间:2020年12月06日 17:00

如何抽奖:扫描下方二维码,关注公众号,回复关键词 :20201201

素质二连????????????

赠书:Kotlin在Spring Boot中的应用相关推荐

  1. 再谈Spring Boot中的乱码和编码问题

    编码算不上一个大问题,即使你什么都不管,也有很大的可能你不会遇到任何问题,因为大部分框架都有默认的编码配置,有很多是UTF-8,那么遇到中文乱码的机会很低,所以很多人也忽视了. Spring系列产品大 ...

  2. 【spring boot2】第8篇:spring boot 中的 servlet 容器及如何使用war包部署

    嵌入式 servlet 容器 在 spring boot 之前的web开发,我们都是把我们的应用部署到 Tomcat 等servelt容器,这些容器一般都会在我们的应用服务器上安装好环境,但是 spr ...

  3. Spring Boot 中使用 MongoDB 增删改查

    本文快速入门,MongoDB 结合SpringBoot starter-data-mongodb 进行增删改查 1.什么是MongoDB ? MongoDB 是由C++语言编写的,是一个基于分布式文件 ...

  4. Spring Boot 中使用@Async实现异步调用,加速任务执行!

    欢迎关注方志朋的博客,回复"666"获面试宝典 什么是"异步调用"?"异步调用"对应的是"同步调用",同步调用指程序按照 ...

  5. 徒手解密 Spring Boot 中的 Starter自动化配置黑魔法

    我们使用 Spring Boot,基本上都是沉醉在它 Stater 的方便之中.Starter 为我们带来了众多的自动化配置,有了这些自动化配置,我们可以不费吹灰之力就能搭建一个生产级开发环境,有的小 ...

  6. Maven中的profile和spring boot中的profile进行结合

    2019独角兽企业重金招聘Python工程师标准>>> 有一些应用,采用了spring boot和spring boot profile.然后想把maven 中的profile和sp ...

  7. Spring Boot中使用JavaMailSender发送邮件

    相信使用过Spring的众多开发者都知道Spring提供了非常好用的JavaMailSender接口实现邮件发送.在Spring Boot的Starter模块中也为此提供了自动化配置.下面通过实例看看 ...

  8. Spring Boot中Web应用的统一异常处理

    为什么80%的码农都做不了架构师?>>>    我们在做Web应用的时候,请求处理过程中发生错误是非常常见的情况.Spring Boot提供了一个默认的映射:/error,当处理中抛 ...

  9. 解决Spring boot中读取属性配置文件出现中文乱码的问题

    解决Spring boot中读取属性配置文件出现中文乱码的问题 参考文章: (1)解决Spring boot中读取属性配置文件出现中文乱码的问题 (2)https://www.cnblogs.com/ ...

最新文章

  1. Python递归实现快速排序
  2. php7-sapnwrfc
  3. 条理清晰的搭建SSH环境
  4. SAP UI5 里如何让每次视图显示时都执行某方法
  5. 【渝粤题库】国家开放大学2021春1366英语教学理论与实践题目
  6. 知识图谱入门知识(五)【转】秒懂词向量Word2Vec的本质
  7. aix mysql日志,一次AIX 操作系统ASM添加磁盘的操作日志
  8. 自学python考哪些证书-Python自学难吗?有哪些课程内容?
  9. vim中自动格式化代码
  10. centos安装activitymq
  11. 计算机考研用python_计算机考研408 130+个人攻略
  12. Hadoop学习(二)---Secondary结点的配置以及HDFS的常用命令以及API的使用
  13. U盘快捷方式病毒查杀
  14. [BZOJ3772]精神污染 主席树上树+欧拉序
  15. electron+vue3+vite2 如何使用打印
  16. 七夕快到了,中国人自己的情人节,恋爱中的情人们怎么过呢
  17. [C程序设计]输出所有的“水仙花数”。
  18. 搭建SSH,SSZ架构需注意数据库的编码问题
  19. 07年五大BT网站排行榜 - 电影、音乐还有传票
  20. dos命令行choice命令使用详解

热门文章

  1. Windows中断编程
  2. linux openssl libcurl库 交叉编译
  3. linux 账号和密码文件 /etc/passwd和/etc/shadow 简介
  4. java 反序列化漏洞简介
  5. python3 获取cpu 内存利用率
  6. python3 list 列表 倒序
  7. golang go build 报错 import cycle not allowed
  8. stelnet 简介 华为ssh的另一种称呼
  9. golang 字符串查找总结
  10. openssl 编译参数选项