Flyway 可以使用 Sql Express LocalDB

Can Flyway use a Sql Express LocalDB

我们有一个基于微服务的应用程序。部署的应用程序将 运行 在完整版本的 Microsoft SQL 服务器上。对于 UnitTesting,我想使用 SQL-Express 的一个干净的 localdb 实例,以确保我的测试的持续输出。 为了管理数据库方案,我们使用 flyway 脚本。

现在是大问题:
是否可以在 localdb 实例上使用 flyway?

(我在互联网上没有找到任何关于它的内容。)

欢迎任何帮助!

编辑:找到解决方案!请参阅下面的 post

编辑:
这是我通过尝试连接到我的 localdb 实例得到的结果

ERROR:
Unable to obtain connection from database (jdbc:sqlserver://(localdb)\MSSQLLocalDB;databaseName=IntegrationTest;integratedSecurity=true) for user 'sa': Fehler beim Herstellen einer Verbindung mit dem Host "(localdb)", benannte Instanz "mssqllocaldb". Fehler: "java.net.UnknownHostException: (localdb)". Überprüfen Sie die Server- und Instanznamen, und stellen Sie sicher, dass der UDP-Datenverkehr an Port 1434 nicht von einer Firewall blockiert wird. Überprüfen Sie für SQL Server 2005 oder höher, ob der SQL Server-Browserdienst auf dem Host ausgeführt wird.
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
SQL State  : 08S01
Error Code : 0
Message    : Fehler beim Herstellen einer Verbindung mit dem Host "(localdb)", benannte Instanz "mssqllocaldb". Fehler: "java.net.UnknownHostException: (localdb)". Überprüfen Sie die Server- und Instanznamen, und stellen Sie sicher, dass der UDP-Datenverkehr an Port 1434 nicht von einer Firewall blockiert wird. Überprüfen Sie für SQL Server 2005 oder höher, ob der SQL Server-Browserdienst auf dem Host ausgeführt wird.

Caused by: com.microsoft.sqlserver.jdbc.SQLServerException: Fehler beim Herstellen einer Verbindung mit dem Host "(localdb)", benannte Instanz "mssqllocaldb". Fehler: "java.net.UnknownHostException: (localdb)". Überprüfen Sie die Server- und Instanznamen, und stellen Sie sicher, dass der UDP-Datenverkehr an Port 1434 nicht von einer Firewall blockiert wird. Überprüfen Sie für SQL Server 2005 oder höher, ob der SQL Server-Browserdienst auf dem Host ausgeführt wird.

我在评论中测试了 Jeroen Mosterd 的建议。看来我可能更进一步了,但似乎仍然缺少一些东西。链接的问题以及 SqlLocalDB.exe 告诉我一些关于 \tsql\query 但 flyway 只会使用 \sql\query

ERROR:
Unable to obtain connection from database (jdbc:jtds:sqlserver://./IntegrationTest;instance=LOCALDB#5F8273EF;namedPipe=true) for user 'ddlAdmin': Network error IOException: \.\pipe\MSSQL$LOCALDB#5F8273EF\sql\query (Das System kann die angegebene Datei nicht finden)
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
SQL State  : 08S01
Error Code : 0
Message    : Network error IOException: \.\pipe\MSSQL$LOCALDB#5F8273EF\sql\query (Das System kann die angegebene Datei nicht finden)

Caused by: java.sql.SQLException: Network error IOException: \.\pipe\MSSQL$LOCALDB#5F8273EF\sql\query (Das System kann die angegebene Datei nicht finden)
Caused by: java.io.FileNotFoundException: \.\pipe\MSSQL$LOCALDB#5F8273EF\sql\query (Das System kann die angegebene Datei nicht finden)

我不得不用更新的版本替换 Flyway 的 jTDS 驱动程序 Alternative jTDS Driver from a Fork of the original jTDS. The Link of Jeroen Mostert 确实帮助我指出了使用新连接字符串和找到新驱动程序的正确方向。

如何解决:
jtds-1.3.3.jar 复制到 FlywayVersion
中的驱动程序文件夹 删除已弃用的 jtds-1.3.1.jar
执行 SqlLocalDB.exe info MSSQLLocalDB 得到你的 Pipename
Pipename der Instanz: np:\.\pipe\LOCALDB#5F8273EF\tsql\query
在 flyway
中仅使用连接字符串中的 LOCALDB#5F8273EF 部分 连接字符串:
flyway.url=jdbc:jtds:sqlserver://./<DatabaseName>;instance=LOCALDB#5F8273EF;namedPipe=true

重要提示:确保在执行脚本之前创建要在 flyway 中使用的数据库和用户。