Flyway的Java API提供了指定在建立与目标数据库的连接之后立即执行的SQL语句的功能(通过Flyway.setDatasource => javadoc)。此类SQL的典型用例是会话初始化。
Flyway flyway = new Flyway();
// datasource with initilization SQL
flyway.setDataSource(url, user, password, initSQL);
flyway.setLocations("sql/migrations");
flyway.migrate();
我想知道Flyway的命令行工具中是否没有类似的功能。我已经浏览了https://flywaydb.org/documentation/commandline/提供的官方文档资源,但我找不到实现此目的的方法。
答案 0 :(得分:0)
如果您希望让Flyway从您的Java应用程序中执行脚本,那么起点就像下面的示例代码一样简单
Flyway flyway = new Flyway();
// Set the data source
flyway.setDataSource(dataSource);
// Where to search for classes to be executed or SQL scripts to be found
flyway.setLocations("net.somewhere.flyway");
flyway.setTarget(MigrationVersion.LATEST);
flyway.migrate();
文档的起点在这里
https://flywaydb.org/documentation/migration/java
答案 1 :(得分:0)
原始海报在对另一个答案的评论中表达了他们想要做的事情。
您可以在此处找到您需要开始的手册部分
https://flywaydb.org/documentation/commandline/
详细介绍了如何创建配置文件,该文件将为Flyway的命令行版本提供正确的数据库连接详细信息,以允许它运行迁移脚本。
目前尚不清楚为什么一旦Flyway有连接就需要能够使用ALTER SESSION之类的DDL语句,因为应该已经使用已定义的正确模式创建了连接。连接后更改架构将导致Flyway问题,因为它定义了一个表,它跟踪每个架构的更改。因此,如果您希望对多个模式进行更改,则常见问题解答中列出的策略标题为“Flyway是否支持多个模式?”
x('A')
答案 2 :(得分:0)
目前尚不支持此功能。请在Flyway问题跟踪器中提交功能请求。
答案 3 :(得分:0)
我也在寻找像命令行flyway的初始sql之类的东西。 就我而言,我需要做
ALTER SESSION SET NLS_LANGUAGE= 'ENGLISH';
当我在波兰工作并开始收到波兰语中的ORA错误时,这不是我的母语:) 我决定在这里分享它,因为它可能有用,因为它总是以本地语言显示错误消息。
之前的错误消息(波兰语)
SQL状态:42000 错误代码:955 消息:ORA-00955:nazwajestjużużywanaprzezistniejącyobiekt
后
SQL状态:42000 错误代码:955 消息:ORA-00955:名称已被现有对象使用
那对我有什么帮助 我将根据flyway文件夹中的JVM参数-Duser.language = en放到flyway.cmd(对于linux只是flyway)
%JAVA_CMD% -cp "%INSTALLDIR%\lib\*;%INSTALLDIR%\drivers\*" -Duser.language=en org.flywaydb.commandline.Main %*