[JAVA] Une note sur l'essai d'Oracle 11g + Spring Boot avec Vagrant + Docker compose

Choses à faire

Essayez l'environnement de travail du framework java avec docker.

Environnement d'exploitation

Structure du répertoire

project
  + bin   #Script shell pour le mémorandum de commande
  + data  #répertoire de persistance docker
  - docker
    - gradle
      - Dockerfile
    - oracle
      - 11.2.0.2
        - Checksum.xe
        - Dockerfile.xe
        - checkDBStatus.sh
        - rnOracle.sh
        - setPasword.sh
        - xe.rsp
        - oracle-xe-11.2.0-1.0.x86_64.rpm.zip #Téléchargé depuis Oracle..Ignorer avec gitignore
      - buildDockerImage.sh
    - spring
      - Dockerfile
    - .env # docker-composer.Paramètres de variable d'environnement utilisés par yml
    - docker-compose.yml
  - src
    - hello #Modifié en Hinagata créé par l'initialiseur de printemps
      - build.gradle
      - settings.gradle
      - lib
        - ojdbc7.jar  #Téléchargé depuis Oracle..Ignorer avec gitignore
      - src
        - main
          - java
            - hello
              - hello
                - model
                  - Staff.java
                - repository
                  - StaffRepository.java
                - HelloApplication.java
          - resouces
            - application.yml
        + test

fichier de configuration

docker/.env


ORACLE_PWD=MY_DB_PASSWORD
USER_PASS=MY_DB_USER_PASSWORD

docker/docker-compose.yml


version: '3'
services:
  dbserver:
    build:
      context: ./oracle/11.2.0.2/
      dockerfile: Dockerfile.xe
    volumes:
      - ../data/database:/u01/app/oracle/oradata
      - ./oracle/startup:/docker-entrypoint-initdb.d/startup
    ports:
      - 1521:1521
      - 8085:8080
    env_file: .env
    environment:
      - TZ=`ls -la /etc/localtime | cut -d/ -f8-9`
    shm_size: 1g
    restart: unless-stopped

  gradle:
    build: ./gradle
    user: gradle
    volumes:
      - ../src/hello:/app
      - cache1:/home/gradle/.gradle
    links:
      - dbserver
    environment:
      - TZ=`ls -la /etc/localtime | cut -d/ -f8-9`
    command: [echo, "no work"]

  spring:
    build: ./spring
    ports:
        - "8080:8080"
    volumes:
        - ../src/hello:/app
    links:
      - dbserver
    environment:
      - TZ=`ls -la /etc/localtime | cut -d/ -f8-9`
    command: [ "sh", "-c", "java $JAVA_OPTS -Djava.security.egd=file:/dev/./urandom -jar /app/build/libs/hello-0.0.1-SNAPSHOT.jar"]

volumes:
  cache1: 

Préparation de la base de données

La base de données a été définie en faisant référence à [Construction de la base de données Oracle 11g XE avec Docker] [* 1]. Copiez le répertoire 11.2.0.2 d'oracle / docker-images. Dans le même répertoire oracle-xe-11.2.0-1.0.x86_64.rpm.zip La version Linux est placée. Téléchargez également le pilote ojdbc7 pour vous connecter de java à DB.

Que cloner à partir de github

Que télécharger depuis Oracle

Démarrage de la base de données

docker-compose up -d dbserver

Connexion avec sqlplus

Vous ne pouvez pas vous connecter tant que la base de données n'est pas démarrée. Assurez-vous de le faire après docker-compose up.

bin/sqlplus.sh


#!/bin/bash

bin_dir=$(cd $(dirname $0) && pwd)
container_name=dbserver

#Lire les variables d'environnement
. $bin_dir/../docker/.env

cd $bin_dir/../docker && docker-compose exec $container_name sqlplus sys/$ORACLE_PWD@localhost:1521/XE as sysdba

Exécutez le shell et essayez de vous connecter.

