Essayez l'environnement de travail du framework java avec docker.
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
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:
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.
docker-compose up -d dbserver
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.
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;
docker / .env
.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
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
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.
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
#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
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/にブラウザでアクセスして表示を確認。
[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