diff --git a/app-monolith/pom.xml b/app-monolith/pom.xml index fb85b0f..ebef45f 100644 --- a/app-monolith/pom.xml +++ b/app-monolith/pom.xml @@ -82,6 +82,11 @@ 42.1.4 runtime + + org.liquibase + liquibase-core + 3.5.5 + org.spockframework spock-core diff --git a/app-monolith/src/main/resources/application.properties b/app-monolith/src/main/resources/application.properties index 37b8100..6ac7266 100644 --- a/app-monolith/src/main/resources/application.properties +++ b/app-monolith/src/main/resources/application.properties @@ -5,5 +5,7 @@ spring.datasource.url=jdbc:postgresql://localhost:5432/postgres spring.datasource.username=postgres spring.datasource.password= spring.datasource.driver-class-name=org.postgresql.Driver +liquibase.change-log=classpath:/schema/db.changelog.xml logging.pattern.console=%d{yyyy-MM-dd HH:mm:ss} %-5level %logger{36} - %msg%n logging.level.=error + diff --git a/database/schema/commons.sql b/app-monolith/src/main/resources/schema/commons.sql similarity index 100% rename from database/schema/commons.sql rename to app-monolith/src/main/resources/schema/commons.sql diff --git a/database/schema/db.changelog.xml b/app-monolith/src/main/resources/schema/db.changelog.xml similarity index 100% rename from database/schema/db.changelog.xml rename to app-monolith/src/main/resources/schema/db.changelog.xml diff --git a/database/schema/delivery-planning.sql b/app-monolith/src/main/resources/schema/delivery-planning.sql similarity index 100% rename from database/schema/delivery-planning.sql rename to app-monolith/src/main/resources/schema/delivery-planning.sql diff --git a/database/schema/demand-forecasting.sql b/app-monolith/src/main/resources/schema/demand-forecasting.sql similarity index 100% rename from database/schema/demand-forecasting.sql rename to app-monolith/src/main/resources/schema/demand-forecasting.sql diff --git a/database/schema/product-management.sql b/app-monolith/src/main/resources/schema/product-management.sql similarity index 100% rename from database/schema/product-management.sql rename to app-monolith/src/main/resources/schema/product-management.sql diff --git a/database/schema/production-planning.sql b/app-monolith/src/main/resources/schema/production-planning.sql similarity index 100% rename from database/schema/production-planning.sql rename to app-monolith/src/main/resources/schema/production-planning.sql diff --git a/database/schema/shortages-prediction.sql b/app-monolith/src/main/resources/schema/shortages-prediction.sql similarity index 100% rename from database/schema/shortages-prediction.sql rename to app-monolith/src/main/resources/schema/shortages-prediction.sql diff --git a/database/Dockerfile b/database/Dockerfile deleted file mode 100644 index c5c42bf..0000000 --- a/database/Dockerfile +++ /dev/null @@ -1,17 +0,0 @@ -FROM postgres:10 -MAINTAINER MichaƂ Michaluk - -RUN apt-get update -y -RUN apt-get install openjdk-8-jre-headless -y - -ADD http://central.maven.org/maven2/org/liquibase/liquibase-core/3.4.2/liquibase-core-3.4.2.jar /lib/liquibase.jar -ADD http://central.maven.org/maven2/org/postgresql/postgresql/9.4.1212/postgresql-9.4.1212.jar /lib/postgresql.jar -RUN chmod a+r /lib/liquibase.jar -RUN chmod a+r /lib/postgresql.jar - -ADD schema /schema -ADD initdb.sql /docker-entrypoint-initdb.d/ -ADD start-and-migrate.sh / -RUN chmod +x /start-and-migrate.sh - -CMD /start-and-migrate.sh postgres diff --git a/database/initdb.sql b/database/initdb.sql deleted file mode 100644 index e2be0ec..0000000 --- a/database/initdb.sql +++ /dev/null @@ -1,2 +0,0 @@ - --- see schema directory diff --git a/database/start-and-migrate.sh b/database/start-and-migrate.sh deleted file mode 100644 index 61592f2..0000000 --- a/database/start-and-migrate.sh +++ /dev/null @@ -1,173 +0,0 @@ -#!/usr/bin/env bash -set -e - -# usage: file_env VAR [DEFAULT] -# ie: file_env 'XYZ_DB_PASSWORD' 'example' -# (will allow for "$XYZ_DB_PASSWORD_FILE" to fill in the value of -# "$XYZ_DB_PASSWORD" from a file, especially for Docker's secrets feature) -file_env() { - local var="$1" - local fileVar="${var}_FILE" - local def="${2:-}" - if [ "${!var:-}" ] && [ "${!fileVar:-}" ]; then - echo >&2 "error: both $var and $fileVar are set (but are exclusive)" - exit 1 - fi - local val="$def" - if [ "${!var:-}" ]; then - val="${!var}" - elif [ "${!fileVar:-}" ]; then - val="$(< "${!fileVar}")" - fi - export "$var"="$val" - unset "$fileVar" -} - -if [ "${1:0:1}" = '-' ]; then - set -- postgres "$@" -fi - -# allow the container to be started with `--user` -if [ "$1" = 'postgres' ] && [ "$(id -u)" = '0' ]; then - mkdir -p "$PGDATA" - chown -R postgres "$PGDATA" - chmod 700 "$PGDATA" - - mkdir -p /var/run/postgresql - chown -R postgres /var/run/postgresql - chmod 775 /var/run/postgresql - - # Create the transaction log directory before initdb is run (below) so the directory is owned by the correct user - if [ "$POSTGRES_INITDB_XLOGDIR" ]; then - mkdir -p "$POSTGRES_INITDB_XLOGDIR" - chown -R postgres "$POSTGRES_INITDB_XLOGDIR" - chmod 700 "$POSTGRES_INITDB_XLOGDIR" - fi - - exec gosu postgres "$BASH_SOURCE" "$@" -fi - -if [ "$1" = 'postgres' ]; then - mkdir -p "$PGDATA" - chown -R "$(id -u)" "$PGDATA" 2>/dev/null || : - chmod 700 "$PGDATA" 2>/dev/null || : - - # look specifically for PG_VERSION, as it is expected in the DB dir - if [ ! -s "$PGDATA/PG_VERSION" ]; then - file_env 'POSTGRES_INITDB_ARGS' - if [ "$POSTGRES_INITDB_XLOGDIR" ]; then - export POSTGRES_INITDB_ARGS="$POSTGRES_INITDB_ARGS --xlogdir $POSTGRES_INITDB_XLOGDIR" - fi - eval "initdb --username=postgres $POSTGRES_INITDB_ARGS" - - # check password first so we can output the warning before postgres - # messes it up - file_env 'POSTGRES_PASSWORD' - if [ "$POSTGRES_PASSWORD" ]; then - pass="PASSWORD '$POSTGRES_PASSWORD'" - authMethod=md5 - else - # The - option suppresses leading tabs but *not* spaces. :) - cat >&2 <<-'EOWARN' - **************************************************** - WARNING: No password has been set for the database. - This will allow anyone with access to the - Postgres port to access your database. In - Docker's default configuration, this is - effectively any other container on the same - system. - - Use "-e POSTGRES_PASSWORD=password" to set - it in "docker run". - **************************************************** - EOWARN - - pass= - authMethod=trust - fi - - { - echo - echo "host all all all $authMethod" - } >> "$PGDATA/pg_hba.conf" - - # internal start of server in order to allow set-up using psql-client - # does not listen on external TCP/IP and waits until start finishes - PGUSER="${PGUSER:-postgres}" \ - pg_ctl -D "$PGDATA" \ - -o "-c listen_addresses='localhost'" \ - -w start - - file_env 'POSTGRES_USER' 'postgres' - file_env 'POSTGRES_DB' "$POSTGRES_USER" - - psql=( psql -v ON_ERROR_STOP=1 ) - - if [ "$POSTGRES_DB" != 'postgres' ]; then - "${psql[@]}" --username postgres <<-EOSQL - CREATE DATABASE "$POSTGRES_DB" ; - EOSQL - echo - fi - - if [ "$POSTGRES_USER" = 'postgres' ]; then - op='ALTER' - else - op='CREATE' - fi - "${psql[@]}" --username postgres <<-EOSQL - $op USER "$POSTGRES_USER" WITH SUPERUSER $pass ; - EOSQL - echo - - psql+=( --username "$POSTGRES_USER" --dbname "$POSTGRES_DB" ) - - echo - for f in /docker-entrypoint-initdb.d/*; do - case "$f" in - *.sh) echo "$0: running $f"; . "$f" ;; - *.sql) echo "$0: running $f"; "${psql[@]}" -f "$f"; echo ;; - *.sql.gz) echo "$0: running $f"; gunzip -c "$f" | "${psql[@]}"; echo ;; - *) echo "$0: ignoring $f" ;; - esac - echo - done - - PGUSER="${PGUSER:-postgres}" \ - pg_ctl -D "$PGDATA" -m fast -w stop - - echo - echo 'PostgreSQL init process complete; ready for start up.' - echo - fi -fi - -# migrate schema with liquibase if anything in /schema has changed -SCHEMASUM=`find /schema/ -type f | xargs cat | md5sum | cut -d ' ' -f1` -if [ ! -f $PGDATA/schema.md5 ] || [[ $(< $PGDATA/schema.md5) != "$SCHEMASUM" ]]; then - - PGUSER="${PGUSER:-postgres}" \ - pg_ctl -D "$PGDATA" \ - -o "-c listen_addresses='localhost'" \ - -w start - - echo - echo 'Starting Schema Migration' - - java -jar /lib/liquibase.jar \ - --classpath=/lib/postgresql.jar \ - --changeLogFile=/schema/db.changelog.xml \ - --driver=org.postgresql.Driver \ - --url="jdbc:postgresql://localhost:5432/postgres" \ - --username="postgres" \ - --password="" \ - update - - echo - - PGUSER="${PGUSER:-postgres}" \ - pg_ctl -D "$PGDATA" -m fast -w stop - echo "$SCHEMASUM" > $PGDATA/schema.md5 -fi - -exec "$@"