我需要为在Tomcat 8中运行的Amazon Elastic Beanstalk应用程序设置Java的DNS缓存TTL(networkaddress.cache.ttl)。因为EB可以随时启动和停止服务器实例,所以我不能简单地编辑Tomcat配置文件和服务器,并期望更改持续。
我尝试设置networkaddress.cache.ttl和sun.net.inetaddr.ttl环境变量,但那些没有效果。亚马逊说,如果你在Tomcat中运行你的应用程序,那么调用java.security.Security.setProperty("networkaddress.cache.ttl" , "60");
“将不起作用”(http://aws.amazon.com/articles/4035)。什么是设置TTL的好方法?
答案 0 :(得分:1)
问题在于我做错了。设置sun.net.inetaddr.ttl环境变量有效。您可以在Elastic Beakstalk配置文件中执行此操作:
option_settings:
- namespace: aws:elasticbeanstalk:application:environment
option_name: sun.net.inetaddr.ttl
value: 60
对我来说似乎更好的另一个选择是创建和使用java.security文件:
option_settings:
- namespace: aws:elasticbeanstalk:application:environment
option_name: java.security.properties
value: /etc/myapp/java.security
container_commands:
00create_config_dir:
command: 'mkdir -p /etc/myapp'
ignoreErrors: true
01create_java_security_file:
command: 'echo "networkaddress.cache.ttl=60" > /etc/myapp/java.security'
ignoreErrors: true
答案 1 :(得分:1)
如果您使用的是Spring框架,那么以下是我在应用程序初始化时设置networkaddress.cache.ttl
的操作。
如下定义一个新的Java类。
package com.example.util;
public class SecurityManager {
public SecurityManager() {
java.security.Security.setProperty("networkaddress.cache.ttl", "60");
}
}
询问spring框架,以在创建spring容器时将上述类的对象实例化为单例。
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
<bean id="securityManager"
class="com.example.util.SecurityManager" scope="singleton" />
</beans>