springBoot+MongoTemplate,往多个数据库中插入数据
程序员文章站
2022-05-17 18:42:22
...
一、准备
1、建立一个springBoot的maven项目(使用spring initailizr,或者建立一个maven后自己添加相关springBoot配置)
<!--版本管理相关-->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.2.1.RELEASE</version>
</parent>
<!--springboot基础依赖包-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--springboot打jar包专用插件-->
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
2、添加相关mongoDB依赖,直接使用spring-data-xxx系列jar
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-mongodb</artifactId>
<version>2.2.3.RELEASE</version>
</dependency>
3、启动mongoDB,并有可视化客户端工具。本次在window下启动mongoDB,具体教程参考其官网,有详细介绍。建好两个库如下:
二、编写代码
1、配置文件:
server:
port: 8088
spring:
data:
mongodb:
host: localhost
host2: 10.99.86.87
dbName:
testDb: test
userDb: user
2、自动配置类 @Configuration类
package com.steve.config;
import com.mongodb.MongoClient;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.SimpleMongoDbFactory;
@Configuration
public class MongoConfig {
//读取配置文件里的值,部署后IP或者数据库名变化,不需重新打包
@Value("${spring.data.mongodb.host}")
private String mongohost;
@Value("${spring.data.mongodb.host2}")
private String mongohost2;
@Value("${spring.data.dbName.testDb}")
private String testDb;
@Value("${spring.data.dbName.userDb}")
private String userDb;
@Bean
@Primary
public MongoClient mongoClient() {
return new MongoClient(mongohost);
}
@Bean
public MongoClient mongoClient2() {
return new MongoClient(mongohost2);
}
/**
* @Author SteveTao
* @Description @Primary: 注解的作用是,在往IOC容器中注入同一个实体Bean的多个实例时
* 优先注入该注解标注的实体。且多实例注入时,该注解是必须的,否则启动会报错:
* required a single bean, but 2 were found
* @Date 2019/12/6 10:22
**/
@Bean
@Primary
public MongoTemplate testMongoTemplate() {
return new MongoTemplate(mongoClient(), testDb);
}
@Bean
public MongoTemplate userMongoTemplate() {
return new MongoTemplate(new SimpleMongoDbFactory(mongoClient(), userDb));
}
}
3、实体类
import lombok.Data;
import org.springframework.stereotype.Component;
// 使用了Lombok插件,不需要写get,set方法。 不想用这个插件的这里自己添加就好了
@Component
@Data
public class Person {
private String id;
private String name;
private int age;
public Person() {
}
public Person(String id, String name, int age) {
this.id = id;
this.name = name;
this.age = age;
}
@Override
public String toString() {
return "Person{" +
"id='" + id + '\'' +
", name='" + name + '\'' +
", age=" + age +
'}';
}
}
4、juint测试类
package com.steve;
import static org.junit.Assert.assertTrue;
import com.steve.bean.Person;
import org.junit.Test;
import org.junit.runner.RunWith;
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 javax.annotation.Resource;
//@SpringBootTest 测试类里面,可以注入并使用springIOC容器里的东西,不需要每次都起停程序
@RunWith(SpringRunner.class)
@SpringBootTest
public class AppTest{
//这里用Resource,没有用Autoware
@Resource
private MongoTemplate testMongoTemplate;
@Resource
private MongoTemplate userMongoTemplate;
//右键运行,看看两个库是否同时插入了数据
@Test
public void insert(){
Person p=new Person("001","tom",88);
testMongoTemplate.insert(p);
Person p2=new Person("N0012","zhangsan",14);
userMongoTemplate.insert(p2);
}
@Test
public void queryon(){
Person qp = testMongoTemplate.findOne(new Query(new Criteria("name").is("tom")), Person.class);
System.out.println(qp);
}
}
5、测试结果
三、待补充
本次测试的是一个mongoDB链接下的不同数据库; 不同链接下的不同数据库,应该也是可以的。主要是在自动配置类里面,注入多个mongoClient实体类。不同的mongoTemplate使用对应的mongoClietn即可。
由于本机重装了系统,之前虚拟机的节点都删除了,现在手上没有多余的节点IP,这里不做展示了。感兴趣的可以用vmware起几个节点,装上mongoDB试验一下。