2013-01-16 14 views
5

Zintegrowałem MongoDB za pomocą Spring, moja usługa danych ma autowizualne repozytorium mongo i wszystko działa. Z wyjątkiem sytuacji, gdy baza danych jest wyłączona podczas uruchamiania.Obsługa problemów z połączeniem mongodb przy uruchomieniu

Kiedy mongo nie działa podczas uruchamiania usługi, podczas inicjalizacji generowany jest wyjątek, w którym to przypadku cała usługa nie uruchamia się. Nie tego oczywiście chcę.

Jakie chciałbym się zdarzyć jest złapać wyjątek i uruchomić usługę i poradzić sobie z problemem dostępności db wdzięcznie (jak pokazują stronę mówiąc mamy przejściowe problemy, użycie pamięci podręcznej, lub cokolwiek)

Moje repozytorium klasa:

public interface MediaDataRepository extends MongoRepository<MediaData, String> { 
... 
} 

Moja klasa usług:

@Service 
public class MediaDataService { 
    @Autowired 
    private MediaDataRepository mediaDataRepository; 
... 
} 

A Kontroler:

@Controller 
@RequestMapping("/api/consumer") 
public class MediaController extends HtmlGenerationController { 
    private static final Logger LOG = LoggerFactory.getLogger(MediaController.class); 

    @Autowired 
    private MediaDataService mediaDataService; 
... 
} 

Błąd pojawia się podczas uruchamiania:

2013-01-15 17:50:09.163:WARN:oejw.WebAppContext:Failed startup of context o.m.j.p.JettyWebAppContext{/,file:/code/src/main/webapp/},file:/code/src/main/webapp/ 
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'mediaController': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: private com.myservice.service.MediaDataService com.myservice.controller.MediaController.mediaDataService; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'mediaDataService': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: private com.myservice.repository.MediaDataRepository com.myservice.service.MediaDataService.mediaDataRepository; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'mediaDataRepository': FactoryBean threw exception on object creation; nested exception is com.mongodb.MongoException$Network: can't call something : /127.0.0.1:27017/myservice_db 
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:287) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1106) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:517) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:456) 
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:294) 
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:225) 
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:291) 
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193) 
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:585) 
    at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:913) 
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:464) 
    at org.springframework.web.context.ContextLoader.configureAndRefreshWebApplicationContext(ContextLoader.java:384) 
    at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:283) 
    at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:111) 
    at org.eclipse.jetty.server.handler.ContextHandler.callContextInitialized(ContextHandler.java:764) 
    at org.eclipse.jetty.servlet.ServletContextHandler.callContextInitialized(ServletContextHandler.java:406) 
    at org.eclipse.jetty.server.handler.ContextHandler.startContext(ContextHandler.java:756) 
    at org.eclipse.jetty.servlet.ServletContextHandler.startContext(ServletContextHandler.java:242) 
    at org.eclipse.jetty.webapp.WebAppContext.startContext(WebAppContext.java:1221) 
    at org.eclipse.jetty.server.handler.ContextHandler.doStart(ContextHandler.java:699) 
    at org.eclipse.jetty.webapp.WebAppContext.doStart(WebAppContext.java:454) 
    at org.mortbay.jetty.plugin.JettyWebAppContext.doStart(JettyWebAppContext.java:256) 
    at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:59) 
    at org.eclipse.jetty.server.handler.HandlerCollection.doStart(HandlerCollection.java:224) 
    at org.eclipse.jetty.server.handler.ContextHandlerCollection.doStart(ContextHandlerCollection.java:167) 
    at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:59) 
    at org.eclipse.jetty.server.handler.HandlerCollection.doStart(HandlerCollection.java:224) 
    at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:59) 
    at org.eclipse.jetty.server.handler.HandlerWrapper.doStart(HandlerWrapper.java:90) 
    at org.eclipse.jetty.server.Server.doStart(Server.java:263) 
    at org.mortbay.jetty.plugin.JettyServer.doStart(JettyServer.java:65) 
    at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:59) 
    at org.mortbay.jetty.plugin.AbstractJettyMojo.startJetty(AbstractJettyMojo.java:511) 
    at org.mortbay.jetty.plugin.AbstractJettyMojo.execute(AbstractJettyMojo.java:364) 
    at org.mortbay.jetty.plugin.JettyRunMojo.execute(JettyRunMojo.java:516) 
    at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:101) 
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:209) 
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:153) 
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:145) 
    at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:84) 
    at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:59) 
    at org.apache.maven.lifecycle.internal.LifecycleStarter.singleThreadedBuild(LifecycleStarter.java:183) 
    at org.apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.java:161) 
    at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:320) 
    at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:156) 
    at org.apache.maven.cli.MavenCli.execute(MavenCli.java:537) 
    at org.apache.maven.cli.MavenCli.doMain(MavenCli.java:196) 
    at org.apache.maven.cli.MavenCli.main(MavenCli.java:141) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
    at java.lang.reflect.Method.invoke(Method.java:597) 
    at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:290) 
    at org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:230) 
    at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:409) 
    at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:352) 
