Saltar al contenido

¿Cómo se utilizan los repositorios Spring Data JPA y Spring Data Elasticsearch en la misma clase de dominio en una aplicación Spring Boot?

Te recomendamos que revises esta solución en un ambiente controlado antes de pasarlo a producción, saludos.

Solución:

Los repositorios en Spring Data son independientes de la fuente de datos, lo que significa que JpaRepository y ElasticsearchRepository ambos se enrollan en Repository interfaz. Cuando este sea el caso, la configuración automática de Spring Boot hará que Spring Data JPA intente configurar un bean para cada repositorio en el proyecto que herede cualquier repositorio base de Spring Data Commons.

Para solucionar este problema, debe mover su repositorio JPA y el repositorio de Elasticsearch a paquetes separados y asegurarse de anotar su @SpringBootApplication clase de aplicación con:

  • @EnableJpaRepositories
  • @EnableElasticsearchRepositories

Luego, debe especificar dónde están los repositorios para cada anotación habilitada. Esto termina pareciéndose a:

@SpringBootApplication
@EnableJpaRepositories("com.izeye.throwaway.data")
@EnableElasticsearchRepositories("com.izeye.throwaway.indexing")
public class Application 

    public static void main(String[] args) 
        SpringApplication.run(Application.class, args);
    


Luego, su aplicación podrá desambiguar qué repositorios están destinados a qué proyecto Spring Data.

Puedes usar así:

@Configuration
@EnableTransactionManagement
@EnableJpaRepositories(excludeFilters = @ComponentScan.Filter(type = FilterType.ASSIGNABLE_TYPE, value = ElasticsearchCrudRepository.class))
@EnableElasticsearchRepositories(includeFilters = @ComponentScan.Filter(type = FilterType.ASSIGNABLE_TYPE, value = ElasticsearchCrudRepository.class))
public class DataConfiguration 
    ...

O en SpringBoot:

@SpringBootApplication
@EnableJpaRepositories(excludeFilters = @ComponentScan.Filter(type = FilterType.ASSIGNABLE_TYPE, value = ElasticsearchCrudRepository.class))
@EnableElasticsearchRepositories(includeFilters = @ComponentScan.Filter(type = FilterType.ASSIGNABLE_TYPE, value = ElasticsearchCrudRepository.class))
public class MyApplication 
    ...

Calificaciones y comentarios

Si guardas algún recelo y disposición de progresar nuestro sección eres capaz de escribir una crónica y con gusto lo interpretaremos.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *