第2章 默认的项目结构改进

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方式差不多。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

err2008

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值