From 5548b24c4cd7e4c6054af4326d7f6622271bbe74 Mon Sep 17 00:00:00 2001 From: Dave Syer Date: Thu, 1 May 2014 19:37:25 +0100 Subject: [PATCH] Add autoconfig support for Flyway migrations Flyway starts up with its default settings if it is on the classpath. You can also ask Boot to barf if the migration scripts are missing. Fixes gh-730 --- spring-boot-autoconfigure/pom.xml | 5 + .../flyway/FlywayAutoConfiguration.java | 94 +++++++++++++++ .../flyway/FlywayProperties.java | 92 ++++++++++++++ .../main/resources/META-INF/spring.factories | 1 + .../flyway/FlywayAutoConfigurationTests.java | 113 ++++++++++++++++++ .../test/resources/db/migrations/V1__init.sql | 0 spring-boot-dependencies/pom.xml | 8 +- spring-boot-docs/src/main/asciidoc/howto.adoc | 14 +++ .../src/main/asciidoc/using-spring-boot.adoc | 3 + spring-boot-samples/pom.xml | 1 + .../spring-boot-sample-flyway/pom.xml | 49 ++++++++ .../flyway/SampleFlywayApplication.java | 32 +++++ .../main/resources/db/migrations/V1__init.sql | 7 ++ .../SampleLiquibaseApplicationTests.java | 40 +++++++ .../spring-boot-sample-liquibase/pom.xml | 2 +- spring-boot-starters/pom.xml | 1 + .../spring-boot-starter-flyway/pom.xml | 31 +++++ .../main/resources/META-INF/spring.provides | 1 + .../spring-boot-starter-liquibase/pom.xml | 2 +- .../spring-boot-starter-parent/pom.xml | 5 + 20 files changed, 498 insertions(+), 3 deletions(-) create mode 100644 spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/flyway/FlywayAutoConfiguration.java create mode 100644 spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/flyway/FlywayProperties.java create mode 100644 spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/flyway/FlywayAutoConfigurationTests.java create mode 100644 spring-boot-autoconfigure/src/test/resources/db/migrations/V1__init.sql create mode 100644 spring-boot-samples/spring-boot-sample-flyway/pom.xml create mode 100644 spring-boot-samples/spring-boot-sample-flyway/src/main/java/sample/flyway/SampleFlywayApplication.java create mode 100644 spring-boot-samples/spring-boot-sample-flyway/src/main/resources/db/migrations/V1__init.sql create mode 100644 spring-boot-samples/spring-boot-sample-flyway/src/test/java/sample/flyway/SampleLiquibaseApplicationTests.java create mode 100644 spring-boot-starters/spring-boot-starter-flyway/pom.xml create mode 100644 spring-boot-starters/spring-boot-starter-flyway/src/main/resources/META-INF/spring.provides diff --git a/spring-boot-autoconfigure/pom.xml b/spring-boot-autoconfigure/pom.xml index d2b1de82797b..891184be9de4 100644 --- a/spring-boot-autoconfigure/pom.xml +++ b/spring-boot-autoconfigure/pom.xml @@ -37,6 +37,11 @@ jackson-datatype-joda true + + com.googlecode.flyway + flyway-core + true + commons-dbcp commons-dbcp diff --git a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/flyway/FlywayAutoConfiguration.java b/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/flyway/FlywayAutoConfiguration.java new file mode 100644 index 000000000000..18d0e91925cf --- /dev/null +++ b/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/flyway/FlywayAutoConfiguration.java @@ -0,0 +1,94 @@ +/* + * Copyright 2012-2014 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.springframework.boot.autoconfigure.flyway; + +import javax.annotation.PostConstruct; +import javax.sql.DataSource; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.autoconfigure.AutoConfigureAfter; +import org.springframework.boot.autoconfigure.EnableAutoConfiguration; +import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; +import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; +import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration; +import org.springframework.boot.context.properties.EnableConfigurationProperties; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.core.io.DefaultResourceLoader; +import org.springframework.core.io.Resource; +import org.springframework.core.io.ResourceLoader; +import org.springframework.util.Assert; + +import com.googlecode.flyway.core.Flyway; + +/** + * {@link EnableAutoConfiguration Auto-configuration} for Flyway database migrations. + * + * @author Dave Syer + */ +@Configuration +@ConditionalOnClass(Flyway.class) +@AutoConfigureAfter(DataSourceAutoConfiguration.class) +public class FlywayAutoConfiguration { + + @Configuration + @ConditionalOnMissingBean(Flyway.class) + @EnableConfigurationProperties(FlywayProperties.class) + public static class LiquibaseConfiguration { + + @Autowired + private FlywayProperties properties = new FlywayProperties(); + + @Autowired + private ResourceLoader resourceLoader = new DefaultResourceLoader(); + + @Autowired + private DataSource dataSource; + + @PostConstruct + public void checkLocationExists() { + if (this.properties.isCheckLocation()) { + + Assert.state(!this.properties.getLocations().isEmpty(), + "Migration script locations not configured"); + boolean exists = false; + for (String location : this.properties.getLocations()) { + Resource resource = this.resourceLoader.getResource(location); + exists = !exists && resource.exists(); + } + Assert.state(exists, "Cannot find migrations location in: " + + this.properties.getLocations() + + " (please add migrations or check your Flyway configuration)"); + } + } + + @Bean + public Flyway flyway(DataSource dataSource) { + Flyway flyway = new Flyway(); + flyway.setLocations(this.properties.getLocations().toArray(new String[0])); + flyway.setSchemas(this.properties.getSchemas().toArray(new String[0])); + flyway.setInitVersion(this.properties.getInitVersion()); + flyway.setSqlMigrationPrefix(this.properties.getPrefix()); + flyway.setSqlMigrationSuffix(this.properties.getSuffix()); + flyway.setDataSource(dataSource); + flyway.migrate(); + return flyway; + } + + } + +} diff --git a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/flyway/FlywayProperties.java b/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/flyway/FlywayProperties.java new file mode 100644 index 000000000000..25114c2fbe84 --- /dev/null +++ b/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/flyway/FlywayProperties.java @@ -0,0 +1,92 @@ +/* + * Copyright 2012-2014 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.springframework.boot.autoconfigure.flyway; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +import org.springframework.boot.context.properties.ConfigurationProperties; + +/** + * Configuration properties to configure Flyway. + * + * @author Dave Syer + */ +@ConfigurationProperties(prefix = "spring.flyway", ignoreUnknownFields = false) +public class FlywayProperties { + + private List locations = Arrays.asList("db/migrations"); + + private List schemas = new ArrayList(); + + private String prefix = "V"; + + private String suffix = ".sql"; + + private String initVersion = "1"; + + private boolean checkLocation; + + public String getPrefix() { + return this.prefix; + } + + public void setPrefix(String prefix) { + this.prefix = prefix; + } + + public String getSuffix() { + return this.suffix; + } + + public void setSuffix(String suffix) { + this.suffix = suffix; + } + + public String getInitVersion() { + return this.initVersion; + } + + public void setInitVersion(String initVersion) { + this.initVersion = initVersion; + } + + public void setLocations(List locations) { + this.locations = locations; + } + + public List getLocations() { + return this.locations; + } + + public List getSchemas() { + return this.schemas; + } + + public void setSchemas(List schemas) { + this.schemas = schemas; + } + + public void setCheckLocation(boolean checkLocation) { + this.checkLocation = checkLocation; + } + + public boolean isCheckLocation() { + return this.checkLocation; + } +} diff --git a/spring-boot-autoconfigure/src/main/resources/META-INF/spring.factories b/spring-boot-autoconfigure/src/main/resources/META-INF/spring.factories index d6ae3f7b9892..5db10f70e530 100644 --- a/spring-boot-autoconfigure/src/main/resources/META-INF/spring.factories +++ b/spring-boot-autoconfigure/src/main/resources/META-INF/spring.factories @@ -19,6 +19,7 @@ org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration,\ org.springframework.boot.autoconfigure.jdbc.DataSourceTransactionManagerAutoConfiguration,\ org.springframework.boot.autoconfigure.jms.JmsTemplateAutoConfiguration,\ org.springframework.boot.autoconfigure.jmx.JmxAutoConfiguration,\ +org.springframework.boot.autoconfigure.flyway.FlywayAutoConfiguration,\ org.springframework.boot.autoconfigure.liquibase.LiquibaseAutoConfiguration,\ org.springframework.boot.autoconfigure.mobile.DeviceResolverAutoConfiguration,\ org.springframework.boot.autoconfigure.mongo.MongoAutoConfiguration,\ diff --git a/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/flyway/FlywayAutoConfigurationTests.java b/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/flyway/FlywayAutoConfigurationTests.java new file mode 100644 index 000000000000..198f5cd8aa62 --- /dev/null +++ b/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/flyway/FlywayAutoConfigurationTests.java @@ -0,0 +1,113 @@ +/* + * Copyright 2012-2014 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.springframework.boot.autoconfigure.flyway; + +import java.util.Arrays; + +import org.junit.After; +import org.junit.Rule; +import org.junit.Test; +import org.junit.rules.ExpectedException; +import org.springframework.beans.factory.BeanCreationException; +import org.springframework.boot.autoconfigure.PropertyPlaceholderAutoConfiguration; +import org.springframework.boot.autoconfigure.jdbc.EmbeddedDataSourceConfiguration; +import org.springframework.boot.autoconfigure.liquibase.LiquibaseAutoConfiguration; +import org.springframework.boot.test.EnvironmentTestUtils; +import org.springframework.context.annotation.AnnotationConfigApplicationContext; + +import com.googlecode.flyway.core.Flyway; + +import static org.junit.Assert.assertEquals; + +/** + * Tests for {@link LiquibaseAutoConfiguration}. + * + * @author Dave Syer + */ +public class FlywayAutoConfigurationTests { + + @Rule + public ExpectedException expected = ExpectedException.none(); + + private AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext();; + + @After + public void close() { + if (this.context != null) { + this.context.close(); + } + } + + @Test + public void testNoDataSource() throws Exception { + this.context.register(FlywayAutoConfiguration.class, + PropertyPlaceholderAutoConfiguration.class); + this.expected.expect(BeanCreationException.class); + this.expected.expectMessage("No qualifying bean"); + this.expected.expectMessage("DataSource"); + this.context.refresh(); + } + + @Test + public void testDefaultFlyway() throws Exception { + this.context + .register(EmbeddedDataSourceConfiguration.class, + FlywayAutoConfiguration.class, + PropertyPlaceholderAutoConfiguration.class); + this.context.refresh(); + Flyway flyway = this.context.getBean(Flyway.class); + assertEquals("[classpath:db/migrations]", Arrays.asList(flyway.getLocations()) + .toString()); + } + + @Test + public void testOverrideLocations() throws Exception { + EnvironmentTestUtils.addEnvironment(this.context, + "spring.flyway.locations:classpath:db/changelog"); + this.context + .register(EmbeddedDataSourceConfiguration.class, + FlywayAutoConfiguration.class, + PropertyPlaceholderAutoConfiguration.class); + this.context.refresh(); + Flyway flyway = this.context.getBean(Flyway.class); + assertEquals("[classpath:db/changelog]", Arrays.asList(flyway.getLocations()) + .toString()); + } + + @Test + public void testOverrideSchemas() throws Exception { + EnvironmentTestUtils.addEnvironment(this.context, "spring.flyway.schemas:public"); + this.context + .register(EmbeddedDataSourceConfiguration.class, + FlywayAutoConfiguration.class, + PropertyPlaceholderAutoConfiguration.class); + this.context.refresh(); + Flyway flyway = this.context.getBean(Flyway.class); + assertEquals("[public]", Arrays.asList(flyway.getSchemas()).toString()); + } + + @Test(expected = BeanCreationException.class) + public void testChangeLogDoesNotExist() throws Exception { + EnvironmentTestUtils.addEnvironment(this.context, + "spring.flyway.locations:no-such-dir"); + this.context + .register(EmbeddedDataSourceConfiguration.class, + FlywayAutoConfiguration.class, + PropertyPlaceholderAutoConfiguration.class); + this.context.refresh(); + } +} diff --git a/spring-boot-autoconfigure/src/test/resources/db/migrations/V1__init.sql b/spring-boot-autoconfigure/src/test/resources/db/migrations/V1__init.sql new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/spring-boot-dependencies/pom.xml b/spring-boot-dependencies/pom.xml index 4f36d60c7be6..3f7fed899db2 100644 --- a/spring-boot-dependencies/pom.xml +++ b/spring-boot-dependencies/pom.xml @@ -51,6 +51,7 @@ 1.4 1.6 1.3.0-beta14 + 2.2.1 2.3.20 7.0.1 1.6 @@ -80,7 +81,7 @@ 2.11.4 5.1.30 2.0.2 - 1.1.0.RELEASE + 1.1.1.BUILD-SNAPSHOT 3.0.1 1.7.7 1.13 @@ -146,6 +147,11 @@ jackson-datatype-joda ${jackson.version} + + com.googlecode.flyway + flyway-core + ${flyway.version} + com.zaxxer HikariCP diff --git a/spring-boot-docs/src/main/asciidoc/howto.adoc b/spring-boot-docs/src/main/asciidoc/howto.adoc index e7ca6d215c95..d8a405a5337d 100644 --- a/spring-boot-docs/src/main/asciidoc/howto.adoc +++ b/spring-boot-docs/src/main/asciidoc/howto.adoc @@ -1095,6 +1095,20 @@ Spring Boot works fine with higher level migration tools http://flywaydb.org/[Fl Flyway because it is easier on the eyes, and it isn't very common to need platform independence: usually only one or at most couple of platforms is needed. +[[howto-execute-flyway-database-migrations-on-startup]] +==== Execute Flyway database migrations on startup +To automatically run Flyway database migrations on startup, add the +`spring-boot-starter-flyway` to your classpath. + +The migrations are scripts in the form `V__.sql` (with +`` an underscore-separated version, e.g. "1" or "2_1"). By +default they live in a folder `classpath:db/migrations` but you can +modify that using `flyway.locations` (a list). See +{sc-spring-boot-autoconfigure}/flyway/FlywayProperties.{sc-ext}[`FlywayProperties`] +for details of available settings like schemas etc. + +There is a {github-code}/spring-boot-samples/spring-boot-sample-flyway[Flyway sample] so +you can see how to set things up. [[howto-execute-liquibase-database-migrations-on-startup]] diff --git a/spring-boot-docs/src/main/asciidoc/using-spring-boot.adoc b/spring-boot-docs/src/main/asciidoc/using-spring-boot.adoc index 88096747841a..7cd60451784b 100644 --- a/spring-boot-docs/src/main/asciidoc/using-spring-boot.adoc +++ b/spring-boot-docs/src/main/asciidoc/using-spring-boot.adoc @@ -238,6 +238,9 @@ and Hibernate. |`spring-boot-starter-jdbc` |JDBC Database support. +|`spring-boot-starter-flyway` +|Support for Flyway database migrations. + |`spring-boot-starter-liquibase` |Support for Liquibase database migrations. diff --git a/spring-boot-samples/pom.xml b/spring-boot-samples/pom.xml index 9def9bce5e68..1db66ee63316 100644 --- a/spring-boot-samples/pom.xml +++ b/spring-boot-samples/pom.xml @@ -32,6 +32,7 @@ spring-boot-sample-data-mongodb spring-boot-sample-data-redis spring-boot-sample-data-rest + spring-boot-sample-flyway spring-boot-sample-integration spring-boot-sample-jetty spring-boot-sample-liquibase diff --git a/spring-boot-samples/spring-boot-sample-flyway/pom.xml b/spring-boot-samples/spring-boot-sample-flyway/pom.xml new file mode 100644 index 000000000000..8d7fa803ec3f --- /dev/null +++ b/spring-boot-samples/spring-boot-sample-flyway/pom.xml @@ -0,0 +1,49 @@ + + + 4.0.0 + + + org.springframework.boot + spring-boot-samples + 1.1.0.BUILD-SNAPSHOT + + spring-boot-sample-flyway + Spring Boot Flyway Sample + Spring Boot Flyway Sample + http://projects.spring.io/spring-boot/ + + Pivotal Software, Inc. + http://www.spring.io + + + ${basedir}/../.. + + + + org.springframework.boot + spring-boot-starter + + + org.springframework.boot + spring-boot-starter-flyway + + + org.hsqldb + hsqldb + runtime + + + org.springframework.boot + spring-boot-starter-test + test + + + + + + org.springframework.boot + spring-boot-maven-plugin + + + + diff --git a/spring-boot-samples/spring-boot-sample-flyway/src/main/java/sample/flyway/SampleFlywayApplication.java b/spring-boot-samples/spring-boot-sample-flyway/src/main/java/sample/flyway/SampleFlywayApplication.java new file mode 100644 index 000000000000..52437aadb512 --- /dev/null +++ b/spring-boot-samples/spring-boot-sample-flyway/src/main/java/sample/flyway/SampleFlywayApplication.java @@ -0,0 +1,32 @@ +/* + * Copyright 2012-2013 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package sample.flyway; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.EnableAutoConfiguration; +import org.springframework.context.annotation.ComponentScan; +import org.springframework.context.annotation.Configuration; + +@Configuration +@ComponentScan +@EnableAutoConfiguration +public class SampleFlywayApplication { + + public static void main(String[] args) throws Exception { + SpringApplication.run(SampleFlywayApplication.class, args); + } +} diff --git a/spring-boot-samples/spring-boot-sample-flyway/src/main/resources/db/migrations/V1__init.sql b/spring-boot-samples/spring-boot-sample-flyway/src/main/resources/db/migrations/V1__init.sql new file mode 100644 index 000000000000..8038f342ea2c --- /dev/null +++ b/spring-boot-samples/spring-boot-sample-flyway/src/main/resources/db/migrations/V1__init.sql @@ -0,0 +1,7 @@ +CREATE TABLE PERSON ( + id INTEGER GENERATED BY DEFAULT AS IDENTITY, + first_name varchar(255) not null, + last_name varchar(255) not null +); + +insert into PERSON (first_name, last_name) values ('Dave', 'Syer'); \ No newline at end of file diff --git a/spring-boot-samples/spring-boot-sample-flyway/src/test/java/sample/flyway/SampleLiquibaseApplicationTests.java b/spring-boot-samples/spring-boot-sample-flyway/src/test/java/sample/flyway/SampleLiquibaseApplicationTests.java new file mode 100644 index 000000000000..a9bb8c96c561 --- /dev/null +++ b/spring-boot-samples/spring-boot-sample-flyway/src/test/java/sample/flyway/SampleLiquibaseApplicationTests.java @@ -0,0 +1,40 @@ +/* + * Copyright 2012-2014 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package sample.flyway; + +import static org.junit.Assert.assertEquals; + +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.SpringApplicationConfiguration; +import org.springframework.jdbc.core.JdbcTemplate; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; + +@RunWith(SpringJUnit4ClassRunner.class) +@SpringApplicationConfiguration(classes=SampleFlywayApplication.class) +public class SampleLiquibaseApplicationTests { + + @Autowired + private JdbcTemplate template; + + @Test + public void testDefaultSettings() throws Exception { + assertEquals(new Integer(1), template.queryForObject("SELECT COUNT(*) from PERSON", Integer.class)); + } + +} diff --git a/spring-boot-samples/spring-boot-sample-liquibase/pom.xml b/spring-boot-samples/spring-boot-sample-liquibase/pom.xml index f0522496bee0..9bfe000ae060 100644 --- a/spring-boot-samples/spring-boot-sample-liquibase/pom.xml +++ b/spring-boot-samples/spring-boot-sample-liquibase/pom.xml @@ -5,7 +5,7 @@ org.springframework.boot spring-boot-samples - 1.0.2.BUILD-SNAPSHOT + 1.1.0.BUILD-SNAPSHOT spring-boot-sample-liquibase Spring Boot Liquibase Sample diff --git a/spring-boot-starters/pom.xml b/spring-boot-starters/pom.xml index f8067c5defc6..a746bc6f7216 100644 --- a/spring-boot-starters/pom.xml +++ b/spring-boot-starters/pom.xml @@ -29,6 +29,7 @@ spring-boot-starter-data-mongodb spring-boot-starter-data-neo4j spring-boot-starter-data-rest + spring-boot-starter-flyway spring-boot-starter-freemarker spring-boot-starter-integration spring-boot-starter-jdbc diff --git a/spring-boot-starters/spring-boot-starter-flyway/pom.xml b/spring-boot-starters/spring-boot-starter-flyway/pom.xml new file mode 100644 index 000000000000..3594fdfe5e48 --- /dev/null +++ b/spring-boot-starters/spring-boot-starter-flyway/pom.xml @@ -0,0 +1,31 @@ + + + 4.0.0 + + org.springframework.boot + spring-boot-starters + 1.1.0.BUILD-SNAPSHOT + + spring-boot-starter-flyway + Spring Boot Flyway Starter + Spring Boot Flyway Starter + http://projects.spring.io/spring-boot/ + + Pivotal Software, Inc. + http://www.spring.io + + + ${basedir}/../.. + + + + ${project.groupId} + spring-boot-starter-jdbc + ${project.version} + + + com.googlecode.flyway + flyway-core + + + diff --git a/spring-boot-starters/spring-boot-starter-flyway/src/main/resources/META-INF/spring.provides b/spring-boot-starters/spring-boot-starter-flyway/src/main/resources/META-INF/spring.provides new file mode 100644 index 000000000000..cec4231369a4 --- /dev/null +++ b/spring-boot-starters/spring-boot-starter-flyway/src/main/resources/META-INF/spring.provides @@ -0,0 +1 @@ +provides: liquibase-core \ No newline at end of file diff --git a/spring-boot-starters/spring-boot-starter-liquibase/pom.xml b/spring-boot-starters/spring-boot-starter-liquibase/pom.xml index c7d482217515..d3eee22e2af2 100644 --- a/spring-boot-starters/spring-boot-starter-liquibase/pom.xml +++ b/spring-boot-starters/spring-boot-starter-liquibase/pom.xml @@ -4,7 +4,7 @@ org.springframework.boot spring-boot-starters - 1.0.2.BUILD-SNAPSHOT + 1.1.0.BUILD-SNAPSHOT spring-boot-starter-liquibase Spring Boot Liquibase Starter diff --git a/spring-boot-starters/spring-boot-starter-parent/pom.xml b/spring-boot-starters/spring-boot-starter-parent/pom.xml index 7ffc194cec19..413456ed6257 100644 --- a/spring-boot-starters/spring-boot-starter-parent/pom.xml +++ b/spring-boot-starters/spring-boot-starter-parent/pom.xml @@ -101,6 +101,11 @@ spring-boot-starter-data-rest ${spring-boot.version} + + org.springframework.boot + spring-boot-starter-flyway + ${spring-boot.version} + org.springframework.boot spring-boot-starter-freemarker