Skip to content

Commit

Permalink
FONCTIONNEL : Utilisation de docker-compose-support sur un container …
Browse files Browse the repository at this point in the history
…build . pour développer en local sans application.properties et sans SGBD local.
  • Loading branch information
jvk committed Mar 29, 2024
1 parent 5b5964c commit 5272600
Show file tree
Hide file tree
Showing 7 changed files with 48 additions and 46 deletions.
29 changes: 10 additions & 19 deletions docker-compose.yml
Original file line number Diff line number Diff line change
@@ -1,34 +1,25 @@
version: '3.8'
version: '3'
services:
app:
image: jeromev34/corbeaudocker:latest
environment:
SPRING_DATASOURCE_URL: jdbc:mysql://localhost:3306/jpa?useSSL=false&serverTimezone=UTC
SPRING_DATASOURCE_USERNAME: root
SPRING_DATASOURCE_PASSWORD: Zp3pbrya
image: myspringbootapp:latest
build: .
extra_hosts:
- "host.docker.internal:host-gateway"
ports:
- "8081:8080"
- "8085:8080"
depends_on:
- db_container
db_container:
image: mysql:8.0
- db
db:
image: postgres:latest
environment:
MYSQL_DATABASE: 'jpa'
MYSQL_USER: root
MYSQL_PASSWORD: Zp3pbrya
MYSQL_ROOT_PASSWORD: Zp3pbrya
POSTGRES_USER: root
POSTGRES_PASSWORD: Bacille
volumes:
- db-data:/var/lib/mysql
- ./init.sql:/docker-entrypoint-initdb.d/init.sql
ports:
- "3307:3306"
- "5432:5432"
adminer:
image: adminer
restart: always
ports:
- "8082:8080"

volumes:
db-data:
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
12 changes: 12 additions & 0 deletions docker.compose.support.workflow.explained.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
1. Suppression de l'ensemble des fichiers application.properties.
2. Creation des containers : contaier app principal basé sur le build de l'application, base de donnée embarquée, dans un second container, adminer pour administration des données
3. Utilisation de la dépendance spring docker-compose-support
4. Lien de montage entre un script local init.sql qui va initialiser des données dans le base de donnée conteneurisée
5. Adaptation de la SauterelleDao pour prendre en compte postgresql et une nouvelle chaine de connection en localhost qui pourra se connecter a la base de donnée du container (remarque : lu'rl peut etre exploitée dans un client sql comme dbeaver)
6. Lancement de l'application en local qui automatiquement exploitera les containers au lieu d'une compilatio locale de l'application.

Remarque : ici on utilise un context local avec la variable build dans le container app, mais il aurait trés bien été possible de se brancher sur une image distante qui aurait contenu une base de donnée distante ou un build . local contenurisé qui aurait utilisé une bdd avec SPRING_DATASOURCE_URL

---

Avantage : on peut se passer complétement avec ce plugin d'une installation locale d'un SGBD pour faire des développements.
15 changes: 14 additions & 1 deletion init.sql
Original file line number Diff line number Diff line change
@@ -1 +1,14 @@
GRANT ALL PRIVILEGES ON *.* TO 'root'@'172.%' IDENTIFIED BY 'Zp3pbrya';
CREATE DATABASE creme;
-- Connectez-vous à la base de données creme
\c creme;

-- Créez une table si elle n'existe pas déjà
CREATE TABLE IF NOT EXISTS sauterelle (
id SERIAL PRIMARY KEY,
nom VARCHAR(255) DEFAULT NULL,
naissance DATE DEFAULT NULL,
couleur VARCHAR(50) NOT NULL
);

-- Insérez des données dans la table
INSERT INTO sauterelle (nom, naissance, couleur) VALUES ('Grillonne', '2024-03-29', 'Vert');
6 changes: 3 additions & 3 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -21,9 +21,9 @@
<dependencies>
<!--DB DIALECT-->
<dependency>
<groupId>com.mysql</groupId>
<artifactId>mysql-connector-j</artifactId>
<scope>compile</scope>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
Expand Down
23 changes: 4 additions & 19 deletions src/main/java/papillon/colibri/dao/Sauterelle.java
Original file line number Diff line number Diff line change
Expand Up @@ -6,35 +6,19 @@ public class Sauterelle {
private int id;
private Date naissance;
private String couleur;
private String nom;

public Sauterelle(int id, Date naissance, String couleur) {
this.id = id;
this.naissance = naissance;
this.couleur = couleur;
}

public int getId() {
return id;
}

public void setId(int id) {
public Sauterelle(int id, Date naissance, String couleur, String nom) {
this.id = id;
}

public Date getNaissance() {
return naissance;
}

public void setNaissance(Date naissance) {
this.naissance = naissance;
}

public String getCouleur() {
return couleur;
}

public void setCouleur(String couleur) {
this.couleur = couleur;
this.nom = nom;
}

@Override
Expand All @@ -43,6 +27,7 @@ public String toString() {
"id=" + id +
", naissance=" + naissance +
", couleur='" + couleur + '\'' +
", nom='" + nom + '\'' +
'}';
}
}
9 changes: 5 additions & 4 deletions src/main/java/papillon/colibri/dao/SauterelleDao.java
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ public static List<Sauterelle> getAllUsers() throws SQLException {
List<Sauterelle> users = new ArrayList<>();

// Chargez le pilote JDBC approprié
String driver = "com.mysql.cj.jdbc.Driver";
String driver = "org.postgresql.Driver";
try {
Class.forName(driver);
} catch (ClassNotFoundException e) {
Expand All @@ -35,9 +35,9 @@ PRIMARY KEY (`id`)
Dans le terminal d'une machine locale il faudra utiliser jdbc:mysql://localhost:3306/[nom de votre base]
Dans la cadre d'une image docker locale il faudra utiliser jdbc:mysql://host.docker.internal:3306/[nom de votre base]
*/
String url = "jdbc:mysql://host.docker.internal:3306/jpa";
String url = "jdbc:postgresql://localhost:5432/creme";
String username = "root";
String password = "Zp3pbrya";
String password = "Bacille";
Connection connection = DriverManager.getConnection(url, username, password);

// Exécutez la requête SQL pour récupérer les données de la table
Expand All @@ -50,7 +50,8 @@ PRIMARY KEY (`id`)
int id = resultSet.getInt("ID");
Date naissance = resultSet.getDate("NAISSANCE");
String couleur = resultSet.getString("COULEUR");
Sauterelle user = new Sauterelle(id, naissance, couleur);
String nom = resultSet.getString("NOM");
Sauterelle user = new Sauterelle(id, naissance, couleur, nom);
users.add(user);
}

Expand Down

0 comments on commit 5272600

Please sign in to comment.