-FROM openjdk:8-jre-alpine
+FROM openjdk:11-jre
VOLUME /tmp
COPY target/*.jar /opt/app.jar
-ENTRYPOINT [ "/usr/bin/java", "-jar", "/opt/app.jar" ]
+ENTRYPOINT [ "java", "-jar", "/opt/app.jar" ]
CMD []
<description>Simple web-app example for spring-boot-data-jdbc</description>
<properties>
- <java.version>1.8</java.version>
+ <java.version>11</java.version>
+ <outbox-postage.version>polling-outbox-2-SNAPSHOT</outbox-postage.version>
</properties>
<dependencies>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-json</artifactId>
</dependency>
+ <dependency>
+ <groupId>de.juplo.kafka.outbox</groupId>
+ <artifactId>outbox-postage</artifactId>
+ <version>${outbox-postage.version}</version>
+ </dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
package de.juplo.boot.data.jdbc;
-import de.juplo.kafka.outbox.OutboxEvent;
+import de.juplo.kafka.outbox.postage.OutboxEvent;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.context.ApplicationEventPublisher;
package de.juplo.boot.data.jdbc;
-import de.juplo.kafka.outbox.OutboxEvent;
+import de.juplo.kafka.outbox.postage.OutboxEvent;
import java.time.ZonedDateTime;
+++ /dev/null
-package de.juplo.kafka.outbox;
-
-import lombok.EqualsAndHashCode;
-import lombok.Getter;
-import lombok.ToString;
-import org.springframework.context.ApplicationEvent;
-
-import java.time.ZonedDateTime;
-
-
-@ToString
-@EqualsAndHashCode
-public class OutboxEvent extends ApplicationEvent
-{
- @Getter
- private final String key;
- @Getter
- private final Object value;
- @Getter
- private final ZonedDateTime time;
-
-
- public OutboxEvent(Object source, String key, Object value, ZonedDateTime time)
- {
- super(source);
- this.key = key;
- this.value = value;
- this.time = time;
- }
-}
+++ /dev/null
-package de.juplo.kafka.outbox;
-
-import com.fasterxml.jackson.core.JsonProcessingException;
-import com.fasterxml.jackson.databind.ObjectMapper;
-import lombok.AllArgsConstructor;
-import org.springframework.stereotype.Component;
-import org.springframework.transaction.event.TransactionPhase;
-import org.springframework.transaction.event.TransactionalEventListener;
-
-
-@Component
-@AllArgsConstructor
-public class OutboxListener
-{
- private final OutboxRepository repository;
- private final ObjectMapper mapper;
-
-
- @TransactionalEventListener(phase = TransactionPhase.BEFORE_COMMIT)
- public void onUserEvent(OutboxEvent event)
- {
- try
- {
- repository.save(
- event.getKey(),
- mapper.writeValueAsString(event.getValue()),
- event.getTime());
- }
- catch (JsonProcessingException e)
- {
- throw new RuntimeException(e);
- }
- }
-}
+++ /dev/null
-package de.juplo.kafka.outbox;
-
-import lombok.AllArgsConstructor;
-import org.springframework.jdbc.core.namedparam.MapSqlParameterSource;
-import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate;
-import org.springframework.stereotype.Repository;
-
-import java.sql.Timestamp;
-import java.time.ZonedDateTime;
-
-
-@Repository
-@AllArgsConstructor
-public class OutboxRepository
-{
- private static final String SQL_UPDATE =
- "INSERT INTO outbox (key, value, issued) VALUES (:key, :value, :issued)";
-
- private final NamedParameterJdbcTemplate jdbcTemplate;
-
-
- public void save(String key, String value, ZonedDateTime issued)
- {
- MapSqlParameterSource parameters = new MapSqlParameterSource();
- parameters.addValue("key", key);
- parameters.addValue("value", value);
- parameters.addValue("issued", Timestamp.from(issued.toInstant()));
- jdbcTemplate.update(SQL_UPDATE, parameters);
- }
-}