文档章节

如何使用Kotlin开发微服务

wangyan9110
 wangyan9110
发布于 2017/05/21 13:16
字数 1153
阅读 973
收藏 25
点赞 1
评论 19

谷歌在5月18号的I/O开发者大会上,宣布将Kotlin语言作为安卓开发的一级编程语言。可能很多人这时第一次听说这门语言。我了解这门语言时间也不长,在今年的一个内网帖子上第一次看到这门语言。今天我们来了解一下Kotlin这门语言和如何使用Kotlin开发微服务

Kotlin简介

Kotlin是一种在Java虚拟机上运行的静态类型编程语言,它也可以被编译成为JavaScript源代码。它主要是由俄罗斯圣彼得堡的JetBrains开发团队所发展出来的编程语言,其名称来自于圣彼得堡附近的科特林岛。

以上是维基百科上对于Kotlin的介绍。Kotlin是JetBrains的开发团队设计的基于JVM运行的一门编程语言。

Kotlin的诞生时间并不长,Kotlin的开发始于2010年,在2016年发布第一个正式版本1.0。它吸收了包括C#、GO等新兴语言的特性。虽然它在语法上和Java不兼容,但是它在设计时就考虑和Java的代码相互调用,并且可以复用Java现有的类库。

使用Kotlin进行服务端开发

Kotlin非常适合服务端开发,同时Kotlin在设计时就考虑了和Java技术栈的完全兼容,所以对于Java开发者来说,非常容易上手。Java语言设计在90年代,由于Java社区的复杂性,导致Java的特性发展明显落后于其他语言。使用Kotlin可以既享受到现代语言带来新的特性,同时还可以复用Java的开发经验。

在开发工具方面,Kotlin出自JetBrains。JetBrains的IDE工具,是宇宙最好的。所以不用担心IDE的支持。

在开发框架方面,可以选择利用Java现有的框架,另外从Spring 5.0开始,Spring利用Kotlin的特性提供了更加简洁的API。

在部署方面,可以部署在任何支持Java应用的机器。

在兼容性方面,如果你的应用都是使用Java开发的,不用担心兼容性问题,可以在开发新的功能时,直接使用Kotlin语言开发。可以使用Kotlin调用你现有的Java代码。

使用Kotlin+Spring Boot开发微服务

下面我们使用Kotlin和SpringBoot开发一个简单的微服务,和学习其他语言一样我们从一个类似HelloWorld的服务开始。

创建一个Kotlin项目

这里使用gradle创建一个项目,下面是build.gradle的代码

group 'info.yywang'
version '1.0.0-SNAPSHOT'

buildscript {
    ext.kotlin_version = '1.1.2-2'
    ext.spring_boot_version='1.5.3.RELEASE'

    repositories {
        jcenter()
        mavenCentral()
    }
    
    dependencies {
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" 
        classpath "org.springframework.boot:spring-boot-gradle-plugin:$spring_boot_version"
    }
}

apply plugin: 'java'
apply plugin: 'kotlin'
apply plugin: 'org.springframework.boot'

repositories {
    jcenter()
    mavenCentral()
}

dependencies {
    compile "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
    compile 'org.springframework.boot:spring-boot-starter-web'
    testCompile group: 'junit', name: 'junit', version: '4.11'
}

以上我们使用spring boot作为微服务框架,增加了kotlin的语言的支持

和其他的相比,需要注意以下几点

  1. buildscript增加kotlin-gradle-plugin的依赖
  2. 增加apply plugin: 'kotlin'插件
  3. 增加dependencies.compile "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"

定义访问者基础类

class Visitor(var name: String, var number: Long) {

    fun sayHello(): String {
        return "Hello,$name. You are the $number" + "th visitor!"
    }
}

以上我们定义了一个Visitor类,它有一个name属性,表示访问者的名字,一个number属性,表示第几个访问者。还有一个sayHello方法。

定义Controller类

@RestController
class VisitorController {

    var count = AtomicLong()

    @RequestMapping("/hello")
    fun hello(@RequestParam(value = "name", 
            defaultValue = "yywang") name: String): String {
        return Visitor(name, count.incrementAndGet()).sayHello()
    }
}

在以上我们定义了hello方法,用户可以输入name,然后返回打招呼的内容。我们使用AtomicLong作为计数器,来计算当前是第几个访问者。

创建Spring Boot启动类

@SpringBootApplication
open class App {
    companion object {
        @JvmStatic fun main(args: Array<String>) {
            SpringApplication.run(App::class.java, *args)
        }
    }
}

