CDI 統合
リポジトリインターフェースのインスタンスは通常、コンテナーによって作成されます。Spring Data を使用する場合は、Spring が最も自然な選択です。Spring は、Bean インスタンスを作成するための高度な機能を提供します。Spring Data Redis には、CDI 環境でリポジトリの抽象化を使用できるカスタム CDI 拡張機能が付属しています。拡張機能は JAR の一部であるため、拡張機能をアクティブにするには、Spring Data Redis JAR をクラスパスにドロップします。
次に、次の例に示すように、RedisConnectionFactory
(Javadoc) および RedisOperations
(Javadoc) の CDI プロデューサーを実装してインフラストラクチャを設定できます。
class RedisOperationsProducer {
@Produces
RedisConnectionFactory redisConnectionFactory() {
LettuceConnectionFactory connectionFactory = new LettuceConnectionFactory(new RedisStandaloneConfiguration());
connectionFactory.afterPropertiesSet();
connectionFactory.start();
return connectionFactory;
}
void disposeRedisConnectionFactory(@Disposes RedisConnectionFactory redisConnectionFactory) throws Exception {
if (redisConnectionFactory instanceof DisposableBean) {
((DisposableBean) redisConnectionFactory).destroy();
}
}
@Produces
@ApplicationScoped
RedisOperations<byte[], byte[]> redisOperationsProducer(RedisConnectionFactory redisConnectionFactory) {
RedisTemplate<byte[], byte[]> template = new RedisTemplate<byte[], byte[]>();
template.setConnectionFactory(redisConnectionFactory);
template.afterPropertiesSet();
return template;
}
}
必要な設定は、JavaEE 環境によって異なります。
Spring Data Redis CDI 拡張機能は、使用可能なすべてのリポジトリを CDI Bean として取得し、リポジトリ・型の Bean がコンテナーによってリクエストされるたびに、Spring Data リポジトリのプロキシを作成します。次の例に示すように、Spring Data リポジトリのインスタンスを取得するには、@Injected
プロパティを宣言する必要があります。
class RepositoryClient {
@Inject
PersonRepository repository;
public void businessMethod() {
List<Person> people = repository.findAll();
}
}
Redis リポジトリには、RedisKeyValueAdapter
(Javadoc) および RedisKeyValueTemplate
(Javadoc) インスタンスが必要です。提供された Bean が見つからない場合、これらの Bean は Spring Data CDI 拡張機能によって作成および管理されます。ただし、独自の Bean を指定して、RedisKeyValueAdapter
(Javadoc) および RedisKeyValueTemplate
(Javadoc) の特定のプロパティを構成することもできます。