2015-02-08 172 views
-1

在我的项目中,我使用一个属性占位符来读取一个属性文件,其中包含我的数据库连接的配置。在最初的设置和重新配置期间,我希望能够更改数据库主机的详细信息。重新启动/重新加载Spring数据MongoDB

我试图用所谓的当前应用程序上下文刷新()方法,但不知何故,春节数据bean没有重新加载,我获得由Spring数据发出一个IllegalStateException:

HTTP Status 500 - Request processing failed; nested exception is java.lang.IllegalStateException: open 
Exception report: Message: Request processing failed; nested exception is java.lang.IllegalStateException: open 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.IllegalStateException: open 
    org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:978) 
    org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:868) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:644) 
    org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:842) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:725) 
    org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) 
    org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:330) 
    org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:118) 
    org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:84) 
    org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) 
    org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:113) 
    org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) 
    org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:103) 
    org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) 
    org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:113) 
    org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) 
    org.springframework.security.web.authentication.rememberme.RememberMeAuthenticationFilter.doFilter(RememberMeAuthenticationFilter.java:139) 
    org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) 
    org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:154) 
    org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) 
    org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:45) 
    org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) 
    org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:199) 
    org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) 
    org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:110) 
    org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) 
    org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter.doFilterInternal(WebAsyncManagerIntegrationFilter.java:50) 
    org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) 
    org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) 
    org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:87) 
    org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) 
    org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:192) 
    org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:160) 
    org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:344) 
    org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:261) 
root cause: java.lang.IllegalStateException: open 
    org.bson.util.Assertions.isTrue(Assertions.java:36) 
    com.mongodb.DBTCPConnector.getPrimaryPort(DBTCPConnector.java:408) 
    com.mongodb.DBCollectionImpl.update(DBCollectionImpl.java:263) 
    com.mongodb.DBCollection.update(DBCollection.java:191) 
    com.mongodb.DBCollection.save(DBCollection.java:975) 
    com.mongodb.DBCollection.save(DBCollection.java:934) 
    org.springframework.data.mongodb.core.MongoTemplate$10.doInCollection(MongoTemplate.java:950) 
    org.springframework.data.mongodb.core.MongoTemplate.execute(MongoTemplate.java:410) 
    org.springframework.data.mongodb.core.MongoTemplate.saveDBObject(MongoTemplate.java:945) 
    org.springframework.data.mongodb.core.MongoTemplate.doSave(MongoTemplate.java:885) 
    org.springframework.data.mongodb.core.MongoTemplate.save(MongoTemplate.java:833) 
    org.springframework.data.mongodb.repository.support.SimpleMongoRepository.save(SimpleMongoRepository.java:73) 
    sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
    sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    java.lang.reflect.Method.invoke(Method.java:483) 
    org.springframework.data.repository.core.support.RepositoryFactorySupport$QueryExecutorMethodInterceptor.executeMethodOn(RepositoryFactorySupport.java:442) 
    org.springframework.data.repository.core.support.RepositoryFactorySupport$QueryExecutorMethodInterceptor.doInvoke(RepositoryFactorySupport.java:427) 
    org.springframework.data.repository.core.support.RepositoryFactorySupport$QueryExecutorMethodInterceptor.invoke(RepositoryFactorySupport.java:381) 
    org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179) 
    org.springframework.data.repository.core.support.RepositoryFactorySupport$DefaultMethodInvokingMethodInterceptor.invoke(RepositoryFactorySupport.java:512) 
    org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179) 
    org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:207) 
    com.sun.proxy.$Proxy2987.save(Unknown Source) 
    de.steilerdev.myVerein.server.controller.InitController.initSuperAdmin(InitController.java:158) 
    sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
    sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    java.lang.reflect.Method.invoke(Method.java:483) 
    org.springframework.web.method.support.InvocableHandlerMethod.invoke(InvocableHandlerMethod.java:215) 
    org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:132) 
    org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:110) 
    org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandleMethod(RequestMappingHandlerAdapter.java:781) 
    org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:721) 
    org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:83) 
    org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:943) 
    org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:877) 
    org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:966) 
    org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:868) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:644) 
    org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:842) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:725) 
    org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) 
    org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:330) 
    org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:118) 
    org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:84) 
    org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) 
    org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:113) 
    org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) 
    org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:103) 
    org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) 
    org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:113) 
    org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) 
    org.springframework.security.web.authentication.rememberme.RememberMeAuthenticationFilter.doFilter(RememberMeAuthenticationFilter.java:139) 
    org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) 
    org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:154) 
    org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) 
    org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:45) 
    org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) 
    org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:199) 
    org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) 
    org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:110) 
    org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) 
    org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter.doFilterInternal(WebAsyncManagerIntegrationFilter.java:50) 
    org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) 
    org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) 
    org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:87) 
    org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) 
    org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:192) 
    org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:160) 
    org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:344) 

