2.1 在starter官网生成的starter.zip基础项目包,解压后的结构如下:
默认情况下是一个单体结构,是一个单模块,在实际企业应用开发中,一个项目中会有多个模块,我们需要对这个结构进行改进:
1)、删除src目录,
2)、创建新的模块
3)、编辑settings.gradle.kts
//项目名称
rootProject.name = "ems"
//模块名称
include("news")
4)、新建的模块结构:
等待Gradle进行模块的初始化和依赖更新,完成后,模块的文件夹变成了彩色。
5)、然后创建软件包:
通常是你的组织倒置的URL。
6)、继续创建模块结构包名,可以根据自己的实际情况来定义。
7)、编写启动文件NewsMain,用于IDEA运行测试
/**
* 系统服务主入口类
* 负责创建和部署Vert.x实例及相关Verticle
*/
object NewsMain {
// 日志记录器
private val logger = LoggerFactory.getLogger(NewsMain::class.java)
@JvmStatic
fun main(args: Array<String>) {
// 创建Vert.x实例
val vertx = Vertx.vertx()
// 创建系统服务Verticle实例
val verticle = NewsVerticle()
// 部署Verticle并配置回调
vertx.deployVerticle(verticle)
.onSuccess { deploymentId ->
logger.info("系统服务NewsVerticle部署成功,部署ID: $deploymentId")
}
.onFailure { error ->
logger.error("系统服务NewsVerticle部署失败", error)
vertx.close()
}
}
}
在Kotlin语言中,函数已是顶级成员,我们也可以直接写函数方法启动:
fun main(args: Array<String>) {
val logger = LoggerFactory.getLogger(main()::class.java)
// 创建Vert.x实例
val vertx = Vertx.vertx()
// 创建系统服务Verticle实例
val verticle = NewsVerticle()
// 部署Verticle并配置回调
vertx.deployVerticle(verticle)
.onSuccess { deploymentId ->
logger.info("系统服务NewsVerticle部署成功,部署ID: $deploymentId")
}
.onFailure { error ->
logger.error("系统服务NewsVerticle部署失败", error)
vertx.close()
}
}
8)、编写主文件:Vert.x 4.X的版本默认是继承AbstractVerticle(),5.X的版本默认继承VerticleBase(),为了更使用Kotlin的协程支持,我们继承:CoroutineVerticle()这个基类。
class NewsVerticle : CoroutineVerticle() {
// 日志记录器
private val logger = LoggerFactory.getLogger(this::class.java)
override suspend fun start() {
// 创建主路由,方便后面挂载子路由
val mainRouter = Router.router(vertx)
mainRouter.route().handler(BodyHandler.create())
//
mainRouter.route("/").handler { ctx->
jsonResponse(ctx,200, message = "获取数据成功。", null)
}
mainRouter.route().last().failureHandler(DefaultExceptionHandler.create())
// 配置全局异常处理
mainRouter.errorHandler(500,DefaultExceptionHandler.create())
mainRouter.errorHandler(404){
jsonResponse(it,it.statusCode(), "资源不存在,或者没有权限", null)
}
// 启动 HTTP 服务器
try {
vertx.createHttpServer()
.requestHandler(mainRouter)
.listen(8080)
.coAwait()// .Cawait()
println("HTTP服务器启动成功,端口:8080")
} catch (e: Exception) {
println("HTTP服务器启动失败: ${e.message}")
}
}
9)、运行项目:控制台能看到项目已运行在8080端口
10)、浏览器访问:http://127.0.0.1:8080
2.2 通过IntelliJ IDEA创建项目:
相对于starter方式来说,略为方便一些,当我们选择了生成多模块构建,默认就为我们生成了多模块的基本结构,而且默认已创建了两个空模块:app和utils。
其他需要改进的地方和上面的starter方式差不多。