[JAVA] Beachten Sie, dass ich Oracle 11g + Spring Boot mit Vagrant + Docker Compose ausprobiert habe

Dinge die zu tun sind

Probieren Sie die Arbeitsumgebung des Java-Frameworks mit Docker aus.

Betriebsumgebung

Verzeichnisaufbau

project
  + bin   #Shell-Skript für Befehlsmemorandum
  + data  #Docker-Persistenzverzeichnis
  - 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 #Von Oracle heruntergeladen..Mit Gitignore ignorieren
      - buildDockerImage.sh
    - spring
      - Dockerfile
    - .env # docker-composer.Von yml verwendete Einstellungen für Umgebungsvariablen
    - docker-compose.yml
  - src
    - hello #Geändert zu Hinagata, erstellt vom Spring Initialisierer
      - build.gradle
      - settings.gradle
      - lib
        - ojdbc7.jar  #Von Oracle heruntergeladen..Mit Gitignore ignorieren
      - src
        - main
          - java
            - hello
              - hello
                - model
                  - Staff.java
                - repository
                  - StaffRepository.java
                - HelloApplication.java
          - resouces
            - application.yml
        + test

Einstellungsdatei

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: 

Datenbankvorbereitung

Die Datenbank wurde unter Bezugnahme auf [Erstellen der Oracle-Datenbank 11g XE mit Docker] [* 1] festgelegt. Kopieren Sie das Verzeichnis 11.2.0.2 von oracle / docker-images. Im selben Verzeichnis oracle-xe-11.2.0-1.0.x86_64.rpm.zip ) Linux-Version ist platziert. Laden Sie außerdem den Treiber ojdbc7 herunter, um eine Verbindung von Java zu DB herzustellen.

Was von Github zu klonen

Was von Oracle herunterzuladen

Datenbankstart

docker-compose up -d dbserver

Verbindung mit sqlplus

Sie können keine Verbindung herstellen, es sei denn, die Datenbank wird gestartet. Stellen Sie sicher, dass Sie dies nach dem Anlegen des Dockers tun.

bin/sqlplus.sh


#!/bin/bash

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

#Umgebungsvariablen lesen
. $bin_dir/../docker/.env

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

Führen Sie die Shell aus und versuchen Sie, eine Verbindung herzustellen.

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

Wenn Sie ohne Start darauf zugreifen, tritt der folgende Fehler auf.

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

Drücken Sie zum Beenden zweimal die Eingabetaste.

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

Versuchen Sie erneut, eine Verbindung mit sqlplus herzustellen.

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> 

Ist es falsch, sqlplus zu starten? Wenn jemand weiß, wie es gut geht, lass es mich wissen.

Benutzervorbereitung

Wenn Sie eine Verbindung mit sqlplus herstellen können, erstellen Sie einen Benutzer für die Verbindung über Java. Dieses Mal habe ich einen Benutzer mit allen Berechtigungen erstellt, da ich ihn nicht nur für den Test zum Starten veröffentlichen werde.

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;

Versuchen Sie nach dem Abmelden, eine Verbindung mit dem erstellten Benutzer herzustellen.

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

Erstellen einer Testtabelle

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

Erstellen Sie Tools und Quellen

Erstellen Sie eine Tool-Docker-Datei

docker/gradle/Dockerfile


FROM gradle:4.8.1-jdk8
WORKDIR /app

Quellenvorbereitung

Erstellen Sie ein Projekt mit Spring Initializer unter Bezugnahme auf [Spring Boot beginnend mit Docker] [* 3]. Legen Sie es unter den Ordner src. Da ich diesmal eine Verbindung zur Datenbank herstellen möchte, habe ich die Einstellungen für die Datenbank hinzugefügt.

Einstellungsdatei

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

Programm

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);
	}
}

Führen Sie build aus

bin/clean-build.sh


#!/bin/bash

#Rufen Sie den absoluten Pfad dieses Shell-Skriptverzeichnisses ab.
bin_dir=$(cd $(dirname $0) && pwd)
container_name=gradle
cd $bin_dir/../docker && docker-compose run $container_name  gradle clean build

Anlaufen

docker/spring/Dockerfile


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

bin/up.sh


#!/bin/bash

#Rufen Sie den absoluten Pfad dieses Shell-Skriptverzeichnisses ab.
bin_dir=$(cd $(dirname $0) && pwd)

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

Beginnen Sie mit . / Bin / up.sh.

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

Quelle an dieser Stelle

Referenz

