Skip to content

Commit c378c68

Browse files
committed
feature: app configuration properties for EnhancedRedisRepository (resolves gh-268)
1 parent dd9fb87 commit c378c68

File tree

9 files changed

+125
-23
lines changed

9 files changed

+125
-23
lines changed

redis-om-spring/src/main/java/com/redis/om/spring/RedisEnhancedKeyValueAdapter.java

Lines changed: 14 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ public class RedisEnhancedKeyValueAdapter extends RedisKeyValueAdapter {
4040
private final RediSearchIndexer indexer;
4141
private final EntityAuditor auditor;
4242
private final FeatureExtractor featureExtractor;
43+
private final RedisOMSpringProperties redisOMSpringProperties;
4344

4445
/**
4546
* Creates new {@link RedisKeyValueAdapter} with default
@@ -53,9 +54,10 @@ public RedisEnhancedKeyValueAdapter( //
5354
RedisOperations<?, ?> redisOps, //
5455
RedisModulesOperations<?> rmo, //
5556
RediSearchIndexer indexer, //
56-
FeatureExtractor featureExtractor
57+
FeatureExtractor featureExtractor, //
58+
RedisOMSpringProperties redisOMSpringProperties
5759
) {
58-
this(redisOps, rmo, new RedisMappingContext(), indexer, featureExtractor);
60+
this(redisOps, rmo, new RedisMappingContext(), indexer, featureExtractor, redisOMSpringProperties);
5961
}
6062

6163
/**
@@ -72,9 +74,10 @@ public RedisEnhancedKeyValueAdapter( //
7274
RedisModulesOperations<?> rmo, //
7375
RedisMappingContext mappingContext, //
7476
RediSearchIndexer indexer, //
75-
FeatureExtractor featureExtractor
77+
FeatureExtractor featureExtractor, //
78+
RedisOMSpringProperties redisOMSpringProperties
7679
) {
77-
this(redisOps, rmo, mappingContext, new RedisOMCustomConversions(), indexer, featureExtractor);
80+
this(redisOps, rmo, mappingContext, new RedisOMCustomConversions(), indexer, featureExtractor, redisOMSpringProperties);
7881
}
7982

8083
/**
@@ -93,7 +96,8 @@ public RedisEnhancedKeyValueAdapter( //
9396
RedisMappingContext mappingContext, //
9497
@Nullable CustomConversions customConversions, //
9598
RediSearchIndexer indexer, //
96-
FeatureExtractor featureExtractor //
99+
FeatureExtractor featureExtractor, //
100+
RedisOMSpringProperties redisOMSpringProperties
97101
) {
98102
super(redisOps, mappingContext, customConversions);
99103

@@ -112,6 +116,7 @@ public RedisEnhancedKeyValueAdapter( //
112116
this.indexer = indexer;
113117
this.auditor = new EntityAuditor(this.redisOperations);
114118
this.featureExtractor = featureExtractor;
119+
this.redisOMSpringProperties = redisOMSpringProperties;
115120
}
116121

117122
/*
@@ -271,9 +276,11 @@ public <T> List<T> getAllOf(String keyspace, Class<T> type, long offset, int row
271276
SearchOperations<String> searchOps = modulesOperations.opsForSearch(maybeSearchIndex.get());
272277
Query query = new Query("*");
273278
offset = Math.max(0, offset);
274-
if (rows > 0) {
275-
query.limit(Math.toIntExact(offset), rows);
279+
int limit = rows;
280+
if (limit <= 0) {
281+
limit = redisOMSpringProperties.getRepository().getQuery().getLimit();
276282
}
283+
query.limit(Math.toIntExact(offset), limit);
277284
SearchResult searchResult = searchOps.search(query);
278285

279286
result = (List<T>) searchResult.getDocuments().stream() //

redis-om-spring/src/main/java/com/redis/om/spring/RedisModulesConfiguration.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -314,10 +314,11 @@ public CustomRedisKeyValueTemplate getKeyValueTemplate( //
314314
RedisModulesOperations<?> redisModulesOperations, //
315315
RedisMappingContext mappingContext, //
316316
RediSearchIndexer indexer, //
317+
RedisOMSpringProperties properties, //
317318
@Nullable @Qualifier("featureExtractor") FeatureExtractor featureExtractor
318319
) {
319320
return new CustomRedisKeyValueTemplate(
320-
new RedisEnhancedKeyValueAdapter(redisOps, redisModulesOperations, mappingContext, indexer, featureExtractor), //
321+
new RedisEnhancedKeyValueAdapter(redisOps, redisModulesOperations, mappingContext, indexer, featureExtractor, properties), //
321322
mappingContext);
322323
}
323324

redis-om-spring/src/main/java/com/redis/om/spring/repository/support/RedisEnhancedRepositoryFactory.java

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package com.redis.om.spring.repository.support;
22

33
import com.redis.om.spring.RediSearchIndexer;
4+
import com.redis.om.spring.RedisOMSpringProperties;
45
import com.redis.om.spring.ops.RedisModulesOperations;
56
import com.redis.om.spring.repository.query.RedisEnhancedQuery;
67
import com.redis.om.spring.vectorize.FeatureExtractor;
@@ -46,6 +47,8 @@ public class RedisEnhancedRepositoryFactory extends RepositoryFactorySupport {
4647
private final Class<? extends RepositoryQuery> repositoryQueryType;
4748
private final FeatureExtractor featureExtractor;
4849

50+
private final RedisOMSpringProperties properties;
51+
4952
/**
5053
* Creates a new {@link KeyValueRepositoryFactory} for the given
5154
* {@link KeyValueOperations}.
@@ -60,9 +63,10 @@ public RedisEnhancedRepositoryFactory( //
6063
RedisOperations<?, ?> redisOperations, //
6164
RedisModulesOperations<?> rmo, //
6265
RediSearchIndexer indexer, //
63-
FeatureExtractor featureExtractor //
66+
FeatureExtractor featureExtractor, //
67+
RedisOMSpringProperties properties
6468
) {
65-
this(keyValueOperations, redisOperations, rmo, indexer, featureExtractor, DEFAULT_QUERY_CREATOR);
69+
this(keyValueOperations, redisOperations, rmo, indexer, featureExtractor, DEFAULT_QUERY_CREATOR, properties);
6670
}
6771

6872
/**
@@ -81,9 +85,10 @@ public RedisEnhancedRepositoryFactory( //
8185
RedisModulesOperations<?> rmo, //
8286
RediSearchIndexer indexer, //
8387
FeatureExtractor featureExtractor, //
84-
Class<? extends AbstractQueryCreator<?, ?>> queryCreator) {
88+
Class<? extends AbstractQueryCreator<?, ?>> queryCreator, //
89+
RedisOMSpringProperties properties ) {
8590

86-
this(keyValueOperations, redisOperations, rmo, indexer, featureExtractor, queryCreator, RedisEnhancedQuery.class);
91+
this(keyValueOperations, redisOperations, rmo, indexer, featureExtractor, queryCreator, RedisEnhancedQuery.class, properties);
8792
}
8893

8994
/**
@@ -104,14 +109,17 @@ public RedisEnhancedRepositoryFactory( //
104109
RediSearchIndexer indexer, //
105110
FeatureExtractor featureExtractor, //
106111
Class<? extends AbstractQueryCreator<?, ?>> queryCreator, //
107-
Class<? extends RepositoryQuery> repositoryQueryType) {
112+
Class<? extends RepositoryQuery> repositoryQueryType, //
113+
RedisOMSpringProperties properties
114+
) {
108115

109116
Assert.notNull(keyValueOperations, "KeyValueOperations must not be null!");
110117
Assert.notNull(redisOperations, "RedisOperations must not be null!");
111118
Assert.notNull(rmo, "RedisModulesOperations must not be null!");
112119
Assert.notNull(queryCreator, "Query creator type must not be null!");
113120
Assert.notNull(repositoryQueryType, "RepositoryQueryType type must not be null!");
114121
Assert.notNull(featureExtractor, "FeatureExtractor type must not be null!");
122+
Assert.notNull(properties, "RedisOMSpringProperties type must not be null!");
115123

116124
this.keyValueOperations = keyValueOperations;
117125
this.redisOperations = redisOperations;
@@ -121,6 +129,7 @@ public RedisEnhancedRepositoryFactory( //
121129
this.queryCreator = queryCreator;
122130
this.repositoryQueryType = repositoryQueryType;
123131
this.featureExtractor = featureExtractor;
132+
this.properties = properties;
124133
}
125134

126135
/* (non-Javadoc)
@@ -146,7 +155,7 @@ public <T, ID> EntityInformation<T, ID> getEntityInformation(Class<T> domainClas
146155
@Override
147156
protected Object getTargetRepository(RepositoryInformation repositoryInformation) {
148157
EntityInformation<?, ?> entityInformation = getEntityInformation(repositoryInformation.getDomainType());
149-
return super.getTargetRepositoryViaReflection(repositoryInformation, entityInformation, keyValueOperations, rmo, indexer, featureExtractor);
158+
return super.getTargetRepositoryViaReflection(repositoryInformation, entityInformation, keyValueOperations, rmo, indexer, featureExtractor, properties);
150159
}
151160

152161
/* (non-Javadoc)

redis-om-spring/src/main/java/com/redis/om/spring/repository/support/RedisEnhancedRepositoryFactoryBean.java

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package com.redis.om.spring.repository.support;
22

33
import com.redis.om.spring.RediSearchIndexer;
4+
import com.redis.om.spring.RedisOMSpringProperties;
45
import com.redis.om.spring.ops.RedisModulesOperations;
56
import com.redis.om.spring.repository.query.RedisEnhancedQuery;
67
import com.redis.om.spring.vectorize.FeatureExtractor;
@@ -28,6 +29,8 @@ public class RedisEnhancedRepositoryFactoryBean<T extends Repository<S, ID>, S,
2829
private @Nullable Class<? extends RepositoryQuery> repositoryQueryType;
2930
private @Nullable FeatureExtractor featureExtractor;
3031

32+
private RedisOMSpringProperties properties;
33+
3134
/**
3235
* Creates a new {@link RedisRepositoryFactoryBean} for the given repository
3336
* interface.
@@ -42,13 +45,15 @@ public RedisEnhancedRepositoryFactoryBean( //
4245
RedisOperations<?, ?> redisOperations, //
4346
RedisModulesOperations<?> rmo, //
4447
RediSearchIndexer indexer, //
45-
FeatureExtractor featureExtractor //
48+
FeatureExtractor featureExtractor, //
49+
RedisOMSpringProperties properties
4650
) {
4751
super(repositoryInterface);
4852
setRedisModulesOperations(rmo);
4953
setRedisOperations(redisOperations);
5054
setKeyspaceToIndexMap(indexer);
5155
setFeatureExtractor(featureExtractor);
56+
setRedisOMSpringProperties(properties);
5257
}
5358

5459
private void setFeatureExtractor(FeatureExtractor featureExtractor) {
@@ -92,6 +97,11 @@ public void setRedisOperations(RedisOperations<?, ?> redisOperations) {
9297
this.redisOperations = redisOperations;
9398
}
9499

100+
public void setRedisOMSpringProperties(RedisOMSpringProperties properties) {
101+
Assert.notNull(redisOperations, "RedisOMSpringProperties must not be null!");
102+
this.properties = properties;
103+
}
104+
95105
/* (non-Javadoc)
96106
*
97107
* @see
@@ -153,7 +163,7 @@ protected RedisEnhancedRepositoryFactory createRepositoryFactory( //
153163
Class<? extends AbstractQueryCreator<?, ?>> queryCreator, //
154164
Class<? extends RepositoryQuery> repositoryQueryType //
155165
) {
156-
return new RedisEnhancedRepositoryFactory(operations, redisOperations, rmo, indexer, featureExtractor, queryCreator, RedisEnhancedQuery.class);
166+
return new RedisEnhancedRepositoryFactory(operations, redisOperations, rmo, indexer, featureExtractor, queryCreator, RedisEnhancedQuery.class, properties);
157167
}
158168

159169
/* (non-Javadoc)

redis-om-spring/src/main/java/com/redis/om/spring/repository/support/SimpleRedisEnhancedRepository.java

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import com.google.common.collect.Lists;
44
import com.redis.om.spring.RediSearchIndexer;
55
import com.redis.om.spring.RedisEnhancedKeyValueAdapter;
6+
import com.redis.om.spring.RedisOMSpringProperties;
67
import com.redis.om.spring.audit.EntityAuditor;
78
import com.redis.om.spring.convert.MappingRedisOMConverter;
89
import com.redis.om.spring.id.ULIDIdentifierGenerator;
@@ -23,6 +24,7 @@
2324
import org.springframework.data.redis.core.RedisTemplate;
2425
import org.springframework.data.redis.core.convert.RedisData;
2526
import org.springframework.data.redis.core.convert.ReferenceResolverImpl;
27+
import org.springframework.data.redis.core.mapping.RedisMappingContext;
2628
import org.springframework.data.repository.core.EntityInformation;
2729
import org.springframework.util.Assert;
2830
import org.springframework.util.ClassUtils;
@@ -56,11 +58,12 @@ public class SimpleRedisEnhancedRepository<T, ID> extends SimpleKeyValueReposito
5658

5759
@SuppressWarnings("unchecked")
5860
public SimpleRedisEnhancedRepository( //
59-
EntityInformation<T, ID> metadata, //
60-
KeyValueOperations operations, //
61-
@Qualifier("redisModulesOperations") RedisModulesOperations<?> rmo, //
62-
RediSearchIndexer indexer, //
63-
FeatureExtractor featureExtractor //
61+
EntityInformation<T, ID> metadata, //
62+
KeyValueOperations operations, //
63+
@Qualifier("redisModulesOperations") RedisModulesOperations<?> rmo, //
64+
RediSearchIndexer indexer, //
65+
FeatureExtractor featureExtractor, //
66+
RedisOMSpringProperties properties //
6467
) {
6568
super(metadata, operations);
6669
this.modulesOperations = (RedisModulesOperations<String>) rmo;
@@ -69,7 +72,7 @@ public SimpleRedisEnhancedRepository( //
6972
this.indexer = indexer;
7073
this.mappingConverter = new MappingRedisOMConverter(null,
7174
new ReferenceResolverImpl(modulesOperations.getTemplate()));
72-
this.enhancedKeyValueAdapter = new RedisEnhancedKeyValueAdapter(rmo.getTemplate(), rmo, indexer, featureExtractor);
75+
this.enhancedKeyValueAdapter = new RedisEnhancedKeyValueAdapter(rmo.getTemplate(), rmo, indexer, featureExtractor, properties);
7376
this.generator = ULIDIdentifierGenerator.INSTANCE;
7477
this.auditor = new EntityAuditor(modulesOperations.getTemplate());
7578
this.featureExtractor = featureExtractor;

redis-om-spring/src/test/java/com/redis/om/spring/AbstractBaseEnhancedRedisTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
public abstract class AbstractBaseEnhancedRedisTest extends AbstractBaseOMTest {
1515
@SpringBootApplication
1616
@Configuration
17-
@EnableRedisEnhancedRepositories(basePackages = { "com.redis.om.spring.annotations.hash.fixtures" })
17+
@EnableRedisEnhancedRepositories(basePackages = { "com.redis.om.spring.annotations.hash.fixtures", "com.redis.om.spring.repository" })
1818
static class Config extends TestConfig {
1919
}
2020
}
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
package com.redis.om.spring.repository;
2+
3+
import org.springframework.data.annotation.Id;
4+
import org.springframework.data.redis.core.RedisHash;
5+
6+
import java.util.UUID;
7+
8+
@RedisHash
9+
public class SimpleHash {
10+
@Id
11+
private String id;
12+
13+
public SimpleHash() {
14+
this.id = UUID.randomUUID().toString();
15+
}
16+
17+
public String getId() {
18+
return id;
19+
}
20+
21+
public void setId(String id) {
22+
this.id = id;
23+
}
24+
}
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
package com.redis.om.spring.repository;
2+
3+
public interface SimpleHashRepository extends RedisEnhancedRepository<SimpleHash, String> {
4+
}
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
package com.redis.om.spring.repository;
2+
3+
import com.redis.om.spring.AbstractBaseEnhancedRedisTest;
4+
import org.junit.jupiter.api.AfterEach;
5+
import org.junit.jupiter.api.BeforeEach;
6+
import org.junit.jupiter.api.Test;
7+
import org.springframework.beans.factory.annotation.Autowired;
8+
9+
import java.util.List;
10+
11+
import static org.assertj.core.api.Assertions.assertThat;
12+
import static org.assertj.core.api.Assumptions.assumeThat;
13+
14+
class SimpleHashTest extends AbstractBaseEnhancedRedisTest {
15+
16+
private static final int SIZE = 20;
17+
18+
private final SimpleHashRepository simpleHashRepository;
19+
20+
@Autowired
21+
SimpleHashTest(SimpleHashRepository simpleHashRepository) {
22+
this.simpleHashRepository = simpleHashRepository;
23+
}
24+
25+
@BeforeEach
26+
void setUp() {
27+
for (int i = 0; i < SIZE; ++i) {
28+
simpleHashRepository.save(new SimpleHash());
29+
}
30+
}
31+
32+
@Test
33+
void testAllSimpleDocumentsReturned() {
34+
assumeThat(simpleHashRepository.count()).isEqualTo(SIZE);
35+
36+
List<SimpleHash> documents = simpleHashRepository.findAll();
37+
assertThat(documents).isNotNull().hasSize(SIZE);
38+
}
39+
40+
@AfterEach
41+
void tearDown() {
42+
simpleHashRepository.deleteAll();
43+
}
44+
}

0 commit comments

Comments
 (0)