vagrant@vagrant[master]:/vagrant/tutorial/lesson/spring$ ./bin/sqlplus.sh

Si vous y accédez sans démarrer, l'erreur suivante se produit.

7df144c6f135        docker_dbserver              "/bin/sh -c 'exec $O…"   19 seconds ago      Up 18 seconds (health: start
ing)   0.0.0.0:1521->1521/tcp, 0.0.0.0:8085->8080/tcp   docker_dbserver_1
WARNING: The JAVA_OPTS variable is not set. Defaulting to a blank string.

SQL*Plus: Release 11.2.0.2.0 Production on Sun Jul 15 15:08:51 2018

Copyright (c) 1982, 2011, Oracle.  All rights reserved.

ERROR:
ORA-12528: TNS:listener: all appropriate instances are blocking new connections

Appuyez deux fois sur Entrée pour quitter.

Enter user-name:
ERROR:
ORA-12547: TNS:lost contact


Enter user-name:
ERROR:
ORA-12547: TNS:lost contact


SP2-0157: unable to CONNECT to ORACLE after 3 attempts, exiting SQL*Plus

Essayez de vous connecter à nouveau avec sqlplus.

vagrant@vagrant[master]:/vagrant/tutorial/lesson/spring$ ./bin/sqlplus.sh
7df144c6f135        docker_dbserver              "/bin/sh -c 'exec $O…"   25 seconds ago      Up 23 seconds (health: start
ing)   0.0.0.0:1521->1521/tcp, 0.0.0.0:8085->8080/tcp   docker_dbserver_1
WARNING: The JAVA_OPTS variable is not set. Defaulting to a blank string.

SQL*Plus: Release 11.2.0.2.0 Production on Sun Jul 15 15:08:55 2018

Copyright (c) 1982, 2011, Oracle.  All rights reserved.


Connected to:
Oracle Database 11g Express Edition Release 11.2.0.2.0 - 64bit Production

SQL> 

Est-ce mal de démarrer sqlplus? Si quelqu'un sait bien le faire, faites-le moi savoir.

Préparation de l'utilisateur

Si vous pouvez vous connecter avec sqlplus, créez un utilisateur pour vous connecter depuis java. Cette fois, j'ai créé un utilisateur avec tous les privilèges car je ne le publierai pas uniquement pour le test pour le démarrer.

CREATE TABLESPACE my_data DATAFILE '/u01/app/oracle/oradata/MY_DATA.dbf' SIZE 200M  SEGMENT SPACE MANAGEMENT AUTO;
CREATE USER testuser IDENTIFIED BY "my_pass" DEFAULT TABLESPACE my_data TEMPORARY TABLESPACE temp;
GRANT DBA TO testuser ;
quit;

Une fois déconnecté, essayez de vous connecter avec l'utilisateur créé.

bin/sqlplus.sh


#!/bin/bash

bin_dir=$(cd $(dirname $0) && pwd)
container_name=dbserver
. $bin_dir/../docker/.env
cd $bin_dir/../docker && docker-compose exec $container_name sqlplus testuser/$USER_PASS@localhost:1521/XE

Créer une table de test

create table STAFF (
    EMP_ID     number primary key,
    STAFF_NAME varchar2(100)
);
insert into STAFF (EMP_ID, STAFF_NAME) values (1, 'Jasmine');

Créer des outils et des sources

Créer un fichier Docker d'outil

docker/gradle/Dockerfile


FROM gradle:4.8.1-jdk8
WORKDIR /app

Préparation de la source

Créez un projet à l'aide de Spring Initializer en référence à [Spring Boot commençant par Docker] [* 3]. Placez-le sous le dossier src. Puisque je veux me connecter à la base de données cette fois, j'ai ajouté les paramètres liés à la base de données.

fichier de configuration

src/hello/build.gradle


buildscript {
	ext {
		springBootVersion = '2.0.3.RELEASE'
	}
	repositories {
		mavenCentral()
	}
	dependencies {
		classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
	}
}

