In a previous blog post we had a look at how to use jasypt-spring-boot to encrypt our properties. Having a bit of time on my hands, I added some code to the project’s repo up on Github which we’ll be going through today. To get the complete code at the end of this post, checkout the
The idea was to detect when we are no longer connected to our database and send ourselves an email when this happens.
Enabling actuators in Spring Boot is simply a matter of adding a dependency:
We now have a bunch of endpoints we can access which gives us useful information about our system, a good summary of which can be found over at Baeldung’s.
For example, if you hit the
/health endpoint with our app running: http://localhost:8080/health, you should get back something like this:
That’s great, but we won’t be using the endpoints directly in this case. We can just get the bean we’re interested in from Spring’s application context,
The first thing we’ll need to do is add some dependencies:
Next up, we can add a
JavaMailSender bean to our
App.java to set up something to send emails with:
You’ll notice we’re getting some values from a properties file. You’ll want to add your own Gmail username/password (or change settings to use some other provider) in
src/main/resources/config/application.properties. Of course, you can use the same method we used in Encrypting properties in Spring Boot with jasypt-spring-boot to encrypt the email password, for example.
Scheduling a task with Spring
Using Spring’s task scheduling guide, we can proceed to simply add
@EnableScheduling to our
App and create a new
ScheduledTasks component as shown below:
Every 7 seconds (as specified in
@Scheduled) we’re getting a
DataSourceHealthIndicator from our Spring application context and determining whether the connection to our data source is still active. If it isn’t, we’re simply checking that we haven’t already handled this situation (by logging and sending an email), and handling it. If it is, we’re resetting the
emailSent flag so that next time we lose our database connection we can handle it again.
You can try this out by switching your MySQL server on and off while the app is running with the following:
Thanks for reading 🙂