对于粘性会话,我需要设置嵌入式 tomcat 的 jvmRoute。
其实只有一个
System.setProperty("jvmRoute", "node1");
是必需的,但我想通过 application.properties 设置可配置属性。我不知道如何以及何时使用 @Value 注释属性设置它。
使用这里描述的@PostConstruct ,它不起作用(至少在 spring boot 2.0.0.RELEASE 中不起作用)
到目前为止我发现的唯一方法是
@Component
public class TomcatInitializer implements ApplicationListener<ServletWebServerInitializedEvent> {
@Value("${tomcat.jvmroute}")
private String jvmRoute;
@Override
public void onApplicationEvent(final ServletWebServerInitializedEvent event) {
final WebServer ws = event.getApplicationContext().getWebServer();
if (ws instanceof TomcatWebServer) {
final TomcatWebServer tws = (TomcatWebServer) ws;
final Context context = (Context) tws.getTomcat().getHost().findChildren()[0];
context.getManager().getSessionIdGenerator().setJvmRoute(jvmRoute);
}
}
}
它有效,但看起来并不优雅......
任何建议都非常感谢。