我试图使用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());
}
}
databasconfiguration .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;
}
}
数据库。属性是我存储数据库信息的文件,密码可以为空
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
在trace
中出现如下错误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似乎无法连接到数据库。
出现这种情况的一个原因是数据库URL中的数据库不存在。
问题:你的数据库模式存在吗?
如果你的答案是否定的,那么:
- 连接jdbc:mysql://localhost:3306/mysql
- 还通过
flyway.setSchemas(configuration.getDatabaseName())
指定要用于迁移的模式在初始化数据库迁移之前,还需要
flyway.init()
。遇到了同样的问题。显然,问题是我的.properties
文件。这个罐子用的是包装好的那个,而不是外包装的那个。因此,我将外部属性文件从资源文件夹移到jar的根目录中,问题解决了!希望这能帮助到一些人。
我在使用Tomcat应用服务器在Debian 10中开发Java应用程序时遇到了同样的问题。
我在context.xml文件中定义了数据库的连接字符串,但是,当我启动应用程序并尝试登录到应用程序时,我得到了错误:
线程"main"org.flywaydb.core.api.FlywayException:无法从数据源获取Jdbc连接
org.flywaydb.core.internal.util.jdbc.JdbcUtils.openConnection (JdbcUtils.java: 56)
org.flywaydb.core.Flyway.execute (Flyway.java: 1144)
这是我发现的:
我最终意识到应用程序正在使用与它一起打包的内部定义的数据库连接字符串。内部定义的数据库连接字符串与我自己在context.xml
文件中定义的数据库连接字符串不同。
我的解决方案是修改与应用程序打包的内部定义的数据库连接字符串,或者在我的context.xml
文件中使用与应用程序打包的相同内部定义的数据库连接字符串。
。
我希望这有助于。