我有一种情况,我有多个客户端连接到我的应用程序,我想在同一个Mongo服务器中给每个客户端自己的"架构/数据库".
我的配置类:
@Configuration
public class MongoDbConfiguration {
@Bean
@Primary
public MongoDbFactory mongoDbFactory() throws UnknownHostException {
return new MultiTenantMongoDbFactory();
}
@Bean
@Primary
public MongoTemplate mongoTemplate() throws UnknownHostException {
return new MongoTemplate(mongoDbFactory());
}
}
Run Code Online (Sandbox Code Playgroud)
多租户Db工厂
public class MultiTenantMongoDbFactory extends SimpleMongoDbFactory {
public MultiTenantMongoDbFactory() throws UnknownHostException {
super(getMongoClient(), TenantContext.getTenant());
}
@Override
public DB getDb() throws DataAccessException {
String tenant = TenantContext.getTenant();
return getDb(tenant);
}
private static MongoClient getMongoClient() {
String tenant = TenantContext.getTenant();
System.out.println("Database name in factory class :"+tenant);
if (tenant.equalsIgnoreCase("ncet")) {
MongoCredential …
Run Code Online (Sandbox Code Playgroud) 如何使用流转换以下代码而不使用每个循环.
List<Topic>
.所有列表应合并为List<Topic>
.Map<id,topicName>
从List<Topic>
对象模型:
Subject
id,....
List<Topic>
Topic
id,name
public Map<String, String> getSubjectIdAndName(final String subjectId) {
List<Subject> list = getAllSubjects(); // api method returns all subjects
//NEEDS TO IMPROVE CODE USING STREAMS
list = list.stream().filter(e -> e.getId().equals(subjectId)).collect(Collectors.toList());
List<Topic> topicList = new ArrayList<>();
for (Subject s : list) {
List<Topic> tlist = s.getTopics();
topicList.addAll(tlist);
}
return topicList.stream().collect(Collectors.toMap(Topic::getId, Topic::getName));
}
Run Code Online (Sandbox Code Playgroud) 我有返回的API,Map<String,String>
需要将其转换为DTO。
SubjectIdAndNameDTO (id, name constructor args)
id
name
Run Code Online (Sandbox Code Playgroud)
当前的实现使用传统的for循环和Map.EnterSet。我如何使用Java8的功能来简单地执行以下代码。
Map<String, String> map = getSubjectIdAndNameMap();
// How can this code can be improved by using Java8 Stream and method references
List<SubjectIdAndNameDTO> subIdNameDTOList = new ArrayList<>();
for (Entry<String, String> keyset : map.entrySet()) {
SubjectIdAndNameDTO subjectIdNameDTO =
new SubjectIdAndNameDTO(keyset.getKey(), keyset.getValue());
subIdNameDTOList.add(subjectIdNameDTO);
}
Run Code Online (Sandbox Code Playgroud)