df730aafcb8d7899f377181e61f75906f9c6399e
[demos/kafka/chat] / src / main / java / de / juplo / kafka / chat / backend / persistence / storage / files / FilesStorageConfiguration.java
1 package de.juplo.kafka.chat.backend.persistence.storage.files;
2
3 import com.fasterxml.jackson.databind.ObjectMapper;
4 import de.juplo.kafka.chat.backend.ChatBackendProperties;
5 import de.juplo.kafka.chat.backend.domain.ShardingStrategy;
6 import de.juplo.kafka.chat.backend.persistence.StorageStrategy;
7 import de.juplo.kafka.chat.backend.persistence.inmemory.InMemoryChatRoomService;
8 import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
9 import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
10 import org.springframework.boot.autoconfigure.data.mongo.MongoRepositoriesAutoConfiguration;
11 import org.springframework.boot.autoconfigure.mongo.MongoAutoConfiguration;
12 import org.springframework.context.annotation.Bean;
13 import org.springframework.context.annotation.Configuration;
14
15 import java.nio.file.Paths;
16 import java.time.Clock;
17
18
19 @ConditionalOnProperty(
20     prefix = "chat.backend.inmemory",
21     name = "storage-strategy",
22     havingValue = "files",
23     matchIfMissing = true)
24 @Configuration
25 @EnableAutoConfiguration(
26     exclude = {
27         MongoRepositoriesAutoConfiguration.class,
28         MongoAutoConfiguration.class })
29 public class FilesStorageConfiguration
30 {
31   @Bean
32   public StorageStrategy storageStrategy(
33       ChatBackendProperties properties,
34       Clock clock,
35       ShardingStrategy shardingStrategy,
36       ObjectMapper mapper)
37   {
38     return new FilesStorageStrategy(
39         Paths.get(properties.getInmemory().getStorageDirectory()),
40         clock,
41         properties.getChatroomBufferSize(),
42         shardingStrategy,
43         messageFlux -> new InMemoryChatRoomService(messageFlux),
44         mapper);
45   }
46 }