2

次のような2つの別々のmongoリポジトリを使用するために @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 を使用していますが、コードでハードコア プロファイルが必要な理由がわかりません...

誤解を解くのを手伝ってくれる人はいますか?ありがとう。

4

1 に答える 1

3

まあ、特定のケースに使用する構成をSpringに表示する必要があります。そうでなければ、どの MongoDbFactory インスタンスを作成するかをどのように決定できますか? そうです、両方の @Configuration クラスの上で @Profile を使用してください。

また、Maven プロファイルはスプリング プロファイルではないことに注意してください。それにmavenを混ぜる必要がないかもしれません(mavenプロファイルがSpring 1を設定するためだけに使用されている場合)。そのような場合-Dspring.profiles.active=profile、アプリの実行中に追加できます。

于 2014-10-16T11:13:33.973 に答える