apply plugin: 'java'
apply plugin: 'eclipse'
apply plugin: 'org.springframework.boot'
apply plugin: 'io.spring.dependency-management'

group = 'hello'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = 1.8

repositories {
	mavenCentral()
}


dependencies {
  compile('org.springframework.boot:spring-boot-starter-web')
  compile('org.springframework.boot:spring-boot-starter-data-jpa')
  compile files('lib/ojdbc7.jar')
  testCompile('org.springframework.boot:spring-boot-starter-test')
}

src/hello/src/main/resouce/applicatin.yaml


spring:
  datasource:
    url: jdbc:oracle:thin:@//dbserver:1521/XE
    username: testuser
    password: pass
    driverClassName: oracle.jdbc.driver.OracleDriver
    testWhileIdle: true
    validationQuery: SELECT 1
  jpa:
    showSql: true
    hibernate:
      ddlAuto: create-drop
      naming:
        implicitStrategy: org.hibernate.boot.model.naming.ImplicitNamingStrategyLegacyHbmImpl
        physicalStrategy: org.springframework.boot.orm.jpa.hibernate.SpringPhysicalNamingStrategy
    properties:
      hibernate:
        dialect: org.hibernate.dialect.Oracle10gDialect

programme

src/hello/src/main/java/hello/hello/model/Staff.java


package hello.hello.model;

import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;
import javax.persistence.Column;

@Table(name="staff")
@Entity
public class Staff {

  @Id 
  @Column(name="emp_id")
  private long id;

  @Column(name="staff_name")
  private String name;

  public void setId(long id){
    this.id = id;
  }
  public long getId(){
    return this.id;
  }

  public void setName(String  name){
    this.name = name;
  }

  public String getName(){
    return this.name;
  }
}

src/hello/src/main/java/hello/hello/repository/StaffRepository.java


package hello.hello.repository;

import java.util.Optional;
import org.springframework.data.repository.CrudRepository;

import hello.hello.model.Staff;

public interface StaffRepository extends CrudRepository<Staff, Long> {
  Optional<Staff> findById(long id);
}

src/hello/src/main/java/hello/hello/HelloApplication.java


package hello.hello;

import java.util.Optional;
import java.util.Collections;
import java.util.Map;
import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import hello.hello.model.Staff;
import hello.hello.repository.StaffRepository;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;

@SpringBootApplication
@RestController
public class HelloApplication {
  @Autowired StaffRepository repository;

  @PersistenceContext
  private EntityManager entityManager;

  @RequestMapping("/")
  public String home() {
      return "Hello World from Docker";
  }
  @RequestMapping("/staff")
  public String staff() {
      Optional<Staff> optional =  repository.findById(1);
      Staff staff = optional.orElseGet(() -> new Staff());
      return "Hello " + staff.getName();
  }

  @RequestMapping("/query")
  public String query() {
      List<Staff> results = entityManager
            .createNativeQuery("select * from staff where emp_id = :id ", Staff.class)
            .setParameter("id",1)
            .getResultList();
      String name = "";

      if(results.size() != 0){
        name = results.get(0).getName();
      }
      return "Hello " + name;
  }
	public static void main(String[] args) {
		SpringApplication.run(HelloApplication.class, args);
	}
}

Exécuter la construction

bin/clean-build.sh


#!/bin/bash

#Obtenez le chemin absolu de ce répertoire de script shell.
bin_dir=$(cd $(dirname $0) && pwd)
container_name=gradle
cd $bin_dir/../docker && docker-compose run $container_name  gradle clean build

Commencez

docker/spring/Dockerfile


FROM openjdk:jdk-alpine
WORKDIR /app
ENV JAVA_OPTS=""

bin/up.sh


#!/bin/bash

#Obtenez le chemin absolu de ce répertoire de script shell.
bin_dir=$(cd $(dirname $0) && pwd)

composeFile=${1:-"docker-compose.yml"}
cd $bin_dir/../docker && docker-compose -f $composeFile up $@

