Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit f604f99

Browse files
Prevent AOT code generation for Reactive repositories.
Closes: #5068
1 parent f9a1a62 commit f604f99

File tree

3 files changed

+42
-8
lines changed

3 files changed

+42
-8
lines changed

‎spring-data-mongodb/src/main/java/org/springframework/data/mongodb/repository/aot/AotMongoRepositoryPostProcessor.java‎

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,10 @@ protected void configureTypeContributions(AotRepositoryContext repositoryContext
5555
return null;
5656
}
5757

58+
if(repositoryContext.getRepositoryInformation().isReactiveRepository()) {
59+
return null;
60+
}
61+
5862
return new MongoRepositoryContributor(repositoryContext);
5963
}
6064

‎spring-data-mongodb/src/test/java/org/springframework/data/mongodb/repository/aot/AotMongoRepositoryPostProcessorUnitTests.java‎

Lines changed: 30 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,9 @@
3838
import org.springframework.core.annotation.MergedAnnotation;
3939
import org.springframework.data.annotation.Id;
4040
import org.springframework.data.aot.AotContext;
41+
import org.springframework.data.mongodb.repository.ReactivePersonRepository;
4142
import org.springframework.data.mongodb.repository.support.SimpleMongoRepository;
43+
import org.springframework.data.mongodb.repository.support.SimpleReactiveMongoRepository;
4244
import org.springframework.data.repository.Repository;
4345
import org.springframework.data.repository.config.AotRepositoryContextSupport;
4446
import org.springframework.data.repository.config.AotRepositoryInformation;
@@ -102,13 +104,32 @@ void shouldDisableAotRepositoriesWhenJpaGeneratedRepositoriesIsFalse() {
102104
assertThat(contributor).isNull();
103105
}
104106

107+
@Test // GH-5068
108+
void shouldNotAttemptToContributeCodeForReactiveRepository(){
109+
110+
GenericApplicationContext context = new GenericApplicationContext();
111+
context.refresh();
112+
113+
MongoRepositoryContributor contributor = createContributorForReactiveRepo(context);
114+
115+
assertThat(contributor).isNull();
116+
}
117+
105118
private GenerationContext createGenerationContext() {
106119
return new DefaultGenerationContext(new ClassNameGenerator(ClassName.OBJECT), new InMemoryGeneratedFiles());
107120
}
108121

122+
private MongoRepositoryContributor createContributorForReactiveRepo(GenericApplicationContext context) {
123+
return createContributorWithPersonTypes(context, true);
124+
}
125+
109126
private MongoRepositoryContributor createContributorWithPersonTypes(GenericApplicationContext context) {
127+
return createContributorWithPersonTypes(context, false);
128+
}
110129

111-
return new AotMongoRepositoryPostProcessor().contributeAotRepository(new DummyAotRepositoryContext(context) {
130+
private MongoRepositoryContributor createContributorWithPersonTypes(GenericApplicationContext context, boolean reactive) {
131+
132+
return new AotMongoRepositoryPostProcessor().contributeAotRepository(new DummyAotRepositoryContext(context, reactive) {
112133
@Override
113134
public Set<Class<?>> getResolvedTypes() {
114135
return Collections.singleton(Person.class);
@@ -125,8 +146,11 @@ interface PersonRepository extends Repository<Person, Long> {}
125146

126147
static class DummyAotRepositoryContext extends AotRepositoryContextSupport {
127148

128-
DummyAotRepositoryContext(AbstractApplicationContext applicationContext) {
149+
boolean reactive;
150+
151+
DummyAotRepositoryContext(AbstractApplicationContext applicationContext, boolean reactive) {
129152
super(AotContext.from(applicationContext, applicationContext.getEnvironment()));
153+
this.reactive = reactive;
130154
}
131155

132156
@Override
@@ -151,6 +175,10 @@ public Set<Class<? extends Annotation>> getIdentifyingAnnotations() {
151175

152176
@Override
153177
public RepositoryInformation getRepositoryInformation() {
178+
if(reactive) {
179+
return new AotRepositoryInformation(AbstractRepositoryMetadata.getMetadata(ReactivePersonRepository.class),
180+
SimpleReactiveMongoRepository.class, List.of());
181+
}
154182
return new AotRepositoryInformation(AbstractRepositoryMetadata.getMetadata(PersonRepository.class),
155183
SimpleMongoRepository.class, List.of());
156184
}

‎spring-data-mongodb/src/test/java/org/springframework/data/mongodb/repository/aot/ReactiveAotContributionIntegrationTests.java‎

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,11 @@
1818
import static net.javacrumbs.jsonunit.assertj.JsonAssertions.assertThatJson;
1919
import static org.mockito.Mockito.mock;
2020

21+
import com.mongodb.reactivestreams.client.MongoClient;
2122
import example.aot.User;
23+
import org.junit.jupiter.api.Disabled;
24+
import org.springframework.data.mongodb.config.AbstractReactiveMongoConfiguration;
25+
import org.springframework.data.repository.reactive.ReactiveCrudRepository;
2226
import reactor.core.publisher.Flux;
2327
import reactor.core.publisher.Mono;
2428

@@ -35,13 +39,10 @@
3539
import org.springframework.core.io.InputStreamResource;
3640
import org.springframework.core.io.InputStreamSource;
3741
import org.springframework.data.aot.AotContext;
38-
import org.springframework.data.mongodb.config.AbstractMongoClientConfiguration;
3942
import org.springframework.data.mongodb.repository.config.EnableReactiveMongoRepositories;
4043
import org.springframework.data.querydsl.ReactiveQuerydslPredicateExecutor;
41-
import org.springframework.data.repository.CrudRepository;
4244
import org.springframework.mock.env.MockPropertySource;
4345

44-
import com.mongodb.client.MongoClient;
4546

4647
/**
4748
* Integration tests for AOT processing of reactive repositories.
@@ -52,10 +53,10 @@ class ReactiveAotContributionIntegrationTests {
5253

5354
@EnableReactiveMongoRepositories(considerNestedRepositories = true, includeFilters = {
5455
@ComponentScan.Filter(type = FilterType.ASSIGNABLE_TYPE, value = ReactiveQuerydslUserRepository.class) })
55-
static class AotConfiguration extends AbstractMongoClientConfiguration {
56+
static class AotConfiguration extends AbstractReactiveMongoConfiguration {
5657

5758
@Override
58-
public MongoClient mongoClient() {
59+
public MongoClient reactiveMongoClient() {
5960
return mock(MongoClient.class);
6061
}
6162

@@ -66,7 +67,7 @@ protected String getDatabaseName() {
6667
}
6768

6869
interface ReactiveQuerydslUserRepository
69-
extends CrudRepository<User, String>, ReactiveQuerydslPredicateExecutor<User> {
70+
extends ReactiveCrudRepository<User, String>, ReactiveQuerydslPredicateExecutor<User> {
7071

7172
Flux<User> findUserNoArgumentsBy();
7273

@@ -75,6 +76,7 @@ interface ReactiveQuerydslUserRepository
7576
}
7677

7778
@Test // GH-4964
79+
@Disabled("GH-5068: creates a ReactiveQuerydslUserRepositoryImpl__AotRepository referencing imperative template etc.")
7880
void shouldGenerateMetadataForBaseRepositoryAndQuerydslFragment() throws IOException {
7981

8082
TestGenerationContext generationContext = generate(AotConfiguration.class);

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /