[英]Spring boot upgrade from 2.1.3.RELEASE to 2.5.12: "No qualifying bean of type 'javax.sql.DataSource' available" in JUnit run
[英]JUnit/Spring/Hibernate - No qualifying bean of type [javax.sql.DataSource]
org.springframework.beans.factory.BeanCreationException:创建名称为'JobSeekerServiceTest'的bean时出错:自动连接依赖项的注入失败; 嵌套的异常是org.springframework.beans.factory.BeanCreationException:无法自动装配方法:public void org.springframework.test.context.junit4.AbstractTransactionalJUnit4SpringContextTests.setDataSource(javax.sql.DataSource); 嵌套的异常是org.springframework.beans.factory.NoSuchBeanDefinitionException:没有找到类型为[javax.sql.DataSource]的合格Bean作为依赖项:至少应有1个可作为该依赖项的自动装配候选的bean。 依赖项注释:{}在org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBean4.Bean.Abstract springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireBeanProperties(AbstractAutowireCapableBeanFactory.java:385)位于org.springframework.test.context.support.DependencyInjectionTestExecutionListener.injectDependencies(DependencyInjectionTestExecutionListener.java:117)在org.springframework.test。 org.springframework.test.context.junit4.SpringJUnit4ClassRunner.createTest。(SpringJUnit4)上的DependencyInjectionTestExecutionListener.prepareTestInstance(DependencyInjectionTestExecutionListener.java:82)在org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:212)在 org.springframework.test.context.junit4.SpringJUnit4ClassRunner $ 1.runReflectiveCall(SpringJUnit4ClassRunner.java:251)在org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)在org.springframework.test.context org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:216)上的.junit4.SpringJUnit4ClassRunner.methodBlock(SpringJUnit4ClassRunner.java:253)在org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4 .java:82),位于org.junit.runners.ParentRunner $ 3.run(ParentRunner.java:238),位于org.junit.runners.ParentRunner $ 1.schedule(ParentRunner.java:63),位于org.junit.runners.ParentRunner。在org.junit.runners.ParentRunner.access处$ 000(ParentRunner.java:53)在org.junit.runners.ParentRunner处的runChildren(ParentRunner.java:53)在org.springframework.test处的$ 2.evaluate(ParentRunner.java:229) .context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:60) 在org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:67)在org.junit.runners.ParentRunner.run(ParentRunner.java:309)在org.springframework.test.context.junit4位于org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50)的.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:162) (TestExecution.java:38)在org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:459)在org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java :675)在org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:382)在org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:192)引起创建人:org.springframework.beans.factory.BeanCreationException:无法自动装配方法:public void org.springframework.test.context.junit4.AbstractTransacti onalJUnit4SpringContextTests.setDataSource(javax.sql.DataSource); 嵌套的异常是org.springframework.beans.factory.NoSuchBeanDefinitionException:没有找到类型为[javax.sql.DataSource]的合格Bean作为依赖项:至少应有1个可作为该依赖项的自动装配候选的bean。 依赖项注释:{}在org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.org.org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor $ AutowiredMethodElement.inject(AutowiredAnnotationBeanPostProcessor.java:643)处。 org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:331)...还有26个原因:org.springframework.beans.factory.NoSuchBeanDefinitionException:没有类型为[javax.sql.DataSource]的合格bean找到依赖关系:期望至少有1个bean符合此依赖关系的自动装配候选条件。 依赖项注释:{}在org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1009)在org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1009)在org.springframework.beans.factory.support.DefaultListableBeanFactory.raiseNoSuchBeanDefinitionException(DefaultListableBeanFactory.java:1261)处。 org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor $ AutowiredMethodElement.inject(AutowiredAnnotationBeanPostProcessor.java:600)的springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:904)... 28更多
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations="classpath*:spring-config.xml")
@TransactionConfiguration(defaultRollback=true,transactionManager="txManager")
@Transactional
public class JobSeekerServiceTest extends AbstractTransactionalJUnit4SpringContextTests{
private JobSeekerDao jobseekerDao = new JobSeekerDao();
@Test
public void testGetCandidateForEmail(){
JobSeeker result = new JobSeeker();
JobSeeker expected = new JobSeeker();
expected.setName("Dummy Job seeker 1");expected.setEmail("email@yahoo.com");expected.setCity("City");expected.setPhone("04523122");
result = jobseekerDao.getCandidateForEmail("email@yahoo.com");
assertEquals(result, expected);
}
}
@SuppressWarnings("unchecked")
@Override
public JobSeeker getCandidateForEmail(String email) {
LOGGER.debug("Searching the candidate after an email:"+email);
Session session = getCurrentSession();
List<JobSeeker> candidates = session.createQuery("from JobSeeker where email=?")
.setParameter(0, email)
.list();
if (candidates.size() > 0) {
return candidates.get(0);
} else {
return null;
}
}
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName" value="${database.driver}" />
<property name="url" value="${database.url}" />
<property name="username" value="${database.user}" />
<property name="password" value="${database.password}" />
</bean>
<bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="packagesToScan" value="com.awinta.hrms"/>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">${hibernate.dialect}</prop>
<prop key="hibernate.show_sql">${hibernate.show_sql}</prop>
<prop key="hibernate.format_sql">${hibernate.format_sql}</prop>
<prop key="hibernate.use_sql_comments">${hibernate.use_sql_comments}</prop>
<prop key="hibernate.hbm2ddl.auto">${hibernate.hbm2ddl.auto}</prop>
<prop key="hibernate.temp.use_jdbc_metadata_defaults">${hibernate.temp.use_jdbc_metadata_defaults}</prop>
<prop key="hibernate.connection.pool_size">${hibernate.connection.pool_size}</prop>
</props>
</property>
</bean>
<bean id="txManager"
class="org.springframework.orm.hibernate4.HibernateTransactionManager"
name="txManager">
<property name="sessionFactory" ref="sessionFactory" />
</bean>
任何想法为什么我会收到此错误? 我是Spring,Hibernate,JUnit的新手。 总之,我认为我应该这样做。 或者我应该怎么做这个测试课?
我在某处读到,原因是问题扩展了AbstractTransactionalJUnit4SpringContextTests,没有它我就再也听不到这个错误。
例外是让您知道测试类找不到任何合适的JDBC驱动程序。 您应该将JDBC驱动程序添加到测试类路径中以解决此问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.