feat(DevWeb): Support multiple databases (test, prod)

This commit is contained in:
Lucàs
2024-03-22 17:43:46 +01:00
parent 8e9bfebffe
commit db7750d5aa
9 changed files with 83 additions and 34 deletions
+6 -9
View File
@@ -2,13 +2,12 @@ version: '2'
services:
mysql-db:
image: mysql:latest
volumes:
- ./mysql:/docker-entrypoint-initdb.d
environment:
- MYSQL_DATABASE=db
- MYSQL_ROOT_PASSWORD=root
volumes:
- ./mysql/init:/docker-entrypoint-initdb.d
ports:
- "6033:3306"
- "3306:3306"
expose:
- "3306"
@@ -16,12 +15,10 @@ services:
image: maildev/maildev
environment:
- TZ=Asia/Shanghai
- MAILDEV_WEB_PORT=1080
- MAILDEV_SMTP_PORT=1025
ports:
- "8090:1080"
- "8025:1025"
- "1080:1080"
- "1025:1025"
logging:
driver: "json-file"
options:
max-size: "1m"
max-size: "1m"
+1
View File
@@ -0,0 +1 @@
init/
+12
View File
@@ -0,0 +1,12 @@
#!/bin/bash
databases=("db_test" "db_prod")
template="template.sql"
output="init/init.sql"
> "$output"
for database in "${databases[@]}"; do
sed "s/\${database}/$database/g" "$template" >> "$output"
echo "" >> "$output"
done
@@ -1,5 +1,5 @@
CREATE DATABASE IF NOT EXISTS db;
USE db;
CREATE DATABASE IF NOT EXISTS ${database};
USE ${database};
-- Table: User
CREATE TABLE IF NOT EXISTS `user`
@@ -55,8 +55,8 @@ CREATE TABLE IF NOT EXISTS recovery_password_token
FOREIGN KEY (user_id) REFERENCES `user` (id)
);
DELIMITER //
CREATE TRIGGER expires_at BEFORE INSERT ON recovery_password_token FOR EACH ROW
BEGIN
SET NEW.`expires_at` = TIMESTAMPADD(MINUTE, 15, CURRENT_TIMESTAMP);
END;//
# DELIMITER //
# CREATE TRIGGER expires_at BEFORE INSERT ON recovery_password_token FOR EACH ROW
# BEGIN
# SET NEW.`expires_at` = TIMESTAMPADD(MINUTE, 15, CURRENT_TIMESTAMP);
# END;//
+11 -3
View File
@@ -34,6 +34,13 @@
<artifactId>gson</artifactId>
<version>2.8.6</version>
</dependency>
<dependency>
<groupId>io.github.cdimascio</groupId>
<artifactId>dotenv-java</artifactId>
<version>3.0.0</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
@@ -60,10 +67,11 @@
<build>
<plugins>
<plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>3.3.2</version>
</plugin> </plugins>
</plugin>
</plugins>
</build>
</project>
</project>
@@ -15,11 +15,11 @@ public class Main {
// DAO<Player> daoJpaPlayer = jpaDaoFactory.getDAOPlayer();
// Contenu de la BD au début
// User[] users = daoJpaUser.findAll();
// for (User u : users) {
// System.out.println(u.toString());
// }
// System.out.println();
User[] users = daoJpaUser.findAll();
for (User u : users) {
System.out.println(u.toString());
}
System.out.println();
// // Ajout d'User :
// Calendar cal1 = Calendar.getInstance();
@@ -33,12 +33,12 @@ public class Main {
// daoJpaUser.create(user1);
// daoJpaUser.create(user2);
System.out.println("test récupération user");
User[] users2 = daoJpaUser.findByField("username", "Kevin");
for (User user : users2) {
System.out.println(user.toString());
}
System.out.println("fin test");
// System.out.println("test récupération user");
// User[] users2 = daoJpaUser.findByField("username", "Kevin");
// for (User user : users2) {
// System.out.println(user.toString());
// }
// System.out.println("fin test");
} catch (DAOException e) {
throw new RuntimeException(e);
}
@@ -0,0 +1,14 @@
package uppa.project.provider;
import io.github.cdimascio.dotenv.Dotenv;
public class DotenvProvider {
static Dotenv instance;
public static Dotenv getInstance() {
if (instance == null) {
instance = Dotenv.configure().load();
}
return instance;
}
}
@@ -18,8 +18,7 @@ import jakarta.persistence.Persistence;
* @see jakarta.persistence.EntityManager
*/
public final class EntityManagerProvider {
private final static String PERSISTANCE_UNIT_NAME = "db";
private static final String PERSISTANCE_UNIT_NAME = DotenvProvider.getInstance().get("PERSISTANCE_UNIT_NAME");
private static EntityManager instance;
private static EntityManagerFactory factory;
@@ -3,7 +3,7 @@
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="https://jakarta.ee/xml/ns/persistence https://jakarta.ee/xml/ns/persistence/persistence_3_0.xsd"
version="3.0">
<persistence-unit name="db">
<persistence-unit name="prod">
<class>uppa.project.pojo.User</class>
<class>uppa.project.pojo.Game</class>
@@ -12,11 +12,29 @@
<properties>
<property name="jakarta.persistence.jdbc.driver" value="com.mysql.cj.jdbc.Driver"/>
<property name="jakarta.persistence.jdbc.url" value="jdbc:mysql://localhost:6033/db?useSSL=false&amp;allowPublicKeyRetrieval=true"/>
<property name="jakarta.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/db_prod?useSSL=false&amp;allowPublicKeyRetrieval=true"/>
<property name="jakarta.persistence.jdbc.user" value="root"/>
<property name="jakarta.persistence.jdbc.password" value="root"/>
<property name="jakarta.persistence.schema-generation.database.action" value="create"/>
</properties>
</persistence-unit>
<persistence-unit name="test">
<class>uppa.project.pojo.User</class>
<class>uppa.project.pojo.Game</class>
<class>uppa.project.pojo.Player</class>
<class>uppa.project.pojo.RecoveryPasswordToken</class>
<properties>
<property name="jakarta.persistence.jdbc.driver" value="com.mysql.cj.jdbc.Driver"/>
<property name="jakarta.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/db_test?useSSL=false&amp;allowPublicKeyRetrieval=true"/>
<property name="jakarta.persistence.jdbc.user" value="root"/>
<property name="jakarta.persistence.jdbc.password" value="root"/>
<property name="jakarta.persistence.schema-generation.database.action" value="create"/>
</properties>
</persistence-unit>
</persistence>