Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/388.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 配置嵌入式MongoDB的最简单方法_Java_Spring_Mongodb_Spring Boot - Fatal编程技术网

Java 配置嵌入式MongoDB的最简单方法

Java 配置嵌入式MongoDB的最简单方法,java,spring,mongodb,spring-boot,Java,Spring,Mongodb,Spring Boot,我想知道,是否有任何示例可以正确配置嵌入式MongoDB和springboot 例如,我是这样配置H2嵌入式数据库的: import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.spr

我想知道,是否有任何示例可以正确配置嵌入式
MongoDB
springboot

例如,我是这样配置H2嵌入式数据库的:

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Profile;
import org.springframework.context.annotation.PropertySource;
import org.springframework.core.env.Environment;
import org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseBuilder;
import org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseType;
import org.springframework.jndi.JndiObjectFactoryBean;

import javax.sql.DataSource;


@Configuration
@PropertySource({"configs/datasource.properties"})
public class DataSourceConfig {

    @Bean
    @Profile("test")
    public DataSource testDataSource() {
        return new EmbeddedDatabaseBuilder().setType(EmbeddedDatabaseType.H2).build();
    }
}
这很有效,但有一个问题。这种方法不提供MongoDB的配置

有什么解决办法吗

更新1:

package com.reborn.xxx.config;

import com.mongodb.MongoClient;
import cz.jirutka.spring.embedmongo.EmbeddedMongoFactoryBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.mongodb.core.MongoTemplate;

import java.io.IOException;

@Configuration
public class DataSourceConfig {

    @Bean
    public MongoTemplate mongoTemplate() throws IOException {
        EmbeddedMongoFactoryBean mongo = new EmbeddedMongoFactoryBean();
        mongo.setBindIp("localhost");
        MongoClient mongoClient = mongo.getObject();
        MongoTemplate mongoTemplate = new MongoTemplate(mongoClient, "abcd");
        return mongoTemplate;
    }

}
[错误]无法执行目标 org.springframework.boot:springbootmaven插件:1.5.6.RELEASE:run (默认cli)在项目XXX上:在 跑步null:InvocationTargetException:使用创建bean时出错 在类路径资源中定义了名称“mongoTemplate” [com/reborn/XXX/config/DataSourceConfig.class]:Bean 工厂方法实例化失败;嵌套异常是 org.springframework.beans.BeanInstantiationException:未能 实例化[org.springframewor k.data.mongodb.core.MongoTemplate]: 工厂方法“mongoTemplate”引发异常;嵌套异常是 NoClassDefFoundError:de/flapdoodle/embed/mongo/distribu 恢复/IFeatureAwareVersion: de.flapdoodle.embed.mongo.distribution.IFeatureAwareVersion->[帮助] 1]

更新2:

package com.reborn.xxx.config;

import com.mongodb.MongoClient;
import cz.jirutka.spring.embedmongo.EmbeddedMongoFactoryBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.mongodb.core.MongoTemplate;

import java.io.IOException;

@Configuration
public class DataSourceConfig {

    @Bean
    public MongoTemplate mongoTemplate() throws IOException {
        EmbeddedMongoFactoryBean mongo = new EmbeddedMongoFactoryBean();
        mongo.setBindIp("localhost");
        MongoClient mongoClient = mongo.getObject();
        MongoTemplate mongoTemplate = new MongoTemplate(mongoClient, "abcd");
        return mongoTemplate;
    }

}
pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.reborn</groupId>
    <artifactId>xxx</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>jar</packaging>

    <name>xxx</name>
    <description>Demo project for Spring Boot</description>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.5.6.RELEASE</version>
        <relativePath/> <!-- lookup parent from repositories -->
    </parent>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>1.8</java.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-mongodb</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>de.flapdoodle.embed</groupId>
            <artifactId>de.flapdoodle.embed.mongo</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>cz.jirutka.spring</groupId>
            <artifactId>embedmongo-spring</artifactId>
            <version>1.3.1</version>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>
更新3:

package com.reborn.xxx.config;

import com.mongodb.MongoClient;
import cz.jirutka.spring.embedmongo.EmbeddedMongoFactoryBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.mongodb.core.MongoTemplate;

import java.io.IOException;

@Configuration
public class DataSourceConfig {

    @Bean
    public MongoTemplate mongoTemplate() throws IOException {
        EmbeddedMongoFactoryBean mongo = new EmbeddedMongoFactoryBean();
        mongo.setBindIp("localhost");
        MongoClient mongoClient = mongo.getObject();
        MongoTemplate mongoTemplate = new MongoTemplate(mongoClient, "abcd");
        return mongoTemplate;
    }

}
[错误]无法执行目标org.springframework.boot:spring boot maven plugin:1.5.6。发布:在project starbucks finder上运行(默认cli):启动时发生异常 跑步null:InvocationTargetException:创建名为“mongoTemplate”的bean时出错,该bean在类路径资源[com/reborn/xxx/config/DataSourceConfig]中定义 .class]:通过工厂方法实例化Bean失败;嵌套异常为org.springframework.beans.beanstantiationException:未能实例化[org.springframewor] k、 data.mongodb.core.MongoTemplate]:工厂方法“MongoTemplate”引发异常;嵌套异常为java.lang.IllegalArgumentException:此版本不支持 32位:生产:Windows:B32->[帮助1]

