@Repository
public class MyCustomRepository {
private Logger logger = LoggerFactory.getLogger(MyCustomRepository.class);
@Autowired
private MongoTemplateA mongoTemplateA;// Need to know if this is possible & how
@Autowired
private MongoTemplateB mongoTemplateB;// Need to know if this is possible & how
public List<MyModel> findByCriteria(MyRequest request) {
List<MyModel> result;
//Query query = <build query based on request>
if (request.getUserType().equals("A")) {
result = mongoTemplateA.find(query, MyModel.class);
} else {
result = mongoTemplateB.find(query, MyModel.class);
}
logger.debug("Result fetched with {} records", result.size());
return result;
}
}
正如@Lucia正确指出的,下面是如何做到的:
@Configuration
@EnableMongoRepositories(basePackages = "com.snk.repository", mongoTemplateRef = "mongoTemplateA")
public class MongoConfigA {
// Configuration class for DB 1 access
}
@Configuration
@EnableMongoRepositories(basePackages = "com.snk.repository", mongoTemplateRef = "mongoTemplateB")
public class MongoConfigB {
// Configuration class for DB 2 access
}
@ConfigurationProperties(prefix = "mongodb")
public class MultipleMongoProperties {
private MongoProperties adb = new MongoProperties();
private MongoProperties bdb = new MongoProperties();
public MongoProperties getAdb() {
return adb;
}
public MongoProperties getBdb() {
return bdb;
}
}
@Configuration
@EnableConfigurationProperties(MultipleMongoProperties.class)
public class MultipleMongoConfig {
@Autowired
private MultipleMongoProperties mongoProperties = new MultipleMongoProperties();
@Bean(name = "mongoTemplateA")
@Primary
public MongoTemplate mongoTemplateA() {
return new MongoTemplate(aDbFactory(this.mongoProperties.getAdb()));
}
@Bean(name = "mongoTemplateB")
public MongoTemplate mongoTemplateB() {
return new MongoTemplate(bDbFactory(this.mongoProperties.getBdb()));
}
@Bean
@Primary
public MongoDbFactory aDbFactory(final MongoProperties mongo) {
return new SimpleMongoDbFactory(new MongoClientURI(mongo.getUri()));
}
@Bean
public MongoDbFactory bDbFactory(final MongoProperties mongo) {
return new SimpleMongoDbFactory(new MongoClientURI(mongo.getUri()));
}
}
@Autowired
@Qualifier("mongoTemplateA")
private MongoTemplate mongoTemplateA;
@Autowired
@Qualifier("MongoTemplateB")
private MongoTemplate MongoTemplateB;
mongodb.adb.uri=mongodb://user:pass@myhost1:27017/adb
mongodb.bdb.uri=mongodb://user:pass@myhost2:27017/bdb
如果您设置了mongo rplica,则可以将URL设置为:
mongodb.adb.uri=mongodb://user:pass@myhost1,myhost2,myhost13/adb?replicaSet=rsName
mongodb.bdb.uri=mongodb://user:pass@myhost1,myhost2,myhost13/bdb?replicaSet=rsName
问题内容: 语境 我正在创建一个数据库环境,在该环境中,我想以几种不同的模式拆分数据以用于不同的用户组。但是,由于其中一个数据库包含公共实体,因此应该共享给所有人。 假设数据库: DB1-通用实体; 车轮实体 DB2-组“ A”; 汽车实体 DB3-组“ B”; 摩托车实体 我有三个不同的项目: 项目1: 车轮豆 专案2: 汽车制造商 专案3: 摩托车构造者 问题 我正在尝试从项目/方案(2,“
问题内容: 语境 我正在创建一个数据库环境,在该环境中,我想以几种不同的模式拆分数据以用于不同的用户组。虽然,由于其中包含公共实体,所以应该将这些数据库之一共享给所有人。 假设数据库: DB1-通用实体; 车轮实体 DB2-组“ A”; 汽车实体 DB3-组“ B”; 摩托车实体 我有三个不同的项目: 项目1: 车轮豆 专案2: 汽车制造商 专案3: 摩托车构造者 问题 我正在尝试从项目/方案(2
我可以重写,以便它将其数据存储在map中,但这意味着每个方法还需要传递另一个参数。变成,变成,看起来太难看了。操作还需要传递。 据我所知,另一种方法是创建一个存储库,它将管理的数据,并调用操作来重新初始化它。 这种方法的问题是,如果我们有两个(A和B),并且活动容器是A,因此包含在A中呈现的项,容器B仍然会监听的更改。如果检查是方法中的活动容器,我可以添加检查,但我不确定应该这样做。
问题内容: 我已经使用spring-data使用spring boot分别配置了neo4j和cassandra存储库。但是,当我尝试在同一项目中使用两个存储库时,它无法按预期工作。 这是我的文件夹结构。 ----- org.test.project 请注意,所有存储库都通过相应的DAO扩展了相应的spring-datapository。 当我使用此配置运行时,会出现以下错误。 我尝试更改存储库名称
这可能不是典型的设置,但由于更高的决策,我们最终在一个应用程序中有多个 kafka 集群,每个集群有多个主题,每个集群可能具有不同的序列化策略。Json/avro.avro可能与融合的架构注册表一起使用,或者使用单个对象编码。 好吧,我通过构建自己的抽象和注册中心,分析配置并手动创建大部分内容,以某种方式实现了它,但我觉得我需要在几个地方多次重复主题名称、模式注册url等内容,以便创建所有需要的b
我有 和 两个不同的ApplicationPath和类如下所示。 如果我在param-value中取出一个包,这是有效的,如果我更改@Path注释之一,这也是有效的,所以这是我的配置的问题? 我用的是1.10号球衣。谢谢大家。