diff --git a/pom.xml b/pom.xml
index 1dad257bd..e2a6daf93 100644
--- a/pom.xml
+++ b/pom.xml
@@ -230,6 +230,28 @@
+
+ org.codehaus.mojo
+ build-helper-maven-plugin
+ 1.8
+
+
+ reserve-network-port
+
+ reserve-network-port
+
+ process-resources
+
+
+ cassandra.native_transport_port
+ cassandra.rpc_port
+ cassandra.storage_port
+ cassandra.ssl_storage_port
+
+
+
+
+
org.apache.maven.plugins
maven-dependency-plugin
@@ -285,5 +307,31 @@
+
+
+
+ src/main/resources
+ true
+
+ **/*
+
+
+
+
+
+ src/test/resources
+ true
+
+ **/*
+
+
+
+ ../shared/test/resources
+ true
+
+ **/*
+
+
+
diff --git a/shared/test/resources/build.properties b/shared/test/resources/build.properties
new file mode 100644
index 000000000..94b576b8a
--- /dev/null
+++ b/shared/test/resources/build.properties
@@ -0,0 +1,2 @@
+cassandra.native_transport_port=@cassandra.native_transport_port@
+cassandra.rpc_port=@cassandra.rpc_port@
diff --git a/spring-cassandra/src/test/java/org/springframework/cassandra/test/integration/AbstractEmbeddedCassandraIntegrationTest.java b/spring-cassandra/src/test/java/org/springframework/cassandra/test/integration/AbstractEmbeddedCassandraIntegrationTest.java
index 3315c021a..12c3dc4ed 100644
--- a/spring-cassandra/src/test/java/org/springframework/cassandra/test/integration/AbstractEmbeddedCassandraIntegrationTest.java
+++ b/spring-cassandra/src/test/java/org/springframework/cassandra/test/integration/AbstractEmbeddedCassandraIntegrationTest.java
@@ -8,6 +8,7 @@ import org.cassandraunit.utils.EmbeddedCassandraServerHelper;
import org.junit.BeforeClass;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import org.springframework.cassandra.test.integration.support.BuildProperties;
import org.springframework.cassandra.test.unit.support.Utils;
import com.datastax.driver.core.Cluster;
@@ -22,9 +23,11 @@ public class AbstractEmbeddedCassandraIntegrationTest {
static Logger log = LoggerFactory.getLogger(AbstractEmbeddedCassandraIntegrationTest.class);
+ protected static final BuildProperties PROPS = new BuildProperties("/build.properties");
+
protected static final String CASSANDRA_CONFIG = "spring-cassandra.yaml";
protected static final String CASSANDRA_HOST = "localhost";
- protected static final int CASSANDRA_NATIVE_PORT = 9042;
+ protected static final int CASSANDRA_NATIVE_PORT = PROPS.getInt("cassandra.native_transport_port");
/**
* The session connected to the system keyspace.
diff --git a/spring-cassandra/src/test/java/org/springframework/cassandra/test/integration/config/java/Config.java b/spring-cassandra/src/test/java/org/springframework/cassandra/test/integration/config/java/Config.java
index 7768526a0..502fc574d 100644
--- a/spring-cassandra/src/test/java/org/springframework/cassandra/test/integration/config/java/Config.java
+++ b/spring-cassandra/src/test/java/org/springframework/cassandra/test/integration/config/java/Config.java
@@ -1,10 +1,10 @@
package org.springframework.cassandra.test.integration.config.java;
-import org.springframework.cassandra.config.java.AbstractCassandraConfiguration;
import org.springframework.context.annotation.Configuration;
+import org.springframework.cassandra.test.integration.support.AbstractTestJavaConfig;
@Configuration
-public class Config extends AbstractCassandraConfiguration {
+public class Config extends AbstractTestJavaConfig {
@Override
protected String getKeyspaceName() {
diff --git a/spring-cassandra/src/test/java/org/springframework/cassandra/test/integration/config/java/KeyspaceCreatingJavaConfig.java b/spring-cassandra/src/test/java/org/springframework/cassandra/test/integration/config/java/KeyspaceCreatingJavaConfig.java
index 4b0f9be88..3db7d94f4 100644
--- a/spring-cassandra/src/test/java/org/springframework/cassandra/test/integration/config/java/KeyspaceCreatingJavaConfig.java
+++ b/spring-cassandra/src/test/java/org/springframework/cassandra/test/integration/config/java/KeyspaceCreatingJavaConfig.java
@@ -4,13 +4,13 @@ import java.util.ArrayList;
import java.util.List;
import org.springframework.cassandra.config.KeyspaceAttributes;
-import org.springframework.cassandra.config.java.AbstractCassandraConfiguration;
import org.springframework.cassandra.core.keyspace.CreateKeyspaceSpecification;
import org.springframework.cassandra.core.keyspace.KeyspaceOption;
+import org.springframework.cassandra.test.integration.support.AbstractTestJavaConfig;
import org.springframework.context.annotation.Configuration;
@Configuration
-public class KeyspaceCreatingJavaConfig extends AbstractCassandraConfiguration {
+public class KeyspaceCreatingJavaConfig extends AbstractTestJavaConfig {
public static final String KEYSPACE_NAME = "foo";
diff --git a/spring-cassandra/src/test/java/org/springframework/cassandra/test/integration/config/xml/XmlConfigTest.java b/spring-cassandra/src/test/java/org/springframework/cassandra/test/integration/config/xml/XmlConfigTest.java
index 28300bb12..7f77c3791 100644
--- a/spring-cassandra/src/test/java/org/springframework/cassandra/test/integration/config/xml/XmlConfigTest.java
+++ b/spring-cassandra/src/test/java/org/springframework/cassandra/test/integration/config/xml/XmlConfigTest.java
@@ -12,7 +12,7 @@ import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import com.datastax.driver.core.Session;
@RunWith(SpringJUnit4ClassRunner.class)
-@ContextConfiguration
+@ContextConfiguration(locations = "classpath:/org/springframework/cassandra/test/integration/config/xml/XmlConfigTest-context.xml")
public class XmlConfigTest extends AbstractKeyspaceCreatingIntegrationTest {
public static final String KEYSPACE = "xmlconfigtest";
diff --git a/spring-cassandra/src/test/java/org/springframework/cassandra/test/integration/support/AbstractTestJavaConfig.java b/spring-cassandra/src/test/java/org/springframework/cassandra/test/integration/support/AbstractTestJavaConfig.java
new file mode 100644
index 000000000..6a3cfacd1
--- /dev/null
+++ b/spring-cassandra/src/test/java/org/springframework/cassandra/test/integration/support/AbstractTestJavaConfig.java
@@ -0,0 +1,16 @@
+package org.springframework.cassandra.test.integration.support;
+
+import org.springframework.cassandra.config.java.AbstractCassandraConfiguration;
+import org.springframework.context.annotation.Configuration;
+
+@Configuration
+public abstract class AbstractTestJavaConfig extends AbstractCassandraConfiguration {
+
+ public static BuildProperties PROPS = new BuildProperties("/build.properties");
+ public static final int PORT = PROPS.getInt("cassandra.native_transport_port");
+
+ @Override
+ protected int getPort() {
+ return PORT;
+ }
+}
diff --git a/spring-cassandra/src/test/java/org/springframework/cassandra/test/integration/support/BuildProperties.java b/spring-cassandra/src/test/java/org/springframework/cassandra/test/integration/support/BuildProperties.java
new file mode 100644
index 000000000..acee7c001
--- /dev/null
+++ b/spring-cassandra/src/test/java/org/springframework/cassandra/test/integration/support/BuildProperties.java
@@ -0,0 +1,45 @@
+package org.springframework.cassandra.test.integration.support;
+
+import java.io.InputStream;
+import java.util.Properties;
+
+@SuppressWarnings("serial")
+public class BuildProperties extends Properties {
+
+ public BuildProperties() {
+ this("build.properties");
+ }
+
+ public BuildProperties(String resourceName) {
+
+ InputStream in = null;
+ try {
+ in = getClass().getResourceAsStream(resourceName);
+ if (in == null) {
+ return;
+ }
+ load(in);
+
+ } catch (Exception x) {
+ throw new RuntimeException(x);
+
+ } finally {
+ if (in != null) {
+ try {
+ in.close();
+ } catch (Exception e) {
+ // gulp
+ }
+ }
+ }
+ }
+
+ public int getInt(String key) {
+ String property = getProperty(key);
+ return Integer.parseInt(property);
+ }
+
+ public boolean getBoolean(String key) {
+ return Boolean.parseBoolean(getProperty(key));
+ }
+}
diff --git a/spring-cassandra/src/test/resources/logback-test.xml b/spring-cassandra/src/test/resources/logback-test.xml
index 7db55523f..94db3089c 100644
--- a/spring-cassandra/src/test/resources/logback-test.xml
+++ b/spring-cassandra/src/test/resources/logback-test.xml
@@ -9,7 +9,7 @@
-
+
diff --git a/spring-cassandra/src/test/resources/org/springframework/cassandra/test/integration/config/xml/FullySpecifiedKeyspaceCreatingXmlConfigTest-context.xml b/spring-cassandra/src/test/resources/org/springframework/cassandra/test/integration/config/xml/FullySpecifiedKeyspaceCreatingXmlConfigTest-context.xml
index 24b776df2..d8074169c 100644
--- a/spring-cassandra/src/test/resources/org/springframework/cassandra/test/integration/config/xml/FullySpecifiedKeyspaceCreatingXmlConfigTest-context.xml
+++ b/spring-cassandra/src/test/resources/org/springframework/cassandra/test/integration/config/xml/FullySpecifiedKeyspaceCreatingXmlConfigTest-context.xml
@@ -8,9 +8,9 @@
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd">
+ location="classpath:build.properties,classpath:/org/springframework/cassandra/test/integration/config/xml/FullySpecifiedKeyspaceCreatingXmlConfigTest.properties" />
-
+
-
+
+
+
diff --git a/spring-cassandra/src/test/resources/org/springframework/cassandra/test/integration/config/xml/MinimalXmlConfigTest-context.xml b/spring-cassandra/src/test/resources/org/springframework/cassandra/test/integration/config/xml/MinimalXmlConfigTest-context.xml
index e0939fdc3..7b8d56381 100644
--- a/spring-cassandra/src/test/resources/org/springframework/cassandra/test/integration/config/xml/MinimalXmlConfigTest-context.xml
+++ b/spring-cassandra/src/test/resources/org/springframework/cassandra/test/integration/config/xml/MinimalXmlConfigTest-context.xml
@@ -6,7 +6,10 @@
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd">
-
+
+
+
diff --git a/spring-cassandra/src/test/resources/org/springframework/cassandra/test/integration/config/xml/XmlConfigTest-context.xml b/spring-cassandra/src/test/resources/org/springframework/cassandra/test/integration/config/xml/XmlConfigTest-context.xml
index 1a31974f8..7e0d32808 100644
--- a/spring-cassandra/src/test/resources/org/springframework/cassandra/test/integration/config/xml/XmlConfigTest-context.xml
+++ b/spring-cassandra/src/test/resources/org/springframework/cassandra/test/integration/config/xml/XmlConfigTest-context.xml
@@ -6,8 +6,11 @@
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd">
+
+
+ contactPoints="localhost" port="${cassandra.native_transport_port}">
diff --git a/spring-cassandra/src/test/resources/spring-cassandra.yaml b/spring-cassandra/src/test/resources/spring-cassandra.yaml
index 67c59aba4..aba533b09 100644
--- a/spring-cassandra/src/test/resources/spring-cassandra.yaml
+++ b/spring-cassandra/src/test/resources/spring-cassandra.yaml
@@ -303,11 +303,11 @@ trickle_fsync: false
trickle_fsync_interval_in_kb: 10240
# TCP port, for commands and data
-storage_port: 7000
+storage_port: ${cassandra.storage_port}
# SSL port, for encrypted communication. Unused unless enabled in
# encryption_options
-ssl_storage_port: 7001
+ssl_storage_port: ${cassandra.ssl_storage_port}
# Address to bind to and tell other Cassandra nodes to connect to. You
# _must_ change this if you want multiple nodes to be able to
@@ -334,7 +334,7 @@ listen_address: localhost
# same as the rpc_address. The port however is different and specified below.
start_native_transport: true
# port for the CQL native transport to listen for clients on
-native_transport_port: 9042
+native_transport_port: ${cassandra.native_transport_port}
# The minimum and maximum threads for handling requests when the native
# transport is used. They are similar to rpc_min_threads and rpc_max_threads,
# though the defaults differ slightly.
@@ -352,7 +352,7 @@ start_rpc: true
# (i.e. it will be based on the configured hostname of the node).
rpc_address: localhost
# port for Thrift to listen for clients on
-rpc_port: 9160
+rpc_port: ${cassandra.rpc_port}
# enable or disable keepalive on rpc connections
rpc_keepalive: true
diff --git a/spring-data-cassandra/src/test/resources/org/springframework/data/cassandra/test/integration/config/CassandraNamespaceTests-context.xml b/spring-data-cassandra/src/test/resources/org/springframework/data/cassandra/test/integration/config/CassandraNamespaceTests-context.xml
index 56723073e..9bbfdf681 100644
--- a/spring-data-cassandra/src/test/resources/org/springframework/data/cassandra/test/integration/config/CassandraNamespaceTests-context.xml
+++ b/spring-data-cassandra/src/test/resources/org/springframework/data/cassandra/test/integration/config/CassandraNamespaceTests-context.xml
@@ -11,7 +11,7 @@
location="classpath:/org/springframework/data/cassandra/test/integration/config/cassandra.properties" />