我们已经有了一个基于微服务的应用程序。部署的应用程序将运行在Microsoft SQL Server的完整版本上。对于UnitTesting,我想使用SQL-Express的干净的localdb实例,以确保测试的恒定输出。对于管理数据库方案,我们使用flyway脚本。
现在最大的问题是:
是否可以在localdb实例上使用flyway ?
(我在网上找不到关于它的任何东西)
欢迎任何帮助!
编辑:找到解决方案!见下面的文章
编辑:
这是我得到的,通过尝试连接到我的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告诉我一些关于tsqlquery但flyway只会使用sqlquery
ERROR:
Unable to obtain connection from database (jdbc:jtds:sqlserver://./IntegrationTest;instance=LOCALDB#5F8273EF;namedPipe=true) for user 'ddlAdmin': Network error IOException: \.pipeMSSQL$LOCALDB#5F8273EFsqlquery (Das System kann die angegebene Datei nicht finden)
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
SQL State : 08S01
Error Code : 0
Message : Network error IOException: \.pipeMSSQL$LOCALDB#5F8273EFsqlquery (Das System kann die angegebene Datei nicht finden)
Caused by: java.sql.SQLException: Network error IOException: \.pipeMSSQL$LOCALDB#5F8273EFsqlquery (Das System kann die angegebene Datei nicht finden)
Caused by: java.io.FileNotFoundException: \.pipeMSSQL$LOCALDB#5F8273EFsqlquery (Das System kann die angegebene Datei nicht finden)
我必须将Flyway的jTDS驱动程序替换为来自原始jTDS分支的更新的Alternative jTDS驱动程序。Jeroen Mostert的链接确实帮助我指出了使用新连接字符串和找到新驱动程序的正确方向。
如何解决:
复制jtds-1.3.3.jar
到您的驱动文件夹在您的FlywayVersion
删除已弃用的jtds-1.3.1.jar
执行SqlLocalDB.exe info MSSQLLocalDB
以获得您的管道名称Pipename der Instanz: np:\.pipeLOCALDB#5F8273EFtsqlquery
仅使用LOCALDB#5F8273EF
部分在您的connectionstring在flyway
connectionstring:flyway.url=jdbc:jtds:sqlserver://./<DatabaseName>;instance=LOCALDB#5F8273EF;namedPipe=true
重要:在执行脚本之前,请确保在flyway中创建要使用的数据库和用户。