Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -35,3 +35,6 @@ out/

### VS Code ###
.vscode/


db
19 changes: 19 additions & 0 deletions .run/mail8080.run.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
<component name="ProjectRunConfigurationManager">
<configuration default="false" name="mail8080" type="SpringBootApplicationConfigurationType" factoryName="Spring Boot">
<module name="distributed-mail.main" />
<selectedOptions>
<option name="environmentVariables" />
</selectedOptions>
<option name="SPRING_BOOT_MAIN_CLASS" value="com.aengdulab.distributedmail.DistributedMailApplication" />
<option name="VM_PARAMETERS" value="-Dserver.port=8080" />
<extension name="coverage">
<pattern>
<option name="PATTERN" value="com.aengdulab.distributedmail.*" />
<option name="ENABLED" value="true" />
</pattern>
</extension>
<method v="2">
<option name="Make" enabled="true" />
</method>
</configuration>
</component>
10 changes: 10 additions & 0 deletions .run/mail8081.run.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
<component name="ProjectRunConfigurationManager">
<configuration default="false" name="mail8081" type="SpringBootApplicationConfigurationType" factoryName="Spring Boot">
<module name="distributed-mail.main" />
<option name="SPRING_BOOT_MAIN_CLASS" value="com.aengdulab.distributedmail.DistributedMailApplication" />
<option name="VM_PARAMETERS" value="-Dserver.port=8081" />
<method v="2">
<option name="Make" enabled="true" />
</method>
</configuration>
</component>
12 changes: 12 additions & 0 deletions .run/mail8082.run.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
<component name="ProjectRunConfigurationManager">
<configuration default="false" name="mail8082" type="SpringBootApplicationConfigurationType" factoryName="Spring Boot">
<option name="ALTERNATIVE_JRE_PATH" value="corretto-21" />
<option name="ALTERNATIVE_JRE_PATH_ENABLED" value="true" />
<module name="distributed-mail.main" />
<option name="SPRING_BOOT_MAIN_CLASS" value="com.aengdulab.distributedmail.DistributedMailApplication" />
<option name="VM_PARAMETERS" value="-Dserver.port=8082" />
<method v="2">
<option name="Make" enabled="true" />
</method>
</configuration>
</component>
12 changes: 12 additions & 0 deletions .run/mail8083.run.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
<component name="ProjectRunConfigurationManager">
<configuration default="false" name="mail8083" type="SpringBootApplicationConfigurationType" factoryName="Spring Boot">
<option name="ALTERNATIVE_JRE_PATH" value="corretto-21" />
<option name="ALTERNATIVE_JRE_PATH_ENABLED" value="true" />
<module name="distributed-mail.main" />
<option name="SPRING_BOOT_MAIN_CLASS" value="com.aengdulab.distributedmail.DistributedMailApplication" />
<option name="VM_PARAMETERS" value="-Dserver.port=8083" />
<method v="2">
<option name="Make" enabled="true" />
</method>
</configuration>
</component>
12 changes: 12 additions & 0 deletions .run/mail8084.run.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
<component name="ProjectRunConfigurationManager">
<configuration default="false" name="mail8084" type="SpringBootApplicationConfigurationType" factoryName="Spring Boot">
<option name="ALTERNATIVE_JRE_PATH" value="corretto-21" />
<option name="ALTERNATIVE_JRE_PATH_ENABLED" value="true" />
<module name="distributed-mail.main" />
<option name="SPRING_BOOT_MAIN_CLASS" value="com.aengdulab.distributedmail.DistributedMailApplication" />
<option name="VM_PARAMETERS" value="-Dserver.port=8084" />
<method v="2">
<option name="Make" enabled="true" />
</method>
</configuration>
</component>
12 changes: 12 additions & 0 deletions .run/mail8085.run.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
<component name="ProjectRunConfigurationManager">
<configuration default="false" name="mail8085" type="SpringBootApplicationConfigurationType" factoryName="Spring Boot">
<option name="ALTERNATIVE_JRE_PATH" value="corretto-21" />
<option name="ALTERNATIVE_JRE_PATH_ENABLED" value="true" />
<module name="distributed-mail.main" />
<option name="SPRING_BOOT_MAIN_CLASS" value="com.aengdulab.distributedmail.DistributedMailApplication" />
<option name="VM_PARAMETERS" value="-Dserver.port=8085" />
<method v="2">
<option name="Make" enabled="true" />
</method>
</configuration>
</component>
12 changes: 12 additions & 0 deletions .run/mail8086.run.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
<component name="ProjectRunConfigurationManager">
<configuration default="false" name="mail8086" type="SpringBootApplicationConfigurationType" factoryName="Spring Boot">
<option name="ALTERNATIVE_JRE_PATH" value="corretto-21" />
<option name="ALTERNATIVE_JRE_PATH_ENABLED" value="true" />
<module name="distributed-mail.main" />
<option name="SPRING_BOOT_MAIN_CLASS" value="com.aengdulab.distributedmail.DistributedMailApplication" />
<option name="VM_PARAMETERS" value="-Dserver.port=8086" />
<method v="2">
<option name="Make" enabled="true" />
</method>
</configuration>
</component>
12 changes: 12 additions & 0 deletions .run/mail8087.run.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
<component name="ProjectRunConfigurationManager">
<configuration default="false" name="mail8087" type="SpringBootApplicationConfigurationType" factoryName="Spring Boot">
<option name="ALTERNATIVE_JRE_PATH" value="corretto-21" />
<option name="ALTERNATIVE_JRE_PATH_ENABLED" value="true" />
<module name="distributed-mail.main" />
<option name="SPRING_BOOT_MAIN_CLASS" value="com.aengdulab.distributedmail.DistributedMailApplication" />
<option name="VM_PARAMETERS" value="-Dserver.port=8087" />
<method v="2">
<option name="Make" enabled="true" />
</method>
</configuration>
</component>
12 changes: 12 additions & 0 deletions .run/mail8088.run.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
<component name="ProjectRunConfigurationManager">
<configuration default="false" name="mail8088" type="SpringBootApplicationConfigurationType" factoryName="Spring Boot">
<option name="ALTERNATIVE_JRE_PATH" value="corretto-21" />
<option name="ALTERNATIVE_JRE_PATH_ENABLED" value="true" />
<module name="distributed-mail.main" />
<option name="SPRING_BOOT_MAIN_CLASS" value="com.aengdulab.distributedmail.DistributedMailApplication" />
<option name="VM_PARAMETERS" value="-Dserver.port=8088" />
<method v="2">
<option name="Make" enabled="true" />
</method>
</configuration>
</component>
12 changes: 12 additions & 0 deletions .run/mail8089.run.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
<component name="ProjectRunConfigurationManager">
<configuration default="false" name="mail8089" type="SpringBootApplicationConfigurationType" factoryName="Spring Boot">
<option name="ALTERNATIVE_JRE_PATH" value="corretto-21" />
<option name="ALTERNATIVE_JRE_PATH_ENABLED" value="true" />
<module name="distributed-mail.main" />
<option name="SPRING_BOOT_MAIN_CLASS" value="com.aengdulab.distributedmail.DistributedMailApplication" />
<option name="VM_PARAMETERS" value="-Dserver.port=8089" />
<method v="2">
<option name="Make" enabled="true" />
</method>
</configuration>
</component>
12 changes: 12 additions & 0 deletions .run/mail8090.run.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
<component name="ProjectRunConfigurationManager">
<configuration default="false" name="mail8090" type="SpringBootApplicationConfigurationType" factoryName="Spring Boot">
<option name="ALTERNATIVE_JRE_PATH" value="corretto-21" />
<option name="ALTERNATIVE_JRE_PATH_ENABLED" value="true" />
<module name="distributed-mail.main" />
<option name="SPRING_BOOT_MAIN_CLASS" value="com.aengdulab.distributedmail.DistributedMailApplication" />
<option name="VM_PARAMETERS" value="-Dserver.port=8090" />
<method v="2">
<option name="Make" enabled="true" />
</method>
</configuration>
</component>
12 changes: 12 additions & 0 deletions .run/mail8091.run.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
<component name="ProjectRunConfigurationManager">
<configuration default="false" name="mail8091" type="SpringBootApplicationConfigurationType" factoryName="Spring Boot">
<option name="ALTERNATIVE_JRE_PATH" value="corretto-21" />
<option name="ALTERNATIVE_JRE_PATH_ENABLED" value="true" />
<module name="distributed-mail.main" />
<option name="SPRING_BOOT_MAIN_CLASS" value="com.aengdulab.distributedmail.DistributedMailApplication" />
<option name="VM_PARAMETERS" value="-Dserver.port=8091" />
<method v="2">
<option name="Make" enabled="true" />
</method>
</configuration>
</component>
12 changes: 12 additions & 0 deletions .run/mail8092.run.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
<component name="ProjectRunConfigurationManager">
<configuration default="false" name="mail8092" type="SpringBootApplicationConfigurationType" factoryName="Spring Boot">
<option name="ALTERNATIVE_JRE_PATH" value="corretto-21" />
<option name="ALTERNATIVE_JRE_PATH_ENABLED" value="true" />
<module name="distributed-mail.main" />
<option name="SPRING_BOOT_MAIN_CLASS" value="com.aengdulab.distributedmail.DistributedMailApplication" />
<option name="VM_PARAMETERS" value="-Dserver.port=8092" />
<method v="2">
<option name="Make" enabled="true" />
</method>
</configuration>
</component>
12 changes: 12 additions & 0 deletions .run/mail8093.run.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
<component name="ProjectRunConfigurationManager">
<configuration default="false" name="mail8093" type="SpringBootApplicationConfigurationType" factoryName="Spring Boot">
<option name="ALTERNATIVE_JRE_PATH" value="corretto-21" />
<option name="ALTERNATIVE_JRE_PATH_ENABLED" value="true" />
<module name="distributed-mail.main" />
<option name="SPRING_BOOT_MAIN_CLASS" value="com.aengdulab.distributedmail.DistributedMailApplication" />
<option name="VM_PARAMETERS" value="-Dserver.port=8093" />
<method v="2">
<option name="Make" enabled="true" />
</method>
</configuration>
</component>
12 changes: 12 additions & 0 deletions .run/mail8094.run.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
<component name="ProjectRunConfigurationManager">
<configuration default="false" name="mail8094" type="SpringBootApplicationConfigurationType" factoryName="Spring Boot">
<option name="ALTERNATIVE_JRE_PATH" value="corretto-21" />
<option name="ALTERNATIVE_JRE_PATH_ENABLED" value="true" />
<module name="distributed-mail.main" />
<option name="SPRING_BOOT_MAIN_CLASS" value="com.aengdulab.distributedmail.DistributedMailApplication" />
<option name="VM_PARAMETERS" value="-Dserver.port=8094" />
<method v="2">
<option name="Make" enabled="true" />
</method>
</configuration>
</component>
12 changes: 12 additions & 0 deletions .run/mail8095.run.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
<component name="ProjectRunConfigurationManager">
<configuration default="false" name="mail8095" type="SpringBootApplicationConfigurationType" factoryName="Spring Boot">
<option name="ALTERNATIVE_JRE_PATH" value="corretto-21" />
<option name="ALTERNATIVE_JRE_PATH_ENABLED" value="true" />
<module name="distributed-mail.main" />
<option name="SPRING_BOOT_MAIN_CLASS" value="com.aengdulab.distributedmail.DistributedMailApplication" />
<option name="VM_PARAMETERS" value="-Dserver.port=8095" />
<method v="2">
<option name="Make" enabled="true" />
</method>
</configuration>
</component>
12 changes: 12 additions & 0 deletions .run/mail8096.run.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
<component name="ProjectRunConfigurationManager">
<configuration default="false" name="mail8096" type="SpringBootApplicationConfigurationType" factoryName="Spring Boot">
<option name="ALTERNATIVE_JRE_PATH" value="corretto-21" />
<option name="ALTERNATIVE_JRE_PATH_ENABLED" value="true" />
<module name="distributed-mail.main" />
<option name="SPRING_BOOT_MAIN_CLASS" value="com.aengdulab.distributedmail.DistributedMailApplication" />
<option name="VM_PARAMETERS" value="-Dserver.port=8096" />
<method v="2">
<option name="Make" enabled="true" />
</method>
</configuration>
</component>
12 changes: 12 additions & 0 deletions .run/mail8097.run.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
<component name="ProjectRunConfigurationManager">
<configuration default="false" name="mail8097" type="SpringBootApplicationConfigurationType" factoryName="Spring Boot">
<option name="ALTERNATIVE_JRE_PATH" value="corretto-21" />
<option name="ALTERNATIVE_JRE_PATH_ENABLED" value="true" />
<module name="distributed-mail.main" />
<option name="SPRING_BOOT_MAIN_CLASS" value="com.aengdulab.distributedmail.DistributedMailApplication" />
<option name="VM_PARAMETERS" value="-Dserver.port=8097" />
<method v="2">
<option name="Make" enabled="true" />
</method>
</configuration>
</component>
12 changes: 12 additions & 0 deletions .run/mail8098.run.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
<component name="ProjectRunConfigurationManager">
<configuration default="false" name="mail8098" type="SpringBootApplicationConfigurationType" factoryName="Spring Boot">
<option name="ALTERNATIVE_JRE_PATH" value="corretto-21" />
<option name="ALTERNATIVE_JRE_PATH_ENABLED" value="true" />
<module name="distributed-mail.main" />
<option name="SPRING_BOOT_MAIN_CLASS" value="com.aengdulab.distributedmail.DistributedMailApplication" />
<option name="VM_PARAMETERS" value="-Dserver.port=8098" />
<method v="2">
<option name="Make" enabled="true" />
</method>
</configuration>
</component>
12 changes: 12 additions & 0 deletions .run/mail8099.run.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
<component name="ProjectRunConfigurationManager">
<configuration default="false" name="mail8099" type="SpringBootApplicationConfigurationType" factoryName="Spring Boot">
<option name="ALTERNATIVE_JRE_PATH" value="corretto-21" />
<option name="ALTERNATIVE_JRE_PATH_ENABLED" value="true" />
<module name="distributed-mail.main" />
<option name="SPRING_BOOT_MAIN_CLASS" value="com.aengdulab.distributedmail.DistributedMailApplication" />
<option name="VM_PARAMETERS" value="-Dserver.port=8099" />
<method v="2">
<option name="Make" enabled="true" />
</method>
</configuration>
</component>
1 change: 1 addition & 0 deletions build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@ dependencies {
implementation 'org.springframework.boot:spring-boot-starter-mail'
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
implementation 'org.springframework.boot:spring-boot-starter-web'
implementation 'org.springframework.kafka:spring-kafka'
implementation 'org.projectlombok:lombok'
runtimeOnly 'com.h2database:h2'
runtimeOnly 'com.mysql:mysql-connector-j'
Expand Down
15 changes: 15 additions & 0 deletions docker-compose.yml
Original file line number Diff line number Diff line change
Expand Up @@ -22,3 +22,18 @@ services:
ports:
- "11025:1025"
- "18025:8025"
zookeeper:
image: wurstmeister/zookeeper
container_name: zookeeper
ports:
- "2181:2181"
kafka:
image: wurstmeister/kafka:2.12-2.5.0
container_name: kafka
ports:
- "9092:9092"
environment:
KAFKA_ADVERTISED_HOST_NAME: 127.0.0.1
KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
volumes:
- /var/run/docker.sock:/var/run/docker.sock
45 changes: 45 additions & 0 deletions src/main/java/com/aengdulab/distributedmail/DistributedLock.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
package com.aengdulab.distributedmail;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import org.springframework.stereotype.Component;

@Component
public class DistributedLock {

public boolean tryLock(Connection connection, String key, int timeout) {
String sql = "select get_lock(?, ?)";

try (PreparedStatement preparedStatement = connection.prepareStatement(sql)) {
preparedStatement.setString(1, key);
preparedStatement.setInt(2, timeout);
return getResult(preparedStatement);
} catch (Exception e) {
throw new RuntimeException(e);
}
}

private boolean getResult(PreparedStatement preparedStatement) throws SQLException {
try (ResultSet resultSet = preparedStatement.executeQuery()) {
if (!resultSet.next()) {
return false;
}

int result = resultSet.getInt(1);
return result == 1;
}
}

public void releaseLock(Connection connection, String key) {
String sql = "select release_lock(?)";

try (PreparedStatement preparedStatement = connection.prepareStatement(sql)) {
preparedStatement.setString(1, key);
preparedStatement.execute();
} catch (Exception e) {
throw new RuntimeException(e);
}
}
}
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
package com.aengdulab.distributedmail;

import java.util.concurrent.CountDownLatch;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Bean;

@SpringBootApplication
public class DistributedMailApplication {
Expand All @@ -10,4 +12,10 @@ public static void main(String[] args) {
SpringApplication.run(DistributedMailApplication.class, args);
}

@Bean
public GlobalLatch globalLatch() {
CountDownLatch latch = new CountDownLatch(1);

return new GlobalLatch(latch);
}
}
Loading