You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 08:15:54