Я работаю над проектом в Spring Boot, который до сих пор использовал только локальную Postgres базу данных. Однако сейчас мы работаем над развертыванием приложения на облачной платформе Google, которое включает использование Cloud SQL. Я нашел несколько руководств о том, как подключиться к облаку SQL и решил следовать этому .
Однако мы не можем позволить себе иметь отдельные базы данных для разработки, работающие также в облаке SQL, поэтому хотели бы продолжить использование локальных Postgres баз данных для разработки. Для этого я написал следующий код:
@Configuration
@EnableTransactionManagement
public class PersistenceContext {
@Bean
public DriverManagerDataSource dataSource() {
DriverManagerDataSource dataSource = new DriverManagerDataSource();
dataSource.setUrl(System.getenv("DB_URL"));
dataSource.setUsername(System.getenv("DB_USER"));
dataSource.setPassword(System.getenv("DB_PASS"));
String dbInstance = System.getenv("DB_INSTANCE");
if (dbInstance != null && !dbInstance.isEmpty()) {
Properties connectionProperties = new Properties();
connectionProperties
.setProperty("socketFactory", "com.google.cloud.sql.postgres.SocketFactory");
connectionProperties.setProperty("cloudSqlInstance", dbInstance);
dataSource.setConnectionProperties(connectionProperties);
}
return dataSource;
}
}
С этим я надеялся, что простое отсутствие указания фабрики сокетов SQL и dbInstance позволит мне использовать локальную базу данных. Однако при попытке запустить приложение только с установленной переменной БД: URL, пользователь и пароль, я сталкиваюсь со следующим исключением:
java .lang.IllegalArgumentException: имя соединения экземпляра должно быть предоставлены в формате <PROJECT_ID>:<REGION>:<INSTANCE_ID>
.
Полная трассировка стека может быть найдена здесь
URL БД настроен следующим образом:
DB_URL
: jdbc:postgresql://localhost:5432/soundshare
Что можно сделать для программного переключения между базами данных? (Я бы предпочел не хранить детали базы данных в конфигурационных файлах, если этого можно избежать)
Спасибо!