Caused by: 
org.springframework.beans.factory.BeanCreationException: Could not autowire field: private com.myservice.service.MediaDataService com.myservice.controller.MediaController.mediaDataService; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'mediaDataService': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: private com.myservice.repository.MediaDataRepository com.myservice.service.MediaDataService.mediaDataRepository; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'mediaDataRepository': FactoryBean threw exception on object creation; nested exception is com.mongodb.MongoException$Network: can't call something : /127.0.0.1:27017/myservice_db 
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:506) 
    at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:87) 
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:284) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1106) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:517) 
[CLIPPED TO ALLOW QUESTION SIZE] 
    at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:409) 
    at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:352) 
Caused by: 
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'mediaDataService': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: private com.myservice.repository.MediaDataRepository com.myservice.service.MediaDataService.mediaDataRepository; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'mediaDataRepository': FactoryBean threw exception on object creation; nested exception is com.mongodb.MongoException$Network: can't call something : /127.0.0.1:27017/myservice_db 
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:287) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1106) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:517) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:456) 
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:294) 
[CLIPPED TO ALLOW QUESTION SIZE] 
    at java.lang.reflect.Method.invoke(Method.java:597) 
    at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:290) 
    at org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:230) 
    at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:409) 
    at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:352) 
Caused by: 
org.springframework.beans.factory.BeanCreationException: Could not autowire field: private com.myservice.repository.MediaDataRepository com.myservice.service.MediaDataService.mediaDataRepository; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'mediaDataRepository': FactoryBean threw exception on object creation; nested exception is com.mongodb.MongoException$Network: can't call something : /127.0.0.1:27017/myservice_db 
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:506) 
    at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:87) 
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:284) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1106) 
[CLIPPED TO ALLOW QUESTION SIZE] 
    at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:352) 
Caused by: 
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'mediaDataRepository': FactoryBean threw exception on object creation; nested exception is com.mongodb.MongoException$Network: can't call something : /127.0.0.1:27017/myservice_db 
    at org.springframework.beans.factory.support.FactoryBeanRegistrySupport.doGetObjectFromFactoryBean(FactoryBeanRegistrySupport.java:149) 
    at org.springframework.beans.factory.support.FactoryBeanRegistrySupport.getObjectFromFactoryBean(FactoryBeanRegistrySupport.java:102) 
    at org.springframework.beans.factory.support.AbstractBeanFactory.getObjectForBeanInstance(AbstractBeanFactory.java:1441) 
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:305) 
[CLIPPED TO ALLOW QUESTION SIZE] 
    at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:352) 
