在 Elastic Beanstalk 中设置 networkaddress.cache.ttl 的推荐方法是什么?
What's the recommended way to set networkaddress.cache.ttl in Elastic Beanstalk?
我需要为 Tomcat 中的 Amazon Elastic Beanstalk 应用 运行 设置 Java 的 DNS 缓存 TTL (networkaddress.cache.ttl) 8. 因为 EB 可以启动并且随时停止服务器实例,我不能简单地编辑 Tomcat 配置文件和服务器并期望更改持续存在。
我尝试设置 networkaddress.cache.ttl 和 sun.net.inetaddr.ttl 环境变量,但没有任何效果。亚马逊说调用 java.security.Security.setProperty("networkaddress.cache.ttl" , "60");
"will not work if you run your application inside of Tomcat" (http://aws.amazon.com/articles/4035)。设置 TTL 的好方法是什么?
问题是我做错了。设置 sun.net.inetaddr.ttl 环境变量有效。您可以在 Elastic Beakstalk 配置文件中执行此操作:
option_settings:
- namespace: aws:elasticbeanstalk:application:environment
option_name: sun.net.inetaddr.ttl
value: 60
60秒是价值recommended by Amazon
另一个对我来说更好的选择是创建和使用 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
如果您使用的是 spring 框架,以下是我在应用程序初始化时设置 networkaddress.cache.ttl
的方法。
定义一个新的Javaclass如下。
package com.example.util;
public class SecurityManager {
public SecurityManager() {
java.security.Security.setProperty("networkaddress.cache.ttl", "60");
}
}
要求 spring 框架在 spring 创建容器时将上述 class 的对象实例化为单例。
<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>
我需要为 Tomcat 中的 Amazon Elastic Beanstalk 应用 运行 设置 Java 的 DNS 缓存 TTL (networkaddress.cache.ttl) 8. 因为 EB 可以启动并且随时停止服务器实例,我不能简单地编辑 Tomcat 配置文件和服务器并期望更改持续存在。
我尝试设置 networkaddress.cache.ttl 和 sun.net.inetaddr.ttl 环境变量,但没有任何效果。亚马逊说调用 java.security.Security.setProperty("networkaddress.cache.ttl" , "60");
"will not work if you run your application inside of Tomcat" (http://aws.amazon.com/articles/4035)。设置 TTL 的好方法是什么?
问题是我做错了。设置 sun.net.inetaddr.ttl 环境变量有效。您可以在 Elastic Beakstalk 配置文件中执行此操作:
option_settings:
- namespace: aws:elasticbeanstalk:application:environment
option_name: sun.net.inetaddr.ttl
value: 60
60秒是价值recommended by Amazon
另一个对我来说更好的选择是创建和使用 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
如果您使用的是 spring 框架,以下是我在应用程序初始化时设置 networkaddress.cache.ttl
的方法。
定义一个新的Javaclass如下。
package com.example.util; public class SecurityManager { public SecurityManager() { java.security.Security.setProperty("networkaddress.cache.ttl", "60"); } }
要求 spring 框架在 spring 创建容器时将上述 class 的对象实例化为单例。
<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>