2014-10-16 4 views
1

Я пытаюсь использовать @EnableMongoRepositories для использования два отдельных Монго хранилищ, как:Разъяснения о @EnableMongoRepositories

@Configuration 
@EnableMongoRepositories(mongoTemplateRef = "mongoBOTemplate", basePackages = "sandbox.dao.bo") 
public class BOMongoConfig { 

    @Value("#{mongo.hostBO}") 
    private String hostBO; 

    @Value("#{mongo.databaseBO}") 
    private String databaseBO; 

    @Bean 
    public MongoDbFactory mongoBODbFactory() throws Exception { 
     return new SimpleMongoDbFactory(new MongoClient(hostBO), databaseBO); 
    } 

    @Bean 
    public MongoTemplate mongoBOTemplate() throws Exception { 
     return new MongoTemplate(mongoBODbFactory()); 
    } 
} 

и

@Configuration 
@EnableMongoRepositories(mongoTemplateRef = "mongoTemplate", basePackages = "sandbox.dao.sandbox") 
public class SandboxMongoConfig { 

    @Value("#{mongo.host}") 
    private String host; 

    @Value("#{mongo.database}") 
    private String database; 

    @Bean 
    public MongoDbFactory mongoDbFactory() throws Exception { 
     return new SimpleMongoDbFactory(new MongoClient(host), database); 
    } 

    @Bean 
    public MongoTemplate mongoTemplate() throws Exception { 
     return new MongoTemplate(mongoDbFactory()); 
    } 
} 

, но я запутался из-за эту ошибку:

710 [RMI TCP Connection(2)-127.0.0.1] ERROR org.springframework.web.servlet.DispatcherServlet - Context initialization failed 
java.lang.IllegalArgumentException: Environment must not be null! 
    at org.springframework.util.Assert.notNull(Assert.java:112) 
    at org.springframework.data.repository.config.RepositoryConfigurationSourceSupport.<init>(RepositoryConfigurationSourceSupport.java:50) 
    at org.springframework.data.repository.config.AnnotationRepositoryConfigurationSource.<init>(AnnotationRepositoryConfigurationSource.java:74) 
    at org.springframework.data.repository.config.RepositoryBeanDefinitionRegistrarSupport.registerBeanDefinitions(RepositoryBeanDefinitionRegistrarSupport.java:74) 
    at org.springframework.context.annotation.ConfigurationClassParser.processImport(ConfigurationClassParser.java:340) 
    at org.springframework.context.annotation.ConfigurationClassParser.doProcessConfigurationClass(ConfigurationClassParser.java:233) 
    at org.springframework.context.annotation.ConfigurationClassParser.processConfigurationClass(ConfigurationClassParser.java:154) 
    at org.springframework.context.annotation.ConfigurationClassParser.processImport(ConfigurationClassParser.java:349) 
    at org.springframework.context.annotation.ConfigurationClassParser.doProcessConfigurationClass(ConfigurationClassParser.java:233) 
    at org.springframework.context.annotation.ConfigurationClassParser.processConfigurationClass(ConfigurationClassParser.java:154) 
    at org.springframework.context.annotation.ConfigurationClassParser.parse(ConfigurationClassParser.java:140) 
    at org.springframework.context.annotation.ConfigurationClassPostProcessor.processConfigBeanDefinitions(ConfigurationClassPostProcessor.java:282) 
    at org.springframework.context.annotation.ConfigurationClassPostProcessor.postProcessBeanDefinitionRegistry(ConfigurationClassPostProcessor.java:223) 
    at org.springframework.context.support.AbstractApplicationContext.invokeBeanFactoryPostProcessors(AbstractApplicationContext.java:630) 

Как я понял, есть только один вариант исправить использование @Profile. Я использую maven для управления профилем и не знаю, зачем мне нужны хардкорные профили в коде ...

Может ли кто-нибудь помочь мне с недоразумением? Спасибо.

ответ

1

Ну, вам нужно как-то показать весну, какую из этих конфигураций использовать для конкретного случая. В противном случае, как можно решить, какой экземпляр MongoDbFactory создать? Так что да, используйте @Profile выше обоих классов @Configuration.

Также обратите внимание, что профили maven не являются пружинными профилями. Возможно, вам не нужно смешивать maven с этим (если профиль maven используется только для установки весны). В таком случае вы можете добавить -Dspring.profiles.active=profile во время запуска приложения.

+0

как я понял там параметры должны помочь решить, какая конфигурация должна использоваться: mongoTemplateRef и basePackages. – Alex

+0

dop вы хотите использовать обе базы данных сразу? – freakman

+0

если так - я бы не стал винить EnableMongoRepositories за это исключение. Похоже, что Google-Google не должен быть нулевым! может быть результатом версий смешивания зависимостей. – freakman

 Смежные вопросы

  • Нет связанных вопросов^_^