diff --git a/pom.xml b/pom.xml
index 2d68144a4..32ea3ff80 100644
--- a/pom.xml
+++ b/pom.xml
@@ -183,6 +183,20 @@
test
+
+ org.testcontainers
+ mysql
+ 1.5.1
+ test
+
+
+
+ org.testcontainers
+ postgresql
+ 1.5.1
+ test
+
+
diff --git a/run-tests-against-all-dbs.sh b/run-tests-against-all-dbs.sh
index 9ef6389c1..1fb700b4d 100755
--- a/run-tests-against-all-dbs.sh
+++ b/run-tests-against-all-dbs.sh
@@ -1,3 +1,3 @@
#!/bin/sh
-./start-all-dbs.sh && mvn clean install -Pall-dbs && ./stop-all-dbs.sh
+mvn clean install -Pall-dbs
diff --git a/src/test/java/org/springframework/data/jdbc/testing/MySqlDataSourceConfiguration.java b/src/test/java/org/springframework/data/jdbc/testing/MySqlDataSourceConfiguration.java
index 2fad9d1b1..6c74213a5 100644
--- a/src/test/java/org/springframework/data/jdbc/testing/MySqlDataSourceConfiguration.java
+++ b/src/test/java/org/springframework/data/jdbc/testing/MySqlDataSourceConfiguration.java
@@ -15,15 +15,16 @@
*/
package org.springframework.data.jdbc.testing;
+import java.sql.SQLException;
+
import javax.annotation.PostConstruct;
+import javax.script.ScriptException;
import javax.sql.DataSource;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Profile;
-import org.springframework.core.io.ClassPathResource;
-import org.springframework.jdbc.datasource.init.DataSourceInitializer;
-import org.springframework.jdbc.datasource.init.DatabasePopulator;
-import org.springframework.jdbc.datasource.init.ResourceDatabasePopulator;
+import org.testcontainers.containers.MySQLContainer;
+import org.testcontainers.jdbc.ext.ScriptUtils;
import com.mysql.jdbc.jdbc2.optional.MysqlDataSource;
@@ -32,35 +33,45 @@ import com.mysql.jdbc.jdbc2.optional.MysqlDataSource;
*
* @author Jens Schauder
* @author Oliver Gierke
+ * @author Sedat Gokcen
*/
@Configuration
@Profile("mysql")
class MySqlDataSourceConfiguration extends DataSourceConfiguration {
+ private static final MySQLContainer MYSQL_CONTAINER = new MySQLContainer();
+
+ static {
+ MYSQL_CONTAINER.withConfigurationOverride("mysql_cnf_override").withDatabaseName("test").start();
+ }
+
/*
* (non-Javadoc)
* @see org.springframework.data.jdbc.testing.DataSourceConfiguration#createDataSource()
*/
+ @Override
protected DataSource createDataSource() {
- MysqlDataSource dataSource = new MysqlDataSource();
- dataSource.setUrl("jdbc:mysql:///test?user=root");
+ MysqlDataSource dataSource = getCommonDataSource();
+ dataSource.setDatabaseName(MYSQL_CONTAINER.getDatabaseName());
return dataSource;
}
@PostConstruct
- public void initDatabase() {
+ public void initDatabase() throws SQLException, ScriptException {
- MysqlDataSource dataSource = new MysqlDataSource();
- dataSource.setUrl("jdbc:mysql:///?user=root");
+ MysqlDataSource dataSource = getCommonDataSource();
+ ScriptUtils.executeSqlScript(dataSource.getConnection(), null, "DROP DATABASE test;CREATE DATABASE test;");
+ }
- ClassPathResource createScript = new ClassPathResource("create-mysql.sql");
- DatabasePopulator databasePopulator = new ResourceDatabasePopulator(createScript);
+ private MysqlDataSource getCommonDataSource() {
- DataSourceInitializer initializer = new DataSourceInitializer();
- initializer.setDatabasePopulator(databasePopulator);
- initializer.setDataSource(dataSource);
- initializer.afterPropertiesSet();
+ MysqlDataSource dataSource = new MysqlDataSource();
+ dataSource.setUrl(MYSQL_CONTAINER.getJdbcUrl());
+ dataSource.setUser(MYSQL_CONTAINER.getUsername());
+ dataSource.setPassword(MYSQL_CONTAINER.getPassword());
+
+ return dataSource;
}
}
diff --git a/src/test/java/org/springframework/data/jdbc/testing/PostgresDataSourceConfiguration.java b/src/test/java/org/springframework/data/jdbc/testing/PostgresDataSourceConfiguration.java
index 3443f076b..803033ab0 100644
--- a/src/test/java/org/springframework/data/jdbc/testing/PostgresDataSourceConfiguration.java
+++ b/src/test/java/org/springframework/data/jdbc/testing/PostgresDataSourceConfiguration.java
@@ -21,25 +21,36 @@ import org.postgresql.ds.PGSimpleDataSource;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Profile;
import org.springframework.jdbc.datasource.init.ResourceDatabasePopulator;
+import org.testcontainers.containers.PostgreSQLContainer;
/**
* {@link DataSource} setup for PostgreSQL
*
* @author Jens Schauder
* @author Oliver Gierke
+ * @author Sedat Gokcen
*/
@Configuration
@Profile("postgres")
public class PostgresDataSourceConfiguration extends DataSourceConfiguration {
+ private static final PostgreSQLContainer POSTGRESQL_CONTAINER = new PostgreSQLContainer();
+
+ static {
+ POSTGRESQL_CONTAINER.start();
+ }
+
/*
* (non-Javadoc)
* @see org.springframework.data.jdbc.testing.DataSourceConfiguration#createDataSource()
*/
+ @Override
protected DataSource createDataSource() {
PGSimpleDataSource ds = new PGSimpleDataSource();
- ds.setUrl("jdbc:postgresql:///postgres");
+ ds.setUrl(POSTGRESQL_CONTAINER.getJdbcUrl());
+ ds.setUser(POSTGRESQL_CONTAINER.getUsername());
+ ds.setPassword(POSTGRESQL_CONTAINER.getPassword());
return ds;
}
diff --git a/src/test/resources/create-mysql.sql b/src/test/resources/create-mysql.sql
deleted file mode 100644
index f1afbb0e1..000000000
--- a/src/test/resources/create-mysql.sql
+++ /dev/null
@@ -1,2 +0,0 @@
-DROP DATABASE test;
-CREATE DATABASE test;
diff --git a/src/test/resources/mysql_cnf_override/mysql.cnf b/src/test/resources/mysql_cnf_override/mysql.cnf
new file mode 100644
index 000000000..44b3039c4
--- /dev/null
+++ b/src/test/resources/mysql_cnf_override/mysql.cnf
@@ -0,0 +1,53 @@
+[mysqld]
+
+# the only change we make, other params with the comments all together are the default ones.
+lower_case_table_names = 1
+
+user = mysql
+datadir = /var/lib/mysql
+port = 3306
+#socket = /tmp/mysql.sock
+skip-external-locking
+key_buffer_size = 16K
+max_allowed_packet = 1M
+table_open_cache = 4
+sort_buffer_size = 64K
+read_buffer_size = 256K
+read_rnd_buffer_size = 256K
+net_buffer_length = 2K
+skip-host-cache
+skip-name-resolve
+
+# Don't listen on a TCP/IP port at all. This can be a security enhancement,
+# if all processes that need to connect to mysqld run on the same host.
+# All interaction with mysqld must be made via Unix sockets or named pipes.
+# Note that using this option without enabling named pipes on Windows
+# (using the "enable-named-pipe" option) will render mysqld useless!
+#
+#skip-networking
+#server-id = 1
+
+# Uncomment the following if you want to log updates
+#log-bin=mysql-bin
+
+# binary logging format - mixed recommended
+#binlog_format=mixed
+
+# Causes updates to non-transactional engines using statement format to be
+# written directly to binary log. Before using this option make sure that
+# there are no dependencies between transactional and non-transactional
+# tables such as in the statement INSERT INTO t_myisam SELECT * FROM
+# t_innodb; otherwise, slaves may diverge from the master.
+#binlog_direct_non_transactional_updates=TRUE
+
+# Uncomment the following if you are using InnoDB tables
+innodb_data_file_path = ibdata1:10M:autoextend
+# You can set .._buffer_pool_size up to 50 - 80 %
+# of RAM but beware of setting memory usage too high
+innodb_buffer_pool_size = 16M
+#innodb_additional_mem_pool_size = 2M
+# Set .._log_file_size to 25 % of buffer pool size
+innodb_log_file_size = 5M
+innodb_log_buffer_size = 8M
+innodb_flush_log_at_trx_commit = 1
+innodb_lock_wait_timeout = 50
\ No newline at end of file
diff --git a/start-all-dbs.sh b/start-all-dbs.sh
deleted file mode 100755
index 69ef5d777..000000000
--- a/start-all-dbs.sh
+++ /dev/null
@@ -1,7 +0,0 @@
-#!/bin/sh
-
-# postgres
-pg_ctl -D /usr/local/var/postgres start
-
-# mysql
-mysql.server start
diff --git a/stop-all-dbs.sh b/stop-all-dbs.sh
deleted file mode 100755
index 402d21c35..000000000
--- a/stop-all-dbs.sh
+++ /dev/null
@@ -1,7 +0,0 @@
-#!/bin/sh
-
-# postgres
-pg_ctl -D /usr/local/var/postgres stop
-
-# mysql
-mysql.server stop