我正在編寫在MongoDB數據庫中獲取數據的Dropwizard微服務。微服務工作正常,但我努力在我的DAO中使用來自我的Dropwizard配置Java類的配置。目前,我有在建立到MongoDB數據庫的連接的方法中使用Dropwizard配置
public class XDAO implements IXDAO {
protected DB db;
protected DBCollection collection;
/* singleton */
private static XDAO instance;
/* Get singleton */
public static synchronized XDAO getSingleton(){
if (instance == null){
instance = new XDAO();
}
return instance;
}
/* constructor */
public XDAO(){
initDatabase();
initDatabaseIndexes();
}
private void initDatabase(){
MongoClient client = null;
try {
client = new Mongo("10.126.80.192",27017);
db = client.getDB("terre");
//then some other code
}
catch (final MongoException e){
...
}
catch (UnknownHostException e){
...
}
}
}
我想unhard碼的三個參數在這兩條線:
client = new Mongo("10.126.80.192", 27017);
db = client.getDB("terre");
我MongoConfiguration Java類是:
public class MongoConfiguration extends Configuration {
@JsonProperty
@NotEmpty
public String host;
@JsonProperty
public int port = 27017;
@JsonProperty
@NotEmpty
public String db_name;
public String getMongohost() {
return host;
}
public void setMongohost(String host) {
this.host = host;
}
public int getMongoport() {
return port;
}
public void setMongoport(int port) {
this.port = port;
}
public String getDb_name() {
return db_name;
}
public void setDb_name(String db_name) {
this.db_name = db_name;
}
}
我的資源類使用DAO是:
@Path("/mongo")
@Produces(MediaType.APPLICATION_JSON)
public class MyResource {
private XDAO xDAO = XDAO.getSingleton();
private String mongohost;
private String db_name;
private int mongoport;
public MyResource(String db_name, String mongohost, int mongoport) {
this.db_name = db_name;
this.mongohost = mongohost;
this.mongoport = mongoport;
}
public MyResource() {
}
@GET
@Path("/findByUUID")
@Produces(value = MediaType.APPLICATION_JSON)
@Timed
public Entity findByUUID(@QueryParam("uuid") String uuid) {
return xDAO.findByUUid(uuid);
}
}
而在我的應用程序類中有
@Override
public void run(final MongoConfiguration configuration, final Environment environment) {
final MyResource resource = new MyResource(configuration.getDb_name(), configuration.getMongohost(), configuration.getMongoport());
environment.jersey().register(resource);
}
爲了解決我的問題,我嘗試了很多東西。我想的最後一件事是在我XDAO
private String mongohost;
private String db_name;
private int mongoport;
private static final MongoConfiguration configuration = new MongoConfiguration();
與這段代碼在XDAO的構造即將加入這四個領域:
public XDAO(){
instance.mongohost = configuration.getMongohost();
instance.mongoport = configuration.getMongoport();
instance.db_name = configuration.getDb_name();
/* then like before */
initDatabase();
initDatabaseIndexes();
}
當我嘗試這個,我有一個空指針mongoHost和DB_NAME是空