设置:
ReviewRepository
延长CrudRepository<TEntity, TId>
@DataJpaTest
@Autowired ReviewRepository repo
问题:
@Autowired
失败并提出 NoSuchBeanDefinitionException
,表示没有Bean有资格注入我的ReviewRepository repo
字段。我尝试过的事情:
@ContextConfiguration(classes = AppEntry.class)
@EnableJpaRepositories
错误:
Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'boxfish.apis.youtube.channelDiscovery.reviews.domain.reviews.ReviewRepository' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}
at org.springframework.beans.factory.support.DefaultListableBeanFactory.raiseNoMatchingBeanFound(DefaultListableBeanFactory.java:1486)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1104)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1066)
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:585)
ReviewRepositoryTest.java
的代码
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = AppEntry.class)
@ActiveProfiles(INTEGRATION)
@DataJpaTest
@AutoConfigureTestDatabase(replace = NONE)
@Transactional
public class ReviewRepositoryTest {
@Autowired
private ReviewRepository repo;
@Test
public void findOneByExpansionIdAndPartIdInAndType() {
assertTrue(true);
}
}
ReviewRepository.java
的代码
public interface ReviewRepository extends CrudRepository<ReviewEntity, ReviewEntityId> {
}
AppEntry.java
的代码
@SpringBootApplication
@EnableJpaRepositories
public class AppEntry {
public static void main(final String[] args) {
SpringApplication.run(AppEntry.class, args);
}
}
Spring Boot自动配置报告
=========================
AUTO-CONFIGURATION REPORT
=========================
Positive matches:
-----------------
DataSourceAutoConfiguration matched:
- @ConditionalOnClass found required classes 'javax.sql.DataSource', 'org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseType'; @ConditionalOnMissingClass did not find unwanted class (OnClassCondition)
DataSourceAutoConfiguration#dataSourceInitializer matched:
- @ConditionalOnMissingBean (types: org.springframework.boot.autoconfigure.jdbc.DataSourceInitializer; SearchStrategy: all) did not find any beans (OnBeanCondition)
DataSourceAutoConfiguration.PooledDataSourceConfiguration matched:
- AnyNestedCondition 1 matched 1 did not; NestedCondition on DataSourceAutoConfiguration.PooledDataSourceCondition.PooledDataSourceAvailable PooledDataSource found supported DataSource; NestedCondition on DataSourceAutoConfiguration.PooledDataSourceCondition.ExplicitType @ConditionalOnProperty (spring.datasource.type) did not find property 'type' (DataSourceAutoConfiguration.PooledDataSourceCondition)
- @ConditionalOnMissingBean (types: javax.sql.DataSource,javax.sql.XADataSource; SearchStrategy: all) did not find any beans (OnBeanCondition)
DataSourceConfiguration.Tomcat matched:
- @ConditionalOnClass found required class 'org.apache.tomcat.jdbc.pool.DataSource'; @ConditionalOnMissingClass did not find unwanted class (OnClassCondition)
- @ConditionalOnProperty (spring.datasource.type=org.apache.tomcat.jdbc.pool.DataSource) matched (OnPropertyCondition)
DataSourcePoolMetadataProvidersConfiguration.TomcatDataSourcePoolMetadataProviderConfiguration matched:
- @ConditionalOnClass found required class 'org.apache.tomcat.jdbc.pool.DataSource'; @ConditionalOnMissingClass did not find unwanted class (OnClassCondition)
DataSourceTransactionManagerAutoConfiguration matched:
- @ConditionalOnClass found required classes 'org.springframework.jdbc.core.JdbcTemplate', 'org.springframework.transaction.PlatformTransactionManager'; @ConditionalOnMissingClass did not find unwanted class (OnClassCondition)
DataSourceTransactionManagerAutoConfiguration.DataSourceTransactionManagerConfiguration matched:
- @ConditionalOnSingleCandidate (types: javax.sql.DataSource; SearchStrategy: all) found a primary bean from beans 'dataSource' (OnBeanCondition)
DataSourceTransactionManagerAutoConfiguration.TransactionManagementConfiguration matched:
- @ConditionalOnMissingBean (types: org.springframework.transaction.annotation.AbstractTransactionManagementConfiguration; SearchStrategy: all) did not find any beans (OnBeanCondition)
FlywayAutoConfiguration matched:
- @ConditionalOnClass found required class 'org.flywaydb.core.Flyway'; @ConditionalOnMissingClass did not find unwanted class (OnClassCondition)
- @ConditionalOnProperty (flyway.enabled) matched (OnPropertyCondition)
- @ConditionalOnBean (types: javax.sql.DataSource; SearchStrategy: all) found bean 'dataSource' (OnBeanCondition)
FlywayAutoConfiguration.FlywayConfiguration matched:
- @ConditionalOnMissingBean (types: org.flywaydb.core.Flyway; SearchStrategy: all) did not find any beans (OnBeanCondition)
FlywayAutoConfiguration.FlywayConfiguration#flywayInitializer matched:
- @ConditionalOnMissingBean (types: org.springframework.boot.autoconfigure.flyway.FlywayMigrationInitializer; SearchStrategy: all) did not find any beans (OnBeanCondition)
FlywayAutoConfiguration.FlywayConfiguration.FlywayInitializerJpaDependencyConfiguration matched:
- @ConditionalOnClass found required class 'org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean'; @ConditionalOnMissingClass did not find unwanted class (OnClassCondition)
- @ConditionalOnBean (types: org.springframework.orm.jpa.AbstractEntityManagerFactoryBean; SearchStrategy: all) found bean '&entityManagerFactory' (OnBeanCondition)
FlywayAutoConfiguration.FlywayJpaDependencyConfiguration matched:
- @ConditionalOnClass found required class 'org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean'; @ConditionalOnMissingClass did not find unwanted class (OnClassCondition)
- @ConditionalOnBean (types: org.springframework.orm.jpa.AbstractEntityManagerFactoryBean; SearchStrategy: all) found bean '&entityManagerFactory' (OnBeanCondition)
HibernateJpaAutoConfiguration matched:
- @ConditionalOnClass found required classes 'org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean', 'org.springframework.transaction.annotation.EnableTransactionManagement', 'javax.persistence.EntityManager'; @ConditionalOnMissingClass did not find unwanted class (OnClassCondition)
- HibernateEntityManager found class 'org.hibernate.ejb.HibernateEntityManager' (HibernateJpaAutoConfiguration.HibernateEntityManagerCondition)
JdbcTemplateAutoConfiguration matched:
- @ConditionalOnClass found required classes 'javax.sql.DataSource', 'org.springframework.jdbc.core.JdbcTemplate'; @ConditionalOnMissingClass did not find unwanted class (OnClassCondition)
- @ConditionalOnSingleCandidate (types: javax.sql.DataSource; SearchStrategy: all) found a primary bean from beans 'dataSource' (OnBeanCondition)
JdbcTemplateAutoConfiguration#jdbcTemplate matched:
- @ConditionalOnMissingBean (types: org.springframework.jdbc.core.JdbcOperations; SearchStrategy: all) did not find any beans (OnBeanCondition)
JdbcTemplateAutoConfiguration#namedParameterJdbcTemplate matched:
- @ConditionalOnMissingBean (types: org.springframework.jdbc.core.namedparam.NamedParameterJdbcOperations; SearchStrategy: all) did not find any beans (OnBeanCondition)
JpaBaseConfiguration#entityManagerFactory matched:
- @ConditionalOnMissingBean (types: org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean,javax.persistence.EntityManagerFactory; SearchStrategy: all) did not find any beans (OnBeanCondition)
JpaBaseConfiguration#entityManagerFactoryBuilder matched:
- @ConditionalOnMissingBean (types: org.springframework.boot.orm.jpa.EntityManagerFactoryBuilder; SearchStrategy: all) did not find any beans (OnBeanCondition)
JpaBaseConfiguration#jpaVendorAdapter matched:
- @ConditionalOnMissingBean (types: org.springframework.orm.jpa.JpaVendorAdapter; SearchStrategy: all) did not find any beans (OnBeanCondition)
JpaBaseConfiguration#transactionManager matched:
- @ConditionalOnMissingBean (types: org.springframework.transaction.PlatformTransactionManager; SearchStrategy: all) did not find any beans (OnBeanCondition)
NoOpCacheConfiguration matched:
- Cache org.springframework.boot.autoconfigure.cache.NoOpCacheConfiguration NONE cache type (CacheCondition)
TestEntityManagerAutoConfiguration matched:
- @ConditionalOnClass found required class 'javax.persistence.EntityManagerFactory'; @ConditionalOnMissingClass did not find unwanted class (OnClassCondition)
TestEntityManagerAutoConfiguration#testEntityManager matched:
- @ConditionalOnMissingBean (types: org.springframework.boot.test.autoconfigure.orm.jpa.TestEntityManager; SearchStrategy: all) did not find any beans (OnBeanCondition)
TransactionAutoConfiguration matched:
- @ConditionalOnClass found required class 'org.springframework.transaction.PlatformTransactionManager'; @ConditionalOnMissingClass did not find unwanted class (OnClassCondition)
TransactionAutoConfiguration#platformTransactionManagerCustomizers matched:
- @ConditionalOnMissingBean (types: org.springframework.boot.autoconfigure.transaction.TransactionManagerCustomizers; SearchStrategy: all) did not find any beans (OnBeanCondition)
TransactionAutoConfiguration.TransactionTemplateConfiguration matched:
- @ConditionalOnSingleCandidate (types: org.springframework.transaction.PlatformTransactionManager; SearchStrategy: all) found a primary bean from beans 'transactionManager' (OnBeanCondition)
TransactionAutoConfiguration.TransactionTemplateConfiguration#transactionTemplate matched:
- @ConditionalOnMissingBean (types: org.springframework.transaction.support.TransactionTemplate; SearchStrategy: all) did not find any beans (OnBeanCondition)
Negative matches:
-----------------
CacheAutoConfiguration:
Did not match:
- @ConditionalOnBean (types: org.springframework.cache.interceptor.CacheAspectSupport; SearchStrategy: all) did not find any beans (OnBeanCondition)
Matched:
- @ConditionalOnClass found required class 'org.springframework.cache.CacheManager'; @ConditionalOnMissingClass did not find unwanted class (OnClassCondition)
CacheAutoConfiguration.CacheManagerJpaDependencyConfiguration:
Did not match:
- Ancestor org.springframework.boot.autoconfigure.cache.CacheAutoConfiguration did not match (ConditionEvaluationReport.AncestorsMatchedCondition)
Matched:
- @ConditionalOnClass found required class 'org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean'; @ConditionalOnMissingClass did not find unwanted class (OnClassCondition)
CaffeineCacheConfiguration:
Did not match:
- @ConditionalOnClass did not find required classes 'com.github.benmanes.caffeine.cache.Caffeine', 'org.springframework.cache.caffeine.CaffeineCacheManager' (OnClassCondition)
CouchbaseCacheConfiguration:
Did not match:
- @ConditionalOnClass did not find required classes 'com.couchbase.client.java.Bucket', 'com.couchbase.client.spring.cache.CouchbaseCacheManager' (OnClassCondition)
DataSourceAutoConfiguration.EmbeddedDatabaseConfiguration:
Did not match:
- EmbeddedDataSource found supported pooled data source (DataSourceAutoConfiguration.EmbeddedDatabaseCondition)
DataSourceAutoConfiguration.TomcatDataSourceJmxConfiguration:
Did not match:
- @ConditionalOnProperty (spring.datasource.jmx-enabled) did not find property 'jmx-enabled' (OnPropertyCondition)
Matched:
- @ConditionalOnClass found required class 'org.apache.tomcat.jdbc.pool.DataSourceProxy'; @ConditionalOnMissingClass did not find unwanted class (OnClassCondition)
DataSourceConfiguration.Dbcp:
Did not match:
- @ConditionalOnClass did not find required class 'org.apache.commons.dbcp.BasicDataSource' (OnClassCondition)
DataSourceConfiguration.Dbcp2:
Did not match:
- @ConditionalOnClass did not find required class 'org.apache.commons.dbcp2.BasicDataSource' (OnClassCondition)
DataSourceConfiguration.Generic:
Did not match:
- @ConditionalOnProperty (spring.datasource.type) did not find property 'spring.datasource.type' (OnPropertyCondition)
DataSourceConfiguration.Hikari:
Did not match:
- @ConditionalOnClass did not find required class 'com.zaxxer.hikari.HikariDataSource' (OnClassCondition)
DataSourcePoolMetadataProvidersConfiguration.CommonsDbcp2PoolDataSourceMetadataProviderConfiguration:
Did not match:
- @ConditionalOnClass did not find required class 'org.apache.commons.dbcp2.BasicDataSource' (OnClassCondition)
DataSourcePoolMetadataProvidersConfiguration.CommonsDbcpPoolDataSourceMetadataProviderConfiguration:
Did not match:
- @ConditionalOnClass did not find required class 'org.apache.commons.dbcp.BasicDataSource' (OnClassCondition)
DataSourcePoolMetadataProvidersConfiguration.HikariPoolDataSourceMetadataProviderConfiguration:
Did not match:
- @ConditionalOnClass did not find required class 'com.zaxxer.hikari.HikariDataSource' (OnClassCondition)
DataSourceTransactionManagerAutoConfiguration.DataSourceTransactionManagerConfiguration#transactionManager:
Did not match:
- @ConditionalOnMissingBean (types: org.springframework.transaction.PlatformTransactionManager; SearchStrategy: all) found bean 'transactionManager' (OnBeanCondition)
EhCacheCacheConfiguration:
Did not match:
- @ConditionalOnClass did not find required classes 'net.sf.ehcache.Cache', 'org.springframework.cache.ehcache.EhCacheCacheManager' (OnClassCondition)
EurekaDiscoveryClientConfiguration:
Did not match:
- @ConditionalOnProperty (eureka.client.enabled) found different value in property 'eureka.client.enabled' (OnPropertyCondition)
Matched:
- @ConditionalOnClass found required class 'com.netflix.discovery.EurekaClientConfig'; @ConditionalOnMissingClass did not find unwanted class (OnClassCondition)
GenericCacheConfiguration:
Did not match:
- Cache org.springframework.boot.autoconfigure.cache.GenericCacheConfiguration NONE cache type (CacheCondition)
GuavaCacheConfiguration:
Did not match:
- @ConditionalOnClass did not find required class 'org.springframework.cache.guava.GuavaCacheManager' (OnClassCondition)
HazelcastCacheConfiguration:
Did not match:
- @ConditionalOnClass did not find required classes 'com.hazelcast.core.HazelcastInstance', 'com.hazelcast.spring.cache.HazelcastCacheManager' (OnClassCondition)
InfinispanCacheConfiguration:
Did not match:
- @ConditionalOnClass did not find required class 'org.infinispan.spring.provider.SpringEmbeddedCacheManager' (OnClassCondition)
JCacheCacheConfiguration:
Did not match:
- @ConditionalOnClass did not find required classes 'javax.cache.Caching', 'org.springframework.cache.jcache.JCacheCacheManager' (OnClassCondition)
JpaBaseConfiguration.JpaWebConfiguration:
Did not match:
- @ConditionalOnWebApplication (required) not a web application (OnWebApplicationCondition)
Matched:
- @ConditionalOnClass found required class 'org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter'; @ConditionalOnMissingClass did not find unwanted class (OnClassCondition)
JpaRepositoriesAutoConfiguration:
Did not match:
- @ConditionalOnMissingBean (types: org.springframework.data.jpa.repository.support.JpaRepositoryFactoryBean,org.springframework.data.jpa.repository.config.JpaRepositoryConfigExtension; SearchStrategy: all) found bean 'org.springframework.data.jpa.repository.config.JpaRepositoryConfigExtension#0' (OnBeanCondition)
Matched:
- @ConditionalOnClass found required class 'org.springframework.data.jpa.repository.JpaRepository'; @ConditionalOnMissingClass did not find unwanted class (OnClassCondition)
- @ConditionalOnProperty (spring.data.jpa.repositories.enabled=true) matched (OnPropertyCondition)
LiquibaseAutoConfiguration:
Did not match:
- @ConditionalOnClass did not find required class 'liquibase.integration.spring.SpringLiquibase' (OnClassCondition)
RedisCacheConfiguration:
Did not match:
- Cache org.springframework.boot.autoconfigure.cache.RedisCacheConfiguration NONE cache type (CacheCondition)
SimpleCacheConfiguration:
Did not match:
- Cache org.springframework.boot.autoconfigure.cache.SimpleCacheConfiguration NONE cache type (CacheCondition)
TestDatabaseAutoConfiguration#dataSource:
Did not match:
- @ConditionalOnProperty (spring.test.database.replace=AUTO_CONFIGURED) found different value in property 'replace' (OnPropertyCondition)
TestDatabaseAutoConfiguration#embeddedDataSourceBeanFactoryPostProcessor:
Did not match:
- @ConditionalOnProperty (spring.test.database.replace=ANY) found different value in property 'replace' (OnPropertyCondition)
Exclusions:
-----------
None
Unconditional classes:
----------------------
org.springframework.boot.test.autoconfigure.jdbc.TestDatabaseAutoConfiguration
答案 0 :(得分:2)
此问题已解决
在发布问题之后不久,我找到了答案:我的课程路径受到了损害。我的eclipse项目(Spring STS和Gradle)启用了两个性质,它们发生了以下事件:
两个插件都为Spring-JPA
这导致Spring Autoconfigurator对使用哪个存储库解析例程并进入严格模式
之后,实现CrudRepository的接口将无法接收来自Spring Data JPA的实现
我是如何找到这个的?
就在那里,在我的鼻子底下,不是错误,而是在启动日志(INFO)的一个害羞的角落里:
14:26:40.729 [main] INFO b.a.y.c.r.i.ReviewUpserIntegrationTest - The following profiles are active: integration
14:26:40.734 [main] INFO o.s.b.c.e.AnnotationConfigEmbeddedWebApplicationContext - Refreshing org.springframework.boot.context.embedded.AnnotationConfigEmbeddedWebApplicationContext@7de4a01f: startup date [Thu Mar 02 14:26:40 GMT 2017]; parent: org.springframework.context.annotation.AnnotationConfigApplicationContext@130e116b
14:26:41.521 [main] INFO o.s.d.r.c.RepositoryConfigurationDelegate - Multiple Spring Data modules found, entering strict repository configuration mode!
14:26:41.562 [main] INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data JPA - Could not safely identify store assignment for repository candidate interface boxfish.apis.youtube.channelDiscovery.reviews.domain.reviews.ReviewRepository.
14:26:41.943 [main] WARN o.s.c.a.ConfigurationClassPostProcessor - Cannot enhance @Configuration bean definition 'refreshScope' since its singleton instance has been created too early. The typical cause is a non-static @Bean method with a BeanDefinitionRegistryPostProcessor return type: Consider declaring such methods as 'static'.
我们谈论的是Multiple Spring Data modules found, entering strict repository configuration mode!
Eclipse中对性质的良好清理和去激活已经解决了这个问题:
gradle clean cleanEclipse eclipse build --refresh-dependencies