WIP
[demos/kafka/outbox] / src / main / java / de / juplo / kafka / outbox / polling / UserEventListener.java
1 package de.juplo.kafka.outbox.polling;
2
3 import org.slf4j.Logger;
4 import org.slf4j.LoggerFactory;
5 import org.springframework.context.event.EventListener;
6 import org.springframework.jdbc.core.namedparam.MapSqlParameterSource;
7 import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate;
8 import org.springframework.jdbc.core.namedparam.SqlParameterSource;
9 import org.springframework.stereotype.Component;
10 import org.springframework.transaction.event.TransactionPhase;
11 import org.springframework.transaction.event.TransactionalEventListener;
12
13 import java.util.Map;
14
15 @Component
16 public class UserEventListener
17 {
18     private static final Logger LOG = LoggerFactory.getLogger(UserEventListener.class);
19
20     private final NamedParameterJdbcTemplate jdbcTemplate;
21
22
23     public UserEventListener(NamedParameterJdbcTemplate jdbcTemplate)
24     {
25       this.jdbcTemplate = jdbcTemplate;
26     }
27
28
29     @TransactionalEventListener(phase = TransactionPhase.BEFORE_COMMIT)
30     public void onUserEvent(UserEvent event)
31     {
32       LOG.info("{}: {}", event.type, event.user);
33       SqlParameterSource parameters =
34           new MapSqlParameterSource(Map.of("event", event.type.toInt(), "username", event.user));
35       jdbcTemplate.update("INSERT INTO events(event, username) VALUES(:event, :username)", parameters);
36     }
37 }