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メソッドに適用されるデータソースを構成します。
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のデータソースが接続されない理由を誰かに教えてもらえますか?ありがとう!
Flywayがデータベースに接続できないようです。
この理由の1つは、データベースURLのデータベースが存在しないことです。
質問:データベーススキーマは存在しますか?
答えが「いいえ」の場合、次のようになります。
flyway.setSchemas(configuration.getDatabaseName())
を使用して移行に使用するスキーマを指定しますflyway.init()
も必要です。この同じ問題に遭遇しました。どうやら、問題は私の.properties
ファイルにありました。 jarファイルは、外部のものではなく、パッケージされたものを使用していました。そこで、外部プロパティファイルをresourcesフォルダーからjarのルートディレクトリに移動し、問題を解決しました。これが誰かを助けることを願っています。