Tyl*_*ler 1 sql-server scala playframework azure-sql-database
我有一个当前正在使用 MySQL 的项目,我想将其迁移到 SQL Server(在 Azure 上运行)。我尝试了很多配置组合,但总是得到相同的通用错误消息:
Cannot connect to database [default]
Run Code Online (Sandbox Code Playgroud)
这是我最近的配置尝试:
slick.dbs.default.driver = "com.typesafe.slick.driver.ms.SQLServerDriver"
slick.dbs.default.db.driver = "com.microsoft.sqlserver.jdbc.SQLServerDriver"
slick.dbs.default.db.url = "jdbc:sqlserver://my_host.database.windows.net:1433;database=my_db"
slick.dbs.default.db.user = "username"
slick.dbs.default.db.password = "password"
slick.dbs.default.db.connectionTimeout="10 seconds"
Run Code Online (Sandbox Code Playgroud)
我有sqljdbc4.jar我的lib/文件夹中。
并将以下内容添加到我的 build.sbt
libraryDependencies += "com.typesafe.slick" %% "slick-extensions" % "3.0.0"
resolvers += "Typesafe Releases" at "http://repo.typesafe.com/typesafe/maven-releases/"
Run Code Online (Sandbox Code Playgroud)
编辑:我可以使用 GUI 应用程序从这台机器连接,所以问题不在于任何网络设置。
编辑:2017 年 5 月 30 日
在 Slick 3.2 发布后,驱动程序现在在核心套件中,这些是 3.2 配置的示例
oracle = {
driver = "slick.jdbc.OracleProfile$"
db {
host = ${?ORACLE_HOST}
port = ${?ORACLE_PORT}
sid = ${?ORACLE_SID}
url = "jdbc:oracle:thin:@//"${oracle.db.host}":"${oracle.db.port}"/"${oracle.db.sid}
user = ${?ORACLE_USERNAME}
password = ${?ORACLE_PASSWORD}
}
}
sqlserver = {
driver = "slick.jdbc.SQLServerProfile$"
db {
host = ${?SQLSERVER_HOST}
port = ${?SQLSERVER_PORT}
databaseName = ${?SQLSERVER_DB_NAME}
url = "jdbc:sqlserver://"${sqlserver.db.host}":"${sqlserver.db.port}";databaseName="${sqlserver.db.databaseName}
user = ${?SQLSERVER_USERNAME}
password = ${?SQLSERVER_PASSWORD}
}
}
Run Code Online (Sandbox Code Playgroud)
结束编辑
我只有 oracle 配置的经验,但我相信它非常相似。您缺少默认驱动程序末尾的关键 $。您还需要确保您的 SBT 项目识别库
第一个代码片段应该在 application.conf 或您用于配置的任何文件中
oracle = {
driver = "com.typesafe.slick.driver.oracle.OracleDriver$"
db {
host = ""
port = ""
sid = ""
url = "jdbc:oracle:thin:@//"${oracle.db.host}":"${oracle.db.port}"/"${oracle.db.sid}
user = ${?USERNAME}
password = ${?PASSWORD}
driver = oracle.jdbc.driver.OracleDriver
}
}
Run Code Online (Sandbox Code Playgroud)
第二部分在我的build.sbt. 我将我的 oracle 驱动程序放在/.lib.
unmanagedBase := baseDirectory.value / ".lib"
Run Code Online (Sandbox Code Playgroud)
最后确保配置正确加载。光滑的默认似乎行为不端,所以希望你得到一个正确的答案,而不是一个对我有用的答案。然而,利用我上面的配置,我可以使用最后一个片段加载它。我在蛋糕实现的示例中发现了这一点,并且它在多个项目中运行良好。
val dbConfig: DatabaseConfig[JdbcProfile] = DatabaseConfig.forConfig("oracle")
implicit val profile: JdbcProfile = dbConfig.driver
implicit val db: JdbcProfile#Backend#Database = dbConfig.db
Run Code Online (Sandbox Code Playgroud)
这允许您使用数据库、导入驱动程序,并且如果您的配置错误,将在编译时失败。希望这可以帮助。
编辑:我完成并意识到您正在使用 Azure,因此请确保您可以使用您选择的客户端使用同一台机器上的相同设置完全连接。确保所有防火墙和用户设置都是正确的,并且问题确实出在您的代码而不是您的系统配置中。
edit2:我想确保我没有给你不好的建议,因为它是一个 Oracle Config,所以我针对 AWS SQL Server 进行了设置。我使用了sqljdbc42.jar微软提供的 jdbc 安装。把它放在.lib然后我有一个如下的配置。与上面的示例一样,您可以改为使用环境变量,但这只是概念的快速证明。这是我现在测试以确认工作的 Microsoft SQL Server 配置。
sqlserver = {
driver = "com.typesafe.slick.driver.ms.SQLServerDriver$"
db {
driver = "com.microsoft.sqlserver.jdbc.SQLServerDriver"
host = ""
port = ""
databaseName = ""
url = "jdbc:sqlserver://"${sqlserver.db.host}":"${sqlserver.db.port}";databaseName="${sqlserver.db.databaseName}
user = ""
password = ""
}
}
Run Code Online (Sandbox Code Playgroud)