gpt4 book ai didi

scala - 无法使用特征 NullPointerException 来配置我的灵活设置

转载 作者:行者123 更新时间:2023-12-04 15:53:59 24 4
gpt4 key购买 nike

我重写了我光滑的数据库层以使用特征(我之前使用的是类),现在我收到了这个错误:

看起来我的 DatabaseConfig 可能为空?

Unexpected exception ProvisionException: Unable to provision, see the following errors:

Error injecting constructor, java.lang.NullPointerException at play.api.DefaultApplication.class(Application.scala:221) while locating play.api.DefaultApplication while locating play.api.Application Caused by: java.lang.NullPointerException at play.api.db.slick.HasDatabaseConfig$class.driver(DatabaseConfigProvider.scala:142)

下面是我使用 dbService 的 Controller ,以及我用来使用 play-slick (2.02) 连接我的 slick 代码的特征等

@Singleton
class HomeController @Inject() (dbService: DbService) extends Controller {

}

模块:

bind(classOf[DbService]).to(classOf[DbServiceImpl])

我的光滑数据库层设置如下:

trait DbService extends
UserTable
with AccountTable {

this: HasDatabaseConfigProvider[JdbcProfile] =>
import driver.api._

// ..

}

@Singleton
class DbServiceImpl @Inject() (protected val dbConfigProvider: DatabaseConfigProvider)
extends DbService with HasDatabaseConfigProvider[JdbcProfile] {

import driver.api._



}


trait AccountTable {
this: HasDatabaseConfigProvider[JdbcProfile] =>
import driver.api._

lazy val accounts = TableQuery[AccountsTable]

def getAccountById(id: Int): Future[Option[Account]] =
db.run(accounts.filter(_.id === id).result.headOption)

class AccountsTable(tag: Tag) extends Table[Account](tag, "accounts") {
def id = column[Int]("id", O.PrimaryKey, O.AutoInc)
def companyName = column[String]("company_name")
def * = (id, companyName) <> (Account.tupled, Account.unapply _)
}
}

我巧妙的设置似乎有什么问题?到目前为止我还想不通。

更新

完整的堆栈跟踪在这里:https://pastebin.com/CXzUB0Kx

最佳答案

崩溃来自这里:https://github.com/playframework/play-slick/blob/2.0.2/src/core/src/main/scala/play/api/db/slick/DatabaseConfigProvider.scala#L142 ,所以你是对的,你的 DatabaseConfig (dbConfig) 是 null

这可能是初始化顺序问题。正如您在上面引用的代码中看到的,driver(作为一个 lazy val)当然意味着在实例化之后访问。

您是否发布了完整的堆栈跟踪?导致 NullPointerException 的完整堆栈跟踪将允许识别此访问的来源。

如果没有更精确的堆栈跟踪,您应该确保不要过早访问 driver 或通过 import driver.api._ 导入的成员。最可能的原因是我们将一些 val 转化为 lazy val

堆栈跟踪更新后

似乎你们中的一个惰性字段 ApiService.scala:80 被初始化了,可能来自 WebsiteTable 的构造函数 Schema.scala:544,从 ApiService.scala:81 调用。如果可能,请查看这些位置或在此处发布相关代码。

关于scala - 无法使用特征 NullPointerException 来配置我的灵活设置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42895221/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com