使用 spring data MongoDB将 一个CSV 文件中的所有 行存入到 docuemntDB,要求在一个事务中执行
要使用 Spring Data MongoDB 将一个 CSV 文件中的所有行在一个事务中插入到 Amazon DocumentDB 中,可以按照以下步骤进行配置和实现。
依赖项
确保你的项目中包含必要的依赖项。如果你使用 Maven,可以在 pom.xml
中添加以下依赖项:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb</artifactId>
<version>2.7.5</version>
</dependency>
<dependency>
<groupId>com.opencsv</groupId>
<artifactId>opencsv</artifactId>
<version>5.5.2</version>
</dependency>
配置文件
在 application.properties
文件中配置 DocumentDB 连接信息:
spring.data.mongodb.uri=mongodb://<your-username>:<your-password>@<your-docdb-cluster-endpoint>:27017/?ssl=true&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false
Java 示例代码
以下是一个完整的示例代码,展示如何使用 Spring Data MongoDB 读取 CSV 文件并在一个事务中将所有行插入到 DocumentDB 中。
配置类
首先,创建一个配置类来启用事务管理:
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.mongodb.MongoDatabaseFactory;
import org.springframework.data.mongodb.MongoTransactionManager;
@Configuration
public class MongoConfig {
@Bean
MongoTransactionManager transactionManager(MongoDatabaseFactory dbFactory) {
return new MongoTransactionManager(dbFactory);
}
}
服务类
创建一个服务类,用于处理 CSV 文件的读取和数据插入:
import com.opencsv.CSVReader;
import com.opencsv.exceptions.CsvValidationException;
import org.bson.Document;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.mongodb.MongoTransactionManager;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
@Service
public class CsvToDocumentDBService {
@Autowired
private MongoTemplate mongoTemplate;
@Autowired
private MongoTransactionManager transactionManager;
@Transactional
public void importCsvData(String csvFilePath) throws IOException, CsvValidationException {
List<Document> documents = new ArrayList<>();
try (CSVReader csvReader = new CSVReader(new FileReader(csvFilePath))) {
String[] headers = csvReader.readNext(); // 读取表头
String[] line;
while ((line = csvReader.readNext()) != null) {
Document document = new Document();
for (int i = 0; i < headers.length; i++) {
document.append(headers[i], line[i]);
}
documents.add(document);
}
}
mongoTemplate.insert(documents, "your_collection_name");
}
}
控制器类
创建一个控制器类,提供一个 REST 端点来触发 CSV 导入:
import com.opencsv.exceptions.CsvValidationException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import java.io.IOException;
@RestController
public class CsvToDocumentDBController {
@Autowired
private CsvToDocumentDBService csvToDocumentDBService;
@PostMapping("/import-csv")
public String importCsv(@RequestParam("filePath") String filePath) {
try {
csvToDocumentDBService.importCsvData(filePath);
return "CSV data imported successfully";
} catch (IOException | CsvValidationException e) {
return "Failed to import CSV data: " + e.getMessage();
}
}
}
关键步骤解释
-
配置事务管理:
- 在
MongoConfig
类中配置MongoTransactionManager
,用于管理 MongoDB 事务。
- 在
-
读取 CSV 文件:
- 使用
opencsv
库读取 CSV 文件。 - 将每一行数据转换为
Document
对象,并添加到documents
列表中。
- 使用
-
插入文档:
- 在
CsvToDocumentDBService
类中使用@Transactional
注解确保方法在事务中执行。 - 使用
MongoTemplate
的insert
方法将所有文档插入到 DocumentDB 中的集合。
- 在
-
控制器:
- 提供一个 REST 端点
/import-csv
来触发 CSV 导入。
- 提供一个 REST 端点
总结
通过上述配置和代码,你可以使用 Spring Data MongoDB 简洁地将 CSV 文件中的所有行在一个事务中插入到 Amazon DocumentDB 中。这样可以确保所有操作要么全部成功,要么全部失败,从而保证数据的一致性。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了