可惜我对于bean及其生命周期不太有信心,所以我需要帮助重新加载相应的bean。即使它是一个昂贵的操作,我也可以重启Spring应用程序本身。因为只有极少数人需要,我会为此付出代价。

我不确定你需要哪部分代码,但这里有一个链接到Github存储库。 (对不起的文档,仍然在项目的开始)

谢谢!


编辑:参与过程中的若干类:

de.steilerdev.myVerein.server.controller.InitController(接收的相关请求,存储设置,以我的SettingsRepository)

@Controller 
@RequestMapping("/init") 
public class InitController 
{ 
    @Autowired 
    private SettingsRepository settingsRepository; 

    @Autowired 
    private UserRepository userRepository; 

    @Autowired 
    private DivisionRepository divisionRepository; 

    @Autowired 
    private ReloadableResourceBundleMessageSource messageSource; 

    private static Logger logger = LoggerFactory.getLogger(InitController.class); 

    @RequestMapping(value = "settings") 
    public ResponseEntity<String> initSettings(@RequestParam String clubName, 
               @RequestParam String databaseHost, 
               @RequestParam String databasePort, 
               @RequestParam String databaseUser, 
               @RequestParam String databasePassword, 
               @RequestParam String databaseCollection, 
               @RequestParam String rememberMeTokenKey, 
               Locale locale) 
    { 
     logger.debug("Starting initial configuration"); 
     if(!settingsRepository.isInitSetup()) 
     { 
      logger.warn("An initial setup API was used, even though the system is already configured."); 
      return new ResponseEntity<>(messageSource.getMessage("init.message.settings.notAllowed", null, "You are not allowed to perform this action at the moment", locale), HttpStatus.BAD_REQUEST); 
     } else if(clubName.isEmpty() || rememberMeTokenKey.isEmpty()) 
     { 
      logger.warn("The club name or remember me key is not present"); 
      return new ResponseEntity<>(messageSource.getMessage("init.message.settings.noKeyOrName", null, "The club name and remember me key is required", locale), HttpStatus.BAD_REQUEST); 
     } else 
     { 
      int databasePortInt = 27017; 
      if(databaseHost.isEmpty()) 
      { 
       logger.warn("The database host is empty, using default value."); 
       databaseHost = "localhost"; 
      } 
      if(databasePort.isEmpty()) 
      { 
       logger.warn("The database port is empty, using default value."); 
       databasePort = "27017"; 
      } else 
      { 
       try 
       { 
        databasePortInt = Integer.parseInt(databasePort); 
       } catch (NumberFormatException e) 
       { 
        logger.warn("The database port seems not to be a number " + databasePort); 
        return new ResponseEntity<>(messageSource.getMessage("init.message.settings.dbPortNoNumber", null, "The database port needs to be a number", locale), HttpStatus.BAD_REQUEST); 
       } 
      } 
      if(databaseCollection.isEmpty()) 
      { 
       logger.warn("The database collection name is empty, using default value"); 
       databaseCollection = "myVerein"; 
      } 

      if(!mongoIsAvailable(databaseHost, databasePortInt, databaseUser, databasePassword, databaseCollection)) 
      { 
       logger.warn("The stated MongoDB is not available"); 
       return new ResponseEntity<>(messageSource.getMessage("init.message.settings.mongoNotAvailable", null, "The stated MongoDB is not available", locale), HttpStatus.BAD_REQUEST); 
      } 

      try 
      { 
       logger.debug("Temporarily storing information"); 
       settingsRepository.setClubName(clubName); 
       settingsRepository.setDatabaseHost(databaseHost); 
       settingsRepository.setDatabasePort(databasePort); 
       settingsRepository.setDatabaseUser(databaseUser); 
       settingsRepository.setDatabasePassword(databasePassword); 
       settingsRepository.setDatabaseName(databaseCollection); 
       settingsRepository.setRememberMeKey(rememberMeTokenKey); 
      } catch (IOException e) 
      { 
       logger.warn("Unable to save settings."); 
       return new ResponseEntity<>(messageSource.getMessage("init.message.settings.savingSettingsError", null, "Unable to save settings, please try again", locale), HttpStatus.INTERNAL_SERVER_ERROR); 
      } 
      return new ResponseEntity<>(messageSource.getMessage("init.message.settings.savingSettingsSuccess", null, "Successfully saved settings", locale), HttpStatus.OK); 
     } 
    } 

