All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.mxixm.fastboot.weixin.support.MemoryWxTokenStore Maven / Gradle / Ivy

The newest version!
package com.mxixm.fastboot.weixin.support;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

import java.lang.invoke.MethodHandles;
import java.time.Instant;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;

/**
 * FastBootWeixin  MemoryWxTokenStore
 *
 * @author Guangshan
 * @summary FastBootWeixin  MemoryWxTokenStore
 * @Copyright (c) 2017, Guangshan Group All Rights Reserved
 * @since 2017/7/23 17:08
 */
public class MemoryWxTokenStore implements WxTokenStore {

	private static final Log logger = LogFactory.getLog(MethodHandles.lookup().lookupClass());

	/**
	 * token值
	 */
	private String token;

	/**
	 * 过期时间
	 */
	private long expireTime;

	/**
	 * 锁
	 */
	private Lock lock = new ReentrantLock();

	/**
	 * 获取Token
	 * @return dummy
	 */
	public String getToken() {
		return token;
	}

	/**
	 * 设置token
	 * @param token
	 * @param expireTime
	 */
	public void setToken(String token, long expireTime) {
		this.token = token;
		this.expireTime = expireTime;
	}

	/**
	 * 获取过期时间
	 * @return dummy
	 */
	public long getExpireTime() {
		return expireTime;
	}

	/**
	 * 多线程或者分布式时,防止多个同时设置token值,也同时用于防止tokenManage同时多次刷新
	 * @return dummy
	 */
	public boolean lock() {
		this.lock.lock();
		long now = Instant.now().toEpochMilli();
		// 如果在有效期内,则说明加锁失败,获得锁的时候已经被别人刷新了
		if (now < this.getExpireTime()) {
			this.unlock();
			return false;
		}
		return true;
	}

	/**
	 * 多线程或者分布式时,防止多个同时设置token值,也同时用于防止tokenManage同时多次刷新
	 */
	public void unlock() {
		this.lock.unlock();
	}
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy