web-dev-qa-db-ja.com

フライウェイの移行、データソースからJDBC接続を取得できません

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のデータソースが接続されない理由を誰かに教えてもらえますか?ありがとう!

7
TurboNerd

Flywayがデータベースに接続できないようです。

この理由の1つは、データベースURLのデータベースが存在しないことです。

質問:データベーススキーマは存在しますか?

答えが「いいえ」の場合、次のようになります。

  • jdbc:mysql:// localhost:3306/mysqlに接続します
  • また、flyway.setSchemas(configuration.getDatabaseName())を使用して移行に使用するスキーマを指定します
  • データベースの移行を初期化する前に、flyway.init()も必要です。
5
florian

この同じ問題に遭遇しました。どうやら、問題は私の.propertiesファイルにありました。 jarファイルは、外部のものではなく、パッケージされたものを使用していました。そこで、外部プロパティファイルをresourcesフォルダーからjarのルートディレクトリに移動し、問題を解決しました。これが誰かを助けることを願っています。

1
Ayo K