2012-03-14 48 views
0

我在Java的桌面应用程序连接到通过Hibernate MySQL数据库。突然变得“NoSuchBeanDefinitionException没有名为豆”用正确的CONFIGS

我对配置下列文件:

  • pom.xml的,在这里我把一些东西,数据库配置文件
  • [APP_NAME] _context.xml,在这里我把主要的配置,包括豆类与数据源
  • [APP_NAME] _hibernate.cfg.xml,在这里我把映射到表

的应用程序是几乎完成,一切工作100%,但后来我决定CH通过配置来创建DB配置文件(在此之前,pom.xml不包含任何配置文件)。 所以我在pom.xml中创建了配置文件,并从context.xml中引用它们。一切正常。然后,我想将SQL打印到终端进行调试,出于某种原因,它没有被打印。所以我改变了数据库配置,直到我找对了。一切正常。然后,我把它改成它是SQL打印的变化,这是以前工作的确切配置之前的方式,但现在我得到这个错误的豆,这是永远存在的,并没有改变。

下面是一些代码,以便更好地理解它:

在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 name="servidorUDP" 
    class="br.uff.pgci.sgca.gateway.server.ServidorUDP" 
    scope="singleton"/> 

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

难道这被放错位置的换行符,或空格,或错误打开/关闭XML标签引起的?我敢肯定这是不是这样,但我们永远不知道...

回答

1

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

检查这个Maven的POM参考http://maven.apache.org/plugins/maven-resources-plugin/examples/filter.html,它可能给你一些线索。

+0

哦,资源目录错了,我的经理告诉我把“src/main/resources/configuracao”而不是“src/main/resources”,可能这就是破坏它的原因。这很有趣,因为他是知道Spring,Hibernate和所有这些东西的人,我几乎只是复制和粘贴hibernate的东西。谢谢! – 2012-03-14 17:34:36

+0

很酷。很好,你解决了这个问题。 – raddykrish 2012-03-14 17:37:53

1

最可能的解释是,含有servidorUDP上下文文件没有找到,可能是因为你对配置文件的更改已停止该文件被复制到类路径上的正确位置。查看目标/类目录的内容,以确保文件处于您期望的位置,并检查日志以查看它已加载的证据。 Spring会记录在某个时间点找到的所有bean的列表,寻找并确认哪些bean丢失。

+0

只有一个上下文文件,其中包含数据库信息和我正在使用的所有bean。我对配置结构的唯一真正改变是将db配置从hibernate.cfg.xml文件移动到pom,并让上下文引用pom来获取值。 – 2012-03-14 17:25:49

相关问题