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.2.8
- Gradle版本:3.4.1
- Intellij IDEA 版本:2017.1.2
- Tomcat版本:8.0.26
JDK版本:1.8.0_45
当您将 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
我的 application.yml
中有这个配置server:
contextPath: /appname
session:
timeout: 7200 # 2 hours in seconds
当我在 Intellij IDEA 中 运行 时,这工作正常,但是当我将构建 .war 文件部署到 tomcat 实例时,这将被忽略。这是一个错误还是它不会像这样工作?
此外,我似乎无法找到可以在 application.yml 中编写的内容的规范。任何人都知道在哪里可以找到这个?
application.groovy 配置文件怎么样?似乎无法为此找到规范?
我的环境:
- Grails 版本:3.2.8
- Gradle版本:3.4.1
- Intellij IDEA 版本:2017.1.2
- Tomcat版本:8.0.26 JDK版本:1.8.0_45
当您将 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