Spring Bootテストを備えた組み込みRedisサーバー

1. 概要

Spring Data Redisは、https://redis.io [Redis]インスタンスと統合する簡単な方法を提供します。
ただし、場合によっては、*実サーバーで環境を作成するよりも組み込みサーバーを使用するほうが便利です*。
したがって、組み込みRedisサーバーをセットアップして使用する方法を学習します。

2. 依存関係

必要な依存関係を追加することから始めましょう。
<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>

<dependency>
  <groupId>it.ozimov</groupId>
  <artifactId>embedded-redis</artifactId>
  <version>0.7.2</version>
  <scope>test</scope>
</dependency>

<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-test</artifactId>
  <scope>test</scope>
</dependency>
_https://search.maven.org/search?q = g:org.springframework.boot%20AND%20a:spring-boot-starter-test
さらに、_https://search.maven.org/search?q = g:it.ozimov%20AND%20a:embedded-redis

3. セットアップ

依存関係を追加したら、Redisサーバーとアプリケーション間の接続設定を定義する必要があります。
まず、プロパティを保持するクラスを作成します。
@Configuration
public class RedisProperties {
    private int redisPort;
    private String redisHost;

    public RedisProperties(
      @Value("${spring.redis.port}") int redisPort,
      @Value("${spring.redis.host}") String redisHost) {
        this.redisPort = redisPort;
        this.redisHost = redisHost;
    }

    // getters
}
次に、接続を定義し、プロパティを使用する構成クラスを作成する必要があります。
@Configuration
@EnableRedisRepositories
public class RedisConfiguration {

    @Bean
    public LettuceConnectionFactory redisConnectionFactory(
      RedisProperties redisProperties) {
        return new LettuceConnectionFactory(
          redisProperties.getRedisHost(),
          redisProperties.getRedisPort());
    }

    @Bean
    public RedisTemplate<?, ?> redisTemplate(LettuceConnectionFactory connectionFactory) {
        RedisTemplate<byte[], byte[]> template = new RedisTemplate<>();
        template.setConnectionFactory(connectionFactory);
        return template;
    }
}
構成は非常に簡単です。 さらに、別のポートで組み込みサーバーを実行できます。
Spring Bootを使用したRedisの詳細については、https://www.baeldung.com/spring-data-redis-tutorial [Spring Data Redisの概要]の記事をご覧ください。

4. 組み込みRedisサーバー

次に、組み込みサーバーを構成し、テストの1つで使用します。
まず、テストリソースディレクトリ(_src / test / resources)に_application.properties_ファイルを作成しましょう:_
spring.redis.host=localhost
spring.redis.port=6370
その後、_ @ TestConfiguration_-annotatedクラスを作成します。
@TestConfiguration
public class TestRedisConfiguration {

    private RedisServer redisServer;

    public TestRedisConfiguration(RedisProperties redisProperties) {
        this.redisServer = new RedisServer(redisProperties.getRedisPort());
    }

    @PostConstruct
    public void postConstruct() {
        redisServer.start();
    }

    @PreDestroy
    public void preDestroy() {
        redisServer.stop();
    }
}
*コンテキストが起動すると、サーバーが起動します。 マシンのプロパティで定義したポートから開始します*。 たとえば、実際のRedisサーバーを停止せずにテストを実行できるようになりました。
理想的には、ランダムに利用可能なポートで起動したいのですが、組み込みRedisにはまだこの機能がありません。 今できることは、ServerSocket APIを介してランダムポートを取得することです。
さらに、コンテキストが破棄されるとサーバーは停止します。
サーバーには、独自の実行可能ファイルも提供できます。
this.redisServer = new RedisServer("/path/redis", redisProperties.getRedisPort());
さらに、オペレーティングシステムごとに実行可能ファイルを定義できます。
RedisExecProvider customProvider = RedisExecProvider.defaultProvider()
  .override(OS.UNIX, "/path/unix/redis")
  .override(OS.Windows, Architecture.x86_64, "/path/windows/redis")
  .override(OS.MAC_OS_X, Architecture.x86_64, "/path/macosx/redis")

this.redisServer = new RedisServer(customProvider, redisProperties.getRedisPort());
最後に、_TestRedisConfiguration_クラスを使用するテストを作成しましょう。
@RunWith(SpringRunner.class)
@SpringBootTest(classes = TestRedisConfiguration.class)
public class UserRepositoryIntegrationTest {

    @Autowired
    private UserRepository userRepository;

    @Test
    public void shouldSaveUser_toRedis() {
        UUID id = UUID.randomUUID();
        User user = new User(id, "name");

        User saved = userRepository.save(user);

        assertNotNull(saved);
    }
}
ユーザーは埋め込みRedisサーバーに保存されました。
さらに、__TestRedisConfiguration __to __SpringBootTestを手動で追加する必要がありました。 __前に言ったように、サーバーはテスト前に起動し、テスト後に停止しました。

5. 結論

Embedded Redis Serverは、テスト環境の実際のサーバーを置き換えるのに最適なツールです。 テストでの構成方法と使用方法を見てきました。
いつものように、例のコードはhttps://github.com/eugenp/tutorials/tree/master/spring-boot-testing[GitHubで]から入手できます。