在Scala Play中设置DNS查找的TimeToLive
我正在尝试在我的
Scala-Play应用程序中设置DNS查找的TimeToLive设置.我使用Play 2.5.9和Scala 2.11.8并按照
the AWS guide.我尝试了以下方式:
>在application.conf中 // Set DNS lookup time-to-live to one minute networkaddress.cache.ttl=1 networkaddress.cache.negative.ttl=1 >在AppModule或EagerSingleton(代码将是类似的) class AppModule() extends AbstractModule { Security.setProperty("networkaddress.cache.ttl","1") Security.setProperty("networkaddress.cache.negative.ttl","1") ... } >传递为环境变量: sbt -Dsun.net.inetaddr.ttl=1 clean run 我在应用程序中有以下测试代码: for (i <- 1 to 25) { System.out.println(java.net.InetAddress.getByName("google.com").getHostAddress()) Thread.sleep(1000) } 这总是打印相同的IP地址,例如216.58.212.206.对我来说,看起来没有上述方法有任何效果.但是,也许我正在测试其他的东西,而不是TTL的价值.所以我有两个问题: >将安全变量传递到Play应用程序的正确方法是什么? 解决方法
要通过java.security.Security更改DNS缓存的设置,您必须提供一个自定义应用程序加载程序.
package modules class ApplicationLoader extends GuiceApplicationLoader { override protected def builder(context: Context): GuiceApplicationBuilder = { java.security.Security.setProperty("networkaddress.cache.ttl","1") super.builder(context) } } 构建此应用程序加载器时,可以在application.conf中启用它 play.application.loader = "modules.ApplicationLoader" 之后,您可以使用上面的代码,并检查DNS缓存的行为是否像您设置的那样.但请记住,您的系统正在访问缓存本身的DNS服务器,以便您不会看到更改. 如果你想写一个测试,你可以写一个测试,请求地址,然后等待指定的时间,直到它再次解决.但是,如果您使用DNS系统控制,如google.com,这可能是一个问题,如果您使用缓存打DNS服务器. @RunWith(classOf[JUnitRunner]) class DnsTests extends FlatSpec with Matchers { "DNS Cache ttl" should "refresh after 1 second" in new WithApplicationLoader(new moduels.ApplicationLoader) { // put your test code here } } 您可以看到,您可以将自定义应用程序加载器放在您的测试背后的应用程序的上下文中. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |