Chapter 19. Environment setup

Spring Data Graph dramatically simplifies development, but some setup is naturally required. For building the application, Maven needs to be configured to include the Spring Data Graph dependencies, and configure the AspectJ weaving. After the build setup is complete, the Spring application needs to be configured to make use of Spring Data Graph.

Spring Data Graph projects can be built using maven, we also added means to build them with gradle and ant/ivy.

19.1. Gradle configuration

The necessary build plugin to build Spring Data Graph projects with gradle is available as part of the SDG distribution or on github which makes the usage as easy as:

Example 19.1. Gradle Build Configuration

sourceCompatibility = 1.6
targetCompatibility = 1.6

springVersion = "3.0.5.RELEASE"
springDataGraphVersion = "1.1.0"
aspectjVersion = "1.6.12.M1

apply from:'

configurations {
repositories {
	mavenRepo urls: ""

The actual springdatagraph.gradle is very simple just decorating the javac tasks with the iajc ant task.

19.2. Ant/Ivy configuration

The supplied sample ant build configuration is mainly about resolving the dependencies for Spring Data Graph and AspectJ using Ivy and integrating the iajc ant task in the build.

Example 19.2. Ant/Ivy Build Configuration

	<taskdef resource="org/aspectj/tools/ant/taskdefs/" classpath="${lib.dir}/aspectjtools.jar"/>

<target name="compile" description="Compile production classes" depends="lib.retrieve">
	<mkdir dir="${}" />

	<iajc sourceroots="${main.src}" destDir="${}" classpathref="path.libs" source="1.6">
			<pathelement location="${lib.dir}/spring-aspects.jar"/>
			<pathelement location="${lib.dir}/spring-data-neo4j.jar"/>

19.3. Maven configuration

Spring Data Graph projects are easiest to build with Apache Maven. The main dependencies are: Spring Data Graph itself, Spring Data Commons, parts of the Spring Framework, and the Neo4j graph database.

19.3.1. Repositories

The milestone releases of Spring Data Graph are available from the dedicated milestone repository. Neo4j releases and milestones are available from Maven Central.

Example 19.3. Spring milestone repository

    <name>Springframework Maven Repository</name>

19.3.2. Dependencies

The dependency on spring-data-neo4j will transitively pull in the necessary parts of Spring Framework (core, context, aop, aspects, tx), Aspectj, Neo4j, and Spring Data Commons. If you already use these (or different versions of these) in your project, then include those dependencies on your own.

Example 19.4. Maven dependencies



19.3.3. AspectJ build configuration

Since Spring Data Graph uses AspectJ for build-time aspect weaving of entities, it is necessary to hook in the AspectJ Maven plugin to the build process. The plugin also has its own dependencies. You also need to explicitly specify the aspect libraries (spring-aspects and spring-data-neo4j).

Example 19.5. AspectJ configuration

        <!-- NB: You must use Maven 2.0.9 or above or these are ignored (see MNG-2972) -->

19.4. Spring configuration

Users of Spring Data Graph have two ways of very concisely configuring it. Either they can use a Spring Data Graph XML configuration namespace, or they can use a Java-based bean configuration.

19.4.1. XML namespace

The XML namespace can be used to configure Spring Data Graph. The config element provides an XML-based configuration of Spring Data Graph in one line. It has three attributes. graphDatabaseService points out the Neo4j instance to use. For convenience, storeDirectory can be set instead of graphDatabaseService to point to a directory where a new EmbeddedGraphDatabase will be created. For cross-store configuration, the entityManagerFactory attribute needs to be configured.

Example 19.6. XML configuration with store directory

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<beans xmlns=""

    <datagraph:config storeDirectory="target/config-test"/>


Example 19.7. XML configuration with bean


<bean id="graphDatabaseService" class="org.neo4j.kernel.EmbeddedGraphDatabase"
    <constructor-arg index="0" value="target/config-test" />

<datagraph:config graphDatabaseService="graphDatabaseService"/>

Example 19.8. XML configuration with cross-store


<bean class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"
    <property name="dataSource" ref="dataSource"/>
    <property name="persistenceXmlLocation" value="classpath:META-INF/persistence.xml"/>

<datagraph:config storeDirectory="target/config-test"

19.4.2. Java-based bean configuration

You can also configure Spring Data Graph using Java-based bean metadata.


For those not familiar with Java-based bean metadata in Spring, we recommend that you read up on it first. The Spring documentation has a high-level introduction as well as detailed documentation on it.

In order to configure Spring Data Graph with Java-based bean metadata, the class Neo4jConfiguration is registered with the context. This is either done explicitly in the context configuration, or via classpath scanning for classes that have the @Configuration annotation. The only thing that must be provided is the GraphDatabaseService. The example below shows how to register the @Configuration Neo4jConfiguration class, as well as Spring's ConfigurationClassPostProcessor that transforms the @Configuration class to bean definitions.

Example 19.9. Java-based bean configuration

<![CDATA[<beans ...>
    <tx:annotation-driven mode="aspectj" transaction-manager="transactionManager"/>
    <bean class=""/>

    <bean class="org.springframework.context.annotation.ConfigurationClassPostProcessor"/>

    <bean id="graphDatabaseService" class="org.neo4j.kernel.EmbeddedGraphDatabase"
          destroy-method="shutdown" scope="singleton">
        <constructor-arg index="0" value="target/config-test"/>