Skip to content

Commit 45ccea0

Browse files
author
Jonathan Henrique Medeiros
committed
feature: simplifying configurations and upgrade dependencies
1 parent 940c9dd commit 45ccea0

21 files changed

+105
-103
lines changed

Makefile

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,7 @@
1-
.PHONY: install test version up down restart upgrade_otel_agent
1+
.PHONY: clean install test version up down restart upgrade_otel_agent
2+
3+
clean:
4+
@mvn clean
25

36
install:
47
@mvn clean install

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ Esta arquitetura consiste em diminuir a concorrência entre transações da API
1717
</br>
1818

1919
[![node](https://img.shields.io/badge/Azul_Zulu_OpenJDK-21-red.svg)](https://www.azul.com/downloads/?package=jdk#zulu)
20-
[![node](https://img.shields.io/badge/Spring_Boot-3.2.2-green.svg)](https://spring.io/)
20+
[![node](https://img.shields.io/badge/Spring_Boot-3.2.5-green.svg)](https://spring.io/)
2121
[![node](https://img.shields.io/badge/MySQL-8.0.28-blue.svg)](https://www.mysql.com/)
2222

2323

docker-compose.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
version: "3.8"
1+
version: "3.9"
22

33
services:
44

pom.xml

Lines changed: 3 additions & 3 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>3.2.2</version>
8+
<version>3.2.5</version>
99
<relativePath/>
1010
</parent>
1111

@@ -20,9 +20,9 @@
2020
<maven.compiler.target>${java.version}</maven.compiler.target>
2121
<mapstruct.version>1.5.5.Final</mapstruct.version>
2222
<logstash-logback-encoder.version>7.4</logstash-logback-encoder.version>
23-
<springdoc-openapi-starter-webmvc-ui.version>2.3.0</springdoc-openapi-starter-webmvc-ui.version>
23+
<springdoc-openapi-starter-webmvc-ui.version>2.5.0</springdoc-openapi-starter-webmvc-ui.version>
2424
<snakeyaml.version>2.2</snakeyaml.version>
25-
<h2.version>2.2.220</h2.version>
25+
<h2.version>2.2.224</h2.version>
2626
<opentelemetry.version>1.35.0</opentelemetry.version>
2727
<json-path.version>2.9.0</json-path.version>
2828
</properties>

src/main/java/br/com/multidatasources/config/datasource/DataSourceConfiguration.java

Lines changed: 11 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,37 +1,28 @@
11
package br.com.multidatasources.config.datasource;
22

3-
import javax.sql.DataSource;
4-
53
import com.zaxxer.hikari.HikariConfig;
64
import com.zaxxer.hikari.HikariDataSource;
75

8-
public interface DataSourceConfiguration {
9-
10-
String poolName();
11-
12-
int minimumIdle();
13-
14-
int maximumPoolSize();
15-
16-
long connectionTimeout();
6+
import javax.sql.DataSource;
177

18-
long idleTimeout();
8+
public interface DataSourceConfiguration {
199

20-
long maxLifetime();
10+
DataSourceType dataSourceType();
2111

2212
default HikariDataSource definePoolDataSourceConnection(final DataSource dataSource) {
2313
return new HikariDataSource(hikariConfig(dataSource));
2414
}
2515

2616
private HikariConfig hikariConfig(final DataSource dataSource) {
2717
final HikariConfig hikariConfig = new HikariConfig();
28-
29-
hikariConfig.setPoolName(poolName());
30-
hikariConfig.setMaximumPoolSize(maximumPoolSize());
31-
hikariConfig.setMinimumIdle(minimumIdle());
32-
hikariConfig.setConnectionTimeout(connectionTimeout());
33-
hikariConfig.setMaxLifetime(maxLifetime());
34-
hikariConfig.setIdleTimeout(idleTimeout());
18+
final DataSourceType dataSourceType = dataSourceType();
19+
20+
hikariConfig.setPoolName(dataSourceType.poolName());
21+
hikariConfig.setMaximumPoolSize(dataSourceType.maximumPoolSize());
22+
hikariConfig.setMinimumIdle(dataSourceType.minimumIdle());
23+
hikariConfig.setConnectionTimeout(dataSourceType.connectionTimeout());
24+
hikariConfig.setMaxLifetime(dataSourceType.maxLifetime());
25+
hikariConfig.setIdleTimeout(dataSourceType.idleTimeout());
3526
hikariConfig.setDataSource(dataSource);
3627
hikariConfig.setAutoCommit(false);
3728

src/main/java/br/com/multidatasources/config/routing/DataSourceRoutingConfiguration.java renamed to src/main/java/br/com/multidatasources/config/datasource/DataSourceRoutingConfiguration.java

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,7 @@
1-
package br.com.multidatasources.config.routing;
1+
package br.com.multidatasources.config.datasource;
22

3-
import br.com.multidatasources.config.datasource.DataSourceType;
4-
import br.com.multidatasources.config.datasource.MasterDataSource;
5-
import br.com.multidatasources.config.datasource.ReplicaDataSource;
3+
import br.com.multidatasources.config.datasource.master.MasterDataSource;
4+
import br.com.multidatasources.config.datasource.replica.ReplicaDataSource;
65
import org.springframework.context.annotation.Bean;
76
import org.springframework.context.annotation.Configuration;
87
import org.springframework.context.annotation.Primary;

src/main/java/br/com/multidatasources/config/routing/TransactionRoutingDataSource.java renamed to src/main/java/br/com/multidatasources/config/datasource/TransactionRoutingDataSource.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package br.com.multidatasources.config.routing;
1+
package br.com.multidatasources.config.datasource;
22

33
import io.opentelemetry.api.trace.Span;
44
import org.slf4j.Logger;
@@ -16,7 +16,6 @@ public class TransactionRoutingDataSource extends AbstractRoutingDataSource {
1616
@Override
1717
protected Object determineCurrentLookupKey() {
1818
if (TransactionSynchronizationManager.isCurrentTransactionReadOnly()) {
19-
2019
LOGGER.info("Routed to: {}", READ_ONLY);
2120
enrichSpan(READ_ONLY.name(), READ_ONLY.poolName());
2221

src/main/java/br/com/multidatasources/config/datasource/MasterDataSource.java renamed to src/main/java/br/com/multidatasources/config/datasource/master/MasterDataSource.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package br.com.multidatasources.config.datasource;
1+
package br.com.multidatasources.config.datasource.master;
22

33
import org.springframework.beans.factory.annotation.Qualifier;
44

src/main/java/br/com/multidatasources/config/datasource/MasterDataSourceConfiguration.java renamed to src/main/java/br/com/multidatasources/config/datasource/master/MasterDataSourceConfiguration.java

Lines changed: 5 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
1-
package br.com.multidatasources.config.datasource;
1+
package br.com.multidatasources.config.datasource.master;
22

3+
import br.com.multidatasources.config.datasource.DataSourceConfiguration;
4+
import br.com.multidatasources.config.datasource.DataSourceType;
35
import br.com.multidatasources.config.properties.datasource.DatabaseConnectionProperties;
46
import br.com.multidatasources.config.properties.datasource.MasterProperties;
57
import org.springframework.context.annotation.Bean;
@@ -8,40 +10,14 @@
810

911
import javax.sql.DataSource;
1012

11-
import static br.com.multidatasources.config.datasource.DataSourceType.READ_ONLY;
1213
import static br.com.multidatasources.config.datasource.DataSourceType.READ_WRITE;
1314

1415
@Configuration
1516
public class MasterDataSourceConfiguration implements DataSourceConfiguration {
1617

1718
@Override
18-
public String poolName() {
19-
return READ_WRITE.poolName();
20-
}
21-
22-
@Override
23-
public int minimumIdle() {
24-
return READ_WRITE.minimumIdle();
25-
}
26-
27-
@Override
28-
public int maximumPoolSize() {
29-
return READ_WRITE.maximumPoolSize();
30-
}
31-
32-
@Override
33-
public long idleTimeout() {
34-
return READ_ONLY.idleTimeout();
35-
}
36-
37-
@Override
38-
public long connectionTimeout() {
39-
return READ_WRITE.connectionTimeout();
40-
}
41-
42-
@Override
43-
public long maxLifetime() {
44-
return READ_WRITE.maxLifetime();
19+
public DataSourceType dataSourceType() {
20+
return READ_WRITE;
4521
}
4622

4723
@Bean

src/main/java/br/com/multidatasources/config/datasource/ReplicaDataSource.java renamed to src/main/java/br/com/multidatasources/config/datasource/replica/ReplicaDataSource.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package br.com.multidatasources.config.datasource;
1+
package br.com.multidatasources.config.datasource.replica;
22

33
import org.springframework.beans.factory.annotation.Qualifier;
44

src/main/java/br/com/multidatasources/config/datasource/ReplicaDataSourceConfiguration.java renamed to src/main/java/br/com/multidatasources/config/datasource/replica/ReplicaDataSourceConfiguration.java

Lines changed: 5 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
1-
package br.com.multidatasources.config.datasource;
1+
package br.com.multidatasources.config.datasource.replica;
22

3+
import br.com.multidatasources.config.datasource.DataSourceConfiguration;
4+
import br.com.multidatasources.config.datasource.DataSourceType;
35
import br.com.multidatasources.config.properties.datasource.DatabaseConnectionProperties;
46
import br.com.multidatasources.config.properties.datasource.ReplicaProperties;
57
import org.springframework.context.annotation.Bean;
@@ -14,33 +16,8 @@
1416
public class ReplicaDataSourceConfiguration implements DataSourceConfiguration {
1517

1618
@Override
17-
public String poolName() {
18-
return READ_ONLY.poolName();
19-
}
20-
21-
@Override
22-
public int minimumIdle() {
23-
return READ_ONLY.minimumIdle();
24-
}
25-
26-
@Override
27-
public int maximumPoolSize() {
28-
return READ_ONLY.maximumPoolSize();
29-
}
30-
31-
@Override
32-
public long connectionTimeout() {
33-
return READ_ONLY.connectionTimeout();
34-
}
35-
36-
@Override
37-
public long idleTimeout() {
38-
return READ_ONLY.idleTimeout();
39-
}
40-
41-
@Override
42-
public long maxLifetime() {
43-
return READ_ONLY.maxLifetime();
19+
public DataSourceType dataSourceType() {
20+
return READ_ONLY;
4421
}
4522

4623
@Bean

src/main/java/br/com/multidatasources/config/flyway/FlywayConfiguration.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
package br.com.multidatasources.config.flyway;
22

3-
import br.com.multidatasources.config.datasource.MasterDataSource;
3+
import br.com.multidatasources.config.datasource.master.MasterDataSource;
44
import br.com.multidatasources.config.properties.flyway.FlywayProperties;
55
import org.flywaydb.core.Flyway;
66
import org.flywaydb.core.api.MigrationVersion;

src/main/java/br/com/multidatasources/config/micrometer/MeterMetricSender.java

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
import org.slf4j.MDC;
88
import org.springframework.stereotype.Component;
99

10+
import java.time.Duration;
1011
import java.util.HashMap;
1112
import java.util.Map;
1213
import java.util.Optional;
@@ -40,6 +41,18 @@ public void gauge(final String metricName, final Map<String, String> tags, final
4041
.register(this.meterRegistry);
4142
}
4243

44+
@Override
45+
public void summary(final String metricName, final Map<String, String> tags, final Number value) {
46+
final var appendedTags = appendDefaultTags(tags);
47+
this.meterRegistry.summary(metricName, toTags(appendedTags)).record(value.doubleValue());
48+
}
49+
50+
@Override
51+
public void timer(final String metricName, final Map<String, String> tags, final Duration value) {
52+
final var appendedTags = appendDefaultTags(tags);
53+
this.meterRegistry.timer(metricName, toTags(appendedTags)).record(value);
54+
}
55+
4356
private Map<String, String> appendDefaultTags(final Map<String, String> tags) {
4457
final var tagsAppender = new HashMap<>(tags);
4558

src/main/java/br/com/multidatasources/config/micrometer/MetricSender.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import jakarta.validation.constraints.NotNull;
55
import org.springframework.validation.annotation.Validated;
66

7+
import java.time.Duration;
78
import java.util.Map;
89

910
@Validated
@@ -12,5 +13,7 @@ public interface MetricSender {
1213
void increment(@NotBlank final String metricName, @NotNull final Map<String, String> tags);
1314
void increment(@NotBlank final String metricName, @NotNull final Map<String, String> tags, final double incrementValue);
1415
void gauge(@NotBlank final String metricName, @NotNull final Map<String, String> tags, @NotNull final Number value);
16+
void summary(@NotBlank final String metricName, @NotNull final Map<String, String> tags, @NotNull final Number value);
17+
void timer(@NotBlank final String metricName, @NotNull final Map<String, String> tags, @NotNull final Duration value);
1518

1619
}

src/main/java/br/com/multidatasources/config/openapi/OpenApiConfig.java

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,9 @@
22

33
import com.fasterxml.jackson.databind.ObjectMapper;
44
import io.swagger.v3.core.jackson.ModelResolver;
5+
import io.swagger.v3.oas.models.OpenAPI;
6+
import io.swagger.v3.oas.models.info.Info;
7+
import org.springframework.beans.factory.annotation.Value;
58
import org.springframework.context.annotation.Bean;
69
import org.springframework.context.annotation.Configuration;
710

@@ -13,4 +16,16 @@ public ModelResolver modelResolver(final ObjectMapper objectMapper) {
1316
return new ModelResolver(objectMapper);
1417
}
1518

19+
@Bean
20+
public OpenAPI openAPI(
21+
@Value("${spring.application.name}") final String applicationName,
22+
@Value("${spring.application.version}") final String version
23+
) {
24+
final var info = new Info()
25+
.title(applicationName)
26+
.version(version);
27+
28+
return new OpenAPI().info(info);
29+
}
30+
1631
}
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
package br.com.multidatasources.exception;
2+
3+
public class BusinessException extends RuntimeException{
4+
5+
private static final boolean ENABLE_SUPPRESSION = true;
6+
private static final boolean WRITEABLE_STACK_TRACE = false;
7+
8+
public BusinessException(final String message) {
9+
super(message);
10+
}
11+
12+
public BusinessException(final String message, final Throwable cause) {
13+
super(message, cause, ENABLE_SUPPRESSION, WRITEABLE_STACK_TRACE);
14+
}
15+
16+
}
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
package br.com.multidatasources.exception;
2+
3+
public class JsonProcessingException extends BusinessException{
4+
5+
public JsonProcessingException(final String message, final Throwable cause){
6+
super(message, cause);
7+
}
8+
9+
}

src/main/java/br/com/multidatasources/model/Billionaire.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,12 +9,12 @@
99

1010
@Entity
1111
@Table(name = "billionaire")
12-
public class Billionaire extends IdempotentEntity<Long> {
12+
public class Billionaire extends IdempotentEntity {
1313

14-
@Column(name = "first_name")
14+
@Column(name = "first_name", nullable = false)
1515
private String firstName;
1616

17-
@Column(name = "last_name")
17+
@Column(name = "last_name", nullable = false)
1818
private String lastName;
1919

2020
private String career;

src/main/java/br/com/multidatasources/model/IdempotentEntity.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -12,23 +12,23 @@
1212
import java.util.UUID;
1313

1414
@MappedSuperclass
15-
public abstract class IdempotentEntity<T> {
15+
public abstract class IdempotentEntity {
1616

1717
@Id
1818
@GeneratedValue(strategy = GenerationType.IDENTITY)
19-
private T id;
19+
private Long id;
2020

21-
@Column(name = "idempotency_id")
21+
@Column(name = "idempotency_id", nullable = false, updatable = false)
2222
@Convert(converter = IdempotencyIdConverter.class)
2323
private UUID idempotencyId;
2424

2525
public abstract void generateIdempotencyId(final IdempotencyGenerator generator);
2626

27-
public T getId() {
27+
public Long getId() {
2828
return id;
2929
}
3030

31-
public void setId(final T id) {
31+
public void setId(final Long id) {
3232
this.id = id;
3333
}
3434

src/main/java/br/com/multidatasources/util/JsonUtils.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package br.com.multidatasources.util;
22

33
import br.com.multidatasources.config.objectmapper.ObjectMapperConfig;
4+
import br.com.multidatasources.exception.JsonProcessingException;
45

56
import java.util.concurrent.Callable;
67

@@ -20,7 +21,7 @@ private static <T> T execute(final Callable<T> callable) {
2021
try {
2122
return callable.call();
2223
} catch (final Exception ex) {
23-
throw new RuntimeException("An unexpected error occurred");
24+
throw new JsonProcessingException("An unexpected error occurred", ex);
2425
}
2526
}
2627

0 commit comments

Comments
 (0)