Spring MongoDB:配置文档以使用特定的DBS



我有一个基于休息的弹簧启动微服务,我想配置,将其存储在一个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: - 我发现了这一点,当我正在进行研究以实现多租户

最新更新