Commencez par . / Bin / up.sh.

http://<仮想環境のIP>:8080/にブラウザでアクセスして表示を確認。

Source à ce stade

référence

[Création d'une base de données Oracle 11g XE avec Docker] [* 1] [Exécution d'Oracle DB 11g avec docker] [* 2] [Spring Boot commençant par Docker] [* 3] [Zone du tableau] [* 4] oracle spring sample auto increment [Créer un environnement de développement Spring Boot avec docker] [* 7] sample [Résumé de la méthode de mise en œuvre des requêtes dans Spring Data JPA] [* 10] [[Java EE] Introduction à JPA encore dans le temps] [* 11] [Premier JPA - Simple et facile à utiliser, découvrez les bases de la fonction de persistance des données de Java EE] [* 12] Invalid number format for port number [Mémo d'utilisation Gradle] [* 14] [Dans Docker- / etc / localtime: / etc / localtime: ro donne Mount Denied] [* 15] docker-compose [auto-incrémentation avec oracle] [* 17]

Recommended Posts

Une note sur l'essai d'Oracle 11g + Spring Boot avec Vagrant + Docker compose
Créer un environnement de développement Spring Boot avec docker
Spring Boot à partir de Docker
Créez un site Web avec Spring Boot + Gradle (jdk1.8.x)
Créer un serveur API Web avec Spring Boot
Créer un environnement Docker pour Oracle 11g XE
Un mémorandum lors de l'essai de Spring Data JPA avec STS
[Compatible JUnit 5] Ecrire un test en utilisant JUnit 5 avec Spring boot 2.2, 2.3
Implémentez une API Rest simple avec Spring Security avec Spring Boot 2.0
Une histoire d'essayer de s'entendre avec Mockito
[JUnit 5] Ecrivez un test de validation avec Spring Boot! [Test de paramétrage]
Un mémorandum lors de la création d'un service REST avec Spring Boot
[Note] Créez un environnement Java à partir de zéro avec docker
Créez un site de démonstration simple avec Spring Security avec Spring Boot 2.1
J'ai écrit un test avec Spring Boot + JUnit 5 maintenant
Création d'un environnement de base de données avec Docker dans Spring Boot (IntellJ)
Télécharger avec Spring Boot
Créez une image Docker avec le JDK Oracle installé (miam
Une histoire remplie des bases de Spring Boot (résolu)
Faisons une API simple avec EC2 + RDS + Spring boot ①
Implémentez une API Rest simple avec Spring Security & JWT avec Spring Boot 2.0
Remarques sur Java GC
Générer un code à barres avec Spring Boot
Hello World avec Spring Boot
Implémenter GraphQL avec Spring Boot
Démarrez avec Spring Boot
Remarques sur la portée
Bonjour tout le monde avec Spring Boot!
Téléchargement de fichiers avec Spring Boot
Spring Boot commençant par copie
Note privée sur AtomicReference
Hello World avec Spring Boot
Définir des cookies avec Spring Boot
Utiliser Spring JDBC avec Spring Boot
Construction de l'environnement Docker × Spring Boot
Ajouter un module avec Spring Boot
Premiers pas avec Spring Boot
[Java] [Spring] Spring Boot 1.4-> 1.2 Note de rétrogradation
Créer un micro service avec Spring Boot
Envoyer du courrier avec Spring Boot
Créons une application Web de gestion de livres avec Spring Boot part1
[Note] Une histoire sur la modification des outils de compilation Java avec VS Code
Créons une application Web de gestion de livres avec Spring Boot part3
Créons une application Web de gestion de livres avec Spring Boot part2
J'ai créé un formulaire de recherche simple avec Spring Boot + GitHub Search API.
Exemple de code pour le test unitaire d'un contrôleur Spring Boot avec MockMvc
Créer un environnement de développement pour Django + MySQL + nginx avec Docker Compose
Image de l'application Spring Boot à l'aide de jib-maven-plugin et lancez-la avec Docker