использовать разные схемы при разработке и производстве. Как я могу настроить его весной? - PullRequest
0 голосов
/ 13 февраля 2020

Я хочу иметь 2 разные схемы для MongoDB: одну для производства и другую для разработки. Как я могу сделать это весной?

Например, если у меня есть клиент и коллекция клиентов в рабочей среде, я не хочу, чтобы при запуске моего приложения в режиме разработки оно считывало и записывало одну и ту же коллекцию в рабочей среде. Каков наилучший способ его настройки?

Я предпочитаю не использовать БД в памяти, если это возможно.

Это моя текущая конфигурация:

@Configuration
@EnableConfigurationProperties(MongoProperties.class)
@EnableMongoRepositories(basePackages = { "eu.company.web.repository" })
public class DatabaseConfig extends AbstractMongoConfiguration {

private static final Logger LOGGER = LoggerFactory.getLogger(DatabaseConfig.class);

private final static int MAX_CONNECTION_IDLE_TIMES = 3 * 60 * 1000;

private final static int MAX_CONNECTION_LIFE_TIMES = 15 * 60 * 1000;

private final MongoProperties dbProperties;

@Value("${spring.data.mongodb.host2}")
private String host2;

@Value("${spring.data.mongodb.host3}")
private String host3;

public DatabaseConfig(MongoProperties properties) {
    this.dbProperties = properties;
}


@Override
protected String getMappingBasePackage() {
    return "eu.company.web.repository.model";
}

@Bean
MongoTransactionManager transactionManager(MongoDbFactory dbFactory) {
    return new MongoTransactionManager(dbFactory);
}

@Override
public MongoClient mongoClient() {
    LOGGER.info("mongoClient(): init mongo network client.");
    final ServerAddress defaultAddress = new ServerAddress("localhost", MongoProperties.DEFAULT_PORT);
    final ServerAddress addr = ServerAddressHelper
            .createServerAddress(StringUtils
                    .hasText(dbProperties.getHost()) ? dbProperties.getHost() : defaultAddress.getHost(),
                            dbProperties.getPort() != null ? dbProperties.getPort().intValue() : defaultAddress.getPort());
    final ArrayList<ServerAddress> seeds = new ArrayList<>(1);
    seeds.add(addr);
    // test FIXME: settare da properties
    if (host2 != null) seeds.add(new ServerAddress(host2, dbProperties.getPort()));
    if (host3 != null)  seeds.add(new ServerAddress(host3, dbProperties.getPort()));

    String database = (this.dbProperties.getAuthenticationDatabase() != null)
            ? this.dbProperties.getAuthenticationDatabase() : this.dbProperties.getMongoClientDatabase();

    final MongoCredential cred;
    if (dbProperties.getUsername() != null) 
        cred = MongoCredential.createCredential(dbProperties.getUsername(), database, dbProperties.getPassword());              
    else cred = null; 
    final MongoClientOptions opt = MongoClientOptions.builder()
            .retryWrites(true)
            .maxConnectionIdleTime(MAX_CONNECTION_IDLE_TIMES)
            .maxConnectionLifeTime(MAX_CONNECTION_LIFE_TIMES)
            .sslEnabled(true)
            .writeConcern(WriteConcern.ACKNOWLEDGED)
            .build();

    return cred != null ? new MongoClient(seeds, cred, opt) : new MongoClient(seeds, opt);
}

@Override
protected String getDatabaseName() {
    return dbProperties.getMongoClientDatabase();
}

}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...