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
+5 -8
View File
@@ -2,13 +2,12 @@ version: '2'
services: services:
mysql-db: mysql-db:
image: mysql:latest image: mysql:latest
volumes:
- ./mysql:/docker-entrypoint-initdb.d
environment: environment:
- MYSQL_DATABASE=db
- MYSQL_ROOT_PASSWORD=root - MYSQL_ROOT_PASSWORD=root
volumes:
- ./mysql/init:/docker-entrypoint-initdb.d
ports: ports:
- "6033:3306" - "3306:3306"
expose: expose:
- "3306" - "3306"
@@ -16,11 +15,9 @@ services:
image: maildev/maildev image: maildev/maildev
environment: environment:
- TZ=Asia/Shanghai - TZ=Asia/Shanghai
- MAILDEV_WEB_PORT=1080
- MAILDEV_SMTP_PORT=1025
ports: ports:
- "8090:1080" - "1080:1080"
- "8025:1025" - "1025:1025"
logging: logging:
driver: "json-file" driver: "json-file"
options: options:
+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; CREATE DATABASE IF NOT EXISTS ${database};
USE db; USE ${database};
-- Table: User -- Table: User
CREATE TABLE IF NOT EXISTS `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) FOREIGN KEY (user_id) REFERENCES `user` (id)
); );
DELIMITER // # DELIMITER //
CREATE TRIGGER expires_at BEFORE INSERT ON recovery_password_token FOR EACH ROW # CREATE TRIGGER expires_at BEFORE INSERT ON recovery_password_token FOR EACH ROW
BEGIN # BEGIN
SET NEW.`expires_at` = TIMESTAMPADD(MINUTE, 15, CURRENT_TIMESTAMP); # SET NEW.`expires_at` = TIMESTAMPADD(MINUTE, 15, CURRENT_TIMESTAMP);
END;// # END;//
+10 -2
View File
@@ -34,6 +34,13 @@
<artifactId>gson</artifactId> <artifactId>gson</artifactId>
<version>2.8.6</version> <version>2.8.6</version>
</dependency> </dependency>
<dependency>
<groupId>io.github.cdimascio</groupId>
<artifactId>dotenv-java</artifactId>
<version>3.0.0</version>
</dependency>
<dependency> <dependency>
<groupId>mysql</groupId> <groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId> <artifactId>mysql-connector-java</artifactId>
@@ -60,10 +67,11 @@
<build> <build>
<plugins> <plugins>
<plugin> <plugin>
<groupId>org.apache.maven.plugins</groupId> <groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId> <artifactId>maven-war-plugin</artifactId>
<version>3.3.2</version> <version>3.3.2</version>
</plugin> </plugins> </plugin>
</plugins>
</build> </build>
</project> </project>
@@ -15,11 +15,11 @@ public class Main {
// DAO<Player> daoJpaPlayer = jpaDaoFactory.getDAOPlayer(); // DAO<Player> daoJpaPlayer = jpaDaoFactory.getDAOPlayer();
// Contenu de la BD au début // Contenu de la BD au début
// User[] users = daoJpaUser.findAll(); User[] users = daoJpaUser.findAll();
// for (User u : users) { for (User u : users) {
// System.out.println(u.toString()); System.out.println(u.toString());
// } }
// System.out.println(); System.out.println();
// // Ajout d'User : // // Ajout d'User :
// Calendar cal1 = Calendar.getInstance(); // Calendar cal1 = Calendar.getInstance();
@@ -33,12 +33,12 @@ public class Main {
// daoJpaUser.create(user1); // daoJpaUser.create(user1);
// daoJpaUser.create(user2); // daoJpaUser.create(user2);
System.out.println("test récupération user"); // System.out.println("test récupération user");
User[] users2 = daoJpaUser.findByField("username", "Kevin"); // User[] users2 = daoJpaUser.findByField("username", "Kevin");
for (User user : users2) { // for (User user : users2) {
System.out.println(user.toString()); // System.out.println(user.toString());
} // }
System.out.println("fin test"); // System.out.println("fin test");
} catch (DAOException e) { } catch (DAOException e) {
throw new RuntimeException(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 * @see jakarta.persistence.EntityManager
*/ */
public final class EntityManagerProvider { public final class EntityManagerProvider {
private static final String PERSISTANCE_UNIT_NAME = DotenvProvider.getInstance().get("PERSISTANCE_UNIT_NAME");
private final static String PERSISTANCE_UNIT_NAME = "db";
private static EntityManager instance; private static EntityManager instance;
private static EntityManagerFactory factory; private static EntityManagerFactory factory;
@@ -3,7 +3,7 @@
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 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" xsi:schemaLocation="https://jakarta.ee/xml/ns/persistence https://jakarta.ee/xml/ns/persistence/persistence_3_0.xsd"
version="3.0"> version="3.0">
<persistence-unit name="db"> <persistence-unit name="prod">
<class>uppa.project.pojo.User</class> <class>uppa.project.pojo.User</class>
<class>uppa.project.pojo.Game</class> <class>uppa.project.pojo.Game</class>
@@ -12,11 +12,29 @@
<properties> <properties>
<property name="jakarta.persistence.jdbc.driver" value="com.mysql.cj.jdbc.Driver"/> <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.user" value="root"/>
<property name="jakarta.persistence.jdbc.password" value="root"/> <property name="jakarta.persistence.jdbc.password" value="root"/>
<property name="jakarta.persistence.schema-generation.database.action" value="create"/> <property name="jakarta.persistence.schema-generation.database.action" value="create"/>
</properties> </properties>
</persistence-unit> </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> </persistence>