我正在尝试设置一个流程,我们从命令行运行Flyway来运行迁移(由于我的DBA对我的一些限制)
我在大多数情况下都很好地工作,找到并运行SQL和普通的JdbcMigrations,但它不会识别我的SpringJdbcMigrations,声称它没有Spring Jdbc可用。
下面,从flyway中找到我的文件结构,属性和调试输出:
文件结构
flyway.properties
#
# License removed for brevity
# Jdbc url to use to connect to the database
flyway.url=jdbc:mysql://localhost:3306/my_project
# User to use to connect to the database (default: <<null>>)
flyway.user=root
# Password to use to connect to the database (default: <<null>>)
flyway.password=XXXXXXX
# Comma-separated list of locations to scan recursively for migrations. (default: filesystem:<<INSTALL-DIR>>/sql)
# The location type is determined by its prefix.
# Unprefixed locations or locations starting with classpath: point to a package on the classpath and may contain both sql and java-based migrations.
# Locations starting with filesystem: point to a directory on the filesystem and may only contain sql migrations.
flyway.locations=classpath:com.mycompany.myproject.db.migration,filesystem:sql
# NOTE: All other properties are left as default
调试输出:
[localhost ~/Documents/ws-src/flyway-3.0] ./flyway migrate -X
/usr/bin/tput
Flyway (Command-line Tool) v.3.0
DEBUG: Adding location to classpath: /Users/biggusjimmus/Documents/ws-src/flyway-3.0/bin/../jars/java-migration.jar
DEBUG: Adding location to classpath: /Users/biggusjimmus/Documents/ws-src/flyway-3.0/bin/../jars/mysql-connector-java-5.1.26-bin.jar
#
# NOTE: This library SHOULD enable Spring Jdbc, as far as I know.
#
DEBUG: Adding location to classpath: /Users/biggusjimmus/Documents/ws-src/flyway-3.0/bin/../jars/spring-jdbc-4.0.0.RELEASE.jar
Database: jdbc:mysql://localhost:3306/myproject (MySQL 5.6)
DEBUG: DDL Transactions Supported: false
DEBUG: Schema: myproject
#
#NOTE: spring-jdbc-4.0.0.RELEASE.jar was apparently added to the classpath above!
#
DEBUG: Spring Jdbc available: false
DEBUG: Spring Jdbc available: false
DEBUG: Validating migrations ...
DEBUG: Scanning for classpath resources at 'com/mycompany/myproject/db/migration' (Prefix: 'V', Suffix: '.sql')
DEBUG: Scanning URL: jar:file:/Users/biggusjimmus/Documents/ws-src/flyway-3.0/bin/../jars/java-migration.jar!/com/mycompany/myproject/db/migration
DEBUG: JBoss VFS v2 available: false
DEBUG: Filtering out resource: com/mycompany/myproject/db/migration/ (filename: )
DEBUG: Filtering out resource: com/mycompany/myproject/db/migration/V1_1_4_2__Java_Spring_Example.class (filename: V1_1_4_2__Java_Spring_Example.class)
DEBUG: Filtering out resource: com/mycompany/myproject/db/migration/V1_1_4_3__Java_NoSpring_Example.class (filename: V1_1_4_3__Java_NoSpring_Example.class)
DEBUG: Scanning for classes at 'com/mycompany/myproject/db/migration' (Implementing: 'org.flywaydb.core.api.migration.jdbc.JdbcMigration')
DEBUG: Scanning URL: jar:file:/Users/biggusjimmus/Documents/ws-src/flyway-3.0/bin/../jars/java-migration.jar!/com/mycompany/myproject/db/migration
DEBUG: JBoss VFS v2 available: false
DEBUG: Filtering out resource: com/mycompany/myproject/db/migration/ (filename: )
#
# NOTE: Why did it find the NoSpring example (which implements JdbcMigration),
# but not the spring example (which implements SpringJdbcMigration), even though
# it's in the same package?
# Presumably because it doesn't think it has Spring Jdbc support
#
DEBUG: Found class: com.mycompany.myproject.db.migration.V1_1_4_3__Java_NoSpring_Example
DEBUG: Scanning for filesystem resources at 'sql' (Prefix: 'V', Suffix: '.sql')
DEBUG: Scanning for resources in path: sql (sql)
DEBUG: Filtering out resource: sql/.DS_Store (filename: .DS_Store)
DEBUG: Found filesystem resource: sql/V1_1_3__Base_version.sql
DEBUG: Found filesystem resource: sql/V1_1_4_1__SQL_Example.sql
Validated 3 migrations (execution time 00:00.052s)
DEBUG: Schema `myproject` already exists. Skipping schema creation.
DEBUG: Locking table `myproject`.`schema_version`...
DEBUG: Lock acquired for table `myproject`.`schema_version`
Current version of schema `myproject`: 1.1.3
Migrating schema `myproject` to version 1.1.4.1
DEBUG: Successfully completed and committed migration of schema `myproject` to version 1.1.4.1
DEBUG: MetaData table `myproject`.`schema_version` successfully updated to reflect changes
DEBUG: Locking table `myproject`.`schema_version`...
DEBUG: Lock acquired for table `myproject`.`schema_version`
Migrating schema `myproject` to version 1.1.4.3
DEBUG: Successfully completed and committed migration of schema `myproject` to version 1.1.4.3
DEBUG: MetaData table `myproject`.`schema_version` successfully updated to reflect changes
DEBUG: Locking table `myproject`.`schema_version`...
DEBUG: Lock acquired for table `myproject`.`schema_version`
Successfully applied 2 migrations to schema `myproject` (execution time 00:00.049s).
如果我能提供的任何其他信息可能会有所帮助,请告知我们。
编辑: 我还尝试修改shell shell脚本,直接将spring-jdbc jar添加到其类路径中。使用该修改运行没有引起明显的变化。
运行该更改(在更新的数据库之上,没有调试标志)产生了这个结果:
[localhost ~/Documents/ws-src/flyway-3.0] sh -x flyway migrate
++ pwd
+ OLDDIR=/Users/biggusjimmus/Documents/ws-src/flyway-3.0
+ PRG=flyway
+ '[' -h flyway ']'
++ dirname flyway
+ INSTALLDIR=.
+ cd .
+ '[' -z '' ']'
+ JAVA_CMD=java
+ command -v tput
/usr/bin/tput
++ tput cols
+ CONSOLE_WIDTH=116
+ java -cp ./bin/flyway-commandline-3.0.jar:./bin/flyway-core-3.0.jar:./jars/spring-jdbc-4.0.0.RELEASE.jar org.flywaydb.commandline.Main migrate -consoleWidth=116
Flyway (Command-line Tool) v.3.0
Database: jdbc:mysql://localhost:3306/myproject (MySQL 5.6)
Validated 3 migrations (execution time 00:00.052s)
Current version of schema `myproject`: 1.1.4.3
Schema `myproject` is up to date. No migration necessary.
+ JAVA_EXIT_CODE=0
+ cd /Users/biggusjimmus/Documents/ws-src/flyway-3.0
+ exit 0
答案 0 :(得分:1)
所以,我找到了一种让它工作的方法,但它需要修改“flyway”shell脚本中的类路径,这看起来很可疑,并且还需要包含FIVE依赖项,否则我要么得到描述的行为在问题中,或ClassNotFoundException。
具体来说,我需要将以下库添加到jars目录:
将https://github.com/flyway/flyway/blob/flyway-3.0/flyway-commandline/src/main/assembly/flyway#L52更改为
"$JAVA_CMD" -cp ./bin/flyway-commandline-${project.version}.jar:./bin/flyway-core-${project.version}.jar:./jars/* org.flywaydb.commandline.Main $@ -consoleWidth=$CONSOLE_WIDTH
或4.0,https://github.com/flyway/flyway/blob/master/flyway-commandline/src/main/assembly/flyway#L57至
CP="./bin/flyway-commandline-${project.version}.jar:./bin/flyway-core-${project.version}.jar:./jars/*"
有更聪明的方法吗?这是在任何地方记录的吗?