Estoy trabajando en un proyecto que quiere usar spring-boot-datos-jpa. El local (IDE) de la base de datos puede ser de H2. Sin embargo, para todos los servidores (dev/prueba/prod), nos vemos obligados a utilizar DB/2 (por desgracia!).

Nos parece que no puede conseguir que las cosas funcionen con DB/2. Obtenemos un error como este:

java.lang.IllegalStateException: Failed to load ApplicationContext....
Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No   
qualifying bean of type [...Repository] found for
dependency: expected at least 1 bean which qualifies as autowire candidate for this 
dependency. Dependency annotations: {}

al ejecutar las pruebas unitarias (JUnit). Nota, el vacío {} anotación. Que en la cara de lo que parece una «evidente» el problema. El repositorio de frijol no se puede cargar o que se encuentran en la ruta de clases. Sin embargo, cuando se ejecuta este con H2 configuración, funciona muy bien.

Así, la siguiente conclusión lógica parece ser la configuración de los repositorios (origen de datos, etc.) no está configurado correctamente. Sin embargo, podemos usar la misma configuración de los valores de un no resorte de arranque de la aplicación y funciona bien!

Así que yo estaba pensando que podría ser algo con la que la diferencia de los cargadores de clases o cglib proxies no usar el «real» de la clase de implementación. ASÍ, preguntas como estas:

Sin embargo, las respuestas correctas para esas preguntas no resuelven el problema. Así que aquí está mi post en cuestión.