Caused by: 
com.mongodb.MongoException$Network: can't call something : /127.0.0.1:27017/myservice_db 
    at com.mongodb.DBTCPConnector.call(DBTCPConnector.java:227) 
    at com.mongodb.DBApiLayer$MyCollection.__find(DBApiLayer.java:305) 
    at com.mongodb.DBCollection.findOne(DBCollection.java:647) 
    at com.mongodb.DBCollection.findOne(DBCollection.java:626) 
    at com.mongodb.DBApiLayer$MyCollection.createIndex(DBApiLayer.java:364) 
    at com.mongodb.DBCollection.createIndex(DBCollection.java:436) 
    at com.mongodb.DBCollection.ensureIndex(DBCollection.java:515) 
    at org.springframework.data.mongodb.core.index.MongoPersistentEntityIndexCreator.ensureIndex(MongoPersistentEntityIndexCreator.java:172) 
    at org.springframework.data.mongodb.core.index.MongoPersistentEntityIndexCreator$1.doWithPersistentProperty(MongoPersistentEntityIndexCreator.java:130) 
[CLIPPED TO ALLOW QUESTION SIZE] 
    at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:352) 
Caused by: 
java.io.IOException: couldn't connect to [/127.0.0.1:27017] bc:java.net.ConnectException: Connection refused 
    at com.mongodb.DBPort._open(DBPort.java:228) 
    at com.mongodb.DBPort.go(DBPort.java:112) 
    at com.mongodb.DBPort.call(DBPort.java:79) 
    at com.mongodb.DBTCPConnector.call(DBTCPConnector.java:218) 
    at com.mongodb.DBApiLayer$MyCollection.__find(DBApiLayer.java:305) 
    at com.mongodb.DBCollection.findOne(DBCollection.java:647) 
    at com.mongodb.DBCollection.findOne(DBCollection.java:626) 
    at com.mongodb.DBApiLayer$MyCollection.createIndex(DBApiLayer.java:364) 
    at com.mongodb.DBCollection.createIndex(DBCollection.java:436) 
    at com.mongodb.DBCollection.ensureIndex(DBCollection.java:515) 
    at org.springframework.data.mongodb.core.index.MongoPersistentEntityIndexCreator.ensureIndex(MongoPersistentEntityIndexCreator.java:172) 
    at org.springframework.data.mongodb.core.index.MongoPersistentEntityIndexCreator$1.doWithPersistentProperty(MongoPersistentEntityIndexCreator.java:130) 
    at org.springframework.data.mongodb.core.index.MongoPersistentEntityIndexCreator$1.doWithPersistentProperty(MongoPersistentEntityIndexCreator.java:112) 
    at org.springframework.data.mapping.model.BasicPersistentEntity.doWithProperties(BasicPersistentEntity.java:173) 
    at org.springframework.data.mongodb.core.index.MongoPersistentEntityIndexCreator.checkForIndexes(MongoPersistentEntityIndexCreator.java:112) 
    at org.springframework.data.mongodb.core.index.MongoPersistentEntityIndexCreator.onApplicationEvent(MongoPersistentEntityIndexCreator.java:85) 
    at org.springframework.data.mongodb.core.index.MongoPersistentEntityIndexCreator.onApplicationEvent(MongoPersistentEntityIndexCreator.java:48) 
    at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:97) 
    at org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:324) 
    at org.springframework.data.mapping.context.AbstractMappingContext.addPersistentEntity(AbstractMappingContext.java:263) 
    at org.springframework.data.mapping.context.AbstractMappingContext$PersistentPropertyCreator.doWith(AbstractMappingContext.java:364) 
    at org.springframework.util.ReflectionUtils.doWithFields(ReflectionUtils.java:570) 
    at org.springframework.data.mapping.context.AbstractMappingContext.addPersistentEntity(AbstractMappingContext.java:247) 
    at org.springframework.data.mapping.context.AbstractMappingContext.getPersistentEntity(AbstractMappingContext.java:165) 
    at org.springframework.data.mapping.context.AbstractMappingContext.getPersistentEntity(AbstractMappingContext.java:140) 
    at org.springframework.data.mapping.context.AbstractMappingContext.getPersistentEntity(AbstractMappingContext.java:65) 
    at org.springframework.data.mongodb.repository.support.DefaultEntityInformationCreator.getEntityInformation(DefaultEntityInformationCreator.java:59) 
    at org.springframework.data.mongodb.repository.support.DefaultEntityInformationCreator.getEntityInformation(DefaultEntityInformationCreator.java:48) 
    at org.springframework.data.mongodb.repository.support.MongoRepositoryFactory.getEntityInformation(MongoRepositoryFactory.java:140) 
    at org.springframework.data.mongodb.repository.support.MongoRepositoryFactory.getTargetRepository(MongoRepositoryFactory.java:84) 
    at org.springframework.data.repository.core.support.RepositoryFactorySupport.getRepository(RepositoryFactorySupport.java:131) 
    at org.springframework.data.repository.core.support.RepositoryFactoryBeanSupport.getObject(RepositoryFactoryBeanSupport.java:114) 
    at org.springframework.data.repository.core.support.RepositoryFactoryBeanSupport.getObject(RepositoryFactoryBeanSupport.java:38) 
    at org.springframework.beans.factory.support.FactoryBeanRegistrySupport.doGetObjectFromFactoryBean(FactoryBeanRegistrySupport.java:142) 
    at org.springframework.beans.factory.support.FactoryBeanRegistrySupport.getObjectFromFactoryBean(FactoryBeanRegistrySupport.java:102) 
    at org.springframework.beans.factory.support.AbstractBeanFactory.getObjectForBeanInstance(AbstractBeanFactory.java:1441) 
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:305) 
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193) 
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.findAutowireCandidates(DefaultListableBeanFactory.java:848) 
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:790) 
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:707) 
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:478) 
    at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:87) 
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:284) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1106) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:517) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:456) 
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:294) 
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:225) 
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:291) 
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193) 
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.findAutowireCandidates(DefaultListableBeanFactory.java:848) 
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:790) 
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:707) 
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:478) 
    at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:87) 
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:284) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1106) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:517) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:456) 
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:294) 
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:225) 
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:291) 
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193) 
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:585) 
    at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:913) 
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:464) 
    at org.springframework.web.context.ContextLoader.configureAndRefreshWebApplicationContext(ContextLoader.java:384) 
    at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:283) 
    at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:111) 
    at org.eclipse.jetty.server.handler.ContextHandler.callContextInitialized(ContextHandler.java:764) 
    at org.eclipse.jetty.servlet.ServletContextHandler.callContextInitialized(ServletContextHandler.java:406) 
    at org.eclipse.jetty.server.handler.ContextHandler.startContext(ContextHandler.java:756) 
    at org.eclipse.jetty.servlet.ServletContextHandler.startContext(ServletContextHandler.java:242) 
    at org.eclipse.jetty.webapp.WebAppContext.startContext(WebAppContext.java:1221) 
    at org.eclipse.jetty.server.handler.ContextHandler.doStart(ContextHandler.java:699) 
    at org.eclipse.jetty.webapp.WebAppContext.doStart(WebAppContext.java:454) 
    at org.mortbay.jetty.plugin.JettyWebAppContext.doStart(JettyWebAppContext.java:256) 
    at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:59) 
    at org.eclipse.jetty.server.handler.HandlerCollection.doStart(HandlerCollection.java:224) 
    at org.eclipse.jetty.server.handler.ContextHandlerCollection.doStart(ContextHandlerCollection.java:167) 
    at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:59) 
    at org.eclipse.jetty.server.handler.HandlerCollection.doStart(HandlerCollection.java:224) 
    at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:59) 
    at org.eclipse.jetty.server.handler.HandlerWrapper.doStart(HandlerWrapper.java:90) 
    at org.eclipse.jetty.server.Server.doStart(Server.java:263) 
    at org.mortbay.jetty.plugin.JettyServer.doStart(JettyServer.java:65) 
    at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:59) 
    at org.mortbay.jetty.plugin.AbstractJettyMojo.startJetty(AbstractJettyMojo.java:511) 
    at org.mortbay.jetty.plugin.AbstractJettyMojo.execute(AbstractJettyMojo.java:364) 
    at org.mortbay.jetty.plugin.JettyRunMojo.execute(JettyRunMojo.java:516) 
    at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:101) 
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:209) 
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:153) 
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:145) 
    at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:84) 
    at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:59) 
    at org.apache.maven.lifecycle.internal.LifecycleStarter.singleThreadedBuild(LifecycleStarter.java:183) 
    at org.apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.java:161) 
    at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:320) 
    at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:156) 
    at org.apache.maven.cli.MavenCli.execute(MavenCli.java:537) 
    at org.apache.maven.cli.MavenCli.doMain(MavenCli.java:196) 
    at org.apache.maven.cli.MavenCli.main(MavenCli.java:141) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
    at java.lang.reflect.Method.invoke(Method.java:597) 
    at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:290) 
    at org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:230) 
    at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:409) 
    at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:352) 
