У меня была такая же проблема.
Таким образом, одно решение с Runtime.getRuntime().exec()
String command = "mysqldump -u <your login> --password=<your password> <database name to clone> | mysql -u root --password=<your password> <new database name>";
Process p = Runtime.getRuntime().exec(new String[]{"bash","-c",command});
Недостатки: Вы должны безопасно хранить свой пароль где-нибудь. Это не зависит от системы.
Другое решение (я думаю, лучше) - запустить файл SQL, который создаст схему вашей базы данных. В MySQL вы можете легко использовать mysqldump
для создания схемы для вас.
Resource resource = new ClassPathResource(defaultDatabaseSchemaFilePath);
ResourceDatabasePopulator databasePopulator = new ResourceDatabasePopulator(resource);
DataSource dataSource = multiTenantDataSource.getDataSource(dbName);
databasePopulator.execute(dataSource);
Недостатки: в начале вашего файла SQL вам нужно добавить SET FOREIGN_KEY_CHECKS=0;
, а в конце SET FOREIGN_KEY_CHECKS=1;
, когда databasePopulator
выполняет команды одну за другой, и, вероятно, возникнет проблема проверки внешнего ключа.
Надеюсь, это поможет кому-то в будущем.