Missing class org.springframework.objenesis.ObjenesisStd

今天spring整合mongo

在調試過程中發現以下問題:

Caused by: org.springframework.beans.BeanInstantiationException: Could
  not instantiate bean class
  [org.springframework.data.mongodb.core.MongoTemplate]: Constructor
  threw exception; nested exception is java.lang.NoClassDefFoundError:
  org/springframework/objenesis/ObjenesisStd at
  org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:163) at
  org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:121) at
  org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:280)
    ... 51 more Caused by: java.lang.NoClassDefFoundError:
  org/springframework/objenesis/ObjenesisStd at
  org.springframework.data.mongodb.core.convert.DefaultDbRefResolver.<init>(DefaultDbRefResolver.java:72) at
  org.springframework.data.mongodb.core.MongoTemplate.getDefaultMongoConverter(MongoTemplate.java:1961) at
  org.springframework.data.mongodb.core.MongoTemplate.<init>(MongoTemplate.java:210) at
  org.springframework.data.mongodb.core.MongoTemplate.<init>(MongoTemplate.java:174) at 
  sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at
  sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39) at
  sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27) at 
  java.lang.reflect.Constructor.newInstance(Constructor.java:513) at
  org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:148)
    ... 53 more Caused by: java.lang.ClassNotFoundException:
  org.springframework.objenesis.ObjenesisStd at
  java.net.URLClassLoader$1.run(URLClassLoader.java:202) at
  java.security.AccessController.doPrivileged(Native Method) at
  java.net.URLClassLoader.findClass(URLClassLoader.java:190) at
  java.lang.ClassLoader.loadClass(ClassLoader.java:306) at
  sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301) at
  java.lang.ClassLoader.loadClass(ClassLoader.java:247)
我的配置文件:

    <bean id="userCredentials" class="org.springframework.data.authentication.UserCredentials">    
        <constructor-arg name="username"  value="${mongo.username}"/>    
        <constructor-arg name="password"  value="${mongo.password}"/>    
    </bean>    
    
      <mongo:mongo id="mongo" replica-set="127.0.0.1:27017">
      <!-- 一些連接屬性的設置 -->    
      <mongo:options
           connections-per-host="8"
           threads-allowed-to-block-for-connection-multiplier="3"
           connect-timeout="10000"
           max-wait-time="20000"
           auto-connect-retry="true"
           socket-keep-alive="true"
           socket-timeout="1500"
           write-number="1"
           write-timeout="0"
           write-fsync="true"/>        
    </mongo:mongo>
    <mongo:db-factory dbname="database" mongo-ref="mongo" />
    
    <bean id="mongoTemplate" class="org.springframework.data.mongodb.core.MongoTemplate">
        <constructor-arg ref="mongo" />
        <constructor-arg name="databaseName" value="mytest" />
    </bean>

測試代碼:

public void testQueryTest() {
       context = new ClassPathXmlApplicationContext("spring/spring-datasource-mogon-1.xml");
       mongoTemplate = (MongoTemplate) context.getBean("mongoTemplate");
        DBCollection coll = mongoTemplate.getCollection("test");
        System.out.println("Collection mycol selected successfully");
        DBCursor cursor = coll.find();
        int i=1;
        while (cursor.hasNext()) { 
           System.out.println("Inserted Document: "+i); 
           System.out.println(cursor.next()); 
           i++;
        }
}

經過查詢發現後,發現我引用的spring-data-mongodb的jar包的版本是1.6.2的、mongo.1.9.2.jar,spring-data-mongodb.1.6以上的版本需要配置的spring的版本需要4.0以上(http://stackoverflow.com/questions/25262248/missing-class-org-springframework-objenesis-objenesisstd)。我的spring的版本是2.3的。

由於spring改動後,整個項目改動比較大,影響比較大,所以選擇修改spring-data-mongodb的版本,後期將版本降級爲1.5.2,後啓動並運行。問題解決。





發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章