    @RequestMapping(value = "superAdmin") 
    public ResponseEntity<String> initSuperAdmin(@RequestParam String firstName, 
               @RequestParam String lastName, 
               @RequestParam String email, 
               @RequestParam String password, 
               @RequestParam String passwordRe, 
               Locale locale) 
    { 
     if(!settingsRepository.isInitSetup()) 
     { 
      logger.warn("An initial setup API was used, even though the system is already configured."); 
      return new ResponseEntity<>(messageSource.getMessage("init.message.admin.notAllowed", null, "You are not allowed to perform this action at the moment", locale), HttpStatus.BAD_REQUEST); 
     } else if(firstName.isEmpty() || lastName.isEmpty() || email.isEmpty() || password.isEmpty() || passwordRe.isEmpty()) 
     { 
      logger.warn("A required parameter of the super admin is empty or missing during initial configuration"); 
      return new ResponseEntity<>(messageSource.getMessage("init.message.admin.missingParameter", null, "A required parameter is empty or missing", locale), HttpStatus.BAD_REQUEST); 
     } else if(!password.equals(passwordRe)) 
     { 
      logger.warn("The password and the re-typed password do not match!"); 
      return new ResponseEntity<>(messageSource.getMessage("init.message.admin.passwordMatchError", null, "The password and the re-typed password do not match", locale), HttpStatus.BAD_REQUEST); 
     } else 
     { 
      logger.debug("Creating a new initial user."); 
      User superAdmin = new User(); 
      superAdmin.setFirstName(firstName); 
      superAdmin.setLastName(lastName); 
      superAdmin.setEmail(email); 
      superAdmin.setPassword(password); 

      logger.debug("Creating a new initial root division."); 
      Division rootDivision = new Division(settingsRepository.getClubName(), null, superAdmin, null); 

      //Saving changes and restarting context 
      try 
      { 
       settingsRepository.setInitSetup(false); 
       //This call is restarting the application. 
       settingsRepository.saveSettings(superAdmin); 
      } catch (IOException e) 
      { 
       logger.warn("Unable to save settings."); 
       return new ResponseEntity<>(messageSource.getMessage("init.message.admin.savingSettingsError", null, "Unable to save settings, please try again", locale), HttpStatus.INTERNAL_SERVER_ERROR); 
      } 

      try 
      { 
       userRepository.save(superAdmin); 
       divisionRepository.save(rootDivision); 
      } catch (ConstraintViolationException e) 
      { 
       logger.warn("A database constraint was violated while saving the new super admin."); 
       return new ResponseEntity<>(messageSource.getMessage("init.message.admin.constraintViolation", null, "A database constraint was violated while saving the new super admin", locale), HttpStatus.BAD_REQUEST); 
      } 
      return new ResponseEntity<>(messageSource.getMessage("init.message.admin.savingAdminSuccess", null, "Successfully saved the new super admin. The settings are now being saved and the application is restarted.", locale) , HttpStatus.OK); 
     } 
    } 

    private boolean mongoIsAvailable(String databaseHost, int databasePort, String databaseUser, String databasePassword, String databaseCollection) 
    { 
     logger.debug("Creating mongo client to test connection"); 
     List<MongoCredential> credential = null; 
     MongoClient mongoClient = null; 
     if(!databaseUser.isEmpty() && !databasePassword.isEmpty()) 
     { 
      credential = Arrays.asList(MongoCredential.createMongoCRCredential(databaseUser, databaseCollection, databasePassword.toCharArray())); 
     } 

     try 
     { 
      mongoClient = new MongoClient(new ServerAddress(databaseHost, databasePort),credential); 

      //Checking if connection REALLY works 
      List<String> databases = mongoClient.getDatabaseNames(); 
      if(databases == null) 
      { 
       logger.warn("The list of databases is null"); 
       return false; 
      } else if(databases.isEmpty()) 
      { 
       logger.info("The databases are empty"); 
       return true; 
      } else 
      { 
       logger.debug("The database connection seems okay."); 
       return true; 
      } 
     } catch (UnknownHostException e) 
     { 
      logger.warn("Unable to resolve mongoDB host: " + e.getMessage()); 
      return false; 
     } catch (MongoException e) 
     { 
      logger.warn("Unable to receive list of present databases: " + e.getMessage()); 
      return false; 
     } finally 
     { 
      if(mongoClient != null) 
      { 
       mongoClient.close(); 
      } 
     } 
    } 
} 

