用正确的配置突然得到“NoSuchBeanDefinitionException没有bean命名”

时间:2012-03-14 17:03:01

标签: java xml spring hibernate javabeans

我有一个Java桌面应用程序,它通过Hibernate连接到MySql数据库。

我有以下配置文件:

  • pom.xml,我放了一些东西和数据库配置文件
  • [app_name] _context.xml,其中我放置主要配置,包括bean和数据源
  • [app_name] _hibernate.cfg.xml,我将映射放到表中

应用程序几乎完成,一切都工作100%,但后来我决定更改配置以创建数据库配置文件(在此之前,pom.xml不包含任何配置文件)。 所以我在pom.xml中创建了配置文件,并从context.xml中引用它们。一切都在运作。然后我想将SQL打印到终端进行调试,由于某种原因,它没有打印出来。所以我改变了数据库配置,直到我做对了。一切都在运作。然后我将它更改为sql-print更改之前的方式,它之前正在运行的确切配置,但现在我收到了一个始终存在的bean的错误,并且从未更改过。

以下是一些可以更好地理解它的代码:

context.xml中的数据源:( $ {}字符串被过滤并替换为存储在pom.xml中的实际值)

<bean id="desenvolvimentoDS" class="org.apache.commons.dbcp.BasicDataSource">
    <property name="driverClassName">
        <value>org.hibernate.dialect.MySQLDialect</value>
    </property>
    <property name="url">
        <value>${db.mysql.url}</value>
    </property>
    <property name="username">
        <value>${db.mysql.username}</value>
    </property>
    <property name="password">
        <value>${db.mysql.password}</value>
    </property>
</bean>

正在使用的当前配置文件,在pom.xml中:

<profile>
        <id>HOMOLOGACAO</id>
        <activation>
            <activeByDefault>true</activeByDefault>
        </activation>
        <properties>
            <profile.group>HOMOLOGACAO</profile.group>
            <maven.test.skip>true</maven.test.skip>
            <db.show_sql>true</db.show_sql>
            <db.format_sql>false</db.format_sql>
            <db.mysql.url>[filtered]</db.mysql.url>
            <db.mysql.username>[filtered]</db.mysql.username>
            <db.mysql.password>[filtered]</db.mysql.password>
        </properties>
    </profile>

pom.xml的资源部分,它告诉Spring将这些context.xml字符串过滤为配置文件值:

    <resources>
        <resource>
            <directory>src/main/resources/configuracao</directory>
            <filtering>true</filtering>
        </resource>
    </resources>

最后,给我错误的bean:

<bean name="servidorUDP"
    class="br.uff.pgci.sgca.gateway.server.ServidorUDP"
    scope="singleton"/>

恢复,我创建了数据库配置文件来组织配置,来回更改了一些数据库配置,然后我突然得到“NoSuchBeanDefinitionException没有bean命名为ServidorUDP”错误。

这可能是由错误的换行符,空格或错误的打开/关闭xml标记引起的吗?我很确定事实并非如此,但我们永远都不知道......

2 个答案:

答案 0 :(得分:1)

最可能的解释是找不到包含servidorUDP的上下文文件,可能是因为您对配置文件的更改已经停止将文件复制到类路径上的正确位置。查看target / classes目录的内容以确保该文件位于您期望的位置,并查看日志以查看已加载的证据。 Spring会记录在某个时刻找到的所有bean的列表,查找并查看缺少哪些bean。

答案 1 :(得分:1)

您确切放置了[app_name] _context.xml?你在pom中引入的过滤器是否正在跳过bean定义xml?

检查此maven pom参考http://maven.apache.org/plugins/maven-resources-plugin/examples/filter.html,它可能会为您提供一些线索。