编译打包tomcat-redis-session-manager(包含Tomcat7和Tomcat8的两个版本)

同一个应用在运行多个tomcat实例的时候,经常需要共享Session。tomcat配置共享session有多种方式:
①利用tomcat自身集群特性进行配置;
②利用Memcache第三方缓存进行配置;
③利用Redis第三方缓存进行配置;

生产环境一般会使用了redis,所以主要是编译tomcat-redis-session-manager来达到tomcat利用redis进配置session共享。但是这个源码部分目前依然不支持Tomcat8,如果环境中用的Tomcat版本是7那么就无需更改源码直接编译即可,如果是Tomcat8则需要手动修改源码然后再进行打包。Tomcat7和Tomcat8的两个版本的编译打包好的jar可以下载 tomcat7&tomcat8-redis-session-manager-2.0.0.jar


1.下载源码

到github上讲源码拉取下来 https://github.com/jcoleman/tomcat-redis-session-manager

或者下载所需要的版本的压缩包  https://github.com/jcoleman/tomcat-redis-session-manager/releases


2.配置所需环境

 从项目的源码中可以看出此项目需要使用Gradle进行编译的,所以先配置Gradle的环境

(1)下载Gradle 访问 https://gradle.org/releases/ 

如下图:点击下载,然后解压到一个目录下



(2)配置环境变量
win下 计算机 --> 属性 -->  高级系统设置  -->高级/环境变量(N)  --> 系统变量
添加 GRADLE_HOME ,值配置成  Gradle的解压目录 
修改Path 在Path中添加  ;%GRADLE_HOME%\bin; 

(3)测试Gradle是否配置成功
在cmd中输入  gradle -version 能打印显示出版本信息,如下图:



3.修改项目的 build.gradle文件

将如下部分修改为自己的版本和配置
项目环境中的版本一致,同时还要考虑maven仓库中有对应的依赖包

apply plugin: 'java'
apply plugin: 'maven'
//本次用idea工具,如果用eclipse工具可以改为eclipse
apply plugin: 'idea'
apply plugin: 'signing'


compileJava {
  sourceCompatibility = 1.8
  targetCompatibility = 1.8
}


dependencies {
  compile group: 'org.apache.tomcat', name: 'tomcat-catalina', version: '7.0.68'
//  compile group: 'org.apache.tomcat', name: 'tomcat-catalina', version: '8.0.52'
  compile group: 'redis.clients', name: 'jedis', version: '2.9.0'
  compile group: 'org.apache.commons', name: 'commons-pool2', version: '2.4.2'
  //compile group: 'commons-codec', name: 'commons-codec', version: '1.9'

  testCompile group: 'junit', name: 'junit', version: '4.+'
  testCompile 'org.hamcrest:hamcrest-core:1.3'
  testCompile 'org.hamcrest:hamcrest-library:1.3'
  testCompile 'org.mockito:mockito-all:1.9.5'
  testCompile group: 'org.apache.tomcat', name: 'tomcat-coyote', version: '7.0.68'
//  testCompile group: 'org.apache.tomcat', name: 'tomcat-coyote', version: '8.0.52'
}


uploadArchives {
  repositories {
    mavenDeployer {
      beforeDeployment { MavenDeployment deployment -> signing.signPom(deployment) }

      //这里记得也要注释掉,不然会提示userName和password错误
      //repository(url: "https://oss.sonatype.org/service/local/staging/deploy/maven2/") {
      //  authentication(userName: sonatypeUsername, password: sonatypePassword)
      //}
      //repository(url: "https://oss.sonatype.org/content/repositories/snapshots") {
      //  authentication(userName: sonatypeUsername, password: sonatypePassword)
      //}
...


4.生成工具需要的文件夹

配置好Gradle后进入到项目源码的根目录下,执行如下命令  gradle idea 
等待一段时间后提示 BUILD SUCCESSFUL 代表编译成功,如下图


5.将项目用导入到工具中

经过第4不我们就可以将项目用对应的工具打开,
例如IDEA,直接File --> New --> Project from Existing Sources... 导入,
导入后会下载项目所需依赖,加载完成后如下图


6.支持Tomcat8(如果生产环境中是Tomcat7可略过此步)

需要将 build.gradle 中的 tomcat-catalina 的版本修改为8的版本(不要引入太新的tomcat-catalina版本,最新版的LifecycleSupport不再支持,例如可以引入8.0.52)

然后找到 src/main/java下  com.orangefunction.tomcat.redissessions.RedisSessionManager.java ,此时这个类可能会报错,我们修改其中的 initializeSerializer() 方法,大概在728行,修改为如下:

private void initializeSerializer() throws ClassNotFoundException, IllegalAccessException, InstantiationException {
    log.info("Attempting to use serializer :" + serializationStrategyClass);
    serializer = (Serializer) Class.forName(serializationStrategyClass).newInstance();

    Loader loader = null;
    /*if (getContainer() != null) {
      loader = getContainer().getLoader();
    }*/
    // 修改为Tomcat8支持的语法
    org.apache.catalina.Context context = this.getContext();
    if(context != null){
      loader = context.getLoader();
    }

    ClassLoader classLoader = null;

    if (loader != null) {
      classLoader = loader.getClassLoader();
    }
    serializer.setClassLoader(classLoader);
  }
按Ctrl + Alt + O更新导入的包。

7.打包

方法1,在项目中直接用Gradle的命令打包
tomcat-redis-session-manager > gradle build


方法2,点击Idea右侧栏中的Gradle,点击 Tasks --> build --> jar 双击运行
在项目中的build/libs/tomcat-redis-session-manager-2.0.0.jar就是我们刚编译的jar包

猜你喜欢

转载自blog.csdn.net/github_39577257/article/details/80833704