gpt4 book ai didi

java - Spring Mongodb : configure documents to use specific dbs?

转载 作者:太空宇宙 更新时间:2023-11-04 10:52:49 24 4
gpt4 key购买 nike

我有一个基于 Rest 的 spring-boot 微服务,我想将其配置为将身份验证和 session 数据存储在一个 mongo 数据库中,并将应用程序数据存储在另一个数据库中。

我当前的设置大部分都有效,除了 spring 在两个数据库中创建我的所有文档之外。我查看了@Document()注释,但它没有可供数据库使用的参数。

在 mongo shell 中:

> show dbs
admin 0.000GB
authentication 0.000GB
prospect 0.000GB

> use authentication
switched to db authentication

> show collections
credentials
credentials_authorities
prospects
roles
sessions

> use prospect
switched to db prospect

> show collections
prospects

application.properties:

com.mycompany.prospect.domainName=mycompany.com

spring.data.mongodb.host=mongodb-service
spring.data.mongodb.port=27017

com.mycompany.prospect.server.appDatabase=prospect
com.mycompany.prospect.server.sessionDatabase=authentication

HttpSessionConfig.java

@Configuration
@EnableMongoHttpSession()
public class HttpSessionConfig {

private final Logger logger = LoggerFactory.getLogger(this.getClass());

@Bean
public CookieSerializer cookieSerializer(
@Value("${com.mycompany.prospect.domainName:localhost}")
final String domainName) {

logger.info("Configuring DefaultCookieSerializer with DomainName '{}'.", domainName);

final DefaultCookieSerializer serializer = new DefaultCookieSerializer();
serializer.setDomainName(domainName);
serializer.setUseHttpOnlyCookie(true);
return serializer;
}

@Bean
public JdkMongoSessionConverter jdkMongoSessionConverter() {
return new JdkMongoSessionConverter();
}
}

MongoConfig.java

@Configuration
@EnableMongoRepositories
public class MongoConfig {

private final Environment env;

public MongoConfig(Environment env) {
this.env = env;
}

@Bean("applicationTemplate")
@Qualifier("applicationTemplate")
public MongoTemplate mongoTemplate(
final MappingMongoConverter mappingMongoConverter, final MongoClient mongoClient) {
final String databaseName =
env.getRequiredProperty("com.mycompany.prospect.server.appDatabase");

final MongoDbFactory dbFactory = new SimpleMongoDbFactory(mongoClient, databaseName);
return new MongoTemplate(dbFactory, mappingMongoConverter);
}

@Bean("mongoOperations")
@Qualifier("mongoOperations")
@Primary
public MongoTemplate mongoOperations(
final MappingMongoConverter mappingMongoConverter, final MongoClient mongoClient) {
final String databaseName =
env.getRequiredProperty("com.mycompany.prospect.server.sessionDatabase");
final MongoDbFactory dbFactory = new SimpleMongoDbFactory(mongoClient, databaseName);
final MongoTemplate mongoTemplate = new MongoTemplate(dbFactory, mappingMongoConverter);
return mongoTemplate;
}
}

Prospect.java

@Document(collection = "prospects")
public class Prospect {
@Id private String prospectId;

@TextIndexed() private String businessName;

public String getProspectId() {
return prospectId;
}

public void setProspectId(String prospectId) {
this.prospectId = prospectId;
}

public String getBusinessName() {
return businessName;
}

public void setBusinessName(final String businessName) {
this.businessName = businessName;
}
}

我希望潜在客户集合仅存在于潜在客户数据库中。

我尝试删除数据库并重新启动服务,但它们在重新启动后又恢复了。关于如何正确执行此操作有什么想法吗?

最佳答案

如果您的应用程序指向单个 mongodb 实例,并且您希望根据每个 Web 请求切换数据库。您可以看一下这个示例, https://github.com/Loki-Afro/multi-tenant-spring-mongodb/blob/master/src/main/java/com/github/zarathustra/mongo/MultiTenantMongoDbFactory.java

PS:- 我在研究实现 Multi-Tenancy 时发现了这一点

关于java - Spring Mongodb : configure documents to use specific dbs?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47621803/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com