¿Cómo averiguar la causa raíz de este problema? He tratado de caminar a través de el código (primavera y nuestro código en el depurador, pero no se puede reducir a una causa.

Así que traté de esto, me tomó la muestra de primavera de arranque jpa y modificado para el uso de las propiedades específicas de DB/2 y me puede conseguir el mismo error. Así que parece que mi configuración debe estar mal o hay un error en la primavera de código. He mirado en la configuración con alguien más y no vemos el problema. Hemos probado esta configuración en otro (no-primavera de inicio de la aplicación) y funciona.

Aquí es un archivo de parche que muestra las diferencias entre el original de la app de la muestra y la modificada con los cambios de configuración. Nota, hemos eliminado el servidor DB2 detalles. Con suerte, esto hace que reproducir el problema para cualquier persona y, a continuación, puede ayudar en averiguar la causa.

TIA,

Scott

edición 1 — agregar los detalles de configuración de aquí directamente en lugar de un archivo de parche —

Configuración De Java

@Configuration
@ComponentScan
@EnableAutoConfiguration
@PropertySource("classpath:application.properties")
public class SampleDataJpaApplication {

     public static void main(String[] args) throws Exception {
     SpringApplication.run(SampleDataJpaApplication.class, args);
     }
 }

Archivo De Propiedades

spring.jpa.hibernate.naming_strategy: org.hibernate.cfg.ImprovedNamingStrategy
spring.jpa.hibernate.dialect: org.hibernate.dialect.DB2Dialect
#spring.jpa.database-platform: DB2Platform
spring.jpa.show-sql: true
spring.jpa.generate-ddl: true

spring.datasource.driverClassName: om.ibm.db2.jcc.DB2Driver
spring.datasource.url: jdbc:db2:someDB2-db:5000
spring.datasource.username: fakeuser
spring.datasource.password: fakepassword
spring.datasource.schema:schema-name

Unidad De Prueba De Configuración

@RunWith(SpringJUnit4ClassRunner.class)
@PropertySource("classpath:application.properties")
@ContextConfiguration(classes = SampleDataJpaApplication.class, loader =       AnnotationConfigContextLoader.class)
public class CityRepositoryIntegrationTests {
 //....
}     

Este debe ser casi idéntica a la del archivo de parche con cambiar de usuario/contraseña/URL jdbc para ocultar los detalles del entorno.

  • Compartir su configuración sería de gran ayuda.
  • Gracias por la rápida respuesta. Me han proporcionado un archivo de parche que debería alterar la primavera-datos de la aplicación de ejemplo con todos los cambios, incluyendo la configuración. Hace que el trabajo para usted? Sería mejor justo después de la configuración de Java directamente aquí?
  • Publique lo que tenemos aquí, por favor.
  • actualizado el post para poner en línea los cambios de configuración realizados a la muestra de JPA aplicación. Estos deben ser idénticos a los del parche. Déjame saber qué otra cosa puedo dar para obtener más cerca de averiguar la causa de raíz. — Scott
InformationsquelleAutor Scott C. | 2013-12-23

4 Comentarios

  1. 0

    Oliver,

    Me parece que no puede encontrar la anotación @SpringApplicationConfiguration usar la primavera-arranque-motor de arranque-prueba de FRASCO como se define en el cómo. Estoy usando la primavera de arranque 0.5.0.M6. A continuación están las dependencias en mi Maven POM. Nada de lo que me estoy perdiendo aquí?

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-jpa</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-test</artifactId>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-validator</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-aspects</artifactId>
        <version>4.0.0.RELEASE</version>
    </dependency>

    EDITAR: Después de mirar a través de la Primavera de Arranque de proyectos de ejemplo que he encontrado un enfoque diferente para llegar Junit y la Primavera de prueba a jugar muy bien el uno con el otro. Si usted puede definir la clase como la siguiente situación idéntica a lo que Oliver ha mencionado en su respuesta para la opción 1. Aviso el «cargador» argumento debe estar presente para configurar correctamente los oyentes y el respaldo de frijoles correctamente.

    @RunWith(SpringJUnit4ClassRunner.class)
    @ContextConfiguration(classes = MyDataApplication.class, loader = SpringApplicationContextLoader.class)
    public class MyServiceTest {
  2. 3

    Por lo que puedo ver, la JUnit el programa de instalación no es correcta. Para dejar de Arranque funciona correctamente, tiene dos opciones:

    1. Uso @SpringApplicationConfiguration en lugar de @ContextConfiguration

      De arranque configura el ApplicationContext proceso de arranque de un poco, por ejemplo, para habilitar la configuración predeterminada de los archivos de ser recogido. El uso de la costumbre de anotación se activará de forma automática que las cosas para la JUnit las ejecuciones.

    2. Configurar @ContextConfiguration con los detectores apropiados a ti mismo

      En su caso necesita por lo menos el ConfigFileApplicationContextInitializer además de todos los predeterminados registrado.

    Como la segunda opción es bastante engorroso, yo la recomiendo para ir con la opción uno y ver a dónde los lleva.

    • ¿Qué es @SpringApplicationConfiguration ?
    • Consulte el código fuente. Es un reemplazo para @ContextConfiguration en las pruebas de integración para el Arranque de las aplicaciones basadas en. Usted tire en el FRASCO, incluyendo spring-boot-starter-test o la spring-boot FRASCO con el clasificador tests.
    • Gracias! 🙂 Después de tu post me parece a esto: presos.dsyer.com/decks/spring-boot-intro.html#slide50
    • Bueno, aunque en realidad pre-fechas (y de hecho vamos a la creación de) @SpringApplicationConfiguration.
    • Puedes publicar ejemplo con @SpringApplicationConfiguration? Esto no funciona para mí.
  3. 0

    Tengo un problema similar con las pruebas de integración en la Primavera de Arranque y puedo confirmar que @user3166395 solución.

    Esta configuración funciona para mí:

    import org.springframework.boot.test.SpringApplicationContextLoader;
    import org.springframework.test.context.ContextConfiguration;
    ...
    
    @RunWith(SpringJUnit4ClassRunner.class)
    @ContextConfiguration(classes = MyDataApplication.class, loader = SpringApplicationContextLoader.class)
    public class MyServiceTest {
    
       @Autowired
       CityRepository cityRepository;
    
    }

    Esto requiere la prueba de la dependencia a:

    org.springframework.boot:spring-boot-starter-test:0.5.0.M7

    De los que no puedo conseguir trabajo de prueba con SpringApplicationConfiguration

  4. 0

    Hola chicos un poco tarde a la fiesta, pero para ser claros acerca de su error (ya me he copiado, yo tenía el mismo):

    spring.datasource.driverClassName: **om**.ibm.db2.jcc.DB2Driver

    debe ser

    spring.datasource.driverClassName: **com**.ibm.db2.jcc.DB2Driver

    Esto funcionó para mí hasta ahora.

Dejar respuesta

Please enter your comment!
Please enter your name here