[Erstellen der Oracle-Datenbank 11g XE mit Docker] [* 1] [Ausführen von Oracle DB 11g mit Docker] [* 2] [Spring Boot beginnt mit Docker] [* 3] [Tabellenbereich] [* 4] oracle spring sample auto increment [Erstellen einer Spring Boot-Entwicklungsumgebung mit Docker] [* 7] sample [Zusammenfassung der Abfrageimplementierungsmethode in Spring Data JPA] [* 10] [[Java EE] Einführung in JPA, die noch in der Zeit ist] [* 11] [Erste JPA - Einfach und benutzerfreundlich, lernen Sie die Grundlagen der Datenpersistenzfunktion von Java EE kennen] [* 12] Invalid number format for port number [Gradle-Verwendungsnotiz] [* 14] [In Docker- / etc / localtime: / etc / localtime: ro gibt Mount Denied] [* 15] docker-compose [Autoinkrement mit Orakel] [* 17]

Recommended Posts

Beachten Sie, dass ich Oracle 11g + Spring Boot mit Vagrant + Docker Compose ausprobiert habe
Erstellen Sie mit Docker eine Spring Boot-Entwicklungsumgebung
Spring Boot beginnend mit Docker
Erstellen Sie eine Website mit Spring Boot + Gradle (jdk1.8.x)
Erstellen Sie einen Web-API-Server mit Spring Boot
Erstellen Sie eine Docker-Umgebung für Oracle 11g XE
Ein Memorandum beim Versuch von Spring Data JPA mit STS
[JUnit 5-kompatibel] Schreiben Sie einen Test mit JUnit 5 mit Spring Boot 2.2, 2.3
Implementieren Sie eine einfache Rest-API mit Spring Security mit Spring Boot 2.0
Eine Geschichte über den Versuch, mit Mockito auszukommen
[JUnit 5] Schreiben Sie einen Validierungstest mit Spring Boot! [Parametrisierungstest]
Ein Memorandum beim Erstellen eines REST-Service mit Spring Boot
[Hinweis] Erstellen Sie mit Docker eine Java-Umgebung von Grund auf neu
Erstellen Sie mit Spring Security 2.1 eine einfache Demo-Site mit Spring Security
Ich habe jetzt einen Test mit Spring Boot + JUnit 5 geschrieben
Erstellen einer Datenbankumgebung mit Docker in Spring Boot (IntellJ)
Mit Spring Boot herunterladen
Erstellen Sie ein Docker-Image mit installiertem Oracle JDK (yum
Eine Geschichte voller Grundlagen von Spring Boot (gelöst)
Erstellen wir eine einfache API mit EC2 + RDS + Spring Boot ①
Implementieren Sie eine einfache Rest-API mit Spring Security & JWT mit Spring Boot 2.0
Hinweise zu Java GC
Generieren Sie mit Spring Boot einen Barcode
Hallo Welt mit Spring Boot
Implementieren Sie GraphQL mit Spring Boot
Beginnen Sie mit Spring Boot
Hinweise zum Umfang
Hallo Welt mit Spring Boot!
Datei-Upload mit Spring Boot
Spring Boot beginnt mit dem Kopieren
Private Notiz über AtomicReference
Hallo Welt mit Spring Boot
Setzen Sie Cookies mit Spring Boot
Verwenden Sie Spring JDBC mit Spring Boot
Aufbau der Docker x Spring Boot-Umgebung
Modul mit Spring Boot hinzufügen
Erste Schritte mit Spring Boot
[Java] [Spring] Spring Boot 1.4-> 1.2 Downgrade Hinweis
Erstellen Sie mit Spring Boot einen Mikrodienst
Mail mit Spring Boot verschicken
Erstellen wir eine Buchverwaltungs-Webanwendung mit Spring Boot part1
[Hinweis] Eine Geschichte über das Ändern von Java-Build-Tools mit VS-Code
Lassen Sie uns mit Spring Boot part3 eine Webanwendung für die Buchverwaltung erstellen
Lassen Sie uns mit Spring Boot part2 eine Webanwendung für die Buchverwaltung erstellen
Ich habe ein einfaches Suchformular mit Spring Boot + GitHub Search API erstellt.
Beispielcode zum Testen eines Spring Boot-Controllers mit MockMvc
Erstellen Sie mit Docker Compose eine Entwicklungsumgebung für Django + MySQL + nginx
Stellen Sie sich die Spring Boot-App mit dem Jib-Maven-Plugin vor und starten Sie sie mit Docker