Java 两个具有不同属性的Mongo存储库
我有两个存储库:Java 两个具有不同属性的Mongo存储库,java,spring,mongodb,spring-boot,Java,Spring,Mongodb,Spring Boot,我有两个存储库: @Repository public interface SpringLRepository extends MongoRepository<L, String> { } 我想为SpringLRepository和SpringSRepository分别设置属性,或者只更改部分属性,如spring.data.mongodb.database参数 我试着遵循这一点: 首先,如果我不排除MongoDataAutoConfiguration.class: @SpringB
@Repository
public interface SpringLRepository extends MongoRepository<L, String> {
}
我想为SpringLRepository
和SpringSRepository
分别设置属性,或者只更改部分属性,如spring.data.mongodb.database
参数
我试着遵循这一点:
首先,如果我不排除MongoDataAutoConfiguration.class
:
@SpringBootApplication(
exclude = {
//MongoDataAutoConfiguration.class
})
我有:
Parameter 1 of method gridFsTemplate in org.springframework.boot.autoconfigure.data.mongo.MongoDbFactoryDependentConfiguration required a single bean, but 2 were found:
- mongoLTemplate: defined by method 'mongoLTemplate' in class path resource [...l/core/application/LMongoConfig.class]
- mongoSTemplate: defined by method 'mongoSTemplate' in class path resource [...s/core/application/SMongoConfig.class]
我能做些什么?
现在我不再使用@Repository
,我添加了两个类。
第一个配置:
@Configuration
@EnableMongoRepositories(
basePackages = "...s.infrastructure.secondary.persistence",
mongoTemplateRef = "mongoSTemplate"
)
public class SMongoConfig {
@Value("${spring.data.mongodb.lead.host}")
private String mongoHost;
@Value("${spring.data.mongodb.lead.port}")
private Integer mongoPort;
@Bean
@Qualifier("mongoSTemplate")
MongoTemplate mongoSTemplate(@Qualifier("mongoSDbFactory") MongoDbFactory mongoDbFactory, MongoConverter converter) {
MongoTemplate mongoTemplate = new MongoTemplate(mongoDbFactory, converter);
mongoTemplate.setWriteConcern(WriteConcern.MAJORITY);
mongoTemplate.setWriteResultChecking(WriteResultChecking.EXCEPTION);
return mongoTemplate;
}
@Bean
@Qualifier("mongoSimulationsDbFactory")
public MongoDbFactory mongoSimulationsDbFactory() {
MongoClientOptions.Builder mongoOperations = MongoClientOptions.builder();
mongoOperations.socketTimeout(1000 * 2);
mongoOperations.connectTimeout(1000 * 2);
MongoCredential mongoCredential = MongoCredential.createCredential("root", "admin", "example".toCharArray());
return new SimpleMongoDbFactory(
new MongoClient(
new ServerAddress(mongoHost, mongoPort),
Collections.singletonList(mongoCredential)
),
"s");
}
}
第二个配置:
@Configuration
@EnableMongoRepositories(
basePackages = "...l.infrastructure.secondary.persistence",
mongoTemplateRef = "mongoLTemplate"
)
public class LMongoConfig{
@Value("${spring.data.mongodb.l.host}")
private String mongoHost;
@Value("${spring.data.mongodb.l.port}")
private Integer mongoPort;
@Value("${spring.data.mongodb.l.database}")
private String mongoDB;
@Value("${spring.data.mongodb.l.password}")
private char[] mongoPassword;
@Bean
@Qualifier("mongoLTemplate")
MongoTemplate mongoLTemplate(@Qualifier("mongoLDbFactory") MongoDbFactory mongoDbFactory, MongoConverter converter) {
MongoTemplate mongoTemplate = new MongoTemplate(mongoDbFactory, converter);
mongoTemplate.setWriteConcern(WriteConcern.MAJORITY);
mongoTemplate.setWriteResultChecking(WriteResultChecking.EXCEPTION);
return mongoTemplate;
}
@Bean
@Qualifier("mongoLDbFactory")
public MongoDbFactory mongoLDbFactory() {
MongoClientOptions.Builder mongoOperations = MongoClientOptions.builder();
mongoOperations.socketTimeout(1000 * 2);
mongoOperations.connectTimeout(1000 * 2);
MongoCredential mongoCredential = MongoCredential.createCredential("root", "admin", "example".toCharArray());
return new SimpleMongoDbFactory(
new MongoClient(
new ServerAddress(mongoHost, mongoPort),
Collections.singletonList(mongoCredential)
),
"s");
}
}
现在,这段代码保存s
和l
以分离存储库,但
我有几点担心。
SimpleMongoDbFactory
和MongoClient
已被弃用,很难找到新的Mongo
示例
@Bean
public SimpleMongoClientDbFactory metadataFactory(final MongoProperties mongo) throws Exception {
return new SimpleMongoClientDbFactory(mongo.getUri());
}
@Bean
public MongoConfigurationProperties mongoProperties() {
return new MongoConfigurationProperties();
}
我用这个。好吧,它还没有被弃用。在本例中,mongoProperties是一个@ConfigurationProperties bean,它指向uri-需要多个uri,因为我在这个应用程序中连接了多个数据库。这里的解决方案对我很有效
@Configuration
@EnableMongoRepositories(
basePackages = "...l.infrastructure.secondary.persistence",
mongoTemplateRef = "mongoLTemplate"
)
public class LMongoConfig{
@Value("${spring.data.mongodb.l.host}")
private String mongoHost;
@Value("${spring.data.mongodb.l.port}")
private Integer mongoPort;
@Value("${spring.data.mongodb.l.database}")
private String mongoDB;
@Value("${spring.data.mongodb.l.password}")
private char[] mongoPassword;
@Bean
@Qualifier("mongoLTemplate")
MongoTemplate mongoLTemplate(@Qualifier("mongoLDbFactory") MongoDbFactory mongoDbFactory, MongoConverter converter) {
MongoTemplate mongoTemplate = new MongoTemplate(mongoDbFactory, converter);
mongoTemplate.setWriteConcern(WriteConcern.MAJORITY);
mongoTemplate.setWriteResultChecking(WriteResultChecking.EXCEPTION);
return mongoTemplate;
}
@Bean
@Qualifier("mongoLDbFactory")
public MongoDbFactory mongoLDbFactory() {
MongoClientOptions.Builder mongoOperations = MongoClientOptions.builder();
mongoOperations.socketTimeout(1000 * 2);
mongoOperations.connectTimeout(1000 * 2);
MongoCredential mongoCredential = MongoCredential.createCredential("root", "admin", "example".toCharArray());
return new SimpleMongoDbFactory(
new MongoClient(
new ServerAddress(mongoHost, mongoPort),
Collections.singletonList(mongoCredential)
),
"s");
}
}
@Bean
public SimpleMongoClientDbFactory metadataFactory(final MongoProperties mongo) throws Exception {
return new SimpleMongoClientDbFactory(mongo.getUri());
}
@Bean
public MongoConfigurationProperties mongoProperties() {
return new MongoConfigurationProperties();
}