1、单数据源配置
依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb</artifactId>
<version>2.6.1</version>
</dependency>
application.properties配置:
#mongodb 2.2版本以上的配置
spring.data.mongodb.uri=mongodb://user:pwd@ip:27017/database
#mongodb 2.2及以下的配置
spring.data.mongodb.host=ip
spring.data.mongodb.port=27017
spring.data.mongodb.username=username
spring.data.mongodb.password=password
spring.data.mongodb.database=mymongodb
#多个 IP 集群可以采用以下配置:
spring.data.mongodb.uri=mongodb://user:pwd@ip1:port1,ip2:port2/database
#用户名:user
#密码:pwd
#数据库地址:ip
#端口号:27017
#库名:database
报错: Exception authenticating MongoCredential{mechanism=SCRAM-SHA-1, userName=‘user’, source=‘test’, password=, mechanismProperties=}
**解决方式:**uri后添加 ?authSource=admin&authMechanism=SCRAM-SHA-1
事物配置
2、多数据源配置
#SpringBootApplication启动类中加上exclude = {DataSourceAutoConfiguration.class, MongoDataAutoConfiguration.class}
@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class, MongoDataAutoConfiguration.class})
public class FirstDemoApplication {
public static void main(String[] args) {
SpringApplication.run(FirstDemoApplication.class, args);
}
}
#application.properties配置
spring.data.mongodb.first.uri=mongodb://username:pwd@ip:27017/first?authSource=admin&authMechanism=SCRAM-SHA-1
spring.data.mongodb.second.uri=mongodb://username:pwd@ip:27017/second?authSource=admin&authMechanism=SCRAM-SHA-1
@Configuration
public class MultipleMongoConfig {
// ================== MongoProperties 配置 ===================
@Bean
@ConfigurationProperties("spring.data.mongodb.first")
public MongoProperties firstMongoProperties() {
return new MongoProperties();
}
@Bean
@ConfigurationProperties("spring.data.mongodb.second")
public MongoProperties secondMongoProperties() {
return new MongoProperties();
}
// ================== MongoDbFactory 配置 ===================
// mongodb 低版本配置
// @Bean
// public MongoDbFactory firstMongoDbFactory(MongoProperties firstMongoProperties) {
// System.out.println("================== firstMongoDbFactory 配置 ===================");
// return new SimpleMongoDbFactory(new MongoClientURI(firstMongoProperties.determineUri()));
// }
// mongodb 高版本配置
@Bean
public SimpleMongoClientDatabaseFactory firstMongoDbFactory(MongoProperties firstMongoProperties) {
return new SimpleMongoClientDatabaseFactory(firstMongoProperties.determineUri());
}
@Bean
public SimpleMongoClientDatabaseFactory secondMongoDbFactory(MongoProperties secondMongoProperties) {
return new SimpleMongoClientDatabaseFactory(secondMongoProperties.determineUri());
}
// ================== MongoTemplate 配置 ===================
@EnableMongoRepositories(
basePackages = {
"com.open.first.demo.service.mongodb.first",
"com.open.first.demo.db.repository",
},
mongoTemplateRef = "firstMongoTemplate"
)
public class FirstMongoTemplate {
@Bean
public MongoTemplate firstMongoTemplate() {
return new MongoTemplate(firstMongoDbFactory(firstMongoProperties()));
}
}
@EnableMongoRepositories(basePackages = "com.open.first.demo.service.mongodb.second",
mongoTemplateRef = "secondMongoTemplate")
public class SecondMongoTemplate {
@Bean
public MongoTemplate secondMongoTemplate() {
return new MongoTemplate(secondMongoDbFactory(secondMongoProperties()));
}
}
}
3、mongodb 的两种操作方式
1、实体类:
@Document(collection="test1")//集合名
@Builder
@Data
@AllArgsConstructor
@NoArgsConstructor
public class UserVo implements Serializable {
private String name;
private Integer age;
private String gender;
}
注解:
@Id:用于字段级别,标记这个字段是一个主键,默认生成的名称是“_id”
@Document :用于类,以表示这个类需要映射到数据库,您也可以指定映射到数据库的集合名称
@DBRef:用于字段,以表示它将使用com.mongodb.DBRef进行存储。
@Indexed:用于字段,表示该字段需要如何创建索引
@CompoundIndex:用于类,以声明复合索引
@GeoSpatialIndexed:用于字段,进行地理位置索引
@TextIndexed:用于字段,标记该字段要包含在文本索引中
@Language:用于字段,以设置文本索引的语言覆盖属性。
@Transient:默认情况下,所有私有字段都映射到文档,此注解将会去除此字段的映射
@PersistenceConstructor:标记一个给定的构造函数,即使是一个protected修饰的,在从数据库实例化对象时使用。构造函数参数通过名称映射到检索的DBObject中的键值。
@Value:这个注解是Spring框架的一部分。在映射框架内,它可以应用于构造函数参数。这允许您使用Spring表达式语言语句来转换在数据库中检索的键值,然后再用它来构造一个域对象。为了引用给定文档的属性,必须使用以下表达式:@Value("#root.myProperty"),root要指向给定文档的根。
@Field:用于字段,并描述字段的名称,因为它将在MongoDB BSON文档中表示,允许名称与该类的字段名不同。
@Version:用于字段锁定,保存操作时检查修改。初始值是0,每次更新时自动触发。
2、集合操作:
方式一:MongoTemplate
@Resource
private MongoTemplate mongoTemplate;
方式二:MongoRepository
@Repository
public interface UserRepository extends MongoRepository<User, String> {
@Query(value = "{'name': ?0}", fields = "{'test' : 0}")
TestVo findDepartmentByEmployeeName(String empName);
List<TestVo> findDepartmentByName(String name);
}
关于使用简单的 Repositories 方式来操作 MongoDB 这种用法只能实现较简单的操作,使用简单但是灵活性比较差。