Multithreading 嵌入式Jersey测试的随机Neo4j数据库位置

Multithreading 嵌入式Jersey测试的随机Neo4j数据库位置,multithreading,junit,jersey,neo4j,spring-data,Multithreading,Junit,Jersey,Neo4j,Spring Data,我正在使用com.sun.jersey.test.framework.JerseyTest为我的jersey应用程序创建JUnit测试。应用程序使用neo4j和Spring数据加载数据,并通过RESTAPI返回数据 测试用我的jersey neo4j spring数据webapp启动一个嵌入式grizzly服务器。在此之后,我可以调用rest请求并在neo4j数据库中创建节点。 不幸的是,我的测试目前固定在一个neo4j数据库位置,因为这是在我的applicationContext.xml中配置

我正在使用com.sun.jersey.test.framework.JerseyTest为我的jersey应用程序创建JUnit测试。应用程序使用neo4j和Spring数据加载数据,并通过RESTAPI返回数据

测试用我的jersey neo4j spring数据webapp启动一个嵌入式grizzly服务器。在此之后,我可以调用rest请求并在neo4j数据库中创建节点。 不幸的是,我的测试目前固定在一个neo4j数据库位置,因为这是在我的applicationContext.xml中配置的,如下所示:

测试应该在随机目录中创建一个neo4j数据库

问题:

  • 是否有任何方法可以更改storeDirectory并清除neo4j数据库。在setupOnce中更改storeDirectory也会有所帮助
  • 有没有办法清除neo4j数据库。(我无法在测试中自动连线,因为它不是spring上下文的一部分)

我现在使用基于Java的bean配置:

package com.gentics.sandboxmanager.service;

import java.io.File;
import java.io.IOException;
import java.nio.file.Files;

import org.neo4j.kernel.EmbeddedGraphDatabase;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.neo4j.config.EnableNeo4jRepositories;
import org.springframework.data.neo4j.config.JtaTransactionManagerFactoryBean;
import org.springframework.data.neo4j.config.Neo4jConfiguration;
import org.springframework.data.neo4j.support.Neo4jExceptionTranslator;
import org.springframework.data.neo4j.support.Neo4jTemplate;
import org.springframework.data.neo4j.support.mapping.Neo4jMappingContext;

@EnableNeo4jRepositories(basePackages = "com.gentics.sandboxmanager.repository")
@Configuration
public class Neo4jConfig extends Neo4jConfiguration {

    private static File databaseLocation;
    private static EmbeddedGraphDatabase neo4jDB;

    /**
     * Returns the neo4j database
     * 
     * @return
     */
    public static EmbeddedGraphDatabase getNeo4jDatabase() {
        return neo4jDB;
    }

    @Bean
    public EmbeddedGraphDatabase graphDatabaseService() throws IOException {

        // TODO use properties so that the app does not use a temp dir
        databaseLocation = Files.createTempDirectory("neo4j").toFile();
        databaseLocation.deleteOnExit();

        neo4jDB = new EmbeddedGraphDatabase(databaseLocation.getAbsolutePath());
        return neo4jDB;
    }

    @Bean
    public Neo4jTemplate neo4jTemplate() throws IOException {
        return new Neo4jTemplate(graphDatabaseService());
    }

    @Bean
    public Neo4jMappingContext neo4jMappingContext() {
        return new Neo4jMappingContext();
    }

    @Bean
    public JtaTransactionManagerFactoryBean transactionManager() throws Exception {
        return new JtaTransactionManagerFactoryBean(graphDatabaseService());
    }

    @Bean
    public Neo4jExceptionTranslator exceptionTranslator() {
        return new Neo4jExceptionTranslator();
    }

}
每个JerseyTest测试用例都将重新启动webapp。因此,neo4j将始终使用空的neo4j数据库

附加链接:


有没有办法使用spring容器扩展点?
@ContextConfiguration(locations = "classpath:/spring/applicationContext.xml")
@RunWith(SpringJUnit4ClassRunner.class)
@Transactional
package com.gentics.sandboxmanager.service;

import java.io.File;
import java.io.IOException;
import java.nio.file.Files;

import org.neo4j.kernel.EmbeddedGraphDatabase;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.neo4j.config.EnableNeo4jRepositories;
import org.springframework.data.neo4j.config.JtaTransactionManagerFactoryBean;
import org.springframework.data.neo4j.config.Neo4jConfiguration;
import org.springframework.data.neo4j.support.Neo4jExceptionTranslator;
import org.springframework.data.neo4j.support.Neo4jTemplate;
import org.springframework.data.neo4j.support.mapping.Neo4jMappingContext;

@EnableNeo4jRepositories(basePackages = "com.gentics.sandboxmanager.repository")
@Configuration
public class Neo4jConfig extends Neo4jConfiguration {

    private static File databaseLocation;
    private static EmbeddedGraphDatabase neo4jDB;

    /**
     * Returns the neo4j database
     * 
     * @return
     */
    public static EmbeddedGraphDatabase getNeo4jDatabase() {
        return neo4jDB;
    }

    @Bean
    public EmbeddedGraphDatabase graphDatabaseService() throws IOException {

        // TODO use properties so that the app does not use a temp dir
        databaseLocation = Files.createTempDirectory("neo4j").toFile();
        databaseLocation.deleteOnExit();

        neo4jDB = new EmbeddedGraphDatabase(databaseLocation.getAbsolutePath());
        return neo4jDB;
    }

    @Bean
    public Neo4jTemplate neo4jTemplate() throws IOException {
        return new Neo4jTemplate(graphDatabaseService());
    }

    @Bean
    public Neo4jMappingContext neo4jMappingContext() {
        return new Neo4jMappingContext();
    }

    @Bean
    public JtaTransactionManagerFactoryBean transactionManager() throws Exception {
        return new JtaTransactionManagerFactoryBean(graphDatabaseService());
    }

    @Bean
    public Neo4jExceptionTranslator exceptionTranslator() {
        return new Neo4jExceptionTranslator();
    }

}