我打算使用 LiquiBase 来管理数据库,我希望每次将 Web 应用程序部署到 Glassfish 3.1 时它都能运行。为了做到这一点,我编写了以下类:
@Singleton
@Startup
public class LiquibaseWrapper {
@Resource(name = "jdbc/mydatabase")
private DataSource dataSource;
@PostConstruct
@TransactionAttribute(TransactionAttributeType.NOT_SUPPORTED)
public void doLiquibaseUpdate() {
ResourceAccessor fileOpener = new ClassLoaderResourceAccessor();
DatabaseFactory databaseFactory = DatabaseFactory.getInstance();
Database database = null;
try {
database = databaseFactory
.findCorrectDatabaseImplementation(new Jdbc Connection(
dataSource.getConnection()));
Liquibase liquibase = new Liquibase("ChangeLog.xml",
fileOpener, database);
liquibase.update("");
} catch (DatabaseException e) {
// TODO: handle error
} catch (SQLException e) {
// TODO: handle error
} catch (LiquibaseException e) {
// TODO: handle error
}
}
}
问题是当我通过 Eclipse 将应用程序部署到服务器上时,doLiquiBaseUpdate() 没有执行。当我从中构建一个 WAR 文件并手动部署它时,就会执行该方法。
我有点困惑为什么 doLiquiBaseUpdate() 在通过 Eclipse 部署时不运行。
其他可能有用的信息: - 正在使用 Maven 2 构建 WAR - 使用 JSF 2.1 - 数据库是 MySQL - 使用 LiquiBase 2.0.3 - Eclipse Indigo 和 Glassfish 服务器工具 1.7.3