diff --git a/grails-database-migration/src/main/groovy/org/grails/plugins/databasemigration/DatabaseMigrationGrailsPlugin.groovy b/grails-database-migration/src/main/groovy/org/grails/plugins/databasemigration/DatabaseMigrationGrailsPlugin.groovy index fb857843d..ac27e35bf 100644 --- a/grails-database-migration/src/main/groovy/org/grails/plugins/databasemigration/DatabaseMigrationGrailsPlugin.groovy +++ b/grails-database-migration/src/main/groovy/org/grails/plugins/databasemigration/DatabaseMigrationGrailsPlugin.groovy @@ -19,6 +19,7 @@ import grails.plugins.Plugin import liquibase.parser.ChangeLogParser import liquibase.parser.ChangeLogParserFactory import org.grails.plugins.databasemigration.liquibase.GrailsLiquibase +import org.grails.plugins.databasemigration.liquibase.GrailsLiquibaseFactory import org.grails.plugins.databasemigration.liquibase.GroovyChangeLogParser import org.springframework.context.ApplicationContext @@ -45,7 +46,9 @@ class DatabaseMigrationGrailsPlugin extends Plugin { @Override Closure doWithSpring() { configureLiquibase() - return { -> } + return { -> + grailsLiquibaseFactory(GrailsLiquibaseFactory, applicationContext) + } } @Override @@ -71,7 +74,7 @@ class DatabaseMigrationGrailsPlugin extends Plugin { } new DatabaseMigrationTransactionManager(applicationContext, dataSourceName).withTransaction { - GrailsLiquibase gl = new GrailsLiquibase(applicationContext) + GrailsLiquibase gl = applicationContext.getBean('grailsLiquibaseFactory', GrailsLiquibase) gl.dataSource = getDataSourceBean(applicationContext, dataSourceName) gl.dropFirst = config.getProperty("${configPrefix}.dropOnStart", Boolean, false) gl.changeLog = config.getProperty("${configPrefix}.updateOnStartFileName", String, isDefaultDataSource(dataSourceName) ? 'changelog.groovy' : "changelog-${dataSourceName}.groovy") diff --git a/grails-database-migration/src/main/groovy/org/grails/plugins/databasemigration/liquibase/GrailsLiquibase.groovy b/grails-database-migration/src/main/groovy/org/grails/plugins/databasemigration/liquibase/GrailsLiquibase.groovy index ae64bcd06..70e8afae3 100644 --- a/grails-database-migration/src/main/groovy/org/grails/plugins/databasemigration/liquibase/GrailsLiquibase.groovy +++ b/grails-database-migration/src/main/groovy/org/grails/plugins/databasemigration/liquibase/GrailsLiquibase.groovy @@ -21,9 +21,9 @@ import liquibase.database.Database import liquibase.exception.DatabaseException import liquibase.exception.LiquibaseException import liquibase.integration.spring.SpringLiquibase -import liquibase.resource.ClassLoaderResourceAccessor import liquibase.resource.ResourceAccessor import org.springframework.context.ApplicationContext +import org.springframework.core.io.DefaultResourceLoader import java.sql.Connection @@ -42,11 +42,12 @@ class GrailsLiquibase extends SpringLiquibase { GrailsLiquibase(ApplicationContext applicationContext) { this.applicationContext = applicationContext + this.resourceLoader = new DefaultResourceLoader() } @Override protected Liquibase createLiquibase(Connection connection) throws LiquibaseException { - Liquibase liquibase = new Liquibase(getChangeLog(), new ClassLoaderResourceAccessor(), createDatabase (connection, null)) + Liquibase liquibase = new Liquibase(getChangeLog(), createResourceOpener(), createDatabase (connection, null)) if (parameters != null) { for (Map.Entry entry : parameters.entrySet()) { liquibase.setChangeLogParameter(entry.getKey(), entry.getValue()) diff --git a/grails-database-migration/src/main/groovy/org/grails/plugins/databasemigration/liquibase/GrailsLiquibaseFactory.groovy b/grails-database-migration/src/main/groovy/org/grails/plugins/databasemigration/liquibase/GrailsLiquibaseFactory.groovy new file mode 100644 index 000000000..48155967d --- /dev/null +++ b/grails-database-migration/src/main/groovy/org/grails/plugins/databasemigration/liquibase/GrailsLiquibaseFactory.groovy @@ -0,0 +1,24 @@ +package org.grails.plugins.databasemigration.liquibase + +import org.springframework.beans.factory.config.AbstractFactoryBean +import org.springframework.context.ApplicationContext + +class GrailsLiquibaseFactory extends AbstractFactoryBean { + + private final ApplicationContext applicationContext + + GrailsLiquibaseFactory(ApplicationContext applicationContext) { + setSingleton(false) + this.applicationContext = applicationContext + } + + @Override + Class getObjectType() { + return GrailsLiquibase + } + + @Override + protected GrailsLiquibase createInstance() throws Exception { + return new GrailsLiquibase(applicationContext) + } +}