以上我们定义了App作为spring boot的启动类。其中使用Kotlin中的@JvmStatic注解表示java中的静态方法。在kotlin中使用@JvmStatic必须要定义在companion object的块中。

在Kotlin中,类默认是final的。在Spring中,对于@Configuration的类,使用CGLIB创建一个继承该类的代理类。所以在Spring Boot中@SpringBootApplication的类不能是final。在Kotlin中使用open修饰符,表示该类可以被继承。

运行

完成以上编程之后,需要在build.gradle中设置mainClass

springBoot{
    mainClass='info.yywang.demo.App'
}

在设置完成之后,运行程序

gradle bootRun

运行效果如下:

粘贴图片

欢迎关注我的公众号代码技艺

MyArtNote

关注以上公众号,回复Kotlin 获取Kotlin中文学习资料

© 著作权归作者所有

共有 人打赏支持
wangyan9110
粉丝 37
博文 10
码字总数 13360
作品 2
杭州
程序员
加载中

评论(19)

wangyan9110
wangyan9110

引用来自“shitalpig”的评论

啥IDE,eclipse可以吗
可以的,需要安装插件,不过推荐用IDEA
shitalpig
shitalpig
啥IDE,eclipse可以吗
wangyan9110
wangyan9110

引用来自“黑狗”的评论

“所以对于Java开发者来说,非常容易上手” 并不 谁写谁知道 哪里又非常容易上手了?

@黑狗 个人写起来感觉还可以
黑狗
黑狗
“所以对于Java开发者来说,非常容易上手” 并不 谁写谁知道 哪里又非常容易上手了?
黑狗
黑狗
越来越火了 大JB就是厉害
wangyan9110
wangyan9110

引用来自“Joyzhou”的评论

我能说语法很丑吗?

@Joyzhou 举个语法漂亮的例子?
Joyzhou
Joyzhou
我能说语法很丑吗?
wangyan9110
wangyan9110

引用来自“DevLeon”的评论

You is 是什么鬼,kotlin English ?

引用来自“wangyan9110”的评论

Bug已修复:smile:

引用来自“DevLeon”的评论

you are the 3rd visitor,不是3th :sweat_smile:

引用来自“wangyan9110”的评论

英文水也这么深:sweat:

引用来自“DevLeon”的评论

1st 2nd 3rd 后面的数字就都接 th 了
学习了:smile:
wangyan9110
wangyan9110

引用来自“风华神使”的评论

搞微服务和语言关系不大
是的
风华神使
风华神使
搞微服务和语言关系不大
年终回顾:2017年的重大软件开发事态发展

  【IT168 资讯】2017已经正式成为过去式了,让我们回顾一下软件开发领域的一些重大发展,以及最受影响的领域。物联网(IoT)、边缘计算、云计算、大数据、机器学习、人工智能(AI)和软件安全...

it168网站
01/03
0
0
Kotlin 很受 Java 开发人员的欢迎

RebelLabs通过深入调查得到2017年开发者生产力报告,该报告重点介绍为什么开发人员使用这些工具以及他们对开发工具,体系结构还有其他方面的满意程度。 该报告是基于全球Java开发人员超过200...

周其
2017/11/18
3.6K
21
Android 开发者应该知道的 Kotlin 技巧

今年的 Google I/O 大会上,Google 是这样评价 Kotlin:在过去一年里,有35%的专业 Android 开发者在使用 Kotlin,其中95%的开发者都对 Kotlin 非常满意。虽然 Kotlin 正处于发展的初始阶段,...

码云Gitee
05/28
0
0
高手问答第 174 期 —— 阿里一线专家和你一起探索 Kotlin

OSCHINA 本期高手问答(10 月 25 日 - 10 月 31 日) 将由@陈光剑为大家解答关于 Kotlin 方面的问题。 陈光剑,资深开发人员,目前就职于阿里巴巴集团,参与过多种平台工具的开发,具有丰富的平...

局长
2017/10/24
4.1K
57
Kotlin EE 加速开发基于 Jakarta EE 的微服务分布式系统

     Kotlin 是一款基于 JVM 的编程语言,与 JVM 100%兼容,目前被谷歌定为安卓官方开发语言之一。Jakarta EE 是 Java EE 从 Oracle 剥离出来到 Eclipse 基金会接手时经历众多投票阶段定...

张旭乾
05/11
0
0
Kotlin 资源大全 - 学 Kotlin 看这一篇教程就够了

目录 介绍 官网及文档 中文社区 教程 & 文章 开源库和框架 Demo 其他 介绍 为什么要做这个? 今天凌晨的 Google I/O 上,Google 正式宣布官方支持 Kotlin. 为了让大家更快了解和上手 Kotlin...

