MongoDB(Morphia) + Spring 連携で実装と設定のサンプル
MongoDBにORマッパー(Morphia)を使ってみた実装例と設定です。
参考にしたのはほとんどマニュアルページとstackoverflowです。
やりたかったことは、WEBサーバからログをMongoDBに集めて、管理ツールからログを確認です。
ログの収集は、Fluentdです。あれは便利です。その話はまた後で・・・
Mavenの設定
下記を追加
<!-- mongodb -->
<dependency>
<groupId>org.mongodb</groupId>
<artifactId>mongo-java-driver</artifactId>
<version>2.11.0</version>
</dependency>
<dependency>
<groupId>com.google.code.morphia</groupId>
<artifactId>morphia</artifactId>
<version>0.99</version>
</dependency>
Spring設定
<!-- mongo -->
<bean id="mongo" class="com.mongodb.Mongo">
<constructor-arg value="localhost" type="java.lang.String"/>
<constructor-arg value="27017" type="int"/>
</bean>
<!-- ORマッパー -->
<bean id="morphia" class="com.google.code.morphia.Morphia"/>
<bean id="datastore" factory-bean="morphia" factory-method="createDatastore">
<constructor-arg ref="mongo"/>
<constructor-arg value="dbName"/>
</bean>
<!-- DAO定義 -->
<bean id="myDao" class="myDaoImpl"/>
各自の環境に合わせる。
※ハマったポイント
mongoクラスには引数の異なるコンストラクタが定義されています。type="java.lang.String" type="int"が無いと意図しないコンストラクタが選択されます。
Dto定義
@Entity(value = "applog")
public class Applog implements Serializable {
private static final long serialVersionUID = 1L;
@Id
private ObjectId id;
private String userId;
private String message;
private Date time;
public ObjectId getId() {
return id;
}
public void setId(ObjectId id) {
this.id = id;
}
public String getUserId() {
return userId;
}
public void setUserId(String userId) {
this.userId = userId;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
public Date getTime() {
return time;
}
public void setTime(Date time) {
this.time = time;
}
}
DAO定義
@Repository
public class MyDaoImpl extends BasicDAO<Applog, ObjectId> implements MyDao{
// 引数をDI
@Autowired
public MyDaoImpl(Datastore ds) {
super(Applog.class, ds);
}
@Override
public List<Applog> findByUserId(String userId){
return ds.find(entityClazz).field("userId").equal(userId).order("time").asList();
}
}
BasicDAOで基本のクエリは定義してあります。
複雑な検索条件を指定する場合は下記を参考
https://code.google.com/p/morphia/wiki/Query