我想从maxmind数据库文件GeoIP-City.mmdb创建一个用于iplookups的缓存。问题是,如果我的应用程序正在运行并且原始数据库从 maxmind 更新,我的代码如何在不重新启动的情况下获取更新的文件内容?
从maxmind文件读取数据的代码是
val ipLooksUps: IO[IpLookups[IO]] = IpLookups.createFromFilenames(
Some(geoFilePath),
None,
None,
None,
false,
20000
)
现在ipLookups有IP地址和城市映射的数据。如何在应用程序运行时自动更新它
你可以
使用 fs2-cron 库 https://github.com/fthomas/fs2-cron
case class Look() {
val ipLooksUps: IO[IpLookups[IO]] = IpLookups.createFromFilenames(
Some(geoFilePath),
None,
None,
None,
false,
20000)
}
import cats.effect.{IO, Timer}
import cron4s.Cron
import eu.timepit.fs2cron.awakeEveryCron
import fs2.Stream
import scala.concurrent.ExecutionContext
implicit val timer: Timer[IO] = IO.timer(ExecutionContext.global)
val cron = Cron.unsafeParse("*/2 * * ? * *")
val scheduled = awakeEveryCron[IO](cron) >> Stream.eval(IO(Look()))
scheduled.compile.drain.unsafeRunAsyncAndForget()