2012-09-10 82 views
14

我在設置Maven中Spring + Spring數據JPA + QueryDSL + JPA 2.0 + Hibernate的配置時遇到了很多麻煩。我已經解決了很多問題,但是這個問題讓我頭痛= /。不符合所有BeanPostProcessor的處理條件的類

,我發現了以下異常:

Bean 'dataSource' of type [class org.springframework.jdbc.datasource.DriverManagerDataSource] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying) 

我參加了谷歌一看,大部分的時候這個問題是由缺少註釋「@Transactional」引起的。我試圖註釋我的方法,但它沒有解決任何問題。我absolutelly沒有關於它來自何方=(想法

這裏是我的測試代碼:。

@RunWith(SpringJUnit4ClassRunner.class) 
@ContextConfiguration(locations="/applicationContext.xml") 
public class BaseTest { 

    public BaseTest() { 
    } 

    @Before 
    public void setUp() throws IOException { 
     Dataset.loadDatabase(); 
    } 

    @Test 
    public void load(){} 
} 

類數據集只是做的分貝一些節約,看看它的工作

我的applicationContext.xml:

<beans xmlns="http://www.springframework.org/schema/beans" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xmlns:context="http://www.springframework.org/schema/context" 
     xmlns:jpa="http://www.springframework.org/schema/data/jpa" 
     xmlns:tx="http://www.springframework.org/schema/tx" 
     xsi:schemaLocation="http://www.springframework.org/schema/beans 
     http://www.springframework.org/schema/beans/spring-beans-3.1.xsd 
     http://www.springframework.org/schema/context 
     http://www.springframework.org/schema/context/spring-context-3.1.xsd 
     http://www.springframework.org/schema/data/jpa 
     http://www.springframework.org/schema/data/jpa/spring-jpa.xsd 
     http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.1.xsd"> 

     <context:annotation-config/> 
     <jpa:repositories base-package="com.ae.repository" /> 
     <context:component-scan base-package="com.ae.service" /> 

     <!-- Data Source --> 
     <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> 
      <property name="driverClassName"><value>com.mysql.jdbc.Driver</value></property> 
      <property name="url"><value>jdbc:mysql://localhost:3306/academia</value></property> 
      <property name="username"><value>root</value></property> 
      <property name="password"><value>root</value></property> 
     </bean> 

     <!-- JPA EntityManagerFactory --> 
     <bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"> 
      <property name="dataSource" ref="dataSource"/> 
      <property name="jpaProperties"> 
       <props> 
        <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop> 
        <prop key="hibernate.hbm2ddl.auto">update</prop> 
        <prop key="hibernate.show_sql">true</prop> 
        <prop key="hibernate.cache.provider_class">org.hibernate.cache.NoCacheProvider</prop> 
        <prop key="hibernate.id.new_generator_mappings">true</prop> 
       </props> 
      </property> 
     </bean> 

     <bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager"> 
      <property name="entityManagerFactory" ref="entityManagerFactory"/> 
     </bean> 
     <tx:annotation-driven mode="aspectj" transaction-manager="transactionManager" /> 
     <bean class="org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor"/> 
     <bean class="org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor"/> 
</beans> 

我不知道如果我的依賴關係是否正確設置之一:

<dependencies> 
     <dependency> 
      <groupId>junit</groupId> 
      <artifactId>junit</artifactId> 
      <version>4.10</version> 
      <scope>test</scope> 
     </dependency> 

     <!-- hibernate + jpa --> 
     <dependency> 
      <groupId>org.hibernate</groupId> 
      <artifactId>hibernate-entitymanager</artifactId> 
      <version>4.1.6.Final</version> 
     </dependency> 
     <dependency> 
      <groupId>org.slf4j</groupId> 
      <artifactId>slf4j-log4j12</artifactId> 
      <version>1.6.6</version> 
     </dependency> 
     <dependency> 
      <groupId>org.apache.derby</groupId> 
      <artifactId>derby</artifactId> 
      <version>10.3.2.1</version> 
      <scope>test</scope> 
     </dependency> 

     <!-- Spring JPA --> 
     <dependency> 
      <groupId>org.springframework.data</groupId> 
      <artifactId>spring-data-jpa</artifactId> 
      <version>1.1.1.RELEASE</version> 
     </dependency> 
     <dependency> 
      <groupId>javax.sql</groupId> 
      <artifactId>jdbc-stdext</artifactId> 
      <version>2.0</version> 
     </dependency> 
     <dependency> 
      <groupId>javax.transaction</groupId> 
      <artifactId>jta</artifactId> 
      <version>1.1</version> 
     </dependency> 

     <!-- MySQL Connector --> 
     <dependency> 
      <groupId>mysql</groupId> 
      <artifactId>mysql-connector-java</artifactId> 
      <version>5.1.21</version> 
     </dependency> 

     <!-- Query DSL --> 
     <dependency> 
      <groupId>com.mysema.querydsl</groupId> 
      <artifactId>querydsl-apt</artifactId> 
      <version>2.7.2</version> 
      <scope>provided</scope> 
     </dependency>  

     <dependency> 
      <groupId>com.mysema.querydsl</groupId> 
      <artifactId>querydsl-jpa</artifactId> 
      <version>2.7.2</version> 
     </dependency> 

     <!-- Spring Framework --> 
     <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-context</artifactId> 
      <version>3.1.2.RELEASE</version> 
     </dependency> 

     <!-- Apache commons lang --> 
     <dependency> 
      <groupId>commons-lang</groupId> 
      <artifactId>commons-lang</artifactId> 
      <version>2.6</version> 
     </dependency> 

     <!-- Apache commons IO --> 
     <dependency> 
      <groupId>commons-io</groupId> 
      <artifactId>commons-io</artifactId> 
      <version>2.4</version> 
     </dependency> 

     <!-- Other --> 
     <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-test</artifactId> 
      <version>3.1.2.RELEASE</version> 
      <scope>test</scope> 
      <type>jar</type> 
     </dependency> 
     <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-aspects</artifactId> 
      <version>3.1.2.RELEASE</version> 
     </dependency> 
    </dependencies> 

謝謝您的閱讀;)

