Spring Boot in Kotlin实践

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS PostgreSQL,集群系列 2核4GB
简介:

关注已久的Kotlin语言终于发布1.0.0版本了,参见JetBrains正式发布Kotlin 1.0:JVM和Android上更好用的语言。我看到文章中提到,spring boot社区也及时跟进了对koltin语言的支持,如果这门语言能够消除一些Java中的坑,我觉得可以了解下。

在spring.io找到Developing Spring Boot applications with Kotlin一文,下文是我根据文中的内容进行的实验。

  1. https://start.spring.io中生成项目骨架:

    • Group,使用com.example
    • Artifact,使用koltinDemo
    • Name,使用koltinDemo
    • Description,使用Demo project for Spring Boot with Koltin
    • Dependences,选择JPA、WEB和MySQL依赖
  2. 在IDEA中打开项目,首先需要升级IDEA的koltin插件,我的IDEA-14用的插件是1.0.0-beta-1103,因此要在pom文件中修改对应的koltin语言版本。

    <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <java.version>1.8</java.version>
    <kotlin.version>1.0.0-beta-1103</kotlin.version>
    </properties>
  3. 编写Customer数据类,跟Java中的POJO作用一样,但是不需要写繁杂的getter、setter甚至equals等方法。

    @Entity
    data class Customer(
         var firstName: String = "",
         var lastName: String = "",
         @Id @GeneratedValue(strategy = GenerationType.AUTO)
         var id: Long = 0
    )
  4. 编写CustomerRepository接口,继承自CrudRepository接口——该接口提供了主要的数据库操作方法。

    interface CustomerRepository : CrudRepository<Customer, Long> {
     fun findByLastName(name: String): List<Customer>
    }
  5. 编写CustomerController控制器,利用构造器依赖注入将CustomerRepository接口导入到该控制器中。@RestContoller注解表示提供REST接口,并通过JSON格式返回数据。

    @RestController
    class CustomerController @Autowired constructor(val repository: CustomerRepository) {
     @RequestMapping("/")
     fun findAll() = repository.findAll()
     @RequestMapping("/{name}")
     fun findByLastName(@PathVariable name: String) = repository.findByLastName(name)
    }
  6. KoltinDemoApplication类中添加CommandLineRunner,用于在应用启动后立马插入测试数据。

    @SpringBootApplication
    open class KoltinDemoApplication {
     @Bean
     open fun init(repository: CustomerRepository): CommandLineRunner {
         return CommandLineRunner {
             repository.save(Customer("Jack", "Bauer"))
             repository.save(Customer("Chloe", "O'Brian"))
             repository.save(Customer("Kim", "Bauer"))
             repository.save(Customer("David", "Palmer"))
             repository.save(Customer("Michelle", "Dessler"))
         }
     }
    }
    fun main(args: Array<String>) {
     SpringApplication.run(KoltinDemoApplication::class.java, *args)
    }
  7. 在application.properties文件中配置数据库连接属性

    spring.datasource.driverClassName=com.mysql.jdbc.Driver
    spring.datasource.url=jdbc:mysql://localhost:3306/koltinDemo
    spring.datasource.username=root
    spring.datasource.password=root
    # Hibernate ddl auto (create, create-drop, update)
    spring.jpa.hibernate.ddl-auto = create-drop
  8. 在本地启动MySQL服务,并创建数据库koltinDemo。

  9. 启动应用,访问http://localhost:8080/,可以看到如下结果:


    测试结果1
  10. 访问http://localhost:8080/Bauer,可以看到如下结果:


       测试结果2


    相关实践学习
    如何在云端创建MySQL数据库
    开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
    全面了解阿里云能为你做什么
    阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
    相关文章
    |
    1月前
    |
    并行计算 Java 数据处理
    SpringBoot高级并发实践:自定义线程池与@Async异步调用深度解析
    SpringBoot高级并发实践:自定义线程池与@Async异步调用深度解析
    168 0
    |
    1月前
    |
    人工智能 自然语言处理 前端开发
    SpringBoot + 通义千问 + 自定义React组件:支持EventStream数据解析的技术实践
    【10月更文挑战第7天】在现代Web开发中,集成多种技术栈以实现复杂的功能需求已成为常态。本文将详细介绍如何使用SpringBoot作为后端框架,结合阿里巴巴的通义千问(一个强大的自然语言处理服务),并通过自定义React组件来支持服务器发送事件(SSE, Server-Sent Events)的EventStream数据解析。这一组合不仅能够实现高效的实时通信,还能利用AI技术提升用户体验。
    168 2
    |
    10天前
    |
    存储 运维 安全
    Spring运维之boot项目多环境(yaml 多文件 proerties)及分组管理与开发控制
    通过以上措施,可以保证Spring Boot项目的配置管理在专业水准上,并且易于维护和管理,符合搜索引擎收录标准。
    22 2
    |
    1月前
    |
    SQL JSON Java
    mybatis使用三:springboot整合mybatis,使用PageHelper 进行分页操作,并整合swagger2。使用正规的开发模式:定义统一的数据返回格式和请求模块
    这篇文章介绍了如何在Spring Boot项目中整合MyBatis和PageHelper进行分页操作,并且集成Swagger2来生成API文档,同时定义了统一的数据返回格式和请求模块。
    56 1
    mybatis使用三:springboot整合mybatis,使用PageHelper 进行分页操作,并整合swagger2。使用正规的开发模式:定义统一的数据返回格式和请求模块
    |
    1月前
    |
    Java 网络架构 Kotlin
    kotlin+springboot入门级别教程,教你如何用kotlin和springboot搭建http
    本文是一个入门级教程,介绍了如何使用Kotlin和Spring Boot搭建HTTP服务,并强调了Kotlin的空安全性特性。
    62 7
    kotlin+springboot入门级别教程,教你如何用kotlin和springboot搭建http
    |
    26天前
    |
    数据采集 Java 数据安全/隐私保护
    Spring Boot 3.3中的优雅实践:全局数据绑定与预处理
    【10月更文挑战第22天】 在Spring Boot应用中,`@ControllerAdvice`是一个强大的工具,它允许我们在单个位置处理多个控制器的跨切面关注点,如全局数据绑定和预处理。这种方式可以大大减少重复代码,提高开发效率。本文将探讨如何在Spring Boot 3.3中使用`@ControllerAdvice`来实现全局数据绑定与预处理。
    59 2
    |
    1月前
    |
    缓存 NoSQL Java
    Springboot自定义注解+aop实现redis自动清除缓存功能
    通过上述步骤,我们不仅实现了一个高度灵活的缓存管理机制,还保证了代码的整洁与可维护性。自定义注解与AOP的结合,让缓存清除逻辑与业务逻辑分离,便于未来的扩展和修改。这种设计模式非常适合需要频繁更新缓存的应用场景,大大提高了开发效率和系统的响应速度。
    64 2
    |
    2月前
    |
    Java 应用服务中间件 开发者
    深入探索并实践Spring Boot框架
    深入探索并实践Spring Boot框架
    45 2
    |
    3月前
    |
    Java 开发工具 Spring
    【Azure 事件中心】azure-spring-cloud-stream-binder-eventhubs客户端组件问题, 实践消息非顺序可达
    【Azure 事件中心】azure-spring-cloud-stream-binder-eventhubs客户端组件问题, 实践消息非顺序可达
    |
    3月前
    |
    缓存 Java Spring
    Java本地高性能缓存实践问题之在Spring Boot中启用缓存支持的问题如何解决
    Java本地高性能缓存实践问题之在Spring Boot中启用缓存支持的问题如何解决