#spring #maven #tomcat #war #flyway
#spring #maven #tomcat #Война #flyway
Вопрос:
Я работал над проектом Spring Boot, я использую Flyway для управления версиями базы данных в этом проекте. В папке миграции есть несколько SQL-файлов, содержащих инструкции «Load data local infile», ссылающиеся на некоторые CSV-файлы.
Пример:
load data local infile 'C:/Program Files (x86)/Apache Software Foundation/Tomcat 8.5/webapps/originator/WEB-INF/classes/insertData/subject.csv' INTO TABLE subject
Как я могу сделать этот путь относительным?
Я пытался
'./classes/insertData/subject.csv'
'./insertData/subject.csv'
И некоторые другие комбинации также, но не смогли устранить эту проблему
Ошибка:
Вызвано: java.sql.SQLException: не удается открыть файл ‘.. / ../insertData/subject.csv’ для команды ‘LOAD DATA LOCAL INFILE’.Из-за лежащего в основе IOException:
ЗАПУСТИТЬ ВЛОЖЕННОЕ ИСКЛЮЧЕНИЕ java.io.FileNotFoundException СООБЩЕНИЕ: ….insertDatasubject.csv (система не может найти указанный путь) STACKTRACE: java.io.FileNotFoundException: ….insertDatasubject.csv (система не может найти указанный путь)
Ответ №1:
Я смог вставить данные в таблицы из файлов CSV в процессе миграции с пути к ресурсам. В сценарии миграции я использовал весь путь, написанный, как показано ниже.
LOAD DATA LOCAL INFILE './src/main/resources/<FOLDER>/<FILE>.csv' INTO TABLE <TABLE_NAME>
FIELDS TERMINATED BY ','
optionally enclosed by '"'
LINES TERMINATED BY 'rn'
IGNORE 1 LINES;
Другие инструкции будут зависеть от вашей файловой структуры, я просто хотел включить весь пример.
Ответ №2:
Вместо написания SQL-скрипта вы можете использовать миграцию на основе Java для чтения и вставки данных в таблицу. Вы можете использовать свойство «flyway.locations», чтобы указать путь для миграции на основе Java в вашем application.properties. В качестве пути по умолчанию выполните поиск «./db /migration» ресурсов. Для получения дополнительной информации проверьте https://flywaydb.org/documentation/migrations#java-based-migrations