Question
Is it possible to configure multiple connections in Spring Boot using nested @ConfigurationProperties?
# application.yml
cassandra:
connections:
default:
driver: "%database_driver%"
host: "%database_host%"
port: "%database_port%"
dbname: "%database_name%"
user: "%database_user%"
password: "%database_password%"
charset: UTF8
customer:
driver: "%database_driver2%"
host: "%database_host2%"
port: "%database_port2%"
dbname: "%database_name2%"
user: "%database_user2%"
password: "%database_password2%"
charset: UTF8
Answer
Yes, it is possible to configure multiple connections in Spring Boot using the @ConfigurationProperties annotation with nested classes. This mechanism allows you to map complex configuration properties directly to Java objects, making it easier to manage and use them in your application.
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@ConfigurationProperties(prefix = "cassandra")
public class CassandraProperties {
private Map<String, ConnectionProperties> connections = new HashMap<>();
public Map<String, ConnectionProperties> getConnections() {
return connections;
}
public static class ConnectionProperties {
private String driver;
private String host;
private String port;
private String dbname;
private String user;
private String password;
private String charset;
// Getters and setters...
}
}
@Configuration
public class ApplicationConfig {
@Bean
public CassandraProperties cassandraProperties() {
return new CassandraProperties();
}
}
Solutions
- Define a class to hold connection settings with nested classes for each connection type.
- Use the @ConfigurationProperties annotation to bind properties from your application.yml or application.properties file to your classes.
- Create a configuration class to enable the properties binding.
Common Mistakes
Mistake: Not using the correct prefix in @ConfigurationProperties.
Solution: Ensure that the prefix in your @ConfigurationProperties annotation matches the root key in your configuration file.
Mistake: Forgetting to add getters and setters in the nested class.
Solution: Make sure to include all necessary getter and setter methods for accessing properties.
Helpers
- Spring Boot
- ConfigurationProperties
- nested properties
- multiple connections
- application.yml
- Cassandra connection
- Spring Boot configuration