2014-06-20 12 views
1

我想建立我们在命令行中运行迁飞来运行我们的迁移(由于一些限制,我的数据库管理员把我的)在命令行运行迁飞没有找到SpringJdbcMigrations

的过程我大部分工作很好,查找和运行SQL和正常的JdbcMigrations,但它不会识别我的SpringJdbcMigrations,声称它没有Spring Jdbc。

下面,找到飞行用我的文件结构,属性和调试输出:

文件结构 File Structure

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脚本直接将spring-jdbc jar添加到其classpath。运行该修改导致没有明显的变化。

与该改变运行(在更新的数据库之上,并没有调试标志)产生这样的结果:

[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

我也提出了flyway的问题,以防这是一个错误而不是配置问题:https://github.com/flyway/flyway/issues/783 – biggusjimmus

+0

请参阅我对该问题的评论。 –

回答

1

于是,我找到了一种方法,使其工作,但它需要的修改“flyway”shell脚本中的类路径,这似乎很可疑,并且还需要包含FIVE依赖项,否则我将获得问题中描述的行为或ClassNotFoundException。

具体来说,我需要将以下库添加到罐子目录:

  • 共享记录
  • 弹簧豆
  • 弹簧核心
  • 弹簧JDBC
  • 弹簧tx

并将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 [email protected] -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/*" 

有没有一种更聪明的办法做到这一点?这是记录在任何地方?