Suite de l'article précédent [Comment créer un environnement Docker avec Gradle pour intelliJ], définissez les paramètres pour créer automatiquement des tables dans la base de données au démarrage de l'application. Faire.
Dans l'article précédent, j'ai même créé une base de données appelée ** todo ** dans la base de données.
Vérifiez s'il y a ** flyway ** dans les plugins et ** flyway-core ** dans les dépendances.
build.gradle
plugins {
id 'java'
id 'org.springframework.boot' version '2.3.1.BUILD-SNAPSHOT'
id 'io.spring.dependency-management' version '1.0.9.RELEASE'
id 'com.avast.gradle.docker-compose' version '0.12.1'
id 'org.flywaydb.flyway' version '6.4.3' //ici
}
// ...Abréviation
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-data-jdbc'
implementation 'org.springframework.boot:spring-boot-starter-thymeleaf'
implementation 'org.springframework.boot:spring-boot-starter-web'
implementation 'org.flywaydb:flyway-core' //ici
developmentOnly 'org.springframework.boot:spring-boot-devtools'
runtimeOnly 'mysql:mysql-connector-java'
testImplementation('org.springframework.boot:spring-boot-starter-test') {
exclude group: 'org.junit.vintage', module: 'junit-vintage-engine'
}
}
https://github.com/miyabayt/spring-boot-doma2-sample Les paramètres du référentiel sont utilisés tels quels. J'ai enlevé les pièces dont je n'ai plus besoin maintenant, comme doma.
applocation.yml
#Définir les paramètres communs
spring:
profiles:
#Spécifiez explicitement la valeur par défaut
default: local
active: local
main:
#Prise en charge temporaire de l'écrasement du Bean de DataValueProcessor
allow-bean-definition-overriding: true
messages:
#Ensemble comprenant le chemin du fichier de définition de message
basename: messages,ValidationMessages,PropertyNames
cache-duration: -1
encoding: UTF-8
jackson:
#Faire de la clé JSON une chaîne délimitée par un trait de soulignement
property-naming-strategy: CAMEL_CASE_TO_LOWER_CASE_WITH_UNDERSCORES
thymeleaf:
#Le mode HTML5 est obsolète, alors passez en mode HTML
mode: HTML
resources:
#Mettre en cache le contenu statique
cache:
period: 604800
chain:
#Utilisez toutes les ressources qui sont GZiped
compressed: true
strategy:
content:
#Gestion des versions par valeur de hachage MD5 du contenu
enabled: true
paths: /**
servlet:
multipart:
#Définir la limite de taille de téléchargement
max-file-size: 5MB
max-request-size: 5MB
datasource:
driver-class-name: com.mysql.jdbc.Driver
hikari:
autoCommit: false
connectionTimeout: 30000
idleTimeout: 30000
maxLifetime: 1800000
connectionTestQuery: SELECT 1
minimumIdle: 10
maximumPoolSize: 30
jmx:
enabled: false
server:
port: 18082 #Changé de 18081
compression:
enabled: true
servlet:
session:
timeout: 7200
#Ne pas afficher l'ID de session dans l'URL
tracking-modes: cookie
contextPath: /
logging:
pattern:
#Sortie de la valeur définie dans MDC
level: "[%X{FUNCTION_NAME}:%X{X-Track-Id}:%X{LOGIN_USER_ID}] %5p"
#Paramètres de l'application
application:
fileUploadLocation: build/todo #Changement de l'échantillon
Définissez les paramètres locaux. Ici, ajoutez les informations de la base de données docker créée dans l'article précédent. (Ceci fait partie de ** # change **)
url jdbc:mysql://127.0.0.1:[port]/[DB_name]?useSSL=false&characterEncoding=UTF-8 ** [port] ** est le nombre spécifié dans les ports dans docker-compose.yml ** [DB_name] ** est le nom de la table (MYSQL_DATABASE) spécifié dans l'environnement de docker-compose.yml
** nom d'utilisateur et mot de passe ** Nom d'utilisateur (MYSQL_ROOT_USER) et mot de passe (MYSQL_ROOT_PASSWORD) spécifiés dans l'environnement de docker-compose.yml
application-local.yml
#Paramètres locaux
spring:
profiles: local
messages:
cache-duration: -1
datasource:
platform: mysql
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql://127.0.0.1:33068/todo?useSSL=false&characterEncoding=UTF-8 #Changement
username: root #Changement
password: passw0rd #Changement
resources:
#Invalider le cache
cache:
period: 0
flyway:
enable: true
baseline-on-migrate: true
placeholder-replacement: false
logging:
level:
org.springframework: INFO
org.springframework.jdbc: INFO
org.thymeleaf: INFO
com.example: DEBUG # com.Changement de l'échantillon
####
#Paramètres de l'application
application:
fileUploadLocation: build/todo #Changement de l'échantillon
cors:
allowedHeaders: "Origin, X-Requested-With, Content-Type, Accept, X-XSRF-TOKEN"
allowedMethods: "POST, GET, PUT, OPTIONS, DELETE"
allowedOrigins: "*" #Spécifiez le nom de domaine qui autorise CORS
Documentation Flyway-core Comme le dit la documentation, les fichiers SQL ont des conventions de dénomination. Cette fois, j'ai créé les deux fichiers sql suivants.
L'emplacement de stockage par défaut est resource> db> migraion
.
R__0_create_tables.sql
CREATE TABLE IF NOT EXISTS users(
user_id INT(11) NOT NULL AUTO_INCREMENT COMMENT 'Identifiant d'utilisateur'
, first_name VARCHAR(40) NOT NULL COMMENT 'Nom'
, last_name VARCHAR(40) NOT NULL COMMENT 'Nom de famille'
, email VARCHAR(100) UNIQUE DEFAULT NULL COMMENT 'adresse mail'
, password VARCHAR(100) DEFAULT NULL COMMENT 'mot de passe'
, role VARCHAR(100) DEFAULT NULL COMMENT 'Autorité'
, created_at DATETIME NOT NULL COMMENT 'Date d'enregistrement'
, updated_by VARCHAR(50) DEFAULT NULL COMMENT 'changeur'
, updated_at DATETIME DEFAULT NULL COMMENT 'Mettre à jour la date et l'heure'
, deleted_by VARCHAR(50) DEFAULT NULL COMMENT 'Deleter'
, deleted_at DATETIME DEFAULT NULL COMMENT 'Supprimer la date et l'heure'
, version INT(11) unsigned NOT NULL DEFAULT 1 COMMENT 'Numéro de révision'
, PRIMARY KEY (user_id)
, KEY idx_users (email, deleted_at)
) COMMENT='utilisateur';
R__1_insert_datas.sql
INSERT INTO `users` VALUES
(1,'Yamada','Hanako','[email protected]','passw0rd',NULL,NOW(),NULL,NULL,NULL,NULL,1),
(2,'Suzuki','Taro','[email protected]','passw0rd',NULL,NOW(),NULL,NULL,NULL,NULL,1);
Le mot de passe n'est pas encodé ici, il reste donc tel quel. Je le ferai dans le prochain article.
Ouvrez un terminal IntelliJ et exécutez ./gradlew bootRun
.
$ ./gradlew bootRun
> Task :bootRun
. ____ _ __ _ _
/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
\\/ ___)| |_)| | | | | || (_| | ) ) ) )
' |____| .__|_| |_|_| |_\__, | / / / /
=========|_|==============|___/=/_/_/_/
:: Spring Boot :: (v2.3.1.BUILD-SNAPSHOT)
...Abréviation
2020-06-13 22:15:41.439 [::] INFO 78329 --- [io-18082-exec-1] o.s.web.servlet.DispatcherServlet : Completed initialization in 7 ms
<=========----> 75% EXECUTING [10m 10s]
> :bootRun
Si cela ressemble à ceci dans le terminal, c'est réussi. Le nombre après ** EXECUTING ** est l'heure de démarrage, il continuera donc à fonctionner.
Si l'affichage ci-dessous est affiché, il s'agit d'un échec, vérifiez donc l'erreur.
BUILD SUCCESSFUL in 5s
3 actionable tasks: 2 executed, 1 up-to-date
[Article précédent](https://qiita.com/megumi_622/items/341cfbb684256e7c4dbc#%E3%83%86%E3%83%BC%E3%83%96%E3%83%AB%E3%81%AE % E7% A2% BA% E8% AA% 8D) Entrez MySQL dans le conteneur et vérifiez le tableau.
Si l'utilisateur est enregistré comme indiqué ci-dessous, il réussit.
mysql> select * from users;
+---------+------------+-----------+---------------+-----------+------+----------------------+------------+------------+------------+------------+---------+
| user_id | first_name | last_name | email | password | role | created_at | updated_by | updated_at | deleted_by | deleted_at | version |
+---------+------------+-----------+---------------+-----------+------+----------------------+------------+------------+------------+------------+---------+
| 1 |Yamada|Hanako| [email protected] | passw0rd | NULL | 2020-06-13 22:05:03 | NULL | NULL | NULL | NULL | 1 |
| 2 |Suzuki|Taro| [email protected] | passw0rd | NULL | 2020-06-13 22:05:03 | NULL | NULL | NULL | NULL | 1 |
+---------+-----------+-------------+----------------+----------+------+---------------------+-----------+------------+-------------+------------+---------+
2 rows in set (0.01 sec)
La prochaine fois, nous créerons un ** écran de connexion **.
Recommended Posts