1. 编辑tomcat服务器下的conf/tomcat-users.xml,在末尾<tomcat-users>标签里面添加以下内容:
<role rolename="manager-gui"/>
<role rolename="manager-script"/>
<user username="admin" password="123456" roles="manager-script"/>
<user username="root" password="123456" roles="manager-gui"/>
2. 在tomcat服务器的conf/Catalina/localhost/目录下创建一个manager.xml(名字是固定的,不能随意起),写入如下内容:
<?xml version="1.0" encoding="UTF-8"?>
<Context privileged="true" antiResourceLocking="false" docBase="${catalina.home}/webapps/manager">
<Valve className="org.apache.catalina.valves.RemoteAddrValve" allow="^.*$" />
</Context>
3. 在maven项目的pom.xml文件的<plugins>小节(注意:绝对不要在<pluginManagement>小节的<plugins>中添加,应该在单独的<plugins>小节)中添加以下内容:
<!-- 配置Tomcat插件 -->
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.2</version>
<configuration>
<url>http://192.168.88.201:8080/manager/text</url> <!-- 远程tomcat服务器的地址,端口 -->
<username>admin</username> <!-- tomcat-users.xml文件中配置的manager-script角色的用户名 ->
<password>123456</password> <!-- 对应用户的密码 -->
<update>true</update>
<path>/itc</path> <!-- 部署后的项目名字 -->
</configuration>
</plugin>
<!-- 配置Tomcat插件 -->
4. 此时idea的maven窗口的Plugins下应该出现了tomcat7,双击其下的tomcat7:deploy即可远程部署项目,第一次用tomcat7:deploy,以后再次部署时用tomcat7:redeploy。
5. 为防止项目在部署后出现内存泄露,需要加入以下的Listener,首先在pom.xml文件的<dependencies>小节加入以下依赖:
<!-- Listener to prevent class load leak -->
<dependency>
<groupId>se.jiderhamn.classloader-leak-prevention</groupId>
<artifactId>classloader-leak-prevention-servlet3</artifactId>
<version>2.7.0</version>
</dependency>
<!-- Listener to prevent class load leak -->
使用classloader-leak-prevention-servlet3还是classloader-leak-prevention-servlet取决于你的tomcat服务器的servlet版本,3.0以后用classloader-leak-prevention-servlet3,详见:https://github.com/mjiderhamn/classloader-leak-prevention
6. 添加一个项目的配置器类Config(configuration包里):
@Configuration
public class Config {
@Bean
public ServletListenerRegistrationBean registerClassLoaderLeakPrevent() {
ServletListenerRegistrationBean servletListenerRegistrationBean = new ServletListenerRegistrationBean();
servletListenerRegistrationBean.setListener(new ClassLoaderLeakPreventorListener());
servletListenerRegistrationBean.setOrder(1);
return servletListenerRegistrationBean;
}
}
7. 如果以前部署过项目,将项目文件夹或war文件删除,使用tomcat7:deploy部署项目。
8. 以后再用tomcat7:redeploy重新部署项目后,使用http://192.168.88.201:8080/manager/html 页面的“发现泄漏”查看,应该没有内存泄漏了。