de.steilerdev.myVerein.server.model.SettingsRepository(检索和存储设置中持续一个属性文件,以及在设置改变时重新启动应用程序)

public class SettingsRepository 
{ 
    @Autowired 
    private MongoTemplate mongoTemplate; 

    @Autowired 
    private SimpleMongoDbFactory mongoDbFactory; 

    @Autowired 
    private ApplicationContext applicationContext; 

    private Properties settings; 
    private Resource settingsResource; 

    private final static String settingsFileName = "myVerein.properties"; 
    //Property names 
    private final static String databaseName = "dbName"; 
    private final static String databaseHost = "dbHost"; 
    private final static String databasePort = "dbPort"; 
    private final static String databaseUser = "dbUser"; 
    private final static String databasePassword = "dbPassword"; 
    private final static String rememberMeKey = "rememberMeKey"; 
    private final static String clubName = "clubName"; 
    private final static String initSetup = "initSetup"; 

    private boolean changed; 
    private boolean databaseChanged; 

    private static Logger logger = LoggerFactory.getLogger(SettingsRepository.class); 

    public Properties loadSettings() throws IOException 
    { 
     if(settings == null) 
     { 
      logger.debug("Loading settings file from classpath"); 
      settingsResource = new ClassPathResource(settingsFileName); 
      changed = false; 
      databaseChanged = false; 
      return (settings = PropertiesLoaderUtils.loadProperties(settingsResource)); 
     } else 
     { 
      return settings; 
     } 
    } 

    //Getter and setter removed 

    public void saveSettings(User currentUser) throws IOException 
    { 
     saveSettings(loadSettings(), currentUser); 
    } 

    public void saveSettings(Properties settings, User currentUser) throws IOException 
    { 
     if(changed) 
     { 
      logger.debug("Saving settings to " + settingsResource.getFile().getAbsolutePath()); 
      settings.store(new FileOutputStream(settingsResource.getFile()), "Settings last changed " + (currentUser != null ? ("by " + currentUser.getEmail() + " (" + LocalDateTime.now().toString() + ")") : LocalDateTime.now().toString())); 
      if(databaseChanged) 
      { 
       try 
       { 
        mongoDbFactory.destroy(); 
       } catch (Exception e) 
       { 
        System.err.println("Problem destroying factory"); 
       } 
       ((ConfigurableApplicationContext) applicationContext).refresh(); 
      } 
      this.settings = null; 
     } else 
     { 
      logger.debug("No need to save the settings"); 
     } 
    } 
} 

的异常被抛出在InitController,重装后并保存对象到新的控制器userRepository.save(superAdmin);

+1

你能够实现这个spring-data-mongodb的重新加载/刷新吗?你能分享你的解决方案吗? – 2016-01-13 17:21:52

回答

0

这很难说,为什么重装不工作时,这意味着178线,基于原生的异常,但在这里一些提示:

  1. 关于重新启动应用程序上下文,有一个很好的文章

    http://jroller.com/Solomon/entry/reloading_a_spring_web_application

    你可以得到一些线索,为什么它从那里出现故障。

  2. 使用上下文重新加载时,需要注意在应用程序关闭时正确关闭所有打开的资源。

    检查您是否在应用程序上下文中正确关闭了Mongo连接。

    What is the correct way to close the mongo connection using spring-mongo?

当你添加你的代码。这很难理解,你想用这个完成什么。这需要你付出很大的努力才能使它正常工作,而且这些努力的大部分都是腰围。

不能重新加载在Spring上下文中的具体豆,但你可以重新加载整个来龙去脉,通过调用ApplicationContext的刷新(),之后所有的bean将被重新创建,包括您的控制器豆类。所以这应该至少是一个单独的控制器,没有额外的功能。另外,你似乎假设你可以改变mongo配置,并在同一个调用中写入一些mongo,使用旧的引用......这不是春天的事情。所以不要。

+0

嘿,谢谢你的输入,不幸的是破坏我的模板并没有改变任何东西,你提供的第一个链接似乎有点过时了,老实说,我不明白为什么Spring 4提供的功能('ConfigurableApplicationContext.refresh( )'做了一些不同的事情,但我会尽快找到时间。 我更新了我原来的问题,并添加了一些相关类的源代码,也许你可以再试一次,并使用附加信息找到我的问题。 无论如何,感谢您的帮助! – 2015-02-09 23:36:47