可以与弹簧护套集成

  • 声明对活板门的依赖关系:

    <dependency>
        <groupId>de.flapdoodle.embed</groupId>
        <artifactId>de.flapdoodle.embed.mongo</artifactId>
        <version>2.0.0</version>
    </dependency>
    
  • 现在,只需配置一个指向嵌入式MongoDB实例的
    MongoTemplate

    @Bean
    public MongoTemplate mongoTemplate() throws IOException {
        EmbeddedMongoFactoryBean mongo = new EmbeddedMongoFactoryBean();
        mongo.setBindIp("localhost");
        MongoClient mongoClient = mongo.getObject();
        MongoTemplate mongoTemplate = new MongoTemplate(mongoClient, "test_or_whatever_you_want_to_call_this_db");
        return mongoTemplate;
    }
    

它将自动配置相关依赖项的新版本或兼容版本

  <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.5.6.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>1.8</java.version>
    </properties>

    <dependencies>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>


<dependency>
            <groupId>de.flapdoodle.embed</groupId>
            <artifactId>de.flapdoodle.embed.mongo</artifactId>
            <version>1.50.5</version>
        </dependency>
        <dependency>
            <groupId>cz.jirutka.spring</groupId>
            <artifactId>embedmongo-spring</artifactId>
            <version>RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-mongodb</artifactId>
        </dependency>

    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>


        @Repository
public interface yourRepository extends MongoRepository<Class Type, String> {

}

org.springframework.boot
spring启动程序父级
1.5.6.1发布
UTF-8
UTF-8
1.8
org.springframework.boot
SpringBootStarterWeb
org.springframework.boot
弹簧起动试验
测试
de.flapdoodle.embed
de.flapdoodle.embed.mongo
1.50.5
cz.jirutka.spring
蒙戈弹簧
释放
org.springframework.boot
spring启动程序数据mongodb
org.springframework.boot
springbootmaven插件
@存储库
公共接口yourRepository扩展了MongoRepository{
}

用于带JUnit5的Spring Boot 2.2.x

pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.reborn</groupId>
    <artifactId>xxx</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>jar</packaging>

    <name>xxx</name>
    <description>Demo project for Spring Boot</description>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.5.6.RELEASE</version>
        <relativePath/> <!-- lookup parent from repositories -->
    </parent>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>1.8</java.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-mongodb</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>de.flapdoodle.embed</groupId>
            <artifactId>de.flapdoodle.embed.mongo</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>cz.jirutka.spring</groupId>
            <artifactId>embedmongo-spring</artifactId>
            <version>1.3.1</version>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

org.springframework.boot
弹簧起动试验
测试
org.junit.vintage
朱尼特老式发动机
de.flapdoodle.embed
de.flapdoodle.embed.mongo
测试
测试类
(能够设置MongoDB版本)

@ExtendWith(SpringExtension.class)
@DataMongoTest
类ModelRepoIntegrationTest{
私有静态最终字符串IP=“localhost”;

private static final int PORT=28017;//可能重复的项目启动有一些问题。请参阅主题更新。@Reborn您是说您更新了原始问题以描述“项目启动的一些问题”吗?如果是,我看不到任何描述此问题的详细信息。也许您可以?此异常:
java.lang.NoClassDefFoundError:de/flapdodle/embed/mongo/distribution/IFeatureAwareVersion
表示(1)您没有添加
de.flapdodle.embed.mongo
依赖项,或者(2)在添加
de.flapdoodle.embed.mongo
依赖项之后和运行
mvn spring boot:run
之前,您还没有运行
mvn install
。请更新您的问题,以包括(1)更新的pom.xml和(2)您的
MongoTemplate
主题声明已更新。
start.spring.io
已经添加了您所说的大多数依赖项,除了
cz.jirutka.spring
。我已经多次执行
mvn clean install
以确保一切正常运行,但正如您所看到的,仍然存在一个问题。您尚未指定为
de.flapdoodle.embed.mongo
依赖项提供了一个版本,这意味着,对于Spring Boot 1.5.6.RELEASE,您使用的是v1.50.5。我在我的帖子中使用v2.0.0验证了实现(即,我的答案中明确引用的版本)但是,
de.flapdoodle.embed.mongo
的v1.50.5还包括
IFeatureAwareVersion
,所以应该可以。AFAICT,您的设置是有效的,您可以在IDE中浏览到
IFeatureAwareVersion
吗?您是否检查过此文件:
de.flapdoodle.embed.mongo-1.50.5.jar
存在于您的本地Maven repo中,并且它包含
IFeatureAwareVersion