
com.infusers.core.secrets.AppConfig Maven / Gradle / Ivy
package com.infusers.core.secrets;
import javax.sql.DataSource;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.jdbc.DataSourceBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.env.ConfigurableEnvironment;
import org.springframework.jdbc.datasource.lookup.DataSourceLookupFailureException;
import com.google.gson.Gson;
import com.infusers.core.logger.ILogger;
import com.infusers.core.secrets.dto.DBSecrets;
@Configuration
public class AppConfig {
@Value("${spring.secretsmanager.db.details}")
String secretNameDB;
@Value("${spring.aws.secretsmanager.region}")
String region;
@Value("${spring.datasource.url}")
String url;
@Value("${spring.datasource.username}")
String userName;
@Value("${spring.datasource.password}")
String password;
private ILogger log = new ILogger(AppConfig.class);
@Autowired
private SecretManager secretManager;
public String getSecretValue(String region, String secretName) {
return secretManager.getSecret(region, secretName);
}
@Autowired
private ConfigurableEnvironment configEnvironment;
/*@Bean
public SecretsLoader secretsLoader() {
return new SecretsLoader(secretManager, configEnvironment);
}*/
@Bean
public DataSource dataSource() {
log.warnWithSeparator("AppConfig.dataSource() isCloudEnvironment() = {}", this.secretManager.isCloudEnvironment());
DataSourceBuilder> dataSourceBuilder = DataSourceBuilder.create();
if(this.secretManager.isCloudEnvironment()) {
new SecretsLoader(secretManager, configEnvironment);
DBSecrets secrets = getDBSecrets();
if(secrets!=null) {
dataSourceBuilder
.url("jdbc:" + secrets.getEngine() + "://" + secrets.getHost() + ":" + secrets.getPort() + "/"+secrets.getDbname())
.username(secrets.getUsername()).password(secrets.getPassword()).build();
}
else {
log.errorWithSeparator("AppConfig.dataSource() --> It is cloud environment, but secrets are NOT available. Something is NOT right here, needs attention!!");
}
}
else {
log.warnWithSeparator("AppConfig.dataSource() Not a cloud environment, falling back to Inmemory DB.");
dataSourceBuilder
.url(url)
.username(userName).password(password).build();
}
try {
return dataSourceBuilder.build();
}
catch (DataSourceLookupFailureException e) {
log.errorWithSeparator("AppConfig.dataSource() --> Exception while creating DB connection. Something is NOT right here, needs attention!!"+e.getMessage());
throw new RuntimeException("Failed to create DataSource", e);
}
}
private DBSecrets getDBSecrets() {
String secretsStr = secretManager.getSecret(region, secretNameDB);
Gson gson = new Gson();
return gson.fromJson(secretsStr, DBSecrets.class);
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy