在开发过程中,快速反馈循环周期非常重要。 通常,重新启动服务器可能需要一些时间,因此Ktor提供了一个基本的自动重载工具,可以重新加载Application类。

注:自动重载不支持java 9,如果要使用该功能则需要使用JDK8;

类改变时自动重新加载

  在这两种情况下,使用embeddedServer或配置文件时,您必须提供一个与您要监视的类加载器相匹配的监视子字符串列表。

  例如,使用gradle时的典型类加载器如下所示:

/Users/user/projects/ktor-exercises/solutions/exercise4/build/classes/kotlin/main

  在这种情况下,您可以使用solutions/exercise4字符串或者仅使用exercise4字符串,它将匹配该类加载器。

使用embeddedServer

  使用自定义主服务器和embeddedServer时,可以使用可选参数watchPaths提供将被监视和重新加载的子路径列表。

fun main(args: Array<String>) {embeddedServer(Netty,watchPaths = listOf("solutions/exercise4"),port = 8080,module = Application::mymodule).apply { start(wait = true) }
}fun Application.mymodule() {routing {get("/plain") {call.respondText("Hello World!")}}
}

通过application.conf配置

  使用配置文件时,例如使用EngineMain从命令行运行或托管在服务器容器中:要启用此功能,请将watch的key添加到ktor.deployment配置。

 watch  - 应该监视并自动重新加载的类路径条目的数组。ktor {deployment {port = 8080watch = [ module1, module2 ]}…
}

  现在,watch键只是与contains相匹配的字符串,与加载的应用程序中的类路径条目相对应,例如jar名称或项目目录名称。 然后使用特殊的ClassLoader加载这些类,该类在检测到更改时被回收。

注:类路径条目看起来像file:/path/to/project/build/classes/myproject.jar,所以/ project会匹配,但com.mydomain不会。

在源代码更改时自动重新编译

  由于自动重载功能仅检测类文件中的更改,因此您必须自己编译应用程序。 你可以在运行时使用IntelliJ IDEA和Build - > Build Project来实现。

  但是,您也可以使用gradle自动检测源更改并为您编译。 您只需在项目文件夹中打开另一个终端并运行:gradle -t build。 它将编译应用程序,在执行此操作后,它将侦听其他源更改并在必要时重新编译。 因此,触发自动类重新加载。 然后,您可以使用另一个终端以gradle run运行应用程序。

例子

  您可以使用build.gradle或直接在IDE中运行应用程序。 执行示例文件中的main方法,或执行:io.ktor.server.netty.EngineMain.main。 使用commandLineEnvironment的EngineMain将负责加载application.conf文件(即HOCON格式)。


main.kt

package io.ktor.exercise.autoreloadimport io.ktor.application.*
import io.ktor.http.*
import io.ktor.response.*
import io.ktor.routing.*
import io.ktor.server.engine.*
import io.ktor.server.netty.*// Exposed as: `static void io.ktor.exercise.autoreload.MainKt.main(String[] args)`
fun main(args: Array<String>) {//io.ktor.server.netty.main(args) // Manually using Netty's EngineMainembeddedServer(Netty, watchPaths = listOf("solutions/exercise4"), port = 8080,module = Application::module).apply { start(wait = true)
}// Exposed as: `static void io.ktor.exercise.autoreload.MainKt.module(Application receiver)`
fun Application.module() {routing {get("/plain") {call.respondText("Hello World!")}}
}

application.conf

ktor {deployment {port = 8080watch = [ solutions/exercise4 ]}application {modules = [ io.ktor.exercise.autoreload.MainKt.module ]}
}

