2013-01-16 26 views
5

Tôi đã tích hợp MongoDB bằng Spring, dịch vụ dữ liệu của tôi có kho lưu trữ mongo tự động và tất cả đều hoạt động. Ngoại trừ khi db bị hỏng trong khi khởi động.Xử lý các vấn đề kết nối mongodb khi khởi động

Khi mongo bị tắt trong khi dịch vụ xuất hiện, có một ngoại lệ được ném trong khi khởi tạo và trong trường hợp đó, toàn bộ dịch vụ không khởi động được. Đây không phải là điều tôi muốn rõ ràng.

Những gì tôi muốn xảy ra là để nắm bắt những ngoại lệ và bắt đầu dịch vụ, và xử lý các vấn đề db sẵn có một cách duyên dáng (như hiển thị một trang nói rằng chúng tôi đã có vấn đề tạm thời, sử dụng một bộ nhớ cache, hoặc bất cứ điều gì)

lớp kho của tôi:

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

dịch vụ My lớp:

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

Và Bộ điều khiển:

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

    @Autowired 
    private MediaDataService mediaDataService; 
... 
} 

Các lỗi tôi nhận được trong quá trình khởi động:

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

tôi không hiểu câu hỏi của bạn. bạn có thể giải thích rõ hơn không? –

+0

yup. Tôi đã tích hợp thành công mongodb, và nó hoạt động rất tốt. Tuy nhiên, tôi có một vấn đề khi tôi cố gắng để bắt đầu dịch vụ của tôi trong khi mongodb không có sẵn. Vấn đề là do autowiring, Spring cố gắng khởi tạo đối tượng kho lưu trữ mongodb của tôi, và thất bại vì nó cố gắng giao tiếp với mongo. Khi điều đó xảy ra, nó sẽ ngừng toàn bộ dịch vụ của tôi khi khởi động, vì vậy thay vì có thể hiển thị một số thông báo lỗi hoặc thậm chí sử dụng phiên bản dữ liệu được lưu trong bộ nhớ cache, mọi yêu cầu sẽ nhận được phản hồi không có dịch vụ 503. – TheZuck

+0

Như bạn có thể thấy trong trường hợp ngoại lệ, điều này xảy ra trong giai đoạn org.springframework.web.context.ContextLoader.initWebApplicationContext (ContextLoader.java:283), có nghĩa là (tôi giả định) rằng ứng dụng web của tôi không hoàn thành init giai đoạn. – TheZuck

Trả lời

2

Trong tìm kiếm của tôi, tôi thấy không có cách nào tốt để làm cho mùa xuân xử lý này trực tiếp. Bạn có thể cần phải đặt một proxy giữa dịch vụ của bạn và kho lưu trữ. Bài đăng ở đây: How to make App server to start even if database is down? tiếp cận vấn đề này.

Đối với bạn, điều này có thể có nghĩa là có một bean (RepositoryProxy) mà Spring tạo ra. Bean này sẽ cố gắng tạo kết nối Mongo theo cách thủ công, hoặc lấy kho từ bean lười của ngữ cảnh ứng dụng. Nếu kết nối Mongo không thành công, nó sẽ bắt ngoại lệ và tạo kết nối/đối tượng cho dữ liệu được lưu trong bộ nhớ cache hoặc các phản hồi lỗi. Nó cũng có thể tạo ra một quá trình hẹn giờ để kết nối lại với cá thể Mongo.

+0

Tôi có các lớp kho lưu trữ khác nhau cho các đối tượng khác nhau, vì vậy điều này sẽ làm cho mọi thứ phức tạp hơn nhiều. Nếu không ai nghĩ ra một ý tưởng sáng chói nào, tôi sẽ trao giải thưởng cho việc thiếu một câu trả lời tốt hơn, nhưng vẫn đang chờ một anh hùng ... – TheZuck

+0

Đồng ý; Nó không hoàn hảo (tôi cringe at it) nhưng tôi đã không tìm thấy bất cứ điều gì tốt hơn. – cmonkey

+0

Đây thực sự là mẫu mà tôi đã sử dụng nhiều lần trong quá khứ cho loại vấn đề này. Trên thực tế, nó không phải là một mô hình cụ thể theo mùa xuân - nó chỉ là "quản lý kết nối": truy cập proxy vào kết nối tài nguyên thông qua người quản lý biết cách xử lý lỗi kết nối, có thể chuyển sang dịch vụ dự phòng, kết nối lại nền thông minh, v.v. –

Các vấn đề liên quan