Spring Boot中不依赖spring-boot-starter-data-mongodb配置EclipseLink MongoDB数据源
在Spring Boot中不依赖
spring-boot-starter-data-mongodb,配置基于EclipseLink的MongoDB JDBC数据源 你已经在pom.xml中添加了必要依赖,以下是完整的配置步骤:
<properties> <java.version>17</java.version> <org.eclipse.persistence.version>2.7.11</org.eclipse.persistence.version> </properties> <dependency> <groupId>org.mongodb</groupId> <artifactId>mongo-java-driver</artifactId> <version>3.12.11</version> </dependency> <dependency> <groupId>org.mongodb</groupId> <artifactId>mongodb-jdbc</artifactId> <version>2.0.1</version> </dependency> <dependency> <groupId>org.eclipse.persistence</groupId> <artifactId>org.eclipse.persistence.jpa</artifactId> <version>${org.eclipse.persistence.version}</version> </dependency> <dependency> <groupId>org.eclipse.persistence</groupId> <artifactId>eclipselink</artifactId> <version>${org.eclipse.persistence.version}</version> </dependency> <dependency> <groupId>org.eclipse.persistence</groupId> <artifactId>org.eclipse.persistence.nosql</artifactId> <version>${org.eclipse.persistence.version}</version> </dependency>
1. 禁用Spring Data MongoDB自动配置
Spring Boot默认会自动配置MongoDB相关组件,需在启动类排除自动配置类避免冲突:
import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.autoconfigure.data.mongo.MongoDataAutoConfiguration; import org.springframework.boot.autoconfigure.mongo.MongoAutoConfiguration; @SpringBootApplication(exclude = {MongoAutoConfiguration.class, MongoDataAutoConfiguration.class}) public class YourApplication { public static void main(String[] args) { SpringApplication.run(YourApplication.class, args); } }
2. 配置MongoDB JDBC数据源
在application.properties或application.yml中添加连接配置:
application.properties
# MongoDB JDBC连接URL spring.datasource.url=jdbc:mongodb://localhost:27017/your_database_name spring.datasource.driver-class-name=com.mongodb.jdbc.MongoDriver # 可选:认证信息 spring.datasource.username=your_username spring.datasource.password=your_password
application.yml
spring: datasource: url: jdbc:mongodb://localhost:27017/your_database_name driver-class-name: com.mongodb.jdbc.MongoDriver # 可选:认证信息 username: your_username password: your_password
3. 配置EclipseLink作为JPA实现
指定EclipseLink为JPA提供者,并配置NoSQL适配参数:
application.properties
# 指定JPA提供者为EclipseLink spring.jpa.provider=org.eclipse.persistence.jpa.PersistenceProvider # EclipseLink NoSQL配置 spring.jpa.properties.eclipselink.target-database=NOSQL spring.jpa.properties.eclipselink.nosql.connection-spec=org.eclipse.persistence.nosql.adapters.mongo.MongoConnectionSpec # 对应MongoDB数据库名 spring.jpa.properties.eclipselink.nosql.property.mongo.database=your_database_name # MongoDB服务器地址和端口 spring.jpa.properties.eclipselink.nosql.property.mongo.host=localhost spring.jpa.properties.eclipselink.nosql.property.mongo.port=27017 # 可选:开启SQL日志用于调试 spring.jpa.properties.eclipselink.logging.level.sql=FINE spring.jpa.properties.eclipselink.logging.parameters=true
application.yml
spring: jpa: provider: org.eclipse.persistence.jpa.PersistenceProvider properties: eclipselink: target-database: NOSQL nosql: connection-spec: org.eclipse.persistence.nosql.adapters.mongo.MongoConnectionSpec property: mongo: database: your_database_name host: localhost port: 27017 logging: level: sql: FINE parameters: true
4. 编写MongoDB映射实体类
使用EclipseLink的NoSQL注解定义实体与MongoDB集合的映射:
import org.eclipse.persistence.nosql.annotations.NoSql; import jakarta.persistence.Entity; import jakarta.persistence.Id; @Entity @NoSql(dataType = "user", dataFormat = NoSql.DataFormatType.MAPPED) public class User { @Id private String userId; // 对应MongoDB文档的_id字段 private String username; private Integer age; // Getter、Setter、构造方法 }
@NoSql:标记为NoSQL实体,dataType对应MongoDB集合名,dataFormat=MAPPED表示映射为文档结构。
5. 编写数据访问层(基于JPA)
直接使用JPA的EntityManager实现数据操作,无需Spring Data MongoDB的Repository:
import jakarta.persistence.EntityManager; import jakarta.persistence.PersistenceContext; import org.springframework.stereotype.Repository; @Repository public class UserDao { @PersistenceContext private EntityManager entityManager; public void saveUser(User user) { entityManager.persist(user); } public User getUserById(String userId) { return entityManager.find(User.class, userId); } }
6. 验证配置
编写测试类确认数据访问功能正常:
import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; @SpringBootTest public class UserDaoTest { @Autowired private UserDao userDao; @Test public void testSaveAndRetrieveUser() { User user = new User(); user.setUserId("1001"); user.setUsername("test_user"); user.setAge(30); userDao.saveUser(user); User retrieved = userDao.getUserById("1001"); assert retrieved != null; assert retrieved.getUsername().equals("test_user"); } }
内容的提问来源于stack exchange,提问作者Kumar
相关产品推荐
相关产品推荐

