Spring boot reset datasource on the fly

Found a way to update datasource on-the-fly,

I have given external spring config file which contains DB properties to the application and then refreshed the properties using @RefreshScope for the datasource bean.

A thread monitors the file changes and makes a call to actuator refresh() method.

database.properties

dburl=jdbc://localhost:5432/dbname
dbusername=user1
dbpassword=userpwd

Creating datasource,

@RefreshScope
public class DBPropRefresh {
  @Value("${dburl}")
  private String dbUrl;

  @Value("${dbusername}")
  private String dbUserName;

  @Value("${dbpassword}")
  private String dbPassword;

  @Bean
  @RefreshScope
  public DataSource getDatasource() {
    return new DatasourceBuilder().create().url(dbUrl).username(dbUserName).password(dbPassword);
  }
}

Giving external config file to the application,

java -jar myapplication.jar --spring.config.location=database.properties

I have created a Java thread class to monitor database.properties file changes. Followed https://dzone.com/articles/how-watch-file-system-changes When there are changes then it makes call to refreshEndPoint.refresh().

In pom.xml,

<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-actuator</artifactId>
  <version>1.5.6.RELEASE</version>
</dependency>