![](/img/trans.png)
[英]Spring MVC Could not initialize class com.mongodb.MongoClient
[英]How to use io.dropwizard.lifecycle.Managed with com.mongodb.MongoClient?
我正在尝试在Dropwizard应用程序中执行以下操作:
public void run(SandmanConfiguration configuration, Environment environment) {
MongoClient mongoClient = configuration.getMongoFactory().build(environment);
environment.lifecycle().manage(mongoClient);
}
这引用了MongoFactory的build方法:
public MongoClient build(Environment environment) {
// Example conn string: "mongodb://db1.example.net,db2.example.net:2500/?replicaSet=test"
MongoClient mongoClient = new MongoClient(getHost(), getPort());
environment.lifecycle().manage(new Managed() {
@Override
public void start() {
}
@Override
public void stop() {
LOGGER.info("Mongo Client is being shut down...");
mongoClient.close();
}
});
return mongoClient;
}
但是,当我尝试以这种方式使用mongoClient时,却出现错误:
environment.lifecycle().manage(mongoClient);
Cannot resolve method 'manage(com.mongodb.MongoClient)
我刚刚发现,最好的办法是创建一个单独的调用,以实现mongo客户端的启动和停止。
import com.mongodb.MongoClient;
import io.dropwizard.lifecycle.Managed;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class MongoClientManager implements Managed {
private static final Logger LOGGER = LoggerFactory.getLogger(MongoClientManager.class);
private final MongoClient client;
public MongoClientManager(MongoClient client) {
this.client = client;
}
@Override
public void start() throws Exception {
LOGGER.info("MongoClient is starting up...");
}
@Override
public void stop() throws Exception {
LOGGER.info("MongoClient is being shut down...");
client.close();
}
}
这样,我可以在应用停止时安全地关闭客户端。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.