我有一个定义数据库连接的特性:
trait Db {
val db: Database = Database.forConfig("twitter-indexing-db")
}
然后我将其扩展到我使用Db
的另一个特征:
trait TwitterIndexingRepository {
self: Db =>
...
}
最后,我实例化一个具有所需功能的对象:
object PostgresTwitterIndexingRepository extends TwitterIndexingRepository with Db
如果我有多个mixin,我会有多个连接/连接池对给定的数据库开放吗?
这似乎有点不好,与Spring DI,你可以获得一个连接并在任何你需要的地方注入它。
答案 0 :(得分:0)
看起来您正在尝试使用cake pattern。
如果您要使用此功能,则Db
特征应使用def
,而PostgresTwitterIndexingRepository
应覆盖val
:
trait Db {
def db: Database
}
object PostgresTwitterIndexingRepository
extends TwitterIndexingRepository with Db {
override val db = Database.forConfig("twitter-indexing-db")
}
这只会创建一个数据库实例,如您所愿。正如评论者提到的那样,你也可以使用其他方法来确保只创建一个实例 - 构造函数参数,隐式构造函数参数,全局单例等。