mysql - Flyway迁移,无法从DataSource获取Jdbc连接

标签 mysql maven jdbc flyway

我正在尝试使用 flyway 来创建和管理 MySQL 数据库。这是我目前得到的代码。

FlywayMigration.java : 应用迁移的类

public class FlywayMigration
{
    public FlywayMigration(DatabaseConfiguration configuration, Flyway flyway)
    {
        flyway.setDataSource(configuration.getDataSource());
        flyway.migrate();
    }

    public static void main(String[] args)
    {
        new FlywayMigration(new DatabaseConfiguration("database.properties"), new Flyway());
    }
}

DatabaseConfiguration.java : 配置类,该类会配置应用到Flyway.setDataSource方法的datasource

public class DatabaseConfiguration
{
    private final Logger LOGGER = LoggerFactory.getLogger(this.getClass());

    private PropertiesUtil prop = null;

    public DatabaseConfiguration(String file)
    {
        prop = new PropertiesUtil(file);
    }

    public String getDataSourceClass()
    {
        return prop.getProperty("mysql.data.source.class");
    }

    public String getURL ()
    {
        return prop.getProperty("mysql.url");
    }

    public String getHostName()
    {
        return prop.getProperty("mysql.host.name");
    }

    public String getDatabaseName()
    {
        return prop.getProperty("mysql.database.name");
    }

    public DataSource getDataSource()
    {
        MysqlDataSource dataSource = new MysqlDataSource();
        dataSource.setURL(getURL());
        dataSource.setUser(prop.getProperty("mysql.user.name"));
        dataSource.setPassword(null);
        return dataSource;
    }
}

database.properties是我存放数据库信息的文件,密码可以为null

mysql.data.source.class=com.mysql.jdbc.Driver    
mysql.url=jdbc:mysql://localhost:3306/vmrDB    
mysql.host.name=localhost    
mysql.database.name=vmrDB    
mysql.user.name=root

我在跟踪中得到以下错误

Exception in thread "main" org.flywaydb.core.api.FlywayException: Unable to obtain Jdbc connection from DataSource
    at org.flywaydb.core.internal.util.jdbc.JdbcUtils.openConnection(JdbcUtils.java:56)
    at org.flywaydb.core.Flyway.execute(Flyway.java:1144)
    at org.flywaydb.core.Flyway.migrate(Flyway.java:811)
    at com.bt.sitb.vmr.migration.FlywayMigration.<init>(FlywayMigration.java:10)
    at com.bt.sitb.vmr.migration.FlywayMigration.main(FlywayMigration.java:15)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:483)
    at com.intellij.rt.execution.application.AppMain.main(AppMain.java:134)
Caused by: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure

谁能告诉我为什么 MySQL 的 DataSource 没有连接?

最佳答案

看起来 Flyway 无法连接到数据库。

其中一个原因是数据库URL中的数据库不存在。

问题:您的数据库模式是否存在?

如果你的回答是否定的,那么:

  • 连接到 jdbc:mysql://localhost:3306/mysql
  • 还指定用于迁移的架构 flyway.setSchemas(configuration.getDatabaseName())
  • 在初始化数据库迁移之前,您还需要 flyway.init()

关于mysql - Flyway迁移,无法从DataSource获取Jdbc连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25186347/

相关文章:

mysql - SQL 查询以查找丢失的条目

mysql - 使用 Null 字段来表示某些东西?

java - 无法将属性从 Maven 配置文件传递到 Maven 故障安全插件

java - Maven clean + build 导致 Eclipse 中的项目显示错误,直到在 Eclipse 中清理

java - mysql准备语句错误: MySQLSyntaxErrorException

java - Tomcat连接池方法

php - 我怎样才能得到两个时间戳之间的差异

php - 如何在其他地方使用多维数组中的 'dynamic' 变量?

spring - JavaFx 12 Spring,Maven 未找到前缀插件

java - 我需要有关使用 JDBC 的 INSERT 语句的帮助