2、Ktor学习-自动重新加载;相关推荐

  1. logstash 自动重新加载配置

    自动重新加载配置 为了可以自动检测配置文件的变动和自动重新加载配置文件,需要在启动的时候使用以下命令: ./bin/lagstash -f configfile.conf --config.reloa ...

  2. 【深度学习】Keras加载权重更新模型训练的教程(MobileNet)

    [深度学习]Keras加载权重更新模型训练的教程(MobileNet) 文章目录 1 重新训练 2 keras常用模块的简单介绍 3 使用预训练模型提取特征(口罩检测) 4 总结 1 重新训练 重新建 ...

  3. 深入java虚拟机学习 -- 类的加载机制(续)

    昨晚写 深入java虚拟机学习 -- 类的加载机制 都到1点半了,由于第二天还要工作,没有将上篇文章中的demo讲解写出来,今天抽时间补上昨晚的例子讲解. 这里我先把昨天的两份代码贴过来,重新看下: ...

  4. JVM学习笔记-03-类加载器及双亲委派机制

    JVM学习笔记-03-类加载器及双亲委派机制 文章目录 JVM学习笔记-03-类加载器及双亲委派机制 1. 类加载器 视频链接-最新JVM教程IDEA版[Java面试速补篇]-03-类加载器及双亲委派 ...

  5. 安卓插件化学习 - 类的加载

    安卓插件化学习 - 类的加载 引言 一.类的加载 1. 原理 2. 代码 2.1 宿主apk代码 2.1.1 插件管理器 2.1.2 配置文件 2.1.3 插件初始化 2.1.4 调用插件方法 2.2 ...

  6. JS重启自动运行加载视频错误

    JS重启自动运行加载视频错误 问题 原因 结论 问题 各种浏览器调试运行都没问题,系统启动自动运行Chrome加载网页就会出现页面错位错误 原因 调试发现 两个层之间的视频加载错误了 结论 也就是说系 ...

  7. STC15W204S串口通讯,设置自动热加载程序代码(自动下载代码)

    stc15w204s体积非常的小,只有8个引脚,非常的迷你,它就是15系列的缩水版,引脚好似从芯片中间横腰切断了一样,定义排序和完全版本是相同的. 如此迷你,对我这种强迫症的人来说就是一个福音啊,网上 ...

  8. 加载动画php,CSS3学习之页面加载动画(二)

    本篇文章给大家分享6种css3的页面加载动画.有一定的参考价值,有需要的朋友可以参考一下,希望对你们有所帮助. 在之前的文章[CSS3学习之页面加载动画(一)]中已经分享了四个CSS3的加载动画,今天 ...

  9. node学习笔记--模块加载

    学习笔记过程,自己理解,方便自己查询,新手一枚,希望批评指正. 使用 webstrom 编辑器 可以将安装的node.exe 配置进去,直接运行,可自行百度配置. 通过命令行参数传递给NodeJS以启 ...

最新文章

  1. Python的深浅拷贝讲解!
  2. java 手机号脱敏,身份证号脱敏 工具类
  3. lastpass密码管理工具使用教程
  4. jenkin系列_调度jmeter实现分布式测试
  5. 因特网 以太网 互联网的含义及区别
  6. slf4j在linux位置,SLF4J环境设置
  7. 音乐 美术 计算机期末考试表,2021东莞中考音乐美术信息技术合格性考试时间安排...
  8. 无线通信信道的衰落特性(大尺度衰落和小尺度衰落)
  9. 安装erlang没有bin文件夹_RabbitMQ安装教程
  10. C#如何卸载已安装的Windows Service服务
  11. bat 等待输入_继续提速——双拼的进阶,音形输入
  12. stm32使用AD采样需要注意的一些小问题
  13. 导航栏隐藏的正确方式
  14. 生活,人艰不拆......
  15. SX1278 Lora网关
  16. 机器学习模型设计准则:“无免费午餐”定理和“奥卡姆剃刀”原则
  17. Telnet英文全称
  18. sublime text3安装python插件和flake8_让你用sublime写出最完美的python代码--windows环境-搜云库...
  19. jQuery Cookbook中文版
  20. C语言数据结构与算法---图的遍历

热门文章

  1. 从零开始搭建基于CEFGlue的CB/S的winform项目
  2. Virtualbox设置虚拟机访问外网以及主机访问虚拟机
  3. google-perftools优化nginx在高并发时的性能
  4. Vim实战指南(一):基础编辑命令
  5. 1. Action 实现 ModelDriven 接口后的运行流程
  6. linux计划任务作业
  7. 海思芯片固件修改工具_地平线X3开发板开箱、固件刷写、环境配置
  8. c语言折半查找法_C语言学习|选择法排序及折半查找法查找
  9. 网站漏洞扫描工具Uniscan
  10. 二元函数求最小值 c语言,用C语言实现简单的多元线性回归算法(二)