假设我有一个连接数据库的动作方法,如下所示:
@Singleton
class Users @Inject()(userService: UserService) extends Controller {
def dbtest = Action {
val user = userService.getById(1)
Ok("the user name is" + user.name)
}
}
我正在使用Guice将服务注入控制器,其代码如下:
class UserServiceImpl @Inject(val userDao: UserDao) extends UserService {
def getById(userId: Int): User = {
db.withSession { implicit session =>
return userDao.getUserId(userId)
}
}
}
我有一个我的UserService扩展的抽象类,它看起来像:
trait BaseService {
val ds = JDBCWrapper.datasource // org.apache.tomcat.jdbc.pool.DataSource
val db = Database.forDataSource(ds)
}
每个服务将共享数据源ds
的相同实例。
所以这是在playframework中创建一个连接池,可能是多个线程。
这是一个问题,因为netty使用单个线程,还是在play和netty交互的不同级别创建?
我已经阅读过某些地方,有时在游戏中人们创建一个固定大小的线程池并在该上下文中执行某些操作,这是我想要对我的数据库操作做什么?
这是一个糟糕的设计吗?
我没有使用那个播放光滑的插件,因为我手动连接它b / c我正在使用多项目sbt设置(我无论如何理解这个问题)。