我正在尝试使用Spring连接到两个不同的MongoDB(1.5.2。 - >我们在内部框架中包含Spring,因此它不是最新版本)这已经部分但不完全。更确切地说,我发现了一种奇怪的行为,我将在展示我的设置后在下面描述。
所以这就是我到目前为止所做的:
项目结构
backend
config
domain
customer
internal
repository
customer
internal
service
在config
我有我的Mongoconfigurations。
我创建了一个扩展AbstractMongoConfiguration
的基类。此类包含数据库,主机等的字段,这些字段填充了application.yml中的属性。它还包含一些创建MongoClient
和SimpleMongoDbFactory
的方法。
此外,还有两个自定义配置类。对于每个MongoDB一个配置。两者都扩展了基类。
以下是它们的编码方式:
主要连接
@Primary
@EntityScan(basePackages = "backend.domain.customer")
@Configuration
@EnableMongoRepositories(
basePackages = {"backend.repository.customer"},
mongoTemplateRef = "customerDataMongoTemplate")
@ConfigurationProperties(prefix = "customer.mongodb")
public class CustomerDataMongoConnection extends BaseMongoConfig{
public static final String TEMPLATE_NAME = "customerDataMongoTemplate";
@Override
@Bean(name = CustomerDataMongoConnection.TEMPLATE_NAME)
public MongoTemplate mongoTemplate() {
MongoClient client = getMongoClient(getAddress(),
getCredentials());
SimpleMongoDbFactory factory = getSimpleMongoDbFactory(client,
getDatabaseName());
return new MongoTemplate(factory);
}
}
第二个配置类看起来非常相似。这是:
@EntityScan(basePackages = "backend.domain.internal")
@Configuration
@EnableMongoRepositories(
basePackages = {"backend.repository.internal"}
mongoTemplateRef = InternalDataMongoConnection.TEMPLATE_NAME
)
@ConfigurationProperties(prefix = "internal.mongodb")
public class InternalDataMongoConnection extends BaseMongoConfig{
public static final String TEMPLATE_NAME = "internalDataMongoTemplate";
@Override
@Bean(name = InternalDataMongoConnection.TEMPLATE_NAME)
public MongoTemplate mongoTemplate() {
MongoClient client = getMongoClient(getAddress(), getCredentials());
SimpleMongoDbFactory factory = getSimpleMongoDbFactory(client,
getDatabaseName());
return new MongoTemplate(factory);
}
}
如您所见,我使用EnableMongoRepositories
来定义哪个存储库应该使用哪个连接。
我的存储库的定义与Spring文档中描述的一样。
但是,这是一个位于包backend.repository.customer
中的示例:
public interface ContactHistoryRepository extends MongoRepository<ContactHistoryEntity, String> {
public ContactHistoryEntity findById(String id);
}
问题是我的后端始终只使用此设置的主连接。有趣的是,当我删除MongoTemplate
(仅@Bean
)的beanname时,后端会使用辅助连接(InternalMongoDataConnection
)。对于所有已定义的存储库都是如此。
我的问题是,我怎样才能实现我的后端真正处理这两种联系?可能我错过了设置另一个参数/配置?
由于这是一篇相当广泛的帖子,如果我忘记了提及的话,我会道歉。请在评论中询问缺失的信息。
答案 0 :(得分:0)
我找到了答案。
在我的包结构中,有一个空配置类(我的同事),注释为@Configuration
和@EnableMongoRepositories
。这触发了Stpring Data的自动布线过程,因此导致了我上面报告的问题。
我只是删除了这个类,现在它可以正常工作!