前言
使用的技术是springboot+ktor+mybatis-plus,可以参考 上一篇文章,此处将springmvc替换成ktor,ktor使用内置服务器是netty性能高效的同时也支持协程调度,整体整合之后启动比原有的速度快上不少,ktor是kotlin一个公司弄出来的所以不用担心项目不在维护的问题,目前ktor也能使用Shiro做为权限管理,整体而言感觉可以嵌入spring生态中,本案例仅仅只是模拟真实开发环境中需要用到的多模块项目的方式,项目本身只做为演示,实际使用过程需要在此基础上做好模块规划与项目依赖规划等。
一、项目示例代码
1.父工程的build.gradle与gradle.properties
plugins {
// springboot 插件依赖
id 'org.springframework.boot' version '2.7.0'
id 'io.spring.dependency-management' version '1.0.11.RELEASE'
// kotlin 插件依赖
id 'org.jetbrains.kotlin.jvm' version "$kotlin_version"
// kotlin对 springboot 插件依赖
id "org.jetbrains.kotlin.plugin.spring" version "$kotlin_version"
// kotlin noarg插件依赖 - 主要作用给data class 添加无参构造函数使反射能正常识别到
id "org.jetbrains.kotlin.plugin.noarg" version "$kotlin_version"
// kotlin noarg插件依赖 - 主要作用给class 去掉final对class的修饰
id "org.jetbrains.kotlin.plugin.allopen" version "$kotlin_version"
}
group = 'com.example'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '1.8'
repositories {
maven { url 'https://maven.aliyun.com/repository/public' }
maven { url 'https://maven.aliyun.com/repository/central' }
maven { url 'https://maven.aliyun.com/repository/google' }
maven { url 'https://maven.aliyun.com/repository/gradle-plugin' }
maven { url 'https://maven.aliyun.com/repository/spring' }
maven { url 'https://maven.aliyun.com/repository/spring-plugin' }
maven { url "https://maven.pkg.jetbrains.space/public/p/ktor/eap" }
mavenCentral()
}
dependencies {}
subprojects {
apply plugin: "org.springframework.boot"
apply plugin: "io.spring.dependency-management"
apply plugin: "org.jetbrains.kotlin.jvm"
apply plugin: "org.jetbrains.kotlin.plugin.spring"
apply plugin: "org.jetbrains.kotlin.plugin.noarg"
apply plugin: "org.jetbrains.kotlin.plugin.allopen"
group = 'com.example'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '1.8'
repositories {
maven { url 'https://maven.aliyun.com/repository/public' }
maven { url 'https://maven.aliyun.com/repository/central' }
maven { url 'https://maven.aliyun.com/repository/google' }
maven { url 'https://maven.aliyun.com/repository/gradle-plugin' }
maven { url 'https://maven.aliyun.com/repository/spring' }
maven { url 'https://maven.aliyun.com/repository/spring-plugin' }
maven { url "https://maven.pkg.jetbrains.space/public/p/ktor/eap" }
mavenCentral()
}
dependencies {
// 注意:这里使用的是 spring-boot-starter不是spring-boot-starter-web
implementation 'org.springframework.boot:spring-boot-starter'
// kotlin - kotlin与srpingboot中需要使用如下依赖,此处配置成通用子项目无需配置
implementation 'com.fasterxml.jackson.module:jackson-module-kotlin'
implementation 'org.jetbrains.kotlin:kotlin-reflect'
implementation 'org.jetbrains.kotlin:kotlin-stdlib-jdk8'
}
bootJar {
enabled = false
}
jar {
enabled = true
}
}
ktor_version=2.0.2
kotlin_version=1.7.0
spring_version=2.7.0
mybatis_version=3.5.2
velocity_version=1.7
druid_spring_version=1.2.11
2. 项目启动模块 - skm-app/build.gradle
plugins {
}
dependencies {
// mybatis
implementation "com.baomidou:mybatis-plus-boot-starter:$mybatis_version"
implementation "com.baomidou:mybatis-plus-generator:$mybatis_version" // 代码生成器
implementation "org.apache.velocity:velocity:$velocity_version" // 代码生成器需要的默认模板引擎
//mysql数据库依赖
runtimeOnly 'mysql:mysql-connector-java'
implementation "com.alibaba:druid-spring-boot-starter:$druid_spring_version"
implementation project (':skm-contller-web')
}
bootJar {
enabled = true
}
3. skm-comm/build.gradle
plugins {
}
dependencies {
// ktor
api "io.ktor:ktor-server-core-jvm:$ktor_version"
implementation "io.ktor:ktor-server-content-negotiation-jvm:$ktor_version"
implementation "io.ktor:ktor-serialization-jackson-jvm:$ktor_version"
implementation "io.ktor:ktor-server-netty-jvm:$ktor_version"
// mybatis
implementation "com.baomidou:mybatis-plus-boot-starter:$mybatis_version"
}
4. skm-service/build.gradle
plugins {
}
dependencies {
// mybatis
api "com.baomidou:mybatis-plus-boot-starter:$mybatis_version"
implementation "com.baomidou:mybatis-plus-generator:$mybatis_version" // 代码生成器
implementation "org.apache.velocity:velocity:$velocity_version" // 代码生成器需要的默认模板引擎
// mysql数据库依赖
runtimeOnly 'mysql:mysql-connector-java'
implementation "com.alibaba:druid-spring-boot-starter:$druid_spring_version"
}
5. skm-contller-web/build.gradle
plugins {
}
dependencies {
implementation project (':skm-comm')
implementation project (':skm-service')
}
二、项目打包
三、项目下载
[点击下载demo]
总结
注意,不要使用 gradle kotlin dsl 俗称 gradle.kts 做为项目构建工具,目前测试过无法在gradle.kts使用kapt插件,kapt可以开启querydsl的编译构建工作,这个效果和maven类似,使用下来gradle还是可以放心使用的,gradle.kts坑比较多不建议做为实际开发项目的构建工具,如果不知道如何生成spring的gradle项目可以在spring 脚手架中选择java->gradle这样构建出来的项目就是普通的gradle项目,手动导入kotlin插件即可。
|