spring - 在开发和生产中使用不同的模式。如何在 Spring 中配置它?
问题描述
我想为 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();
}
}
解决方案
推荐阅读
- c# - MVVM 视图仅在视图模型的构造函数中设置数据时更新
- javascript - Execute AMPScript into the same CloudPage
- json - 发送包含数组的数组 json 主体(Alamofire、Swift、iOS)
- ios - How to use SCNTechnique to create a "masked" portal effect in SceneKit / ARKit?
- html - 放置一个
- c# - Causes of TCPClient socket error 0x80004005
- java - Java中的间隔,用户选择最小值和最大值
- freemarker - 按值过滤数组
- c++ - 我应该如何在 C++ 中打印 pthread ID?
- python - TypeError:我的python脚本需要一个整数