+0

Nie zrozumiałem twojego pytania. czy możesz wyjaśnić jaśniej? –

+0

tak. Z powodzeniem zintegrowałem mongodbę i działa świetnie. Mam jednak problem, gdy próbuję uruchomić moją usługę, gdy mongodb jest niedostępna. Problem polega na tym, że ze względu na autowirowanie, Spring próbuje zainicjować mój obiekt repozytorium mongodów i nie powiedzie się, ponieważ próbuje komunikować się z mongo. Kiedy tak się stanie, uniemożliwi to uruchomienie całej mojej usługi, więc zamiast wyświetlać jakiś komunikat o błędzie lub nawet korzystać z zapisanej w pamięci podręcznej wersji moich danych, każde żądanie otrzymuje odpowiedź o niedostępności usługi 503. – TheZuck

+0

Jak widać w tym wyjątku, dzieje się to w fazie org.springframework.web.context.ContextLoader.initWebApplicationContext (ContextLoader.java:283), co oznacza (zakładam), że moja aplikacja internetowa nie zakończyła init faza. – TheZuck

Odpowiedz

2

W moich poszukiwań, nie znalazłem dobry sposób, aby obsłużyć Wiosna to bezpośrednio. Najprawdopodobniej musisz ustawić proxy między usługą a repozytorium. Post tutaj: How to make App server to start even if database is down? podchodzi do tego problemu.

