Spring Boot プロジェクトで MongoDB との連携を実現するには、Spring Data MongoDB を活用するのが一般的です。以下は、IntelliJ IDEA で新規プロジェクトを作成し、MongoDB へのアクセスを実装するための最小構成です。
Maven 依存関係設定
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.8.RELEASE</version>
<relativePath/>
</parent>
<groupId>com.sample</groupId>
<artifactId>stock-app</artifactId>
<version>0.0.1-SNAPSHOT</version>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
ドキュメントエンティティの定義
MongoDB のコレクションに対応する Java クラスを定義します。@Document アノテーションにより、コレクション名を明示的に指定できます(省略時はクラス名が使用されます)。
import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.mapping.Document;
@Document(collection = "stock_data")
public class StockData {
@Id
private String identifier;
private String symbol;
private String date;
private float openingPrice;
private float highestPrice;
private float lowestPrice;
private float closingPrice;
private float previousClose;
private float priceChange;
private float changePercent;
private Long volume;
private float turnover;
// コンストラクタ
public StockData() {}
// getter / setter 省略(Lombok 使用可)
@Override
public String toString() {
return "StockData{" +
"id='" + identifier + '\'' +
", symbol='" + symbol + '\'' +
", date='" + date + '\'' +
", open=" + openingPrice +
", high=" + highestPrice +
", low=" + lowestPrice +
", close=" + closingPrice +
", prevClose=" + previousClose +
", change=" + priceChange +
", pctChange=" + changePercent +
", vol=" + volume +
", amount=" + turnover +
'}';
}
}
MongoTemplate を使ったクエリ実行
Spring Data MongoDB の MongoTemplate を利用して、条件に合致するドキュメントを取得します。JUnit テスト内で実行例を示します。
import org.junit.Test;
import org.junit.runner.RunWith;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.test.context.junit4.SpringRunner;
import java.util.List;
@RunWith(SpringRunner.class)
@SpringBootTest
public class StockQueryTest {
private static final String STOCK_COLLECTION = "stock_data";
@Autowired
private MongoTemplate template;
private static final Logger log = LoggerFactory.getLogger(StockQueryTest.class);
@Test
public void findStockBySymbol() {
Criteria filter = Criteria.where("symbol").is("600318.SH");
Query query = new Query(filter);
List<StockData> stocks = template.find(query, StockData.class, STOCK_COLLECTION);
for (StockData item : stocks) {
log.info("Found: {}", item);
}
}
}
接続設定(application.yml)
spring:
data:
mongodb:
uri: mongodb://mydb:admin@localhost:27017/mydb