Compare commits
3 Commits
master
...
feature/mo
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
5275894580 | ||
|
|
ea25e8e8bc | ||
|
|
501b5a9cec |
15
pom.xml
15
pom.xml
@@ -17,6 +17,21 @@
|
|||||||
<java.version>17</java.version>
|
<java.version>17</java.version>
|
||||||
</properties>
|
</properties>
|
||||||
<dependencies>
|
<dependencies>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.springframework.cloud</groupId>
|
||||||
|
<artifactId>spring-cloud-sleuth-zipkin</artifactId>
|
||||||
|
<version>3.1.1</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.springframework.cloud</groupId>
|
||||||
|
<artifactId>spring-cloud-starter-sleuth</artifactId>
|
||||||
|
<version>3.1.1</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>io.micrometer</groupId>
|
||||||
|
<artifactId>micrometer-registry-prometheus</artifactId>
|
||||||
|
<version>1.8.4</version>
|
||||||
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.springdoc</groupId>
|
<groupId>org.springdoc</groupId>
|
||||||
<artifactId>springdoc-openapi-ui</artifactId>
|
<artifactId>springdoc-openapi-ui</artifactId>
|
||||||
|
|||||||
@@ -5,17 +5,20 @@ import com.eventsourcing.bankAccount.domain.BankAccountAggregate;
|
|||||||
import com.eventsourcing.es.EventStoreDB;
|
import com.eventsourcing.es.EventStoreDB;
|
||||||
import lombok.RequiredArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import org.springframework.cloud.sleuth.annotation.NewSpan;
|
||||||
|
import org.springframework.cloud.sleuth.annotation.SpanTag;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
@RequiredArgsConstructor
|
@RequiredArgsConstructor
|
||||||
@Slf4j
|
@Slf4j
|
||||||
@Service
|
@Service
|
||||||
public class BankAccountCommandHandler implements BankAccountCommandService{
|
public class BankAccountCommandHandler implements BankAccountCommandService {
|
||||||
|
|
||||||
private final EventStoreDB eventStoreDB;
|
private final EventStoreDB eventStoreDB;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String handle(CreateBankAccountCommand command) {
|
@NewSpan
|
||||||
|
public String handle(@SpanTag("command") CreateBankAccountCommand command) {
|
||||||
final var aggregate = new BankAccountAggregate(command.aggregateID());
|
final var aggregate = new BankAccountAggregate(command.aggregateID());
|
||||||
aggregate.createBankAccount(command.email(), command.address(), command.userName());
|
aggregate.createBankAccount(command.email(), command.address(), command.userName());
|
||||||
eventStoreDB.save(aggregate);
|
eventStoreDB.save(aggregate);
|
||||||
@@ -25,7 +28,8 @@ public class BankAccountCommandHandler implements BankAccountCommandService{
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void handle(ChangeEmailCommand command) {
|
@NewSpan
|
||||||
|
public void handle(@SpanTag("command") ChangeEmailCommand command) {
|
||||||
final var aggregate = eventStoreDB.load(command.aggregateID(), BankAccountAggregate.class);
|
final var aggregate = eventStoreDB.load(command.aggregateID(), BankAccountAggregate.class);
|
||||||
aggregate.changeEmail(command.newEmail());
|
aggregate.changeEmail(command.newEmail());
|
||||||
eventStoreDB.save(aggregate);
|
eventStoreDB.save(aggregate);
|
||||||
@@ -33,7 +37,8 @@ public class BankAccountCommandHandler implements BankAccountCommandService{
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void handle(ChangeAddressCommand command) {
|
@NewSpan
|
||||||
|
public void handle(@SpanTag("command") ChangeAddressCommand command) {
|
||||||
final var aggregate = eventStoreDB.load(command.aggregateID(), BankAccountAggregate.class);
|
final var aggregate = eventStoreDB.load(command.aggregateID(), BankAccountAggregate.class);
|
||||||
aggregate.changeAddress(command.newAddress());
|
aggregate.changeAddress(command.newAddress());
|
||||||
eventStoreDB.save(aggregate);
|
eventStoreDB.save(aggregate);
|
||||||
@@ -41,7 +46,8 @@ public class BankAccountCommandHandler implements BankAccountCommandService{
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void handle(DepositAmountCommand command) {
|
@NewSpan
|
||||||
|
public void handle(@SpanTag("command") DepositAmountCommand command) {
|
||||||
final var aggregate = eventStoreDB.load(command.aggregateID(), BankAccountAggregate.class);
|
final var aggregate = eventStoreDB.load(command.aggregateID(), BankAccountAggregate.class);
|
||||||
aggregate.depositBalance(command.amount());
|
aggregate.depositBalance(command.amount());
|
||||||
eventStoreDB.save(aggregate);
|
eventStoreDB.save(aggregate);
|
||||||
|
|||||||
@@ -15,6 +15,8 @@ import com.eventsourcing.es.SerializerUtils;
|
|||||||
import com.eventsourcing.mappers.BankAccountMapper;
|
import com.eventsourcing.mappers.BankAccountMapper;
|
||||||
import lombok.RequiredArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import org.springframework.cloud.sleuth.annotation.NewSpan;
|
||||||
|
import org.springframework.cloud.sleuth.annotation.SpanTag;
|
||||||
import org.springframework.kafka.annotation.KafkaListener;
|
import org.springframework.kafka.annotation.KafkaListener;
|
||||||
import org.springframework.kafka.listener.adapter.ConsumerRecordMetadata;
|
import org.springframework.kafka.listener.adapter.ConsumerRecordMetadata;
|
||||||
import org.springframework.kafka.support.Acknowledgment;
|
import org.springframework.kafka.support.Acknowledgment;
|
||||||
@@ -54,7 +56,8 @@ public class BankAccountMongoProjection implements Projection {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void processEvents(List<Event> events) {
|
@NewSpan
|
||||||
|
private void processEvents(@SpanTag("events") List<Event> events) {
|
||||||
if (events.isEmpty()) return;
|
if (events.isEmpty()) return;
|
||||||
|
|
||||||
try {
|
try {
|
||||||
@@ -69,7 +72,8 @@ public class BankAccountMongoProjection implements Projection {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void when(Event event) {
|
@NewSpan
|
||||||
|
public void when(@SpanTag("event") Event event) {
|
||||||
final var aggregateId = event.getAggregateId();
|
final var aggregateId = event.getAggregateId();
|
||||||
log.info("(when) >>>>> aggregateId: {}", aggregateId);
|
log.info("(when) >>>>> aggregateId: {}", aggregateId);
|
||||||
|
|
||||||
@@ -87,7 +91,8 @@ public class BankAccountMongoProjection implements Projection {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
private void handle(BankAccountCreatedEvent event) {
|
@NewSpan
|
||||||
|
private void handle(@SpanTag("event") BankAccountCreatedEvent event) {
|
||||||
log.info("(when) BankAccountCreatedEvent: {}, aggregateID: {}", event, event.getAggregateId());
|
log.info("(when) BankAccountCreatedEvent: {}, aggregateID: {}", event, event.getAggregateId());
|
||||||
|
|
||||||
final var document = BankAccountDocument.builder()
|
final var document = BankAccountDocument.builder()
|
||||||
@@ -102,7 +107,8 @@ public class BankAccountMongoProjection implements Projection {
|
|||||||
log.info("(BankAccountCreatedEvent) insert: {}", insert);
|
log.info("(BankAccountCreatedEvent) insert: {}", insert);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void handle(EmailChangedEvent event) {
|
@NewSpan
|
||||||
|
private void handle(@SpanTag("event") EmailChangedEvent event) {
|
||||||
log.info("(when) EmailChangedEvent: {}, aggregateID: {}", event, event.getAggregateId());
|
log.info("(when) EmailChangedEvent: {}, aggregateID: {}", event, event.getAggregateId());
|
||||||
Optional<BankAccountDocument> documentOptional = mongoRepository.findByAggregateId(event.getAggregateId());
|
Optional<BankAccountDocument> documentOptional = mongoRepository.findByAggregateId(event.getAggregateId());
|
||||||
if (documentOptional.isEmpty())
|
if (documentOptional.isEmpty())
|
||||||
@@ -113,7 +119,8 @@ public class BankAccountMongoProjection implements Projection {
|
|||||||
mongoRepository.save(document);
|
mongoRepository.save(document);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void handle(AddressUpdatedEvent event) {
|
@NewSpan
|
||||||
|
private void handle(@SpanTag("event") AddressUpdatedEvent event) {
|
||||||
log.info("(when) AddressUpdatedEvent: {}, aggregateID: {}", event, event.getAggregateId());
|
log.info("(when) AddressUpdatedEvent: {}, aggregateID: {}", event, event.getAggregateId());
|
||||||
Optional<BankAccountDocument> documentOptional = mongoRepository.findByAggregateId(event.getAggregateId());
|
Optional<BankAccountDocument> documentOptional = mongoRepository.findByAggregateId(event.getAggregateId());
|
||||||
if (documentOptional.isEmpty())
|
if (documentOptional.isEmpty())
|
||||||
@@ -124,7 +131,8 @@ public class BankAccountMongoProjection implements Projection {
|
|||||||
mongoRepository.save(document);
|
mongoRepository.save(document);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void handle(BalanceDepositedEvent event) {
|
@NewSpan
|
||||||
|
private void handle(@SpanTag("event") BalanceDepositedEvent event) {
|
||||||
log.info("(when) BalanceDepositedEvent: {}, aggregateID: {}", event, event.getAggregateId());
|
log.info("(when) BalanceDepositedEvent: {}, aggregateID: {}", event, event.getAggregateId());
|
||||||
Optional<BankAccountDocument> documentOptional = mongoRepository.findByAggregateId(event.getAggregateId());
|
Optional<BankAccountDocument> documentOptional = mongoRepository.findByAggregateId(event.getAggregateId());
|
||||||
if (documentOptional.isEmpty())
|
if (documentOptional.isEmpty())
|
||||||
|
|||||||
@@ -8,6 +8,8 @@ import com.eventsourcing.es.EventStoreDB;
|
|||||||
import com.eventsourcing.mappers.BankAccountMapper;
|
import com.eventsourcing.mappers.BankAccountMapper;
|
||||||
import lombok.RequiredArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import org.springframework.cloud.sleuth.annotation.NewSpan;
|
||||||
|
import org.springframework.cloud.sleuth.annotation.SpanTag;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
@@ -22,7 +24,8 @@ public class BankAccountQueryHandler implements BankAccountQueryService {
|
|||||||
private final BankAccountMongoRepository mongoRepository;
|
private final BankAccountMongoRepository mongoRepository;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public BankAccountResponseDTO handle(GetBankAccountByIDQuery query) {
|
@NewSpan
|
||||||
|
public BankAccountResponseDTO handle(@SpanTag("query") GetBankAccountByIDQuery query) {
|
||||||
Optional<BankAccountDocument> optionalDocument = mongoRepository.findByAggregateId(query.aggregateID());
|
Optional<BankAccountDocument> optionalDocument = mongoRepository.findByAggregateId(query.aggregateID());
|
||||||
if (optionalDocument.isPresent()) {
|
if (optionalDocument.isPresent()) {
|
||||||
return BankAccountMapper.bankAccountResponseDTOFromDocument(optionalDocument.get());
|
return BankAccountMapper.bankAccountResponseDTOFromDocument(optionalDocument.get());
|
||||||
|
|||||||
@@ -4,6 +4,8 @@ package com.eventsourcing.es;
|
|||||||
import com.eventsourcing.es.exceptions.AggregateNotFoundException;
|
import com.eventsourcing.es.exceptions.AggregateNotFoundException;
|
||||||
import lombok.RequiredArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import org.springframework.cloud.sleuth.annotation.NewSpan;
|
||||||
|
import org.springframework.cloud.sleuth.annotation.SpanTag;
|
||||||
import org.springframework.dao.EmptyResultDataAccessException;
|
import org.springframework.dao.EmptyResultDataAccessException;
|
||||||
import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate;
|
import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate;
|
||||||
import org.springframework.stereotype.Repository;
|
import org.springframework.stereotype.Repository;
|
||||||
@@ -28,7 +30,8 @@ public class EventStore implements EventStoreDB {
|
|||||||
private final EventBus eventBus;
|
private final EventBus eventBus;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void saveEvents(List<Event> events) {
|
@NewSpan
|
||||||
|
public void saveEvents(@SpanTag("events") List<Event> events) {
|
||||||
if (events.isEmpty()) return;
|
if (events.isEmpty()) return;
|
||||||
|
|
||||||
final List<Event> changes = new ArrayList<>(events);
|
final List<Event> changes = new ArrayList<>(events);
|
||||||
@@ -46,7 +49,8 @@ public class EventStore implements EventStoreDB {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<Event> loadEvents(String aggregateId, long version) {
|
@NewSpan
|
||||||
|
public List<Event> loadEvents(@SpanTag("aggregateId") String aggregateId, @SpanTag("version") long version) {
|
||||||
final List<Event> events = jdbcTemplate.query(LOAD_EVENTS_QUERY, Map.of("aggregate_id", aggregateId, "version", version),
|
final List<Event> events = jdbcTemplate.query(LOAD_EVENTS_QUERY, Map.of("aggregate_id", aggregateId, "version", version),
|
||||||
(rs, rowNum) -> Event.builder()
|
(rs, rowNum) -> Event.builder()
|
||||||
.aggregateId(rs.getString("aggregate_id"))
|
.aggregateId(rs.getString("aggregate_id"))
|
||||||
@@ -62,7 +66,8 @@ public class EventStore implements EventStoreDB {
|
|||||||
return events;
|
return events;
|
||||||
}
|
}
|
||||||
|
|
||||||
private <T extends AggregateRoot> void saveSnapshot(T aggregate) {
|
@NewSpan
|
||||||
|
private <T extends AggregateRoot> void saveSnapshot(@SpanTag("aggregate") T aggregate) {
|
||||||
aggregate.toSnapshot();
|
aggregate.toSnapshot();
|
||||||
final var snapshot = EventSourcingUtils.snapshotFromAggregate(aggregate);
|
final var snapshot = EventSourcingUtils.snapshotFromAggregate(aggregate);
|
||||||
|
|
||||||
@@ -78,7 +83,8 @@ public class EventStore implements EventStoreDB {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
@Transactional
|
@Transactional
|
||||||
public <T extends AggregateRoot> void save(T aggregate) {
|
@NewSpan
|
||||||
|
public <T extends AggregateRoot> void save(@SpanTag("aggregate") T aggregate) {
|
||||||
final List<Event> aggregateEvents = new ArrayList<>(aggregate.getChanges());
|
final List<Event> aggregateEvents = new ArrayList<>(aggregate.getChanges());
|
||||||
|
|
||||||
if (aggregate.getVersion() > 1) {
|
if (aggregate.getVersion() > 1) {
|
||||||
@@ -95,7 +101,8 @@ public class EventStore implements EventStoreDB {
|
|||||||
log.info("(save) saved aggregate: {}", aggregate);
|
log.info("(save) saved aggregate: {}", aggregate);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void handleConcurrency(String aggregateId) {
|
@NewSpan
|
||||||
|
private void handleConcurrency(@SpanTag("aggregateId") String aggregateId) {
|
||||||
try {
|
try {
|
||||||
String aggregateID = jdbcTemplate.queryForObject(HANDLE_CONCURRENCY_QUERY, Map.of("aggregate_id", aggregateId), String.class);
|
String aggregateID = jdbcTemplate.queryForObject(HANDLE_CONCURRENCY_QUERY, Map.of("aggregate_id", aggregateId), String.class);
|
||||||
log.info("(handleConcurrency) aggregateID for lock: {}", aggregateID);
|
log.info("(handleConcurrency) aggregateID for lock: {}", aggregateID);
|
||||||
@@ -105,7 +112,8 @@ public class EventStore implements EventStoreDB {
|
|||||||
log.info("(handleConcurrency) aggregateID for lock: {}", aggregateId);
|
log.info("(handleConcurrency) aggregateID for lock: {}", aggregateId);
|
||||||
}
|
}
|
||||||
|
|
||||||
private Optional<Snapshot> loadSnapshot(String aggregateId) {
|
@NewSpan
|
||||||
|
private Optional<Snapshot> loadSnapshot(@SpanTag("aggregateId") String aggregateId) {
|
||||||
final Optional<Snapshot> snapshot = jdbcTemplate.query(LOAD_SNAPSHOT_QUERY, Map.of("aggregate_id", aggregateId), (rs, rowNum) -> Snapshot.builder()
|
final Optional<Snapshot> snapshot = jdbcTemplate.query(LOAD_SNAPSHOT_QUERY, Map.of("aggregate_id", aggregateId), (rs, rowNum) -> Snapshot.builder()
|
||||||
.aggregateId(rs.getString("aggregate_id"))
|
.aggregateId(rs.getString("aggregate_id"))
|
||||||
.aggregateType(rs.getString("aggregate_type"))
|
.aggregateType(rs.getString("aggregate_type"))
|
||||||
@@ -119,7 +127,8 @@ public class EventStore implements EventStoreDB {
|
|||||||
return snapshot;
|
return snapshot;
|
||||||
}
|
}
|
||||||
|
|
||||||
private <T extends AggregateRoot> T getAggregate(final String aggregateId, final Class<T> aggregateType) {
|
@NewSpan
|
||||||
|
private <T extends AggregateRoot> T getAggregate(@SpanTag("aggregateId") final String aggregateId, @SpanTag("aggregateType") final Class<T> aggregateType) {
|
||||||
try {
|
try {
|
||||||
return aggregateType.getConstructor(String.class).newInstance(aggregateId);
|
return aggregateType.getConstructor(String.class).newInstance(aggregateId);
|
||||||
} catch (Exception ex) {
|
} catch (Exception ex) {
|
||||||
@@ -127,7 +136,8 @@ public class EventStore implements EventStoreDB {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private <T extends AggregateRoot> T getSnapshotFromClass(Optional<Snapshot> snapshot, String aggregateId, Class<T> aggregateType) {
|
@NewSpan
|
||||||
|
private <T extends AggregateRoot> T getSnapshotFromClass(@SpanTag("snapshot") Optional<Snapshot> snapshot, @SpanTag("aggregateId") String aggregateId, @SpanTag("aggregateType") Class<T> aggregateType) {
|
||||||
if (snapshot.isEmpty()) {
|
if (snapshot.isEmpty()) {
|
||||||
final var defaultSnapshot = EventSourcingUtils.snapshotFromAggregate(getAggregate(aggregateId, aggregateType));
|
final var defaultSnapshot = EventSourcingUtils.snapshotFromAggregate(getAggregate(aggregateId, aggregateType));
|
||||||
return EventSourcingUtils.aggregateFromSnapshot(defaultSnapshot, aggregateType);
|
return EventSourcingUtils.aggregateFromSnapshot(defaultSnapshot, aggregateType);
|
||||||
@@ -137,7 +147,8 @@ public class EventStore implements EventStoreDB {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
@Transactional(readOnly = true)
|
@Transactional(readOnly = true)
|
||||||
public <T extends AggregateRoot> T load(String aggregateId, Class<T> aggregateType) {
|
@NewSpan
|
||||||
|
public <T extends AggregateRoot> T load(@SpanTag("aggregateId") String aggregateId, @SpanTag("aggregateType") Class<T> aggregateType) {
|
||||||
|
|
||||||
final Optional<Snapshot> snapshot = this.loadSnapshot(aggregateId);
|
final Optional<Snapshot> snapshot = this.loadSnapshot(aggregateId);
|
||||||
|
|
||||||
@@ -156,7 +167,8 @@ public class EventStore implements EventStoreDB {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Boolean exists(String aggregateId) {
|
@NewSpan
|
||||||
|
public Boolean exists(@SpanTag("aggregateId") String aggregateId) {
|
||||||
try {
|
try {
|
||||||
final var id = jdbcTemplate.queryForObject(EXISTS_QUERY, Map.of("aggregate_id", aggregateId), String.class);
|
final var id = jdbcTemplate.queryForObject(EXISTS_QUERY, Map.of("aggregate_id", aggregateId), String.class);
|
||||||
log.info("aggregate exists id: {}", id);
|
log.info("aggregate exists id: {}", id);
|
||||||
|
|||||||
@@ -5,6 +5,8 @@ import lombok.RequiredArgsConstructor;
|
|||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.apache.kafka.clients.producer.ProducerRecord;
|
import org.apache.kafka.clients.producer.ProducerRecord;
|
||||||
import org.springframework.beans.factory.annotation.Value;
|
import org.springframework.beans.factory.annotation.Value;
|
||||||
|
import org.springframework.cloud.sleuth.annotation.NewSpan;
|
||||||
|
import org.springframework.cloud.sleuth.annotation.SpanTag;
|
||||||
import org.springframework.kafka.core.KafkaTemplate;
|
import org.springframework.kafka.core.KafkaTemplate;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
@@ -21,7 +23,8 @@ public class KafkaEventBus implements EventBus {
|
|||||||
private String bankAccountTopicName;
|
private String bankAccountTopicName;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void publish(List<Event> events) {
|
@NewSpan
|
||||||
|
public void publish(@SpanTag("events") List<Event> events) {
|
||||||
final byte[] eventsBytes = SerializerUtils.serializeToJsonBytes(events.toArray(new Event[]{}));
|
final byte[] eventsBytes = SerializerUtils.serializeToJsonBytes(events.toArray(new Event[]{}));
|
||||||
final ProducerRecord<String, byte[]> record = new ProducerRecord<>(bankAccountTopicName, eventsBytes);
|
final ProducerRecord<String, byte[]> record = new ProducerRecord<>(bankAccountTopicName, eventsBytes);
|
||||||
|
|
||||||
|
|||||||
@@ -38,3 +38,9 @@ spring.data.mongodb.password=admin
|
|||||||
spring.data.mongodb.database=microservices
|
spring.data.mongodb.database=microservices
|
||||||
|
|
||||||
springdoc.swagger-ui.path=/swagger-ui.html
|
springdoc.swagger-ui.path=/swagger-ui.html
|
||||||
|
|
||||||
|
management.endpoints.web.exposure.include=health,prometheus,info
|
||||||
|
|
||||||
|
spring.sleuth.propagation.type=w3c,b3
|
||||||
|
spring.sleuth.opentracing.enabled=true
|
||||||
|
spring.zipkin.base-url=http://localhost:9411
|
||||||
Reference in New Issue
Block a user