> For the complete documentation index, see [llms.txt](https://potoyang.gitbook.io/spring-in-action-v5/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://potoyang.gitbook.io/spring-in-action-v5/di-12-zhang-xiang-ying-shi-chi-jiu-hua-shu-ju/12.3-bian-xie-xiang-ying-shi-mongodb-ku/12.3.1-kai-qi-spring-data-mongondb.md).

# 12.3.1 开启Spring Data MongonDB

要开始使用 Spring Data MongoDB，您需要添加 Spring Data MongoDB 的 starter 依赖。Spring Data MongoDB 有两个独立的 starter 可供选择。

如果您使用的是非响应式的 MongoDB，那么您可以添加以下依赖项：

```markup
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>
        spring-boot-starter-data-mongodb
    </artifactId>
</dependency>
```

在使用 Spring Initializr 创建工程时，可以通过勾选 MongoDB 复选框以添加这个依赖。但是本章是关于编写响应式 Repository 的，所以您应该选择响应式的 Spring Data MongoDB starter 依赖：

```markup
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>
        spring-boot-starter-data-mongodb-reactive
    </artifactId>
</dependency>
```

您还可以在使用 Spring Initializr 时，通过勾选 Reactive MongoDB 复选框，以添加响应式的 Spring Data MongoDB starter 依赖。使用 starter 把依赖添加到项目中，将触发自动配置，以启用 Spring Data 支持。这正如您在第 3 章中为 JPA 或 Cassandra 编写接口时那样。

默认情况下，Spring Data MongoDB 假设 MongoDB 服务运行在本地，并且监听端口 27017。为了方便测试和开发，您可以选择使用嵌入式 Mongo 数据库。为此，可以把 Flapdoodle Embedded MongoDB 依赖项添加到项目中：

```markup
<dependency>
    <groupId>de.flapdoodle.embed</groupId>
    <artifactId>de.flapdoodle.embed.mongo</artifactId>
</dependency>
```

这个 Flapdoodle 嵌入式数据库，为测试和开发提供了便利。它是内存中的 Mongo 数据库，就像您在处理关系型数据库时使用 H2 那样。也就是说，您不需要运行单独的数据库服务，而是所有数据都放在内存中，并且重新启动应用程序时，所有数据将被清除。

嵌入式数据库对于开发和测试来说是很好的，但是一旦您的应用程序要发布到生产环境，您需要确保设置了一些必要属性，以便告知 Spring Data MongoDB 数据库在哪里，以及如何访问：

```yaml
spring:
   data:
     mongodb:
        host: mongodb.tacocloud.com
        port: 27018
        username: tacocloud
        password: s3cr3tp455w0rd
        database: tacoclouddb
```

这些属性并不是都需要设置的。它们的作用是帮助 Spring Data MongoDB 了解到 Mongo 数据库未在本地运行。如果分解一下，每个属性所指定的配置如下：

* spring.data.mongodb.host —— Mongo 服务器的主机名（默认值：localhost）
* spring.data.mongodb.port —— Mongo 服务器正在侦听的端口（默认值：27017）
* spring.data.mongodb.username —— 用于访问 Mongo 数据库的用户名
* spring.data.mongodb.password —— 用于访问 Mongo 数据库的的密码
* spring.data.mongodb.database —— 数据库名称（默认值：test）

现在，您的项目中启用了 Spring Data MongoDB。下一步，您需要对实体对象添加注解，以便通过 MongoDB 进行文档数据的持久化。
