gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 06:37:33 24 4
gpt4 key购买 nike

我正在尝试使用 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com