Skip to content
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.

Commit 7aae48a

Browse files
committedDec 28, 2023
Support redis specific repository.
1 parent 2e29a99 commit 7aae48a

File tree

5 files changed

+60
-2
lines changed

5 files changed

+60
-2
lines changed
 
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
package org.springframework.data.redis.repository;
2+
3+
import org.springframework.data.keyvalue.repository.KeyValueRepository;
4+
5+
/**
6+
* Redis specific {@link org.springframework.data.repository.Repository} interface.
7+
*
8+
* @author Junghoon Ban
9+
* @param <T>
10+
* @param <ID>
11+
*/
12+
public interface RedisRepository<T, ID> extends KeyValueRepository<T, ID> {}

‎src/main/java/org/springframework/data/redis/repository/configuration/RedisRepositoryConfigurationExtension.java

+9
Original file line numberDiff line numberDiff line change
@@ -19,12 +19,14 @@
1919
import java.util.Collection;
2020
import java.util.Collections;
2121

22+
import java.util.List;
2223
import org.springframework.beans.factory.config.BeanDefinition;
2324
import org.springframework.beans.factory.support.AbstractBeanDefinition;
2425
import org.springframework.beans.factory.support.BeanDefinitionBuilder;
2526
import org.springframework.beans.factory.support.BeanDefinitionReaderUtils;
2627
import org.springframework.beans.factory.support.BeanDefinitionRegistry;
2728
import org.springframework.beans.factory.support.RootBeanDefinition;
29+
import org.springframework.data.keyvalue.repository.KeyValueRepository;
2830
import org.springframework.data.keyvalue.repository.config.KeyValueRepositoryConfigurationExtension;
2931
import org.springframework.data.redis.core.RedisHash;
3032
import org.springframework.data.redis.core.RedisKeyValueAdapter;
@@ -35,6 +37,7 @@
3537
import org.springframework.data.redis.core.convert.MappingRedisConverter;
3638
import org.springframework.data.redis.core.convert.RedisCustomConversions;
3739
import org.springframework.data.redis.core.mapping.RedisMappingContext;
40+
import org.springframework.data.redis.repository.RedisRepository;
3841
import org.springframework.data.repository.config.RepositoryConfigurationExtension;
3942
import org.springframework.data.repository.config.RepositoryConfigurationSource;
4043
import org.springframework.util.StringUtils;
@@ -44,6 +47,7 @@
4447
*
4548
* @author Christoph Strobl
4649
* @author Mark Paluch
50+
* @author Junghoon Ban
4751
* @since 1.7
4852
*/
4953
public class RedisRepositoryConfigurationExtension extends KeyValueRepositoryConfigurationExtension {
@@ -69,6 +73,11 @@ protected String getDefaultKeyValueTemplateRef() {
6973
return "redisKeyValueTemplate";
7074
}
7175

76+
@Override
77+
protected Collection<Class<?>> getIdentifyingTypes() {
78+
return List.of(RedisRepository.class, KeyValueRepository.class);
79+
}
80+
7281
@Override
7382
public void registerBeansForRoot(BeanDefinitionRegistry registry, RepositoryConfigurationSource configuration) {
7483

‎src/main/java/org/springframework/data/redis/repository/support/RedisRepositoryFactory.java

+6
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@
3838
* @author Christoph Strobl
3939
* @author Oliver Gierke
4040
* @author Mark Paluch
41+
* @author Junghoon Ban
4142
* @since 1.7
4243
*/
4344
public class RedisRepositoryFactory extends KeyValueRepositoryFactory {
@@ -75,6 +76,11 @@ public RedisRepositoryFactory(KeyValueOperations keyValueOperations,
7576
this.operations = keyValueOperations;
7677
}
7778

79+
@Override
80+
protected Class<?> getRepositoryBaseClass(RepositoryMetadata metadata) {
81+
return SimpleRedisRepository.class;
82+
}
83+
7884
@Override
7985
protected RepositoryFragments getRepositoryFragments(RepositoryMetadata metadata) {
8086

Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
package org.springframework.data.redis.repository.support;
2+
3+
import org.springframework.data.keyvalue.core.KeyValueOperations;
4+
import org.springframework.data.keyvalue.repository.support.SimpleKeyValueRepository;
5+
import org.springframework.data.redis.repository.RedisRepository;
6+
import org.springframework.data.repository.NoRepositoryBean;
7+
import org.springframework.data.repository.core.EntityInformation;
8+
9+
/**
10+
* Redis specific repository implementation.
11+
*
12+
* @author Junghoon Ban
13+
* @param <T>
14+
* @param <ID>
15+
*/
16+
@NoRepositoryBean
17+
public class SimpleRedisRepository<T, ID> extends SimpleKeyValueRepository<T, ID> implements RedisRepository<T, ID> {
18+
19+
public SimpleRedisRepository(EntityInformation<T, ID> metadata, KeyValueOperations operations) {
20+
super(metadata, operations);
21+
}
22+
}

‎src/test/java/org/springframework/data/redis/repository/configuration/RedisRepositoryConfigurationExtensionUnitTests.java

+11-2
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@
2020
import java.util.Collection;
2121

2222
import org.junit.jupiter.api.Test;
23-
2423
import org.springframework.beans.factory.support.BeanDefinitionRegistry;
2524
import org.springframework.beans.factory.support.DefaultListableBeanFactory;
2625
import org.springframework.beans.factory.support.SimpleBeanDefinitionRegistry;
@@ -33,6 +32,7 @@
3332
import org.springframework.data.keyvalue.repository.KeyValueRepository;
3433
import org.springframework.data.redis.core.RedisHash;
3534
import org.springframework.data.redis.core.RedisKeyValueAdapter.EnableKeyspaceEvents;
35+
import org.springframework.data.redis.repository.RedisRepository;
3636
import org.springframework.data.repository.Repository;
3737
import org.springframework.data.repository.config.AnnotationRepositoryConfigurationSource;
3838
import org.springframework.data.repository.config.RepositoryConfiguration;
@@ -65,6 +65,12 @@ void isStrictMatchIfRepositoryExtendsStoreSpecificBase() {
6565
assertHasRepo(StoreRepository.class, extension.getRepositoryConfigurations(configurationSource, loader, true));
6666
}
6767

68+
@Test // GH-2816
69+
void isStrictMatchIfRepositoryExtendsKeyValueSpecificBase() {
70+
assertHasRepo(KeyValueSpecificRepository.class,
71+
extension.getRepositoryConfigurations(configurationSource, loader, true));
72+
}
73+
6874
@Test // DATAREDIS-425
6975
void isNotStrictMatchIfDomainTypeIsNotAnnotatedWithDocument() {
7076

@@ -197,5 +203,8 @@ interface SampleRepository extends Repository<Sample, Long> {}
197203

198204
interface UnannotatedRepository extends Repository<Object, Long> {}
199205

200-
interface StoreRepository extends KeyValueRepository<Object, Long> {}
206+
interface StoreRepository extends RedisRepository<Object, Long> {}
207+
208+
interface KeyValueSpecificRepository extends KeyValueRepository<Object, Long> {}
209+
201210
}

0 commit comments

Comments
 (0)
Please sign in to comment.