【发布时间】:2014-08-11 18:07:26
【问题描述】:
我正在尝试设置一个流程,让我们从命令行运行 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
【问题讨论】:
-
我还向 flyway 提交了一个问题,以防这是一个错误而不是配置问题:github.com/flyway/flyway/issues/783
-
查看我对这个问题的评论。
标签: java database-migration flyway