稀土君
2017/05/19
0
0
阿里巴巴前架构师 360 度无死角剖析微服务

微服务是当前软件架构领域非常热门的词汇,在社区中也有很多热烈的讨论。因此,在 OSC 第 130 期高手问答中,我们策划的主题是“究竟什么才是微服务”,并邀请了黄勇作为高手嘉宾。 黄勇,现...

OSC源创君
2016/11/09
15.5K
29
阿里巴巴前架构师 360 度无死角剖析微服务

摘要: 阿里巴巴前架构师对于微服务毫无保留的分享,360 度无死角剖析微服务 微服务是当前软件架构领域非常热门的词汇,在社区中也有很多热烈的讨论。因此,在 OSC 第 130 期高手问答中,我们...

yuanzhitang
2016/11/28
0
0
Android 开发必学!Kotlin初学者教程

Kotlin是由JetBrains为现代多平台应用程序开发的一种编程语言。 在本综合指南中,你可以获得以下信息: 为什么要学习Kotlin? 如何开始? 如何学习它? 在学习Kotlin之前要知道的事情 为什么...

实验楼
06/21
0
0
【开源访谈】腾讯刘豪:腾讯内部有 160 多个业务使用微服务架构

近几年,微服务架构由于其简单和灵活性,受到业内越来越多人士的青睐。目前对“微服务” 的架构风格并没有提供精确的定义,它的优势是什么?在技术选型上需要注意哪些问题?在企业中的应用程...

OSC源创君
2017/08/31
4.3K
14

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Spark Streaming + Kafka Integration Guide

The Spark Streaming integration for Kafka 0.10 is similar in design to the 0.8 Direct Stream approach. It provides simple parallelism, 1:1 correspondence between Kafka partition......

刺猬一号
10分钟前
0
0
数据结构与算法2

一个数组的例子,实现查找,显示和删除的功能。 在这个数组中存储的数据类型是long型,使用long型为的是表明这是数据,而int型被用来表示下标。通常数据结构存储的数据项包含有好几个字段,所...

沉迷于编程的小菜菜
21分钟前
0
0
Python3 基于 requests 批量下载图片

Python3 基于 requests 批量下载图片 import requestsheaders = {'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8','Accept-Encod......

leeyi
21分钟前
0
0
java获取当前时间所在一周的周一和周日日期

/** * 当前时间所在一周的周一和周日时间 * @param time 当前时间 * @return */ public static Map getWeekDate(String time) { Map map = new HashedMap(); SimpleDateFormat sdf = new Si......

小弱鸡
53分钟前
0
0
Redis数据的导出和导入(dump和load方式)

网上有些文章已经不再适用,本人也是踩了些坑,在此记录下。 迁移redis数据一般有如下3种方式: 第三方工具redis-dump,redis-load aof机制,需要开启aof功能 rdb存储机制 这里介绍第一种方式...

iplusx
58分钟前
2
0
ElasticSearch 高亮显示大文档搜索结果

2016年12月,我们开始研究Ambar——一个文档搜索系统。Ambar使用ElasticSearch作为核心搜索引擎。 在Ambar开发的过程中,我们处理了很多与ES相关的问题,我们想分享我们得到的宝贵经验。让我...

九州暮云
今天
1
0
Python 使用 pywifi 模块 破解wifi密码

git https://github.com/awkman/pywifi 常见常量 from pywifi import const# Define interface status.IFACE_DISCONNECTED = 0IFACE_SCANNING = 1IFACE_INACTIVE = 2IFACE_CONNEC......

阿豪boy
今天
2
0
phpstorm使用Iedis

phpstorm的redis插件Iedis是真好用 看了网上挺多的文章,但是由于我系统还是ubuntu,就有点尴尬了,现在破解之后,留个笔记,即使自己之后有需要也可以很快翻阅 先下载资源 资源下载 zip压缩...

贤郎--均灵
今天
0
0
第三章 spring-bean之FactoryBeanRegistrySupport(4)

前言 从FactoryBeanRegistrySupport类的名字可以看出FactoryBeanRegistrySupport负责FactoryBean的注册与支持。如果想知道FactoryBean相关的资料,请阅读spring-bean中关于FactoryBean的解读...

鸟菜啊
今天
0
0
CentOS “Destination Host Unreachable”问题解决办法

挑战极速安装CentOS时遇到局域网主机不能通信的情况: [root@zjd network-scripts]# ping 8.8.8.8PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.64 bytes from 8.8.8.8: icmp_seq=1 ttl=......

wffger
今天
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部