Skip to content

[AOT] Generated repositoryFragmentsFunction ignores named MongoTemplate bean #5107

@waileong

Description

@waileong

spring-data-mongodb-aot-multiple-mongo-operations.zip

Description: I am using Spring Boot 4 and Spring Data MongoDB 5 with multiple MongoTemplate beans defined (one marked @primary, another named mongoTemplateDB2).

When running AOT processing, the generated code for repository fragments incorrectly fetches the MongoOperations bean by type. This causes it to always inject the @primary bean, even for repositories configured to use the secondary database.

In the generated __BeanDefinitions.java file:

    beanDefinition.getPropertyValues().addPropertyValue("repositoryFragmentsFunction", new RepositoryFactoryBeanSupport.RepositoryFragmentsFunction() {
      public RepositoryComposition.RepositoryFragments getRepositoryFragments(
          BeanFactory beanFactory, RepositoryFactoryBeanSupport.FragmentCreationContext context) {
        MongoOperations operations = beanFactory.getBean(MongoOperations.class);
        return RepositoryComposition.RepositoryFragments.just(new org.example.springdatamongodbfieldaot.repository.ClassAtDB2RepositoryImpl__AotRepository(operations, context));
      }
    });

The generated code should use the bean name associated with the repository:

MongoOperations operations = beanFactory.getBean("mongoTemplateDB2", MongoOperations.class);

Step to reproduces:

  1. ./gradlew clean build nativeTest -i

@christophstrobl

Metadata

Metadata

Labels

theme: aotAn issue related to Ahead-Of-Time processingtype: bugA general bug

Type

No type

Projects

No projects

Relationships

None yet

Development

No branches or pull requests

Issue actions