changed to use hibernate auto ddl flag as a check
This commit is contained in:
parent
f95e4d387d
commit
0cfea8a871
|
@ -6,31 +6,42 @@ import ca.uhn.fhir.jpa.subscription.module.subscriber.websocket.WebsocketConnect
|
|||
import org.apache.commons.dbcp2.BasicDataSource;
|
||||
import org.flywaydb.core.api.MigrationInfo;
|
||||
import org.flywaydb.core.api.MigrationInfoService;
|
||||
import org.flywaydb.core.api.MigrationVersion;
|
||||
import org.hibernate.cfg.AvailableSettings;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
import java.sql.Connection;
|
||||
import java.sql.SQLException;
|
||||
import java.util.List;
|
||||
import java.util.Properties;
|
||||
|
||||
public class MigrationValidator {
|
||||
private static final Logger ourLog = LoggerFactory.getLogger(WebsocketConnectionValidator.class);
|
||||
private static final Logger ourLog = LoggerFactory.getLogger(MigrationValidator.class);
|
||||
|
||||
private final BasicDataSource myDataSource;
|
||||
private final FlywayMigrator myMigrator;
|
||||
private final boolean mySkipValidation;
|
||||
|
||||
public MigrationValidator(BasicDataSource theDataSource, List<BaseTask<?>> theMigrationTasks) {
|
||||
public MigrationValidator(BasicDataSource theDataSource, Properties jpaProperties, List<BaseTask<?>> theMigrationTasks) {
|
||||
myDataSource = theDataSource;
|
||||
if (jpaProperties.containsKey(AvailableSettings.HBM2DDL_AUTO) && "update".equals(jpaProperties.getProperty(AvailableSettings.HBM2DDL_AUTO))) {
|
||||
mySkipValidation = true;
|
||||
} else {
|
||||
mySkipValidation = false;
|
||||
}
|
||||
myMigrator = new FlywayMigrator(theDataSource);
|
||||
myMigrator.addTasks(theMigrationTasks);
|
||||
}
|
||||
|
||||
public void validate() {
|
||||
if (mySkipValidation) {
|
||||
ourLog.info("Database running in hibernate auto-update mode. Skipping schema validation.");
|
||||
return;
|
||||
}
|
||||
try (Connection connection = myDataSource.getConnection()) {
|
||||
MigrationInfoService migrationInfo = myMigrator.getMigrationInfo();
|
||||
if (migrationInfo.pending().length > 0) {
|
||||
throw new ConfigurationException("The database schema for " + connection.getCatalog() + " is out of date. " +
|
||||
throw new ConfigurationException("The database schema for " + myDataSource.getUrl() + " is out of date. " +
|
||||
"Current database schema version is " + getCurrentVersion(migrationInfo) + ". Schema version required by application is " +
|
||||
getLastVersion(migrationInfo) + ". Please run the database migrator.");
|
||||
}
|
||||
|
|
|
@ -3,12 +3,13 @@ package ca.uhn.fhir.jpa.migrate;
|
|||
import ca.uhn.fhir.context.ConfigurationException;
|
||||
import ca.uhn.fhir.jpa.migrate.taskdef.AddTableRawSqlTask;
|
||||
import ca.uhn.fhir.jpa.migrate.taskdef.BaseTest;
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.Properties;
|
||||
|
||||
import static org.junit.Assert.*;
|
||||
import static org.junit.Assert.assertEquals;
|
||||
import static org.junit.Assert.fail;
|
||||
|
||||
public class MigrationValidatorTest extends BaseTest {
|
||||
|
||||
|
@ -19,12 +20,13 @@ public class MigrationValidatorTest extends BaseTest {
|
|||
task.addSql(DriverTypeEnum.H2_EMBEDDED, "create table SOMETABLE (PID bigint not null, TEXTCOL varchar(255))");
|
||||
getMigrator().addTask(task);
|
||||
|
||||
MigrationValidator migrationValidator = new MigrationValidator(getDataSource(), Collections.singletonList(task));
|
||||
MigrationValidator migrationValidator = new MigrationValidator(getDataSource(), new Properties(), Collections.singletonList(task));
|
||||
|
||||
try {
|
||||
migrationValidator.validate();
|
||||
fail();
|
||||
} catch (ConfigurationException e) {
|
||||
assertEquals("The database schema for " + getDatabaseName() + " is out of date. Current database schema version is unknown. Schema version required by application is " + task.getFlywayVersion() + ". Please run the database migrator.", e.getMessage());
|
||||
assertEquals("The database schema for " + getUrl() + " is out of date. Current database schema version is unknown. Schema version required by application is " + task.getFlywayVersion() + ". Please run the database migrator.", e.getMessage());
|
||||
}
|
||||
getMigrator().migrate();
|
||||
migrationValidator.validate();
|
||||
|
|
|
@ -2,7 +2,6 @@ package ca.uhn.fhir.jpa.migrate.taskdef;
|
|||
|
||||
import ca.uhn.fhir.jpa.migrate.DriverTypeEnum;
|
||||
import ca.uhn.fhir.jpa.migrate.FlywayMigrator;
|
||||
import ca.uhn.fhir.jpa.migrate.Migrator;
|
||||
import org.apache.commons.dbcp2.BasicDataSource;
|
||||
import org.intellij.lang.annotations.Language;
|
||||
import org.junit.After;
|
||||
|
@ -32,8 +31,7 @@ public class BaseTest {
|
|||
@Before()
|
||||
public void before() {
|
||||
org.h2.Driver.class.toString();
|
||||
++ourDatabaseUrl;
|
||||
myUrl = "jdbc:h2:mem:" + getDatabaseName();
|
||||
myUrl = "jdbc:h2:mem:" + DATABASE_NAME + ourDatabaseUrl++;
|
||||
|
||||
myConnectionProperties = DriverTypeEnum.H2_EMBEDDED.newConnectionProperties(myUrl, "SA", "SA");
|
||||
myDataSource.setUrl(myUrl);
|
||||
|
@ -43,10 +41,6 @@ public class BaseTest {
|
|||
myMigrator = new FlywayMigrator(myDataSource);
|
||||
}
|
||||
|
||||
protected String getDatabaseName() {
|
||||
return DATABASE_NAME + ourDatabaseUrl;
|
||||
}
|
||||
|
||||
protected BasicDataSource getDataSource() {
|
||||
return myDataSource;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue