【问题标题】:ScalikeJDBC: Connection pool is not yet initialized.(name:'default)ScalikeJDBC:连接池尚未初始化。(名称:'default)
【发布时间】:2016-03-11 10:22:44
【问题描述】:

我正在玩ScalikeJdbc 库。我想从 PostgreSQL 数据库中检索数据。我得到的错误对我来说很奇怪。即使我手动配置 CP:

val poolSettings = new ConnectionPoolSettings(initialSize = 100, maxSize = 100)
ConnectionPool.singleton("jdbc:postgresql://localhost:5432/test", "user", "pass", poolSettings)

我仍然看到错误。这是我的 DAO:

class CustomerDAO {

  case class Customer(id: Long, firstname: String, lastname: String)
  object Customer extends SQLSyntaxSupport[Customer]

  val c = Customer.syntax("c")

  def findById(id: Long)(implicit session: DBSession = Customer.autoSession) =
    withSQL {
      select.from(Customer as c)
    }.map(
      rs => Customer(
        rs.int("id"),
        rs.string("firstname"),
        rs.string("lastname")
      )
    ).single.apply()

}

应用程序:

object JdbcTest extends App {
  val dao = new CustomerDAO
  val res: Option[dao.Customer] = dao.findById(2)
}

我的application.conf 文件

# PostgreSQL
db.default.driver = "org.postgresql.Driver"
db.default.url = "jdbc:postgresql://localhost:5432/test"
db.default.user = "user"
db.default.password = "pass"

# Connection Pool settings
db.default.poolInitialSize = 5
db.default.poolMaxSize = 7
db.default.poolConnectionTimeoutMillis = 1000

错误:

Exception in thread "main" java.lang.IllegalStateException: Connection pool is not yet initialized.(name:'default)
    at scalikejdbc.ConnectionPool$$anonfun$get$1.apply(ConnectionPool.scala:57)
    at scalikejdbc.ConnectionPool$$anonfun$get$1.apply(ConnectionPool.scala:55)
    at scala.Option.getOrElse(Option.scala:120)
    at scalikejdbc.ConnectionPool$.get(ConnectionPool.scala:55)
    at scalikejdbc.ConnectionPool$.apply(ConnectionPool.scala:46)
    at scalikejdbc.NamedDB.connectionPool(NamedDB.scala:20)
    at scalikejdbc.NamedDB.db$lzycompute(NamedDB.scala:32)

我错过了什么?

【问题讨论】:

    标签: sql postgresql scala scalikejdbc


    【解决方案1】:

    【讨论】:

    • @Finkelson 你能详细说明你是如何解决这个问题的吗?
    • 最近遇到了这个问题。我一直手动从 (typesafe) config 文件中读取 db-settings,然后使用这些设置创建 ConnectionPool,因此 DBs.setupAll() 解决方案与我无关。我尝试使用while(!ConnectionPool.isInitialized(name)) {} 等待初始化,但这也没有用。我的解决方法很奇怪:将ConnectionPool.add(name="", ...) 更改为ConnectionPool.singleton(...) 消除了错误。我想知道从 custom-named ConnectionPooldefault -named ConnectionPool 会如何改变行为。
    【解决方案2】:

    就我而言,我在 conf/application.conf 中使用 ScalikeJDBC Play support 省略了 play.modules.enabled += "scalikejdbc.PlayModule"...

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-12-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-18
      • 2012-05-03
      • 2011-07-22
      • 2012-08-20
      相关资源
      最近更新 更多