Для загрузки и создания объектов базы данных лучше придерживаться жидкостной базы или пролетного пути. Используя следующий код, можно загрузить хранимую процедуру.
Использовал контроллер для загрузки хранимой процедуры, но это может быть простой класс или его можно настроить через прослушиватель событий.
@RestController
public class SqlLoaderController {
@Autowired
DataSource dataSource;
@GetMapping("/load")
public void loadScript() throws Exception
{
ResourceDatabasePopulator resourceDatabasePopulator=new ResourceDatabasePopulator();
resourceDatabasePopulator.setSeparator("DELIMITER");
InputStream is= new ClassPathResource("sql.txt").getInputStream();
resourceDatabasePopulator.addScript(new InputStreamResource(is));
resourceDatabasePopulator.execute(dataSource);
}
}
DELIMITER используется для различения guish между началом и концом двух объектов хранимой процедуры или базы данных. Файл sql .txt
CREATE PROCEDURE GetStocks(int_stockcode varchar(20))
BEGIN
DECLARE stock_name VARCHAR(100);
SELECT 1 FROM dual;
END;
DELIMITER
CREATE PROCEDURE GetStocks1(int_stockcode varchar(20))
BEGIN
DECLARE stock_name VARCHAR(100);
SELECT 1 FROM dual;
END;
DELIMITER