Auto-reload
Restarting a server during development might take some time. Ktor allows you to overcome this limitation by using Auto-reload, which reloads application classes on code changes and provides a fast feedback loop. To use Auto-reload, follow the steps below:
Enable the development mode
To use Auto-reload, you need to enable the development mode first. This depends on the way you used to create and run a server:
If you use
EngineMainto run a server, enable the development mode in a configuration file.If you run a server using
embeddedServer, you can use the io.ktor.development system property.
When development mode is enabled, Ktor will be watching output files from the working directory automatically. If required, you can narrow down a set of watched folders by specifying watch paths.
Configure watch paths
When you enable development mode, Ktor starts watching output files from the working directory. For example, for a ktor-sample project build with Gradle the following folders will be watched:
Watch paths allow you to narrow down a set of watched folders. To do this, you can specify a part of a watched path. For example, to monitor changes in the ktor-sample/build/classes subfolders, pass classes as a watch path. Depending on the way you use to run a server, you can specify a watch path in the following ways:
In the application.conf or application.yaml file, specify the
watchoption:ktor { development = true deployment { watch = [ classes ] } }ktor: development: true deployment: watch: - classesYou can also specify several watch paths, for example:
watch = [ classes, resources ]watch: - classes - resourcesYou can find the full example here: autoreload-engine-main.
If you are using
embeddedServer, pass a watch path as thewatchPathsparameter:embeddedServer(Netty, port = 8080, watchPaths = listOf("classes")) { routing { get("/") { call.respondText("Hello, world!") } } }.start(wait = true)You can find the full example here: autoreload-embedded-server.
Recompile on changes
Since Auto-reload detects changes in output files, you need to rebuild a project. You can do this manually in IntelliJ IDEA or enable continuous build execution in Gradle using the -t command-line option.
To rebuild a project manually in IntelliJ IDEA, select from the main menu.
To rebuild a project automatically using Gradle, you can run the
buildtask with the-toption in a terminal:./gradlew -t build