+1

你會得到這個*例外*?或者你的意思是作爲日誌消息? – Raedwald

+0

另請參閱http://stackoverflow.com/questions/1201726/tracking-down-cause-of-springs-not-eligible-for-auto-proxying/19688634#19688634如果您獲得「Bean不符合獲得處理的條件所有BeanPostProcessors「 –

回答

15

這一警告意味着什麼,你不應該擔心,因爲你不需要任何申請後處理器的DataSource。從技術上講,這意味着某些bean後處理器(我猜想是一個事務處理器)取決於您的DataSource,因此DataSource必須在該後處理器初始化之前完全初始化,以便後處理器不能截獲初始化的DataSource

如果您想要應用後處理器的bean有這樣的警告,您需要擔心。

+0

謝謝你的答案axtavt!讀取日誌的其餘部分,我發現在嘗試加載數據集後,出於某種原因,而不是使用數據集中提供的信息,試圖找到持久性單元文件(persistence.xml文件(META-INF下的persistence.xml))。如果沒有persistence.xml,則測試失敗,說沒有找到持久性單元。如果我重複在persistence.xml中的數據集bean中給出的信息,它工作正常,我的數據庫已成功創建。但現在我有另一個問題: –

+0

「創建名爲'albumServiceImpl'的bean時出錯:注入自動裝配依賴失敗;嵌套異常是org.springframework.beans.factory.BeanCreationException:無法自動裝入字段:com.ae.repository.AlbumRepository com .ae.service.impl.AlbumServiceImpl.albumRepository;嵌套異常是org.springframework.beans.factory.BeanCreationException:創建名爲'albumRepository'的Bean時出錯:FactoryBean在創建對象時拋出異常;嵌套異常是java.lang.IllegalArgumentException:Not一個託管類型:class com.ae.entity.Album「。 –

+0

谷歌說,當你有一個抽象類或接口作爲一個實體時,它就會發生,但這不是我的情況。順便說一句,我在我的bean EntityManagerFactory中得到了同樣的其他錯誤(不適合所有BeanPostProcessors處理),我會igonore它。我要創建關於這個「不是託管類型」問題的另一個問題,也許它與「不符合所有BeanPostProcessors處理條件」問題無關。謝謝;) –

相關問題