Dla ciebie to prawdopodobnie oznacza posiadanie fasoli (RepositoryProxy) tworzonej przez Spring. Ten komponent bean spróbuje ręcznie utworzyć połączenie Mongo lub pobierze repozytorium z leniwego komponentu kontekstu aplikacji. Jeśli połączenie Mongo nie powiedzie się, przechwytuje wyjątek i tworzy połączenie/obiekt dla buforowanych danych lub odpowiedzi na błędy. Może również utworzyć proces czasowy, aby ponownie połączyć się z instancją Mongo.

+0

Mam różne klasy repozytoriów dla różnych obiektów, więc to wszystko uczyniłoby znacznie bardziej skomplikowanym. Jeśli nikt nie wpadnie na świetny pomysł, przyznam punkty za brak lepszej odpowiedzi, ale wciąż czekam na bohatera ... – TheZuck

+0

Uzgodnione; To nie jest idealne (wzdrygam się na to), ale nie znalazłem nic lepszego. – cmonkey

+0

To jest rzeczywiście wzór, z którego wielokrotnie korzystałem w przeszłości w tego rodzaju problemach. W rzeczywistości nie jest to typowy dla Spring'a - to tylko "zarządzanie połączeniami": proxy dostęp do połączenia zasobów przez menedżera, który wie, jak poradzić sobie z awarią połączenia, być może przełączeniem awaryjnym na usługę rezerwową, ponownym połączeniem w tle inteligentnym itp. –

Powiązane problemy