#database #spring-boot #hibernate #jpa #multi-tenant
#База данных #весенняя загрузка #переход в спящий режим #jpa #многопользовательский
Вопрос:
У меня есть приложение для нескольких арендаторов, разработанное с помощью Spring boot. В главной таблице я храню информацию о базах данных клиента. Я пытаюсь создать службу, которая получает строку из главной таблицы и создает для нее базу данных. Есть ли известный способ сделать это в Spring boot? Единственная информация, которую я могу найти в Интернете, — это создание при запуске приложения, и это нежелательно. Таблица master-tenant находится в главной схеме и имеет следующую структуру:
Метод из службы заключается в следующем:
public void createTenant(TenantDTO tenantDTO) {
tenantepository.save(new Tenant(tenantDTO));
MasterTenant masterTenant = new MasterTenant();
masterTenant.setDbName(tenantDTO.getTenantId());
masterTenant.setDriverClass("com.mysql.jdbc.Driver");
masterTenant.setTenantId(tenantDTO.getTenantId());
masterTenant.setPassword("password");
masterTenant.setStatus(EStatus.ACTIVE.name());
masterTenant.setUserName("root");
masterTenant.setUrl("jdbc:mysql://localhost:3306/" tenantDTO.getTenantId());
DBContextHolder.setCurrentDb(masterTenant.getDbName());
masterTenantRepository.save(masterTenant);
multiTenantConnectionProvider.selectDataSource(masterTenant.getTenantId());
//create schema create tables from existing entities or run a script of sql
}
Мне нужна помощь в определении части с созданием схемы и таблиц.
Ответ №1:
Один из вариантов, о котором я могу подумать, — это иметь серверную часть, такую как Jenkins или AWS Lambda, которой вы можете отправить запрос на создание базы данных в вашем пуле серверов.
В случае выбора задания Jenkins у вас есть REST API, предоставленный Jenkins, который вы можете использовать для запуска задания. Поскольку она больше привязана к dev-ops, вы можете использовать сценарий, подобный terraform, в задании jenkins, который принимает идентификатор клиента в качестве параметра, чтобы установить его в качестве имени базы данных и т.д.
Некоторые преимущества использования задания Дженкинса заключаются в
- Задание может выполняться долго
- Поддерживает постановку в очередь
- Может легко интегрироваться с devops и удалять эти зависимости с помощью приложения
- Доступ на основе API для запуска задания, просмотра статуса и журналов и т.д.