Spring数据框架在应用程序中被广泛使用,因为它使访问不同类型的持久性存储变得更容易。这篇文章将展示如何使用SpringDataMongoDB以实现批量插入。
BulkOperations是一个包含要应用于数据库的写入操作列表的接口。它们可以是InsertOne、updateOne updateMany、replaceOne deleteOne deleteMany的任意组合
bulkOperation可以是有序的,也可以是无序的。有序操作将按顺序应用,如果检测到错误,将返回错误代码。无序操作将并行应用,因此可能更快,但应用程序有责任检查操作过程中是否存在错误。有关更多信息,请参阅MongoDB文档的批量写入操作部分。
POM 文件将指定应用程序将使用的 Spring 数据版本。必须注意使用使用兼容版本的MongoDB Java驱动程序的Spring Data版本。
org.springframework.boot
spring-boot-starter-data-mongodb
2.7.2
顶级类是一个SpringBootApplication,它实现了CommandLineRunner,如下所示:
@SpringBootApplication
public class SpringDataBulkInsertApplication implements CommandLineRunner {
@Value("${documentCount}")
private int count;
private static final Logger LOG = LoggerFactory
.getLogger(SpringDataBulkInsertApplication.class);
@Autowired
private CustomProductsRepository repository;
public static void main(String[] args) {
SpringApplication.run(SpringDataBulkInsertApplication.class, args);
}
@Override
public void run(String... args) {
repository.bulkInsertProducts(count);
LOG.info("End run");
}
}
现在我们需要编写一些类来实现我们的批量插入应用程序。
@Configuration
public class MongoConfig {
@Value("${mongodb.uri}")
private String uri;
@Value("${mongodb.database}")
private String databaseName;
@Value("${truststore.path}")
private String trustStorePath;
@Value("${truststore.pwd}")
private String trustStorePwd;
@Value("${mongodb.atlas}")
private boolean atlas;
@Bean
public MongoClient mongo() {
ConnectionString connectionString = new ConnectionString(uri);
MongoClientSettings mongoClientSettings = MongoClientSettings.builder()
.applyConnectionString(connectionString)
.applyToSslSettings(builder -> {
if (!atlas) {
// Use SSLContext if a trustStore has been provided
if (!trustStorePath.isEmpty()) {
SSLFactory sslFactory = SSLFactory.builder()
.withTrustMaterial(Paths.get(trustStorePath), trustStorePwd.toCharArray())
.build();
SSLContext sslContext = sslFactory.getSslContext();
builder.context(sslContext);
builder.invalidHostNameAllowed(true);
}
}
builder.enabled(true);
})
.build();
return MongoClients.create(mongoClientSettings);
}
@Bean
public MongoTemplate mongoTemplate() throws Exception {
return new MongoTemplate(mongo(), databaseName);
}
}
在这个实现中,我们使用一个标志mongodb.atlas来指示这个应用程序将连接到atlas。如果标志为false,则可以使用trustStore创建SSL上下文。这以trustStore.path指向的信任库文件的形式为根证书颁发机构提供证书,在创建时受密码(trustStore.pwd)保护。如果需要,客户端还可以提供密钥库文件,但这并没有实现。
参数mongodb.uri应该包含一个有效的mongodb uri。URI包含客户端连接的主机、用户凭据等。
MongoDB集合与其包含的文档之间的关系是通过由@Document注释修饰的类实现的。此类定义文档的字段,批注定义集合的名称。
@Document("products")
public class Products {
private static final Logger LOG = LoggerFactory
.getLogger(Products.class);
@Id
private String id;
private String name;
private int qty;
private double price;
private Date available;
private Date unavailable;
private String skuId;
需要为每个字段定义设置器和获取器。@Id注释表示我们的默认索引。如果未指定此字段,MongoDB将分配一个唯一的ObjectId值。
文章下方有交流学习区!一起学习进步!也可以前往官网,加入官方微信交流群
首发CSDN博客,创作不易,如果觉得文章不错,可以点赞收藏评论
你的支持和鼓励是我创作的动力❗❗❗