Do you think IIT Guwahati certified course can help you in your career?
No
Introduction
DevTools is short for development tools. A tool that facilitates the rapid deployment of applications on a programming platform is known as a development tool.
The Spring boot dev tools module includes many useful developer features for improving the development experience, such as static resource caching, automatic restarts, live reload, global settings, and remote application running.
This article will discuss various development tools provided by spring boot. So, let's get started!
What are development tools?
A company named Pivotal maintains an open-source micro-framework known as Spring Boot. It provides a platform for Java developers to get started with an auto-configurable production-grade Spring application. Developers can use it to get started quickly without wasting time preparing and configuring their Spring application.
Spring Boot provides an additional set of tools to improve the application development experience. Any project can include the spring-boot-devtools module to provide additional development-time features.
You can also check out our Spring Boot Course that provides the tools you need to excel in modern java development.
Spring Boot DevTools Features
Automatic Restart
Spring Boot DevTools provides automatic restart functionality, allowing developers to quickly see changes made to their application without needing to manually restart the server. Any changes to class files trigger a restart of the application, speeding up the development process.
Live Reload
With live reload, developers can instantly see changes made to static resources such as HTML, CSS, or JavaScript files without needing to manually refresh the browser. This feature enhances the development experience by providing real-time feedback on frontend changes.
Remote Development Support
Spring Boot DevTools offers remote development support, enabling developers to connect their local development environment to a remote server. This feature allows for seamless development and debugging on remote servers, improving productivity in distributed development teams.
Built-in Developer Tools
Spring Boot DevTools includes various built-in developer tools such as endpoints for monitoring, logging, and configuration. These tools provide valuable insights into the application's runtime behavior and facilitate troubleshooting and debugging tasks during development.
Let’s see how to include this module in our project.
Enabling the Spring Boot Dev Tools Module
Simply add the following module dependency to your build to include devtools support:
Now, let’s move on to see some of the important devTools of Spring Boot.
Development tools of Spring Boot
1..) Automatic Reload
When a resource changes, the spring-boot-devtools module includes an embedded LiveReload server that can trigger a browser refresh. The browser must support an extension for it as a prerequisite.
Note: You can only have one LiveReload server running at any given time. Check that no other LiveReload servers are running before starting your application. Only the first application launched from your IDE will have LiveReload support.
Live reload is enabled by default. Set the spring.devtools.livereload.enabled property to false if you want to disable this feature for any reason.
Inside application.properties
spring.devtools.livereload.enabled = false
#Set false to disable live reload
1.1 Customizing Auto Reload
Sometimes we want only a few resources to get auto-reload. In that case, we can exclude resources we don't want to auto-reload, and we can similarly we can Include/Exclude Additional Paths as well.
Auto-reload works on the following paths by default:
/META-INF/maven
/META-INF/resources
/resources
/static
/public
/templates
If we want to disable browser auto-reload for files in a subset of these paths, we can use the spring.devtools.restart.exclude property.
There may be a few files that are not in the resources or the classpath, but we may still want to keep an eye on those additional files/paths to reload the application. Use the spring.devtools.restart.additional-paths property to accomplish this.
To improve performance, dev tools cache static content/template files to be served faster to the browser/client.
Caching is an excellent feature for production, where every millisecond of performance improvement is critical. However, it can cause a stale cache problem in a development environment, and we may not see our changes immediately in the browser. This capability can be customised using the Dev Tools module by configuring a few properties.
The caching feature is turned off by default. We can enable it for use in a production environment by setting a property. This feature is supported by a large number of UI template libraries. For example, thymeleaf, freemarker, groovy, moustache, and so on.
Inside application. properties:
#set true in production environment
#spring.freemarker.cache = true
#set false in development environment; It is false by default.
spring.freemarker.cache = false
#Other cache properties
spring.thymeleaf.cache = false
spring.mustache.cache = false
spring.groovy.template.cache = false
3..) Automatic Restart
You must be thinking, what is the difference between automatic reload and automatic restart? Let's clear this doubt first before moving any further.
So, The term "auto-load" refers to the browser's UI reloading to see changes to static content. And reloading the server-side code and configurations, followed by a server restart, is referred to as “auto-restart”.
The term "auto-restart" refers to the server-side reloading of Java classes and configurations. Following server-side changes, these changes are dynamically re-deployed, and the server is restarted to load the modified code and configuration.
In layman’s terms, we can say that, When files on the classpath change, applications that use spring-boot-devtools will restart automatically.
This can be a helpful feature when working in an IDE because it provides a very fast feedback loop for code changes. Any classpath entry that points to a folder is monitored for changes by default. It should be noted that some resources, such as static assets and view templates, do not require the application to be restarted.
3.1) Customising Auto Restart
a..) Keeping Track of Auto-Configuration Delta Changes:
By default, a report displaying the condition evaluation delta is logged each time your application restarts. The report displays changes to your application's auto-configuration as we make changes like adding or removing beans and changing configuration properties.
Set the following property to disable report logging:
If you do not want to use the restart feature, you can turn it off by setting the spring.devtools.restart.enabled property to false. In most cases, you can specify this in your application.properties as follows:
spring.devtools.restart.enabled = false
If you need to disable restart support completely, for example, because it doesn't work with a specific library, you must set a System property before calling SpringApplication.run(...).
Automatic restarts are not always desirable, and they can sometimes slow down development time due to frequent restarts. We can use a trigger file to solve this problem.
Spring boot will continue to monitor that file, and if it detects any changes, it will restart the server and reload all of your previous changes.
To specify the trigger file for your application, use the spring.devtools.restart.trigger-file property. It could be any file, external or internal.
The restart functionality does not work well with objects deserialized with a standard ObjectInputStream. If you need to deserialize data, use Spring's ConfigurableObjectInputStream in conjunction with Thread.currentThread().getContextClassLoader().
Unfortunately, many third-party libraries deserialise without taking the context classloader into account. If you discover such a flaw, you must contact the original authors to request a fix.
4..) Global Setting of Spring Boot dev tool
Setting all of our favourite configuration options every time we create a new Spring boot project may become a redundant effort. We can reduce it by using a global setting file.
Individual projects/modules will inherit all custom settings from the global file, and they can override any specific setting on a per-project basis if necessary.
Go to your system's user's home directory and create a file called .spring-boot-devtools.properties. (Please keep in mind that file names begin with a dot.)
This global property file should not be used to configure globally available options.
On the other hand, we can add any of the following files to the $HOME/.config/spring-boot directory to configure global devtools settings:
spring-boot-devtools.properties
spring-boot-devtools.yaml
spring-boot-devtools.yml
Any properties added to these files apply to all Spring Boot applications that use devtools on your machine. To make a restart, always use a trigger file. For example, add the following property to your spring-boot-devtools file:
FileSystemWatcher works by polling the class changes at a predefined time interval and then waiting for a predefined quiet period to ensure that no more changes occur.
Because Spring Boot entirely relies on the IDE to compile and copy files into a location where Spring Boot can read them, you may notice that certain changes are not reflected when devtools restarts the application.
If you are constantly experiencing such issues, try increasing the spring.devtools.restart.poll-interval and spring.devtools.restart.quiet-period parameters to the values that are appropriate for your development environment:
Spring Boot developer tools aren't just for local development. When running applications remotely, you can also use some features.
Remote support is optional because enabling it poses a security risk. It should only be enabled when running on a trusted network or when SSL is used to secure the network. If you don't have either of these options, you shouldn't use DevTools' remote support.
Support should never be enabled on a production deployment. To enable it, ensure that devtools is included in the repackaged archive, as shown in the list below:
The spring.devtools.remote.secret property must then be set. Like any important password or secret, the value should be unique and strong enough to prevent guessing or brute-forcing.
There are two parts to remote devtools support: a server-side endpoint that accepts connections and a client application that runs in your IDE. When the spring.devtools.remote.secret property is set, the server component is automatically enabled. The client component must be manually launched.
This was all about devTools supported by Spring Boot. Now, let’s move to some of the frequently asked questions on this topic.
Frequently Asked Questions
What are development tools?
A development tool is a computer programme used by the developers to create, debug, maintain, or support other programmes and applications.
What do dev tools in spring boot mean?
DevTools is an abbreviation for Developer Tool. Its main goal is to try to reduce development time while working with the Spring Boot application. Spring Boot DevTools pick up the changes, and the application is restarted.
How do I make dev tools available in Spring Boot?
It is very simple to enable dev tools in a spring boot application. Simply include the spring-boot-devtools dependency in your build file.
Conclusion
In this blog, we have learned about the various Spring Boot DevTools. Spring Boot DevTools significantly enhances the development experience for Spring Boot applications by providing a suite of powerful features. From automatic restarts to live reloads and remote development support, DevTools streamline the development process, allowing developers to iterate quickly and efficiently.