使用 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();
        }
    }
}

关键步骤解释

  1. 配置事务管理

    • MongoConfig 类中配置 MongoTransactionManager,用于管理 MongoDB 事务。
  2. 读取 CSV 文件

    • 使用 opencsv 库读取 CSV 文件。
    • 将每一行数据转换为 Document 对象,并添加到 documents 列表中。
  3. 插入文档

    • CsvToDocumentDBService 类中使用 @Transactional 注解确保方法在事务中执行。
    • 使用 MongoTemplateinsert 方法将所有文档插入到 DocumentDB 中的集合。
  4. 控制器

    • 提供一个 REST 端点 /import-csv 来触发 CSV 导入。

总结

通过上述配置和代码,你可以使用 Spring Data MongoDB 简洁地将 CSV 文件中的所有行在一个事务中插入到 Amazon DocumentDB 中。这样可以确保所有操作要么全部成功,要么全部失败,从而保证数据的一致性。

posted @   gongchengship  阅读(33)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
点击右上角即可分享
微信分享提示