From 5d57e0d5e25fa5ff633719f36f8c4ce67ec1893c Mon Sep 17 00:00:00 2001 From: Dave Syer Date: Fri, 3 Jan 2020 05:29:11 -0500 Subject: [PATCH] Re-organise mysql scripts so the app runs without root access It works better that way with test containers and in k8s. --- docker-compose.yml | 5 ++++- src/main/resources/application-mysql.properties | 2 +- .../resources/db/mysql/petclinic_db_setup_mysql.txt | 8 +++++--- src/main/resources/db/mysql/schema.sql | 10 ---------- src/main/resources/db/mysql/user.sql | 7 +++++++ 5 files changed, 17 insertions(+), 15 deletions(-) create mode 100644 src/main/resources/db/mysql/user.sql diff --git a/docker-compose.yml b/docker-compose.yml index 0f4a7fc30da..5166fe90fff 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -3,7 +3,10 @@ mysql: ports: - "3306:3306" environment: - - MYSQL_ROOT_PASSWORD=petclinic + - MYSQL_ROOT_PASSWORD= + - MYSQL_ALLOW_EMPTY_PASSWORD=true + - MYSQL_USER=petclinic + - MYSQL_PASSWORD=petclinic - MYSQL_DATABASE=petclinic volumes: - "./conf.d:/etc/mysql/conf.d:ro" diff --git a/src/main/resources/application-mysql.properties b/src/main/resources/application-mysql.properties index 38d81f99f47..6d54ddad7cb 100644 --- a/src/main/resources/application-mysql.properties +++ b/src/main/resources/application-mysql.properties @@ -1,7 +1,7 @@ # database init, supports mysql too database=mysql spring.datasource.url=jdbc:mysql://localhost/petclinic -spring.datasource.username=root +spring.datasource.username=petclinic spring.datasource.password=petclinic # SQL is written to be idempotent so this is safe spring.datasource.initialization-mode=always diff --git a/src/main/resources/db/mysql/petclinic_db_setup_mysql.txt b/src/main/resources/db/mysql/petclinic_db_setup_mysql.txt index 92090668751..f6ce6523c37 100644 --- a/src/main/resources/db/mysql/petclinic_db_setup_mysql.txt +++ b/src/main/resources/db/mysql/petclinic_db_setup_mysql.txt @@ -18,12 +18,14 @@ mysql_1_eedb4818d817 | MySQL init process done. Ready for start up. ... -2) Create the PetClinic database and user by executing the "db/mysql/{schema,data}.sql" - scripts (or set "spring.datasource.initialization-mode=always" the first time you run the app). +2) (Once only) create the PetClinic database and user by executing the "db/mysql/user.sql" + scripts. You can connect to the database running in the docker container using + `mysql -u root -h localhost --protocol tcp`, but you don't need to run the script there + because the petclinic user is already set up if you use the provided `docker-compose.yaml`. 3) Run the app with `spring.profiles.active=mysql` (e.g. as a System property via the command line, but any way that sets that property in a Spring Boot app should work). N.B. the "petclinic" database has to exist for the app to work with the JDBC URL value as it is configured by default. This condition is taken care of by the docker-compose -configuration provided, or by the `schema.sql` if you can run that as root. \ No newline at end of file +configuration provided, or by the `schema.sql` if you can run that as root. diff --git a/src/main/resources/db/mysql/schema.sql b/src/main/resources/db/mysql/schema.sql index 6a982598373..eb5d7d5d0c2 100644 --- a/src/main/resources/db/mysql/schema.sql +++ b/src/main/resources/db/mysql/schema.sql @@ -1,13 +1,3 @@ -CREATE DATABASE IF NOT EXISTS petclinic; - -ALTER DATABASE petclinic - DEFAULT CHARACTER SET utf8 - DEFAULT COLLATE utf8_general_ci; - -GRANT ALL PRIVILEGES ON petclinic.* TO pc@localhost IDENTIFIED BY 'pc'; - -USE petclinic; - CREATE TABLE IF NOT EXISTS vets ( id INT(4) UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, first_name VARCHAR(30), diff --git a/src/main/resources/db/mysql/user.sql b/src/main/resources/db/mysql/user.sql new file mode 100644 index 00000000000..60abcee729a --- /dev/null +++ b/src/main/resources/db/mysql/user.sql @@ -0,0 +1,7 @@ +CREATE DATABASE IF NOT EXISTS petclinic; + +ALTER DATABASE petclinic + DEFAULT CHARACTER SET utf8 + DEFAULT COLLATE utf8_general_ci; + +GRANT ALL PRIVILEGES ON petclinic.* TO 'petclinic@%' IDENTIFIED BY 'petclinic';