当前位置: 首页 > 知识库问答 >
问题:

找不到[javax.sql.DataSource]类型的合格bean

司空丰
2023-03-14

我很难理解为什么会发生这种错误。我正在将教程移植到最新版本的Spring、Hibernate和WildFly。我从命令行运行,使用Maven构建和测试应用程序。我得到以下错误:

2015年7月10日下午2:18:03 org.springframework.test.context。TestContextManager prepareTestInstance SEVERE:允许TestExecutionListener时捕获异常[org.springframework.test.context.support.DependencyInjectionTestExecutionListener@523884b2]准备测试实例[com.russ.home.test.dao.CompanyDaoTest@131774fe]org.springframework.beans.factory。BeanCreationException:创建名为“com.russ.home.test.dao的bean时出错。CompanyDaoTest:注入自动连接依赖项失败;嵌套异常是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:应至少有一个bean符合此依赖项的autowire候选。依赖项批注:{}

这是我的测试应用程序上下文文件

<bean id="propertyConfigurer"
             class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"
             p:location="classpath:jdbc.properties" />

       <bean id="tttDataSource"
             class="org.springframework.jdbc.datasource.DriverManagerDataSource"
             p:driverClassName="${jdbc.driverClassName}"
             p:url="${jdbc.url}"
             p:username="${jdbc.username}"
             p:password="${jdbc.password}"
               />


       <bean id="jpaVendorAdapter"
             class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter"
             p:showSql="true"
             p:databasePlatform="org.hibernate.dialect.MySQLDialect" />

       <bean id="entityManagerFactory"
             class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"
             p:persistenceUnitName="ttt-jpa"
             p:dataSource-ref="tttDataSource"
             p:jpaVendorAdapter-ref="jpaVendorAdapter"
             p:persistenceXmlLocation="classpath*:META-INF/test-persistence.xml"
               />

       <!-- Transaction manager for a single JPA EntityManagerFactory (alternative to JTA) -->
       <bean id="transactionManager"
             class="org.springframework.orm.jpa.JpaTransactionManager"
             p:dataSource-ref="tttDataSource"
             p:entityManagerFactory-ref="entityManagerFactory"/>

       <!-- checks for annotated configured beans -->
       <context:annotation-config/>

这是抽象测试类

@WebAppConfiguration
@ContextConfiguration
        ({
                "classpath*: /testingContext.xml",


        })
public abstract class AbstractDaoForTesting extends AbstractTransactionalJUnit4SpringContextTests {

    protected final Logger logger = LoggerFactory.getLogger(this.getClass());


    @Autowired(required = true)
    protected CompanyDao companyDao;
    @Autowired(required = true)
    protected ProjectDao projectDao;
    @Autowired(required = true)
    protected TaskDao taskDao;
    @Autowired(required = true)
    protected UserDao userDao;
    @Autowired(required = true)
    protected TaskLogDao taskLogDao;


}

这是CompanyDAOTest类。

@RunWith(SpringJUnit4ClassRunner.class)
public class CompanyDaoTest extends AbstractDaoForTesting {

    public CompanyDaoTest(){}

    /**
     * Test case for the find(id) method of the CompanyDao implementation
     * @throws Exception
     */
    @Test
    public void testFind() throws Exception {

        logger.debug("\nSTARTED testFind()\n");
        List<Company> allItems = companyDao.findAll();

        assertTrue(allItems.size() > 0);

        // get the first item in the list
        Company c1 = allItems.get(0);

        int id = c1.getId();

        Company c2 = companyDao.find(id);

        assertTrue(c1.equals(c2));
        logger.debug("\nFINISHED testFind()\n");
    }

任何建议将不胜感激。

拉斯

共有1个答案

秦宜修
2023-03-14

在比较了其他应用程序上下文文件并重新阅读Spring留档后,我发现我缺少了几样东西。我重新开始并创建了这个新的应用程序上下文并移动了传递这个错误。

<!-- Activates various annotations to be detected in bean classes for ex @Autowired -->
    <context:annotation-config/>


    <bean id="propertyConfigurer"
          class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"
          p:location="classpath:jdbc.properties" />

    <bean id="tttDataSource"
          class="org.springframework.jdbc.datasource.DriverManagerDataSource"
          p:driverClassName="${jdbc.driverClassName}"
          p:url="${jdbc.url}"
          p:username="${jdbc.username}"
          p:password="${jdbc.password}"
            />


    <bean id="jpaVendorAdapter"
          class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter"
          p:showSql="true"
          p:databasePlatform="org.hibernate.dialect.MySQLDialect" />



    <bean id="entityManagerFactory"
          class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"
          p:persistenceUnitName="ttt-jpa"
          p:dataSource-ref="tttDataSource"
          p:jpaVendorAdapter-ref="jpaVendorAdapter"
          p:persistenceXmlLocation="classpath*:META-INF/persistence.xml"
            />

    <!-- Transaction manager for JTA  -->
    <bean id="transactionManager"
          class="org.springframework.orm.jpa.JpaTransactionManager"
          p:dataSource-ref="tttDataSource"
          p:entityManagerFactory-ref="entityManagerFactory"/>

    <!-- enable the configuration of transactional behavior based on annotations -->
    <tx:annotation-driven />


    <!-- Scan for Repository/Service annotations -->
    <context:component-scan base-package="com.russ.home.dao"/>
    <context:component-scan base-package="com.russ.home.service"/>
 类似资料:
  • 我正在运行一个JUnit测试,嗯,我的Spring启动项目,我是这样写的: 找到依赖项[com.br.suppcomm.ocp.dao.logindao]得[com.br.suppcomm.ocp.dao.logindao]:需要至少1个具有此依赖项自动候选资格得bean.依赖项注释:{@org.SpringFramework.Beans.Factory.Annotation.AutoWired(

  • 我有测试Spring Data JPA的示例测试程序,但看起来存储库没有生成。 我的配置: 用户实体:

  • 我正在尝试运行批处理,但无法将batchservice注入其中。 BatchApplication.java LeaveAllocationJobConfiguration.java 我该如何解决这个问题?

  • 问题内容: 我正在尝试在我的rest应用程序中添加spring- security。我按照Spring网站上的教程(https://spring.io/guides/tutorials/spring-security- and-angular-js/ )进行了操作,但是这里使用的是我不想使用的spring-boot组件。 ,也许问题就在这里。 我的安全配置在这里: 堆栈跟踪: 问题答案: 问题是您

  • 我通过使用Spring和Hibernate创建实体、服务和服务的JUnit测试开始了我的项目。所有这些都很管用。然后,我添加了spring-mvc来使用许多不同的分步教程来制作这个web应用程序,但是当我试图使用注释制作Controller时,我在部署期间从Glassfish得到错误。我想由于某种原因Spring没有看到我的服务,但经过多次尝试,我仍然无法处理它。 /webapp/web-inf/

  • 问题内容: 使用spring,使用以下代码: 我懂了 pojo的片段: 问题答案: 从Spring的角度来看,没有一个通过注册的实例可以将内容转换为对象。感兴趣的方法是。上述所有回报的实现,包括。 由于没有人可以读取您的HTTP响应,因此处理失败,并出现异常。 如果你能控制服务器响应,修改设置到,或东西匹配。 如果您不控制服务器响应,则需要编写和注册自己的(可以扩展Spring类,see 及其子类