Probieren Sie die Arbeitsumgebung des Java-Frameworks mit Docker aus.
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
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:
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.
docker-compose up -d dbserver
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.
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;
docker / .env
.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
create table STAFF (
EMP_ID number primary key,
STAFF_NAME varchar2(100)
);
insert into STAFF (EMP_ID, STAFF_NAME) values (1, 'Jasmine');
docker/gradle/Dockerfile
FROM gradle:4.8.1-jdk8
WORKDIR /app
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.
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
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);
}
}
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
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/にブラウザでアクセスして表示を確認。
[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