如何在播放框架全局设置中调用 onStart 方法?
How to call onStart method in play framework Global setting?
我正在使用以下代码:
package common;
import com.mongodb.MongoClient;
import com.mongodb.ServerAddress;
import org.mongodb.morphia.Datastore;
import org.mongodb.morphia.Morphia;
import play.GlobalSettings;
import java.util.Arrays;
public class Global extends GlobalSettings {
private static Datastore datastore;
public static Datastore getDatastore() {
return datastore;
}
@Override
public void onStart(play.Application config) {
super.beforeStart(config);
int mongoPort = config.configuration().getInt("mongo.port");
MongoClient mongoClient = new MongoClient(Arrays.asList(
new ServerAddress(config.configuration().getString("mongo.server1"), mongoPort)));
Morphia morphia = new Morphia();
datastore = morphia.createDatastore(mongoClient, config.configuration().getString("mongo.db"));
datastore.ensureIndexes();
}
}
我通过以下方式调用 getDatastore()
方法:
public void save() {
Global.getDatastore().save(this);
}
但它在 return datastore
行抛出空指针异常。当我将调试点放在 onStart
方法上时,它甚至没有被调用。
我这里做错了什么?
你必须设置
application.global=common.Global
在你的application.conf
我正在使用以下代码:
package common;
import com.mongodb.MongoClient;
import com.mongodb.ServerAddress;
import org.mongodb.morphia.Datastore;
import org.mongodb.morphia.Morphia;
import play.GlobalSettings;
import java.util.Arrays;
public class Global extends GlobalSettings {
private static Datastore datastore;
public static Datastore getDatastore() {
return datastore;
}
@Override
public void onStart(play.Application config) {
super.beforeStart(config);
int mongoPort = config.configuration().getInt("mongo.port");
MongoClient mongoClient = new MongoClient(Arrays.asList(
new ServerAddress(config.configuration().getString("mongo.server1"), mongoPort)));
Morphia morphia = new Morphia();
datastore = morphia.createDatastore(mongoClient, config.configuration().getString("mongo.db"));
datastore.ensureIndexes();
}
}
我通过以下方式调用 getDatastore()
方法:
public void save() {
Global.getDatastore().save(this);
}
但它在 return datastore
行抛出空指针异常。当我将调试点放在 onStart
方法上时,它甚至没有被调用。
我这里做错了什么?
你必须设置
application.global=common.Global
在你的application.conf