application.yml 中的 server.session.timeout 在作为 war 部署到 tomcat 时不使用

server.session.timeout in application.yml is not used when deployed to a tomcat as a war

我的 application.yml

中有这个配置
server:
    contextPath: /appname
    session:
        timeout: 7200  # 2 hours in seconds

当我在 Intellij IDEA 中 运行 时,这工作正常,但是当我将构建 .war 文件部署到 tomcat 实例时,这将被忽略。这是一个错误还是它不会像这样工作?

此外,我似乎无法找到可以在 application.yml 中编写的内容的规范。任何人都知道在哪里可以找到这个?

application.groovy 配置文件怎么样?似乎无法为此找到规范?

我的环境:

当您将 Grails 3 应用程序部署到独立 tomcat 应用程序时,您不应使用 springboot server.session.timeout 配置 属性。它仅适用于嵌入式服务器。

要在部署到独立 tomcat 中的 SpringBoot 应用程序(Grails 3 应用程序构建在 SpringBoot 应用程序之上)中配置会话超时,您有两个选择:

A) tomcat 实例中部署的每个应用程序超时。

您可以直接在 tomcat 配置文件中编辑会话超时:

$TOMCAT_HOME/conf/web.xml

留意街区:

<!-- ==================== Default Session Configuration ================= -->
<!-- You can set the default session timeout (in minutes) for all newly   -->
<!-- created sessions by modifying the value below.   -->

 <session-config>
     <session-timeout>30</session-timeout>
 </session-config>

B) 您可以在您的 Grails 3 应用程序中添加一个 web.xml 文件,每个应用程序都有您需要的超时时间。

在路径 'src/main/webapp/WEB-INF/web.xml' 中创建一个文件,内容为:

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
 <session-config>
     <session-timeout>30</session-timeout>
 </session-config>
</web-app>

C) 您也可以使用 tomcat 的 HttpSession setMaxInactiveInterval(seconds) 方法在您的 Groovy 代码中设置。

if (grailsApplication.config.getProperty("session.timeout")?.isInteger())
    // session timeout in seconds
    session.setMaxInactiveInterval(grailsApplication.config.session.timeout as int)

请注意,对于(当前最新的)Grails 5.x 和 spring boot 2.5,正确的 属性 名称是 server.servlet.session.timeout,因此 application.yml 配置会是这样的:

server:   
    servlet:
      session:
        timeout: 3600  #seconds

Spring 引导文档: https://docs.spring.io/spring-boot/docs/2.5.5/reference/html/application-properties.html#application-properties.server.server.servlet.session.timeout