首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >关于slick DB,slick配置文件是如何工作的?

关于slick DB,slick配置文件是如何工作的?
EN

Stack Overflow用户
提问于 2018-08-23 19:14:28
回答 2查看 2.1K关注 0票数 0

我很难理解如何使用光滑的轮廓。

我的问题是:

我正试图通过Alpakka JDBC插件使用与Akka流一起使用的流畅工具。给出的在线示例如下:

代码语言:javascript
复制
#Load using SlickSession.forConfig("slick-h2")
slick-h2 {
  profile = "slick.jdbc.H2Profile$"
  db {
    connectionPool = disabled
    dataSourceClass = "slick.jdbc.DriverDataSource"
    properties = {
      driver = "org.h2.Driver"
      url = "jdbc:h2:/tmp/alpakka-slick-h2-test"
    }
  }
}

import scala.concurrent.Future

import akka.Done
import akka.actor.ActorSystem
import akka.stream.ActorMaterializer

import akka.stream.scaladsl._
import akka.stream.alpakka.slick.scaladsl._

import slick.jdbc.GetResult

object SlickSourceWithPlainSQLQueryExample extends App {
  implicit val system = ActorSystem()
  implicit val mat = ActorMaterializer()
  implicit val ec = system.dispatcher

  implicit val session = SlickSession.forConfig("slick-h2")

  // The example domain
  case class User(id: Int, name: String)

  // We need this to automatically transform result rows
  // into instances of the User class.
  // Please import slick.jdbc.GetResult
  // See also: "http://slick.lightbend.com/doc/3.2.1/sql.html#result-sets"
  implicit val getUserResult = GetResult(r => User(r.nextInt, r.nextString))

  // This import enables the use of the Slick sql"...",
  // sqlu"...", and sqlt"..." String interpolators.
  // See also: "http://slick.lightbend.com/doc/3.2.1/sql.html#string-interpolation"
  import session.profile.api._

  // Stream the results of a query
  val done: Future[Done] =
    Slick
      .source(sql"SELECT ID, NAME FROM ALPAKKA_SLICK_SCALADSL_TEST_USERS".as[User])
      .log("user")
      .runWith(Sink.ignore)

  done.onComplete {
    case _ =>
      session.close()
      system.terminate()
  }
}

问题是它与

隐式val会话= SlickSession.forConfig("slick-h2")

我试着使用灵活的会话,如下所示:

代码语言:javascript
复制
object Main extends App {

  implicit val system = ActorSystem()
  implicit val mat = ActorMaterializer()
  implicit val ec = system.dispatcher

  implicit val session = SlickSession.forConfig("pp")
}

其中pp配置是这样的:

代码语言:javascript
复制
pp = {

  url                 = "jdbc:oracle:thin:@52.4.90.244:1521:pp"
  driver              = oracle.jdbc.OracleDriver
  keepAliveConnection = true
  connectionPool      = disabled


  user                = "xxxxx"
  password            = "xxxxx"

}

此代码在运行时中断。

代码语言:javascript
复制
Exception in thread "main" slick.SlickException: Configured profile oracle.jdbc.OracleDriver does not conform to requested profile slick.jdbc.JdbcProfile
    at slick.basic.DatabaseConfig$.forConfig(DatabaseConfig.scala:99)
    at akka.stream.alpakka.slick.javadsl.SlickSession$.forConfig(package.scala:47)
    at akka.stream.alpakka.slick.javadsl.SlickSession$.forConfig(package.scala:44)

但是,在另一段代码中,我不使用Akka-Stream,因此也不使用slickSession。

对象Main扩展了App{ val = Database.forConfig("pp") .}

代码工作得很好。

我的结论是,这与Database.forconfig("pp")SlickSession.forConfig("slick-h2")有关,它们需要两种不同的东西。

在光滑的网站上有一个关于个人资料的解释,但这不是很容易理解和提供很少的指导。它没有列出可用的概要文件及其语法。

因此,我的问题是,两个forConfig之间有什么区别。配置文件是如何工作的,它们需要在哪里。为什么数据库的两个配置文件没有以相同的方式处理。

最后,甲骨文的简介是什么?在slick 3.2.3中,Slick现在是免费的。我找不到它的概要文件,就像profile = "slick.jdbc.H2Profile$"中那样

有人能帮助澄清配置文件的差异,预期什么,配置文件做什么,以及Oracle的配置文件是什么?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-08-26 23:38:06

作为“杰弗里·钟”答案的后续。这是解决办法。

隐式val = SlickSession.forConfig("pp")导入session.profile.api._

配置文件应该是这样的:

pp { profile = "slick.jdbc.OracleProfile$“db { url =”.“driver = oracle.jdbc.OracleDriver keepAliveConnection = connectionPool =禁用用户=“.”密码=“.”}}

票数 1
EN

Stack Overflow用户

发布于 2018-08-24 14:41:38

光滑文档中的升级指南解释了驱动程序和概要文件之间的区别:

Slick的driver概念已改名为profile,以结束对Slick驱动程序和JDBC驱动程序的混淆。

至于Alpakka的SlickSession不接受您的配置的原因,请看一下源代码

代码语言:javascript
复制
object SlickSession {
  private final class SlickSessionImpl(val slick: DatabaseConfig[JdbcProfile]) extends SlickSession {
    val db: JdbcBackend#Database = slick.db
    val profile: JdbcProfile = slick.profile // <-- expects a profile
  }
  ...
}

SlickSession专门在配置中寻找配置文件,这就是为什么定义驱动程序不能工作的原因。

若要为Oracle定义配置文件,请使用OracleProfile

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51992810

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档