Я хочу иметь 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();
}
}