我正在尝试将 FlyWay 集成到非 spring 应用程序中 我有下一节课,它在应用程序启动时执行:
@Singleton
@Startup
@TransactionManagement(value = TransactionManagementType.BEAN)
public class Config {
private static final String MIGRATIONS_PATH = "migration";
private final static Dotenv ENV = Dotenv.configure().load();
@Resource
private static MariaDbDataSource dataSource;
static {
dataSource = new MariaDbDataSource();
try {
dataSource.setUrl(ENV.get(FlyWayParameters.URL.getParameter()));
dataSource.setDatabaseName(ENV.get(FlyWayParameters.SCHEMA.getParameter()));
dataSource.setUser(ENV.get(FlyWayParameters.USER.getParameter()));
dataSource.setPassword(ENV.get(FlyWayParameters.PASSWORD.getParameter()));
} catch (SQLException e) {
log.error("[ERROR] Database initialization failed. Possible problem with configuration");
}
}
@PostConstruct
private void onStartup() {
Flyway flyway = configureFlyWay();
flyway.migrate();
}
private Flyway configureFlyWay() {
Flyway flyway = Flyway.configure()
.dataSource(dataSource)
.locations(MIGRATIONS_PATH)
.load();
return flyway;
}
}
我从 .env 文件中获取数据库参数(示例):
FLYWAY_URL=jdbc:mysql://localhost
FLYWAY_USER=test
FLYWAY_PASSWORD=test
FLYWAY_SCHEMA=testschema
SO dataSource 没问题,创建了 flyaway,但是当
migrate()
开始时我得到异常:
org.flywaydb.core.api.FlywayException: Unable to determine schema for the schema history table. Set a default schema for the connection or specify one using the defaultSchema property!
我尝试将
.defaultSchema()
添加到 flyway 配置对象,但这没有帮助。有什么问题吗?
在 FLYWAY_URL 中指定连接的默认架构
在你的情况下使用
FLYWAY_URL=jdbc:mysql://localhost/test