我有一个基于休息的弹簧启动微服务,我想配置,将其存储在一个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;
}
}
proment.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;
}
}
我想让Prospects Collection仅存在Prospect数据库中。
我尝试丢弃数据库并重新启动服务,但它们重新启动。关于如何正确执行此操作的任何想法?
如果您的应用程序指向一个MongoDB实例,并且您想根据每个Web请求切换数据库。您可以查看此示例示例,https://github.com/loki-afro/multi-tenant-spring-spring-mongodb/blob/master/src/main/java/java/com/com/github/github/zarathustra/mongo/mongo/multitenantmongodbfactory.java ps: - 我发现了这一点,当我正在进行研究以实现多租户