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