Мое приложение в конечном итоге выполняет много фоновой обработки с помощью Actors, в частности загружает экземпляры Mapper, а затем выполняет над ними некоторую работу.Это очень повторяющееся, и я хотел бы кэшировать некоторые из этих поисков по моему коду Actor.
Я бы обычно использовал для этого ThreadLocal.Однако, поскольку инициализация потока обрабатывается пулом потоков Actor, кажется, что единственное место для инициализации и последующей очистки ThreadLocal будет в PartialFunction актера, которая получает входящие сообщения.
Что я делаю сейчасзаключается в создании другого метода в моем Actor, например:
override def aroundUpdates[T](fn: => T) : T = {
clientCache.init {
fn
}
}
Где метод init
обрабатывает очистку ThreadLocal в блоке finally.Мне не нравится этот подход, потому что aroundUpdates существует только для настройки кэша, и он пахнет запахом кода.
Есть ли лучший способ сделать это?