Каково рекомендуемое место для сценариев SQL (DDL)?


каково рекомендуемое место для SQL, DDL, ... скрипты в стандартная структура каталогов Maven?

Я уверен, что почти каждый веб-проект использует БД и какие-то SQL-скрипты, которые нужно где-то хранить, так что, вероятно, будет "лучшим" местом, где хранить эти файлы?

посоветуйте, пожалуйста.

5 55

5 ответов:

Я думаю, что нет лучшей практики для этого. В моем прошлом проекте, я создал отдельный каталог для хранения такого сценария SQL.

src/main/db.

он не будет упакован в final JAR по умолчанию (что является предпочтительным способом в большинстве случаев), но достаточно удобно, чтобы он был упакован в сборку. Вы даже можете упаковать их в основную банку артефактов, добавив соответствующее объявление ресурса или используя Maven build-helper плагин.

однако, все зависит от вашего использования этого скрипта. Однако я бы рассмотрел возможность размещения их в ресурсах только тогда, когда они действительно являются ресурсами, которые будут загружены вашим приложением.

Я думаю, что это целиком зависит от того, когда и как эти скрипты обрабатываются:

  1. Время Компиляции: это вещи, которые ваш компилятор / toolchain потребляют и производят артефакты. Руководство maven по этому очень ясно, и поэтому файлы будут принадлежать где-то в src/main/, Как src/main/sql или src/main/db. Хотя я бы этого не сделал, я мог видеть, что они используются задачей при компиляции для изменения вашей БД. Я мог видеть, что скрипты liquibase используются здесь, а затем выполняются через задачу maven.
  2. Runtime: они используются вашей средой выполнения и либо изменяют ее, либо потребляются ею для получения результатов. Размещение их в src/main/resources кажется разумным, чтобы ваши процессы во время выполнения могли использовать их, чтобы изменить вашу БД, как вы считаете нужным - скажем, как часть вашей обработки hot-fix при развертывании или как часть ваших обычных усилий по управлению версиями БД на лету. Опять же, возможно, вы отправляете liquibase с вашим приложением, а затем делаете изменения в БД на месте путь...
  3. Разработки: мне кажется, это наиболее вероятный сценарий. Где я должен хранить свой DDL, чтобы правильно отслеживать их в VCS и по-прежнему поддерживать мою структуру, совместимую с maven? Для меня это src/scripts/sql или src/scripts/db. Это помещает их в качестве" исходных " файлов в пределах компетенции maven, но в месте, которое предназначено для использования более специальным образом.

src/main/resources Это хорошее место, но помните, что он упаковывается в вашу последнюю банку, поэтому это зависит от того, хотите ли вы раскрыть это в своем производственном коде или нет.

Если нет, вы можете отфильтровать это, добавив отрывок конфигурации Maven-jar-plugin в соответствующий pom.xml:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-jar-plugin</artifactId>
    <configuration>
         <excludes>src/main/resources/privateSubdir/**</excludes>
    </configuration>
</plugin>

Я хотел бы использовать src/main/resources для этой цели. Может быть, создание подпапки там.

очень многое зависит от вашего пробега, но прежде всего это хорошая идея, чтобы отделить приложение от базовой структуры базы данных. Поэтому я рекомендую вам переместить все материалы, связанные с базой данных, в отдельный проект maven. Сделав это, скрипты базы данных имеют хороший слот в /src/main/scripts.