spring mvc接入flyway来对数据库进行版本控制

spring mvc是通过maven来进行管理的

1:在pom.xml中的dependencies里面加入

    
      org.flywaydb
      flyway-core
      4.0.3
    

2:在pom.xml中的plugins中加入


      
        org.flywaydb
        flyway-maven-plugin
        4.0.3
      

3:设置flyway相关属性可以让flyway可以与mysql进行连接

3.1:在pom.xml同级目录下新建flyway.properties文件

文件的内容大致为:

flyway.user=username
flyway.password=password
flyway.url=jdbc:mysql://localhost:3306/database?useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull
flyway.baselineOnMigrate=true

这个方法也可以改变文件的名称,也就是说可以不叫flyway.properties ,可以命名为xxxxx.properties

但是这个在最后执行命令的时候要加上参数 -Dflyway.configFile=xxxxx.properties

注意这个文件必须要与pom.xml同级

3.2:在plugin里面进行配置,例如:


    org.flywaydb
    flyway-maven-plugin
    4.0.3
    
        databaseUser
        databasePassword
        
            schemaName
        
        ...
    

3.3:通过Maven Properties来进行配置,在pom.xml中的properties里面设置,例如:


    ...
    
        databaseUser
        databasePassword
        schemaName
        ...
    
    ...

 

4:在resources文件夹下新建db/migration目录

在这个目录里面可以创建你的migration文件。

注意文件的命名规则:

__.sql

Where:

  • – Default prefix is V, which may be configured in the above configuration file using the flyway.sqlMigrationPrefix property.
  • – Migration version number. Major and minor versions may be separated by an underscore. Migration version should always start with 1.
  • – Textual description of the migration. The description needs to be separated from the version numbers with a double underscore.

Example: V1_1_0__my_first_migration.sql

5:最后一步就是执行flyway

mvn clean flyway:migrate

 

6:调用的过程中出现过的错误

6.1:flyway转化为mysql表之后中文乱码 这是因为我刚开始设置的是

flyway.url=jdbc:mysql://localhost:3306/database

与数据库连接的编码没有设置为utf-8造成的,改为

flyway.url=jdbc:mysql://localhost:3306/database?useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull

就可以了

6.2:flyway.url是必须项,不设置会报错,具体的属性描述见https://flywaydb.org/documentation/maven/migrate

6.3:出现错误 Found non-empty schema "public" without metadata table! Use init() or set initOnMigrate to true to initialize the metadata table.

这是因为没有加入 flyway.baselineOnMigrate=true 这个属性 ,所以报错啦

 

7:以上是通过命令来执行flyway,那能不能够通过程序运行来执行flyway呢,这个是可以的。

步骤可以是一下:

第一、二步跟上面的1、2步一致。

第三步:在resources下面创建spring-context-flyway.xml文件

文件里面的代码如下:




	flyway Configuration


	 
	
		
		
		
		
		
		
			
				
			
		
	


其中dataSource指向的是mybatis.xml文件中定义的mysql数据源配置。

第四步:在web.xml中的


    contextConfigLocation
    
        .......
    

中加入

classpath:spring-context-flyway.xml

最终变成

    
        contextConfigLocation
        
            ......
            classpath:spring-context-flyway.xml
        
    

启动程序,就会自动执行flyway

执行之后在数据库里面会增加一个表名为schema_version

表结构如下:

spring mvc接入flyway来对数据库进行版本控制_第1张图片

ok,大功告成啦!

你可能感兴趣的:(J2EE)