实例化一个单一的连接于油滑3.0
问题描述:
与性状混入到DB I具有的性状,其限定一个分贝连接:实例化一个单一的连接于油滑3.0
trait Db {
val db: Database = Database.forConfig("twitter-indexing-db")
}
然后我延伸在另一特征,其中我利用Db
像这样:
trait TwitterIndexingRepository {
self: Db =>
...
}
最后,我实例化所需的功能的对象:
object PostgresTwitterIndexingRepository extends TwitterIndexingRepository with Db
如果我有多个mixin,我会有多个连接/连接池打开给定的分贝?
这看起来有点不好, Spring DI,你会得到一个连接,并在需要的地方注入它。
答
这看起来像你试图使用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")
}
这只会创建一个数据库实例,为你想要的。正如评论者所说,你也可以使用其他方法来确保只创建一个实例 - 构造函数参数,隐含的构造函数参数,全局单例等。
简短答案是肯定的,使用一个对象或者你可以注入的类你的postgres持久化类。 –
我想通过一个隐含的''包含所有的全局实例,如数据库连接,记录器等来解决这个问题。 –