Skip to content

Commit 9743be4

Browse files
committed
Save randomly generated users to MySQL database
1 parent c5a8b16 commit 9743be4

File tree

8 files changed

+124
-3
lines changed

8 files changed

+124
-3
lines changed

.gitignore

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,3 +25,5 @@ hs_err_pid*
2525
.idea/
2626
target/
2727
*.iml
28+
29+
.DS_Store

docker-compose.yml

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,4 +44,12 @@ services:
4444
KAFKA_BROKERCONNECT: kafka:29092
4545
healthcheck:
4646
test: "curl -f kafdrop:9000/actuator/health || exit 1"
47-
start_period: 30s
47+
start_period: 30s
48+
49+
mysql:
50+
image: mysql:8.0.30
51+
ports:
52+
- "3306:3306"
53+
environment:
54+
- MYSQL_ROOT_PASSWORD=secret
55+
- MYSQL_DATABASE=test

pom.xml

Lines changed: 28 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
<parent>
66
<groupId>org.springframework.boot</groupId>
77
<artifactId>spring-boot-starter-parent</artifactId>
8-
<version>2.3.4.RELEASE</version>
8+
<version>2.5.14</version>
99
<relativePath/> <!-- lookup parent from repository -->
1010
</parent>
1111
<groupId>com.madadipouya</groupId>
@@ -16,6 +16,10 @@
1616

1717
<properties>
1818
<java.version>11</java.version>
19+
<flyway.version>7.7.3</flyway.version>
20+
<flyway.url>jdbc:mysql://localhost:3306/test</flyway.url>
21+
<flyway.user>root</flyway.user>
22+
<flyway.password>secret</flyway.password>
1923
</properties>
2024

2125
<dependencies>
@@ -27,6 +31,25 @@
2731
<groupId>org.springframework.kafka</groupId>
2832
<artifactId>spring-kafka</artifactId>
2933
</dependency>
34+
<dependency>
35+
<groupId>javax.validation</groupId>
36+
<artifactId>validation-api</artifactId>
37+
<version>2.0.1.Final</version>
38+
</dependency>
39+
<dependency>
40+
<groupId>org.springframework.boot</groupId>
41+
<artifactId>spring-boot-starter-data-jpa</artifactId>
42+
</dependency>
43+
<dependency>
44+
<groupId>mysql</groupId>
45+
<artifactId>mysql-connector-java</artifactId>
46+
<scope>runtime</scope>
47+
</dependency>
48+
<dependency>
49+
<groupId>org.flywaydb</groupId>
50+
<artifactId>flyway-core</artifactId>
51+
<version>${flyway.version}</version>
52+
</dependency>
3053
<dependency>
3154
<groupId>io.springfox</groupId>
3255
<artifactId>springfox-boot-starter</artifactId>
@@ -80,7 +103,10 @@
80103
<groupId>org.springframework.boot</groupId>
81104
<artifactId>spring-boot-maven-plugin</artifactId>
82105
</plugin>
106+
<plugin>
107+
<groupId>org.flywaydb</groupId>
108+
<artifactId>flyway-maven-plugin</artifactId>
109+
</plugin>
83110
</plugins>
84111
</build>
85-
86112
</project>
Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
package com.madadipouya.springkafkatest.entity;
2+
3+
import javax.persistence.Column;
4+
import javax.persistence.Entity;
5+
import javax.persistence.Id;
6+
import javax.persistence.Table;
7+
import javax.validation.constraints.NotBlank;
8+
9+
@Entity()
10+
@Table(name = "users")
11+
public class User {
12+
13+
@Id
14+
private String id;
15+
16+
@NotBlank
17+
@Column(name = "first_name", nullable = false)
18+
private String firstName;
19+
20+
@NotBlank
21+
@Column(name = "last_name", nullable = false)
22+
private String lastName;
23+
24+
protected User() {
25+
26+
}
27+
28+
public User(String id, String firstName, String lastName) {
29+
this.id = id;
30+
this.firstName = firstName;
31+
this.lastName = lastName;
32+
}
33+
34+
public String getId() {
35+
return id;
36+
}
37+
38+
public String getFirstName() {
39+
return firstName;
40+
}
41+
42+
public void setFirstName(String firstName) {
43+
this.firstName = firstName;
44+
}
45+
46+
public String getLastName() {
47+
return lastName;
48+
}
49+
50+
public void setLastName(String lastName) {
51+
this.lastName = lastName;
52+
}
53+
}
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
package com.madadipouya.springkafkatest.repository;
2+
3+
import com.madadipouya.springkafkatest.entity.User;
4+
import org.springframework.data.jpa.repository.JpaRepository;
5+
import org.springframework.stereotype.Repository;
6+
7+
@Repository
8+
public interface UserRepository extends JpaRepository<User, String> {
9+
10+
}

src/main/java/com/madadipouya/springkafkatest/service/impl/DefaultUserService.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package com.madadipouya.springkafkatest.service.impl;
22

33
import com.madadipouya.springkafkatest.dto.User;
4+
import com.madadipouya.springkafkatest.repository.UserRepository;
45
import com.madadipouya.springkafkatest.service.UserService;
56
import org.slf4j.Logger;
67
import org.slf4j.LoggerFactory;
@@ -11,8 +12,15 @@ public class DefaultUserService implements UserService {
1112

1213
private static final Logger logger = LoggerFactory.getLogger(DefaultUserService.class);
1314

15+
private final UserRepository userRepository;
16+
17+
public DefaultUserService(UserRepository userRepository) {
18+
this.userRepository = userRepository;
19+
}
20+
1421
@Override
1522
public void save(User user) {
1623
logger.info("Saving user with id = {}", user.getUuid());
24+
userRepository.save(new com.madadipouya.springkafkatest.entity.User(user.getUuid(), user.getFirstName(), user.getLastName()));
1725
}
1826
}

src/main/resources/application.properties

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,9 @@
1+
spring.jpa.hibernate.ddl-auto=none
2+
spring.datasource.hikari.maxLifetime=600000
3+
spring.datasource.initialization-mode=always
4+
spring.datasource.url=jdbc:mysql://localhost:3306/test
5+
spring.datasource.username=root
6+
spring.datasource.password=secret
17
spring.kafka.bootstrap-servers=localhost:9092
28
spring.kafka.topic.name=com.madadipouya.kafka.user
39
spring.kafka.replication.factor=3
@@ -13,3 +19,4 @@ spring.kafka.producer.value-serializer=org.springframework.kafka.support.seriali
1319
spring.kafka.producer.properties.spring.json.value.default.type=com.madadipouya.springkafkatest.dto.User
1420
# more about default serializer and deserializer here:
1521
# https://docs.spring.io/spring-kafka/api/constant-values.html
22+
#spring.flyway.enabled=true
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
CREATE TABLE IF NOT EXISTS users (
2+
id VARCHAR(36) PRIMARY KEY,
3+
first_name VARCHAR(256) NOT NULL,
4+
last_name VARCHAR(256) NOT NULL,
5+
CONSTRAINT uc_user_email_address UNIQUE(first_name, last_name),
6+
INDEX idx_user_id (id)
7+
) engine=InnoDB;

0 commit comments

Comments
 (0)