2014-04-01 45 views
1

我試圖做一個MongoOperations Bean,但無法讓它工作。我有幾個類將連接到數據庫,我不想將以下代碼添加到數據庫的每個連接。如何創建MongoOperations Bean?

ApplicationContext ctx = new AnnotationConfigApplicationContext(SpringMongoConfig2.class); 
MongoOperations mongoOperation = (MongoOperations) ctx.getBean("mongoTemplate"); 

上面的代碼工程..

我正在做一個REST Web服務,我有幾個班,每個需要寫一個MongoDb.Collection。

我已成立了一個bean配置文件:

@Configuration 
public class SpringMongoConfig2 { 

    @Bean 
    public MongoDbFactory mongoDbFactory2() throws Exception { 
     return new SimpleMongoDbFactory(new MongoClient(), "myDatabase"); 
    } 

    @Bean 
    public MongoTemplate mongoTemplate2() throws Exception { 

     MongoTemplate mongoTemplate = new MongoTemplate(mongoDbFactory2()); 

     return mongoTemplate;  
    } 

    @Bean 
    public MongoOperations mongoOperations2() throws Exception { 
     return mongoTemplate2(); 
    } 

然後在在mongodboperations類我嘗試自動裝配這樣的:

@Autowire MongoOperations mongoOperations2; 

mongoOperations2.findAll(MongoLicense.class); 

我的錯誤是,它不能創建豆。任何人都可以看到我做錯了什麼?

下面是堆棧跟蹤:

type Exception report 

message Request processing failed; nested exception is java.lang.NullPointerException 

description The server encountered an internal error that prevented it from fulfilling this request. 

exception 

org.springframework.web.util.NestedServletException: Request processing failed; nested exception is java.lang.NullPointerException 
    org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:943) 
    org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:822) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:621) 
    org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:807) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:728) 
    org.springframework.web.filter.HiddenHttpMethodFilter.doFilterInternal(HiddenHttpMethodFilter.java:77) 
    org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:108) 
    no.nlf.rest.CorsFilter.doFilter(CorsFilter.java:27) 
root cause 

java.lang.NullPointerException 
    no.nlf.dal.LicenseController.getAllLicenses(LicenseController.java:30) 
    no.nlf.logic.LicenseLogic.getAllLicenses(LicenseLogic.java:18) 
    no.nlf.rest.RestLicense.licenseList(RestLicense.java:26) 
    sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) 
    sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) 
    java.lang.reflect.Method.invoke(Unknown Source) 
    org.springframework.web.method.support.InvocableHandlerMethod.invoke(InvocableHandlerMethod.java:214) 
    org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:132) 
    org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:104) 
    org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandleMethod(RequestMappingHandlerAdapter.java:748) 
    org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:689) 
    org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:83) 
    org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:945) 
    org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:876) 
    org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:931) 
    org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:822) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:621) 
    org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:807) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:728) 
    org.springframework.web.filter.HiddenHttpMethodFilter.doFilterInternal(HiddenHttpMethodFilter.java:77) 
    org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:108) 
    no.nlf.rest.CorsFilter.doFilter(CorsFilter.java:27) 
+0

請張貼堆棧跟蹤 – geoand

+0

顯示,請怎麼你的' RestLicense','LicenseLogic'和'LicenseController'連接起來。他們都是春豆嗎?你如何啓動Spring web ctx?你真的確定'SpringMongoConfig2'對於web ctx來說是易用的嗎? –

+0

它與其他類Restlicense和LicenseLogic無關。它的全部都在LicenseController中。如果我在開始時使用applicationContext.getBean()方法,它會正常工作,但我有幾個將連接到數據庫的類,並且我無法爲每個類創建一個新的應用程序上下文。 – fuLLMetaLMan

回答

1

在Spring應用程序上下文

<mongo:db-factory id="mongoDbFactory" host="db" port="27017" dbname="dbname" /> 


<bean id="mongoTemplate" class="org.springframework.data.mongodb.core.MongoTemplate"> 
    <constructor-arg name="mongoDbFactory" ref="mongoDbFactory" /> 
</bean> 

,然後在你的類

@Autowired 
MongoTemplate mt;