Repository: mafly/SpringDemo
Branch: master
Commit: 852a6e8e295e
Files: 100
Total size: 86.7 KB
Directory structure:
gitextract_vs5nz4fg/
├── .classpath
├── .gitignore
├── .project
├── .settings/
│ ├── .jsdtscope
│ ├── org.eclipse.jdt.core.prefs
│ ├── org.eclipse.wst.common.component
│ ├── org.eclipse.wst.common.project.facet.core.xml
│ ├── org.eclipse.wst.jsdt.ui.superType.container
│ └── org.eclipse.wst.jsdt.ui.superType.name
├── WebContent/
│ ├── META-INF/
│ │ └── MANIFEST.MF
│ ├── WEB-INF/
│ │ ├── applicationContext.xml
│ │ ├── lib/
│ │ │ ├── AXMLPrinter2.jar
│ │ │ ├── activemq-broker-5.13.0.jar
│ │ │ ├── activemq-client-5.13.0.jar
│ │ │ ├── activemq-console-5.13.0.jar
│ │ │ ├── activemq-jaas-5.13.0.jar
│ │ │ ├── activemq-pool-5.13.0.jar
│ │ │ ├── activemq-protobuf-1.1.jar
│ │ │ ├── activemq-spring-5.13.0.jar
│ │ │ ├── activemq-web-5.13.0.jar
│ │ │ ├── aopalliance.jar
│ │ │ ├── aspectjweaver-1.6.9.jar
│ │ │ ├── commons-beanutils.jar
│ │ │ ├── commons-collections.jar
│ │ │ ├── commons-fileupload-1.3.1.jar
│ │ │ ├── commons-io-2.4.jar
│ │ │ ├── commons-lang.jar
│ │ │ ├── commons-logging-1.1.3.jar
│ │ │ ├── dom4j-1.6.1.jar
│ │ │ ├── druid-1.0.9.jar
│ │ │ ├── freemarker.jar
│ │ │ ├── geronimo-j2ee-management_1.1_spec-1.0.1.jar
│ │ │ ├── geronimo-jms_1.1_spec-1.1.1.jar
│ │ │ ├── geronimo-jta_1.0.1B_spec-1.0.1.jar
│ │ │ ├── gson-2.5.jar
│ │ │ ├── httpclient-4.5.2.jar
│ │ │ ├── httpcore-4.4.4.jar
│ │ │ ├── jaxen-1.1-beta-6.jar
│ │ │ ├── jdom.jar
│ │ │ ├── jpush-client-3.2.9.jar
│ │ │ ├── jstl-1.2.1.jar
│ │ │ ├── jstl-api-1.2.1.jar
│ │ │ ├── log4j-1.2.17.jar
│ │ │ ├── mchange-commons-java-0.2.3.1.jar
│ │ │ ├── mysql-connector-java-5.1.18.jar
│ │ │ ├── okhttp-2.7.2.jar
│ │ │ ├── okio-1.6.0.jar
│ │ │ ├── poi-3.9-20121203.jar
│ │ │ ├── poi-ooxml-3.9-20121203.jar
│ │ │ ├── poi-ooxml-schemas-3.9-20121203.jar
│ │ │ ├── servlet-api.jar
│ │ │ ├── slf4j-api-1.7.13.jar
│ │ │ ├── slf4j-log4j12-1.7.21.jar
│ │ │ ├── spring-aop-4.2.6.RELEASE.jar
│ │ │ ├── spring-beans-4.2.6.RELEASE.jar
│ │ │ ├── spring-context-4.2.6.RELEASE.jar
│ │ │ ├── spring-context-support-4.2.6.RELEASE.jar
│ │ │ ├── spring-core-4.2.6.RELEASE.jar
│ │ │ ├── spring-expression-4.2.6.RELEASE.jar
│ │ │ ├── spring-jdbc-4.2.6.RELEASE.jar
│ │ │ ├── spring-jms-4.2.6.RELEASE.jar
│ │ │ ├── spring-tx-4.2.6.RELEASE.jar
│ │ │ ├── spring-web-4.2.6.RELEASE.jar
│ │ │ ├── spring-webmvc-4.2.6.RELEASE.jar
│ │ │ ├── xmemcached-1.3.8.jar
│ │ │ └── xmlbeans-2.3.0.jar
│ │ ├── springMVC-servlet.xml
│ │ └── web.xml
│ └── index.html
└── src/
├── cn/
│ └── mayongfa/
│ ├── activemq/
│ │ ├── ActiveMQTransportListener.java
│ │ ├── ConsumerMessageListener.java
│ │ └── MessageSender.java
│ ├── api/
│ │ └── controller/
│ │ └── UserController.java
│ ├── cache/
│ │ ├── MemcachedBasis.java
│ │ └── UserBasisCache.java
│ ├── common/
│ │ ├── DateUtil.java
│ │ ├── DynamicDataSource.java
│ │ ├── ExceptionHandler.java
│ │ ├── IdWorker.java
│ │ ├── IdWorkerManage.java
│ │ ├── JdbcContextHolder.java
│ │ ├── MD5Util.java
│ │ └── StrUtil.java
│ ├── controller/
│ │ └── AccountController.java
│ ├── dao/
│ │ └── UserBasisDao.java
│ ├── interceptor/
│ │ ├── Authority.java
│ │ ├── AuthorityAnnotationInterceptor.java
│ │ ├── AuthorityType.java
│ │ ├── DataSource.java
│ │ ├── DataSourceChoose.java
│ │ ├── DataSourceType.java
│ │ └── TestInterceptor.java
│ ├── model/
│ │ └── UserBasis.java
│ ├── quartz/
│ │ └── GlodQuartz.java
│ └── service/
│ ├── UserBasisService.java
│ └── imp/
│ └── UserBasisServiceImp.java
├── global.properties
├── jdbc.properties
├── log4j.properties
└── memcached.properties
================================================
FILE CONTENTS
================================================
================================================
FILE: .classpath
================================================
================================================
FILE: .gitignore
================================================
/build/
================================================
FILE: .project
================================================
SpringDemo
org.eclipse.wst.jsdt.core.javascriptValidator
org.eclipse.jdt.core.javabuilder
org.eclipse.wst.common.project.facet.core.builder
org.eclipse.wst.validation.validationbuilder
org.eclipse.jem.workbench.JavaEMFNature
org.eclipse.wst.common.modulecore.ModuleCoreNature
org.eclipse.wst.common.project.facet.core.nature
org.eclipse.jdt.core.javanature
org.eclipse.wst.jsdt.core.jsNature
================================================
FILE: .settings/.jsdtscope
================================================
================================================
FILE: .settings/org.eclipse.jdt.core.prefs
================================================
eclipse.preferences.version=1
org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.7
org.eclipse.jdt.core.compiler.compliance=1.7
org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
org.eclipse.jdt.core.compiler.source=1.7
================================================
FILE: .settings/org.eclipse.wst.common.component
================================================
================================================
FILE: .settings/org.eclipse.wst.common.project.facet.core.xml
================================================
================================================
FILE: .settings/org.eclipse.wst.jsdt.ui.superType.container
================================================
org.eclipse.wst.jsdt.launching.baseBrowserLibrary
================================================
FILE: .settings/org.eclipse.wst.jsdt.ui.superType.name
================================================
Window
================================================
FILE: WebContent/META-INF/MANIFEST.MF
================================================
Manifest-Version: 1.0
Class-Path:
================================================
FILE: WebContent/WEB-INF/applicationContext.xml
================================================
classpath:global.properties
classpath:jdbc.properties
classpath:memcached.properties
${master.jdbc.driverClassName}
${master.jdbc.url}
${master.jdbc.username}
${master.jdbc.password}
${slave.jdbc.driverClassName}
${slave.jdbc.url}
${slave.jdbc.username}
${slave.jdbc.password}
${goldMaster.jdbc.driverClassName}
${goldMaster.jdbc.url}
${goldMaster.jdbc.username}
${goldMaster.jdbc.password}
${goldSlave.jdbc.driverClassName}
${goldSlave.jdbc.url}
${goldSlave.jdbc.username}
${goldSlave.jdbc.password}
${server1.memcached.host}
${server1.memcached.port}
${server2.memcached.host}
${server2.memcached.port}
${server1.memcached.weight}
${server2.memcached.weight}
default_queue,gold_queue
================================================
FILE: WebContent/WEB-INF/springMVC-servlet.xml
================================================
0
UTF-8
0.##########
yyyy-MM-dd HH:mm:ss
true
ignore
================================================
FILE: WebContent/WEB-INF/web.xml
================================================
springdemo
index.html
encodingFilter
org.springframework.web.filter.CharacterEncodingFilter
encoding
UTF-8
forceEncoding
true
encodingFilter
/*
HttpMethodFilter
org.springframework.web.filter.HttpPutFormContentFilter
HttpMethodFilter
/*
hiddenHttpMethodFilter
org.springframework.web.filter.HiddenHttpMethodFilter
methodParam
requestMethod
hiddenHttpMethodFilter
/*
org.springframework.web.context.ContextLoaderListener
springMVC
org.springframework.web.servlet.DispatcherServlet
1
springMVC
/
contextConfigLocation
/WEB-INF/applicationContext.xml
DruidWebStatFilter
com.alibaba.druid.support.http.WebStatFilter
exclusions
*.js,*mp3,*.swf,*.xls,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*
DruidWebStatFilter
/*
DruidStatView
com.alibaba.druid.support.http.StatViewServlet
resetEnable
true
loginUsername
admin
loginPassword
123456
DruidStatView
/druid/*
================================================
FILE: WebContent/index.html
================================================
Spring Demo
Spring Demo
================================================
FILE: src/cn/mayongfa/activemq/ActiveMQTransportListener.java
================================================
package cn.mayongfa.activemq;
import java.io.IOException;
import org.apache.activemq.transport.TransportListener;
import org.apache.log4j.Logger;
/**
* 消息传输监听
* @author Mafly
*
*/
public class ActiveMQTransportListener implements TransportListener {
private Logger log = Logger.getLogger(ActiveMQTransportListener.class);
/**
* 对消息传输命令进行监控
* @param command
*/
@Override
public void onCommand(Object o) {
}
/**
* 对监控到的异常进行触发
* @param error
*/
@Override
public void onException(IOException error) {
log.error("onException -> 消息服务器连接错误......", error);
}
/**
* 当failover时触发
*/
@Override
public void transportInterupted() {
log.warn("transportInterupted -> 消息服务器连接发生中断...");
//这里就可以状态进行标识了
}
/**
* 监控到failover恢复后进行触发
*/
@Override
public void transportResumed() {
log.info("transportResumed -> 消息服务器连接已恢复...");
//这里就可以进行状态标识了
}
}
================================================
FILE: src/cn/mayongfa/activemq/ConsumerMessageListener.java
================================================
package cn.mayongfa.activemq;
import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.MessageListener;
import javax.jms.TextMessage;
import org.apache.log4j.Logger;
import org.springframework.stereotype.Component;
/**
* 消费者监听类
*
* @author Mafly
*/
@Component
public class ConsumerMessageListener implements MessageListener {
private Logger log = Logger.getLogger(ConsumerMessageListener.class);
@Override
public void onMessage(Message arg0) {
// 监听发送到消息队列的文本消息,作强制转换。
TextMessage textMessage = (TextMessage) arg0;
try {
System.out.println("接收到的消息内容是:" + textMessage.getText());
// TODO: 你喜欢的任何事情...
} catch (JMSException e) {
log.error("", e);
}
}
}
================================================
FILE: src/cn/mayongfa/activemq/MessageSender.java
================================================
package cn.mayongfa.activemq;
import java.util.HashMap;
import java.util.Map;
import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.Session;
import javax.jms.TextMessage;
import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jms.core.JmsTemplate;
import org.springframework.jms.core.MessageCreator;
import org.springframework.stereotype.Component;
import com.google.gson.Gson;
/**
* ActiveMQ 消息生产类
*
* @author Mafly
*
*/
@Component
public class MessageSender {
private Logger log = Logger.getLogger(MessageSender.class);
@Autowired
private JmsTemplate jmsTemplate;
private String Queue = "default_queue";
private String GoldQueue = "gold_queue";
private Gson gson = new Gson();
/**
* 用户登录消息
*/
public void userLogin(long id, String username) {
Map map = new HashMap();
map.put("userid", id);
map.put("username", username);
System.out.println("发送了一条消息。");
// 发送到金币队列
sendMessage(gson.toJson(map), 1);
}
/**
* 发送到消息队列
*
* @param messgae
* @param type
* 类型,0:默认队列 1:金币队列 ...
*/
public void sendMessage(final String messgae, int type) {
try {
String destination = this.Queue;
if (type == 1) {
destination = GoldQueue;
}
jmsTemplate.send(destination, new MessageCreator() {
@Override
public Message createMessage(Session session) throws JMSException {
TextMessage textMessage = session.createTextMessage(messgae);
return textMessage;
}
});
} catch (Exception e) {
log.error("", e);
}
}
}
================================================
FILE: src/cn/mayongfa/api/controller/UserController.java
================================================
package cn.mayongfa.api.controller;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import com.google.gson.Gson;
import cn.mayongfa.common.MD5Util;
import cn.mayongfa.common.StrUtil;
import cn.mayongfa.model.UserBasis;
import cn.mayongfa.service.UserBasisService;
@Controller
@RequestMapping("/api/user/*")
public class UserController {
private static Logger log = Logger.getLogger(UserController.class);
@Autowired
private UserBasisService userBasisService;
/**
* get
*
* @param oRequest
* @param oResponse
* @return
*/
@ResponseBody
@RequestMapping(value = "get", produces = "application/json;charset=UTF-8", method = { RequestMethod.GET })
public String get(@RequestParam("id") long id) {
int code = -1;
String msg = "";
UserBasis entity = userBasisService.getEntity(id);
try {
if (entity != null && entity.getId() > 0) {
code = 1;
msg = "请求成功!";
}
} catch (Exception e) {
log.error("出错啦!", e);
}
Map responseMap = new HashMap();
responseMap.put("code", code);
responseMap.put("msg", msg);
responseMap.put("params", entity);
responseMap.put("rows", "");
return new Gson().toJson(responseMap);
}
/**
* getlist
*
* @param oRequest
* @param oResponse
* @return
*/
@CrossOrigin(origins = "*", maxAge = 3600)
@ResponseBody
@RequestMapping(value = "getlist", produces = "application/json;charset=UTF-8", method = { RequestMethod.GET })
public String getList() {
int code = -1;
String msg = "";
List userList = userBasisService.getList();
if (userList != null && userList.size() > 0) {
code = 1;
msg = "请求成功!";
}
// 演示异常
userBasisService.getListCount(null);
Map responseMap = new HashMap();
responseMap.put("code", code);
responseMap.put("msg", msg);
responseMap.put("params", "");
responseMap.put("rows", userList);
return new Gson().toJson(responseMap);
}
/**
* post
*
* @param oRequest
* @param oResponse
* @return
*/
@ResponseBody
@RequestMapping(value = "post", produces = "application/json;charset=UTF-8", method = { RequestMethod.POST })
public String post(HttpServletRequest oRequest, HttpServletResponse oResponse) {
int code = -1;
String msg = "";
String name = oRequest.getParameter("name") != null ? oRequest.getParameter("name").toString() : "";
String password = oRequest.getParameter("password") != null ? oRequest.getParameter("password").toString() : "";
String phone = oRequest.getParameter("phone") != null ? oRequest.getParameter("phone").toString() : "";
if (StrUtil.isNullOrEmpty(name)) {
msg = "请填写用户姓名!";
} else if (StrUtil.isNullOrEmpty(password)) {
msg = "请填写密码!";
} else {
UserBasis entity = new UserBasis();
entity.setId(StrUtil.DEFAULT_NULL);
entity.setName(name);
entity.setPassword(MD5Util.GetMD5Code32(password));
entity.setPhone(phone);
entity.setStatus(1);
entity.setUpdatetime(new Date());
entity.setCreatetime(new Date());
long id = userBasisService.Save(entity);
if (id > 0) {
code = 1;
msg = "添加成功!";
}
}
Map responseMap = new HashMap();
responseMap.put("code", code);
responseMap.put("msg", msg);
responseMap.put("params", "");
responseMap.put("rows", "");
return new Gson().toJson(responseMap);
}
/**
* delete
*
* @param oRequest
* @param oResponse
* @return
*/
@ResponseBody
@RequestMapping(value = "delete", produces = "application/json;charset=UTF-8", method = { RequestMethod.DELETE })
public String delete(@RequestParam("id") long id) {
int code = -1;
String msg = "";
if (userBasisService.Delete(id)) {
code = 1;
msg = "删除成功!";
} else {
msg = "删除失败!";
}
Map responseMap = new HashMap();
responseMap.put("code", code);
responseMap.put("msg", msg);
responseMap.put("params", "");
responseMap.put("rows", "");
return new Gson().toJson(responseMap);
}
/**
* put
*
* @param oRequest
* @param oResponse
* @return
*/
@ResponseBody
@RequestMapping(value = "put", produces = "application/json;charset=UTF-8", method = { RequestMethod.POST })
public String put(HttpServletRequest oRequest, HttpServletResponse oResponse) {
int code = -1;
String msg = "";
long id = StrUtil.toLong(oRequest.getParameter("id"), StrUtil.DEFAULT_NULL);
String name = oRequest.getParameter("name") != null ? oRequest.getParameter("name").toString() : "";
String phone = oRequest.getParameter("phone") != null ? oRequest.getParameter("phone").toString() : "";
if (id == StrUtil.DEFAULT_NULL) {
msg = "请选择用户!";
} else if (StrUtil.isNullOrEmpty(name)) {
msg = "请填写用户姓名!";
} else if (StrUtil.isNullOrEmpty(phone)) {
// msg = "请填写电话!";
} else {
UserBasis entity = userBasisService.getEntity(id);
if (entity != null && entity.getId() == id) {
entity.setName(name);
entity.setPhone(phone);
entity.setUpdatetime(new Date());
id = userBasisService.Save(entity);
if (id > 0) {
code = 1;
msg = "更新成功!";
} else {
msg = "更新失败!";
}
} else {
msg = "用户不存在!";
}
}
Map responseMap = new HashMap();
responseMap.put("code", code);
responseMap.put("msg", msg);
responseMap.put("params", "");
responseMap.put("rows", "");
return new Gson().toJson(responseMap);
}
}
================================================
FILE: src/cn/mayongfa/cache/MemcachedBasis.java
================================================
package cn.mayongfa.cache;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import net.rubyeye.xmemcached.MemcachedClient;
@Component
public class MemcachedBasis {
@Autowired
protected MemcachedClient memcachedClient;
/**
* 失效时间(秒)3600*24 一天
*/
protected int Exptime = 3600 * 24;
/**
* 基础数据失效时间(秒)3600*24*7 一周
*/
protected int DataExptime = this.Exptime * 7;
protected String Prefix = "SPRINGDEMO:";
}
================================================
FILE: src/cn/mayongfa/cache/UserBasisCache.java
================================================
package cn.mayongfa.cache;
import java.util.concurrent.TimeoutException;
import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import cn.mayongfa.dao.UserBasisDao;
import cn.mayongfa.model.UserBasis;
import net.rubyeye.xmemcached.exception.MemcachedException;
@Component
public class UserBasisCache extends MemcachedBasis {
private Logger log = Logger.getLogger(UserBasisCache.class);
@Autowired
private UserBasisDao userBasisDao;
/**
* 设置缓存
*
* @param model
* 用户model
* @return
*/
public Boolean set(UserBasis model) {
Boolean result = false;
try {
result = memcachedClient.set(getCacheKey(model.getId()), super.Exptime, model);
} catch (TimeoutException | InterruptedException | MemcachedException e) {
log.error("", e);
}
return result;
}
/**
* 获取缓存
*
* @param id
* 用户ID
* @return
*/
public UserBasis get(long id) {
UserBasis entity = new UserBasis();
try {
entity = memcachedClient.get(getCacheKey(id));
if (entity == null || entity.getId() <= 0) {
entity = userBasisDao.getEntity(id);
this.set(entity);
}
} catch (TimeoutException | InterruptedException | MemcachedException e) {
log.error("", e);
entity = userBasisDao.getEntity(id);
}
return entity;
}
/**
* 删除缓存
*
* @param id
* 用户ID
* @return
*/
public Boolean delete(long id) {
try {
return memcachedClient.delete(getCacheKey(id));
} catch (TimeoutException | InterruptedException | MemcachedException e) {
log.error("", e);
}
return false;
}
/**
* 获取缓存 Key
*
* @param id
* 用户ID
* @return
*/
private String getCacheKey(long id) {
return super.Prefix + "UserBasis:" + id;
}
}
================================================
FILE: src/cn/mayongfa/common/DateUtil.java
================================================
package cn.mayongfa.common;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import org.apache.log4j.Logger;
public class DateUtil {
private static Logger log = Logger.getLogger(DateUtil.class);
/**
* date类型转换为String类型
* @param data Date类型的时间
* @param formatType 格式为yyyy-MM-dd HH:mm:ss//yyyy年MM月dd日 HH时mm分ss秒
* @return
*/
public static String dateToString(Date date, String formatType) {
SimpleDateFormat sdf=new SimpleDateFormat(formatType);
//java.util.Date date=new java.util.Date();
return sdf.format(date);
}
/**
* long类型转换为String类型
* @param currentTime 要转换的long类型的时间
* @param formatType 要转换的string类型的时间格式
* @return
* @throws ParseException
*/
public static String longToString(long currentTime, String formatType){
/*SimpleDateFormat sf = new SimpleDateFormat(formatType);
Date date = new Date(currentTime);
return sf.format(date);*/
SimpleDateFormat oldFormat = new SimpleDateFormat("yyyyMMddHHmmss");
SimpleDateFormat newFormat = new SimpleDateFormat(formatType);
Date date = null;
try {
date = oldFormat.parse(currentTime+"");
} catch (Exception e) {
log.error("", e);
date = new Date();
e.printStackTrace();
}
return newFormat.format(date);
}
/**
* long类型转换为String类型
* @param currentTime 要转换的long类型的时间
* @param formatType 要转换的string类型的时间格式
* @return
* @throws ParseException
*/
public static String longToString(long currentTime, String oldFormatType, String formatType)
throws ParseException {
String strTime = StrUtil.toStr(currentTime, StrUtil.DEFAULT_DATE); // long类型转成String
Date date = stringToDate(strTime, oldFormatType);
return dateToString(date, formatType);
}
/**
* string类型转换为date类型
* @param strTime 的时间格式必须要与formatType的时间格式相同
* @param formatType 要转换的string类型的时间,formatType要转换的格式yyyy-MM-dd HH:mm:ss//yyyy年MM月dd日HH时mm分ss秒
* @return
* @throws ParseException
*/
public static Date stringToDate(String strTime, String formatType) {
try {
SimpleDateFormat formatter = new SimpleDateFormat(formatType);
Date date = null;
date = formatter.parse(strTime);
return date;
} catch (Exception e) {
log.error("", e);
return new Date();
}
}
/**
* long转换为Date类型
* @param currentTime 要转换的long类型的时间
* @param formatType 要转换的时间格式yyyy-MM-dd HH:mm:ss//yyyy年MM月dd日 HH时mm分ss秒
* @return
* @throws ParseException
*/
public static Date longToDate(long currentTime, String formatType) {
try {
Date dateOld = new Date(currentTime); // 根据long类型的毫秒数生命一个date类型的时间
String sDateTime = dateToString(dateOld, formatType); // 把date类型的时间转换为string
Date date = stringToDate(sDateTime, formatType); // 把String类型转换为Date类型
return date;
} catch (Exception e) {
log.error("", e);
return new Date();
}
}
/**
* string类型转换为long类型
* @param strTime 要转换的String类型的时间
* @param formatType 时间格式的时间格式和formatType的时间格式必须相同
* @return
* @throws ParseException
*/
public static long stringToLong(String strTime, String formatType) {
try {
Date date = stringToDate(strTime, formatType); // String类型转成date类型
if (date == null) {
return 0;
} else {
long currentTime = dateToLong(date); // date类型转成long类型
return currentTime;
}
} catch (Exception e) {
log.error("", e);
return 0;
}
}
/**
* date类型转换为long类型
* @param date 要转换的date类型的时间
* @return
*/
public static long dateToLong(Date date) {
return StrUtil.toLong(dateToString(date,"yyyyMMddHHmmss"), StrUtil.DEFAULT_ALL);
}
/**
* 获取龙long类型时间
* @return yyyyMMddHHmmss
*/
public static long dateToLong() {
return StrUtil.toLong(dateToString(new Date(),"yyyyMMddHHmmss"), StrUtil.DEFAULT_ALL);
}
/**
* 时间戳转Long类型时间
* @param unix 时间戳
* @return 若转换失败,返回当前时间
*/
public static long unixToLong(long unix){
SimpleDateFormat format = new SimpleDateFormat("yyyyMMddHHmmss");
try{
return Long.parseLong(format.format(unix));
}catch(Exception e){
log.error("", e);
return DateUtil.dateToLong();
}
}
/**
* 分析Long类型的时间距离当前时间多久
* @param time Long类型的时间。yyyyMMddHHmmss
* @return 若转换异常,返回DateUtil.longToString(time, "yyyy-MM-dd")
*/
public static String getTimePosition(long time){
SimpleDateFormat format = new SimpleDateFormat("yyyyMMddHHmmss");
Date date;
try {
date = format.parse(time + "");
long conversionTime = date.getTime();
long currentTime = System.currentTimeMillis();
long relativeTime = currentTime - conversionTime;
if(relativeTime < 30*60*1000){
return "刚刚";
}else if(relativeTime < 60*60*1000){
return "30分钟前";
}else{
return DateUtil.longToString(time, "yyyy-MM-dd");
}
} catch (ParseException e) {
log.error("", e);
return DateUtil.longToString(time, "yyyy-MM-dd");
}
}
}
================================================
FILE: src/cn/mayongfa/common/DynamicDataSource.java
================================================
package cn.mayongfa.common;
import org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource;
import cn.mayongfa.common.JdbcContextHolder;
public class DynamicDataSource extends AbstractRoutingDataSource {
@Override
protected Object determineCurrentLookupKey() {
// 获取当前数据源连接
return JdbcContextHolder.getJdbcType();
}
}
================================================
FILE: src/cn/mayongfa/common/ExceptionHandler.java
================================================
package cn.mayongfa.common;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.log4j.Logger;
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.HandlerExceptionResolver;
import org.springframework.web.servlet.ModelAndView;
import com.google.gson.Gson;
@Component
public class ExceptionHandler implements HandlerExceptionResolver {
private static Logger log = Logger.getLogger(ExceptionHandler.class);
@Override
public ModelAndView resolveException(HttpServletRequest request, HttpServletResponse response, Object handler,
Exception exception) {
log.error("ExceptionHandler 捕获的异常:", exception);
String requestType = request.getHeader("X-Requested-With");
String type = "api"; //TODO:
if (!type.equals("api") && StrUtil.isNullOrEmpty(requestType)) {
// 非API请求
return new ModelAndView("redirect:/500.html");
} else {// JSON格式返回
Map responseMap = new HashMap();
responseMap.put("code", -1);
responseMap.put("msg", "系统异常,请稍后重试!");
responseMap.put("params", "");
responseMap.put("rows", "");
String json = new Gson().toJson(responseMap);
response.setCharacterEncoding("UTF-8");
response.setContentType("application/json; charset=utf-8");
try {
response.getWriter().write(json);
response.getWriter().flush();
return null;
} catch (IOException e) {
log.error("", e);
}
}
return new ModelAndView("redirect:/500.html");
}
}
================================================
FILE: src/cn/mayongfa/common/IdWorker.java
================================================
package cn.mayongfa.common;
import org.apache.log4j.Logger;
/**
*
* 以后,根据数据id,即可计算出该数据,产自哪个数据中心的.
*
* @author Administrator
*
*/
public class IdWorker {
/**
* 下面3个参数,不同部署的地方,系统,都要修改为不同的参数值.
*/
private long datacenterId = 1;
private long workerId = 1;
private static final String USERAGENT = "springdemo";
private long sequence = 0L;
private static final Logger logger = Logger.getLogger(IdWorker.class);
/**
*
*/
private final long twepoch = 1288834974657L;
// 机器标识位数
private final long workerIdBits = 5L;
// 数据中心标识位数
private final long datacenterIdBits = 5L;
// 机器ID最大值
private final long maxWorkerId = -1L ^ (-1L << workerIdBits);
// 数据中心ID最大值
private final long maxDatacenterId = -1L ^ (-1L << datacenterIdBits);
// 毫秒内自增位
private final long sequenceBits = 12L;
// 机器ID偏左移12位
private final long workerIdShift = sequenceBits;
// 数据中心ID左移17位
private final long datacenterIdShift = sequenceBits + workerIdBits;
// 时间毫秒左移22位
private final long timestampLeftShift = sequenceBits + workerIdBits
+ datacenterIdBits;
private final long sequenceMask = -1L ^ (-1L << sequenceBits);
private long lastTimestamp = -1L;
/**
*
* @param workerId
* @param datacenterId
*/
public IdWorker(long workerId, long datacenterId) {
if (workerId > maxWorkerId || workerId < 0) {
throw new IllegalArgumentException(String.format(
"workerId can't be greater than %d or less than 0.",
maxWorkerId));
}
if (datacenterId > maxDatacenterId || datacenterId < 0) {
throw new IllegalArgumentException(String.format(
"datacenterId can't be greater than %d or less than 0.",
maxDatacenterId));
}
this.workerId = workerId;
this.datacenterId = datacenterId;
}
public IdWorker() {
if (workerId > maxWorkerId || workerId < 0) {
throw new IllegalArgumentException(String.format(
"workerId can't be greater than %d or less than 0.",
maxWorkerId));
}
if (datacenterId > maxDatacenterId || datacenterId < 0) {
throw new IllegalArgumentException(String.format(
"datacenterId can't be greater than %d or less than 0.",
maxDatacenterId));
}
//this.workerId = workerId;
//this.datacenterId = datacenterId;
}
/**
*
* @return
*/
protected synchronized long nextId() {
long id = 0L;
long timestamp = timeGen();
// 时间错误
if (timestamp < lastTimestamp) {
throw new RuntimeException(
String.format(
"clock moved backwards. refusing to generate id for %d milliseconds.",
lastTimestamp - timestamp));
}
if (timestamp == lastTimestamp) {
// 当前毫秒内,则+1
sequence = (1 + sequence) & sequenceMask;
if (0 == sequence) {
// 当前毫秒内计数满了,则等待下一秒
timestamp = tilNextMillis(lastTimestamp);
}
} else {
sequence = 0;
}
lastTimestamp = timestamp;
// ID偏移组合生成最终的ID,并返回ID
id = ((timestamp - twepoch) << timestampLeftShift)
| (datacenterId << datacenterIdShift)
| (workerId << workerIdShift) | sequence;
return id;
}
/**
* 等待下一个毫秒的到来
*
* @param lastTimestamp
* @return
*/
protected long tilNextMillis(long lastTimestamp) {
long timestamp = timeGen();
while (timestamp <= lastTimestamp) {
timestamp = timeGen();
}
return timestamp;
}
/**
*
* @return
*/
protected long timeGen() {
return System.currentTimeMillis();
}
public long get_worker_id() throws Exception {
return workerId;
}
public long get_timestamp() throws Exception {
return System.currentTimeMillis();
}
public long get_id(String useragent) throws Exception {
if (!USERAGENT.equals(useragent)) {
throw new Exception("invalid useragent.");
}
long id = nextId();
logger.info(String.format("id: %s user_agent: %s worker_id: %s data_center_id: %s",id, useragent, workerId, datacenterId));
return id;
}
public long get_datacenter_id() throws Exception {
return datacenterId;
}
}
================================================
FILE: src/cn/mayongfa/common/IdWorkerManage.java
================================================
package cn.mayongfa.common;
public class IdWorkerManage {
private static IdWorker IdWorkerInstance = null;
static {
IdWorkerManage.IdWorkerInstance = new IdWorker();
}
/**
* single 单例模式
*
* @return
*/
private static IdWorker getIdWorkerInstance() {
if (IdWorkerManage.IdWorkerInstance == null) {
IdWorkerManage.IdWorkerInstance = new IdWorker();
}
return IdWorkerManage.IdWorkerInstance;
}
/**
* single 单例模式
*
* @return
*/
public static long getId() throws Exception {
return IdWorkerManage.getIdWorkerInstance().get_id("springdemo");
}
/*
public static void main(String[] args) {
for (int i = 0; i < 101; i++) {
try {
System.out.println(IdWorkerManage.getId());
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}*/
}
================================================
FILE: src/cn/mayongfa/common/JdbcContextHolder.java
================================================
package cn.mayongfa.common;
public class JdbcContextHolder {
private static final ThreadLocal contextHolder = new ThreadLocal();
public static void setJdbcType(String jdbcType) {
contextHolder.set(jdbcType);
}
public static void setSlave() {
setJdbcType("slave");
}
public static void setMaster() {
clearJdbcType();
}
public static String getJdbcType() {
return (String) contextHolder.get();
}
public static void clearJdbcType() {
contextHolder.remove();
}
}
================================================
FILE: src/cn/mayongfa/common/MD5Util.java
================================================
package cn.mayongfa.common;
import java.security.MessageDigest;
import org.apache.log4j.Logger;
public class MD5Util {
private static Logger log = Logger.getLogger(MD5Util.class);
public static String GetMD5Code16(String strObj) {
return GetMD5Code32(strObj).substring(8, 24);
}
public static String GetMD5Code32(String strObj) {
String resultString = null;
try {
resultString = new String(strObj);
MessageDigest md = MessageDigest.getInstance("MD5");
// md.digest() 该函数返回值为存放哈希值结果的byte数组
resultString = byteToString(md.digest(strObj.getBytes("UTF-8")));
} catch (Exception ex) {
log.error("", ex);
}
return resultString;
}
// 转换字节数组为16进制字串
private static String byteToString(byte[] bByte) {
StringBuffer sBuffer = new StringBuffer();
for (int i = 0; i < bByte.length; i++) {
sBuffer.append(byteToArrayString(bByte[i]));
}
return sBuffer.toString();
}
// 返回形式为数字跟字符串
private static String byteToArrayString(byte bByte) {
int iRet = bByte;
// System.out.println("iRet="+iRet);
if (iRet < 0) {
iRet += 256;
}
int iD1 = iRet / 16;
int iD2 = iRet % 16;
return strDigits[iD1] + strDigits[iD2];
}
private final static String[] strDigits = { "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "a", "b", "c", "d",
"e", "f" };
}
================================================
FILE: src/cn/mayongfa/common/StrUtil.java
================================================
package cn.mayongfa.common;
import java.io.UnsupportedEncodingException;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
/**
* 字符串处理类
*
* @Version 1.0
* @Remark
*/
public final class StrUtil {
/** 7位ASCII字符,也叫作ISO646-US、Unicode字符集的基本拉丁块 */
private static final String US_ASCII = "US-ASCII";
/** ISO 拉丁字母表 No.1,也叫作 ISO-LATIN-1 */
private static final String ISO_8859_1 = "ISO-8859-1";
/** 8 位 UCS 转换格式 */
private static final String UTF_8 = "UTF-8";
/** 16 位 UCS 转换格式,Big Endian(最低地址存放高位字节)字节顺序 */
private static final String UTF_16BE = "UTF-16BE";
/** 16 位 UCS 转换格式,Little-endian(最高地址存放低位字节)字节顺序 */
private static final String UTF_16LE = "UTF-16LE";
/** 16 位 UCS 转换格式,字节顺序由可选的字节顺序标记来标识 */
private static final String UTF_16 = "UTF-16";
/** 中文超大字符集 */
private static final String GBK = "GBK";
/** 默认全部值 1111 */
public static final long DEFAULT_ALL = (long) 1111;// 如下拉选择的全部 选项
public static final int DEFAULT_ALL_Int = 1111;// 如下拉选择的全部
/** 默认空值 0001 */
public static final long DEFAULT_NULL = (long) 0001;// 在值转换时候,如 字符转为
// long类型时候,先判断字符是否为空,如果为空返回这个
// ,或者转换异常时候。
/** 默认值 9999 */
public static final long DEFAULT_VALUE = (long) 9999;// 如数据库非null字段情况下,给一个默认值
/** 默认值 0001-01-01 */
public static final String DEFAULT_DATE = "0001-01-01";// 日期为空的时候默认值,给一个默认值
/**
* 将字符编码转换成GBK码
*
* @param sStr
* @return String
* @throws UnsupportedEncodingException
*/
public final static String toGBK(String sStr) throws UnsupportedEncodingException {
return changeCharset(sStr, GBK);
}
/**
* 将字符编码转换成UTF-8码
*
* @param sStr
* @return String
* @throws UnsupportedEncodingException
*/
public final static String toUTF8(String sStr) throws UnsupportedEncodingException {
return changeCharset(sStr, UTF_8);
}
/**
* 将字符编码转换成US-ASCII码
*
* @param sStr
* @return String
* @throws UnsupportedEncodingException
*/
public final static String toASCII(String sStr) throws UnsupportedEncodingException {
return changeCharset(sStr, US_ASCII);
}
/**
* 将字符编码转换成UTF-16码
*
* @param sStr
* @return String
* @throws UnsupportedEncodingException
*/
public final static String toUTF16(String sStr) throws UnsupportedEncodingException {
return changeCharset(sStr, UTF_16);
}
/**
* 字符串编码转换的实现方法
*
* @param sStr
* 待转换编码的字符串
* @param sNewCharset
* 目标编码
* @return String
* @throws UnsupportedEncodingException
*/
public final static String changeCharset(String sStr, String sNewCharset) throws UnsupportedEncodingException {
// 用默认字符编码解码字符串。
byte[] aBits = sStr.getBytes();
// 用新的字符编码生成字符串
return new String(aBits, sNewCharset);
}
/**
* 将字符编码转换成ISO-8859-1码
*
* @param sStr
* @return String
* @throws UnsupportedEncodingException
*/
public final static String toISO_8859_1(String sStr) throws UnsupportedEncodingException {
return changeCharset(sStr, ISO_8859_1);
}
/**
* 将字符编码转换成UTF-16BE码
*
* @param sStr
* @return String
* @throws UnsupportedEncodingException
*/
public final static String toUTF16BE(String sStr) throws UnsupportedEncodingException {
return changeCharset(sStr, UTF_16BE);
}
/**
* 将字符编码转换成UTF-16LE码
*
* @param sStr
* @return String
* @throws UnsupportedEncodingException
*/
public final static String toUTF16LE(String sStr) throws UnsupportedEncodingException {
return changeCharset(sStr, UTF_16LE);
}
/**
* 字符串编码转换的实现方法
*
* @param sStr
* 待转换编码的字符串
* @param sOldCharset
* 原编码
* @param sNewCharset
* 目标编码
* @return String
* @throws UnsupportedEncodingException
*/
public final static String changeCharset(String sStr, String sOldCharset, String sNewCharset)
throws UnsupportedEncodingException {
// 用旧的字符编码解码字符串。解码可能会出现异常。
byte[] aBits = sStr.getBytes(sOldCharset);
// 用新的字符编码生成字符串
return new String(aBits, sNewCharset);
}
/**
* 返回正则表达式的结果集
*
* @param sStr
* @param sPattern
* @return List
*/
public final static List getRegexResult(String sStr, String sPattern) {
ArrayList aList = new ArrayList();
Pattern oPattern = Pattern.compile(sPattern);
Matcher oMatcher = oPattern.matcher(sStr);
while (oMatcher.find()) {
for (int i = 1, nTotal = oMatcher.groupCount(); i <= nTotal; i++) {
aList.add(oMatcher.group(i));
}
}
return aList;
}
/**
* 字符串正则表达式替换
*
* @param sSource
* @param sReplace
* @param sPattern
* @return String
*/
public final static String getRegexReplaceResult(String sSource, String sReplace, String sPattern) {
Pattern oPattern = Pattern.compile(sPattern);
Matcher oMatcher = oPattern.matcher(sSource);
return oMatcher.replaceAll(sReplace);
}
/**
* 正则表达式检查结果
*
* @param sStr
* @param sPattern
* @return boolean
*/
public final static boolean checkMather(String sStr, String sPattern) {
Pattern oPattern = Pattern.compile(sPattern);
Matcher oMather = oPattern.matcher(sStr);
return oMather.matches();
}
/**
* 如果字符串为空则用默认值
*
* @param sStr
* @param sDefault
* @return String
*/
public final static String toStr(Object sStr, String sDefault) {
return sStr == null ? sDefault : sStr.toString().trim();
}
/**
* 如果字符串为空则用默认值
*
* @param sStr
* @param sDefault
* @return String
*/
public final static String toStrNOTrim(Object sStr, String sDefault) {
return sStr == null ? sDefault : sStr.toString();
}
/**
* 把字符串转换成整数
*
* @param sValue
* @param nDefault
* @return int
*/
public final static int toInt(String sValue, int nDefault) {
if (sValue == null || sValue.isEmpty())
return nDefault;
try {
return Integer.valueOf(sValue);
} catch (Exception ex) {
return nDefault;
}
}
/**
* 把字符串转换成Long数
*
* @param sValue
* @param nDefault
* @return int
*/
public final static Long toLong(String sValue, Long nDefault) {
if (sValue == null || sValue.isEmpty())
return nDefault;
try {
return Long.valueOf(sValue);
} catch (Exception ex) {
return nDefault;
}
}
/**
* 把字符串转换成小数
*
* @param sValue
* @param nDefault
* @return Float
*/
public final static Float toFloat(String sValue, Float nDefault) {
if (sValue == null || sValue.isEmpty())
return nDefault;
return Float.valueOf(sValue);
}
/**
* 把字符串转换成双精度小数
*
* @param sValue
* @param nDefault
* @return Double
*/
public final static Double toDouble(String sValue, Double nDefault) {
if (sValue == null || sValue.isEmpty())
return nDefault;
return Double.valueOf(sValue);
}
/**
* 把字符串转换成浮点
*
* @param sValue
* @param nDefault
* @return float
*/
public final static float toFloat(String sValue, float nDefault) {
if (sValue == null || sValue.isEmpty())
return nDefault;
return Float.valueOf(sValue);
}
/**
* 把字符串转换成 布尔型
*
* @param sValue
* @param nDefault
* @return boolean
*/
public final static boolean toBoolean(String sValue, boolean nDefault) {
if (sValue == null || sValue.isEmpty())
return nDefault;
return Boolean.valueOf(sValue);
}
/**
* 数据显示小数点问题
*
* @param d
* @return
*/
public final static String doubleToStr(Double dd) {
if (null == dd) {
return "";
}
double d = dd;
double c = d - (int) d;
if (c == 0)
return (int) d + "";
else {
BigDecimal b = new BigDecimal(d);
BigDecimal one = new BigDecimal("1");
c = b.divide(one, 2, BigDecimal.ROUND_HALF_UP).doubleValue();
return String.valueOf(c);
}
}
public final static String floatToStr(float d) {
if (Math.round(d) - d == 0) {
return String.valueOf((long) d);
}
return String.valueOf(d);
}
/**
* 字符串 : 解决数据库入库时候的非法符号 转 HTML 符号
*
* @param sStr
* @param sDefault
* @return
*/
public final static String toHtml(Object sStr, String sDefault) {
String sValue = sStr == null ? sDefault : sStr.toString();
sValue = sValue.replaceAll("<", "<");
sValue = sValue.replaceAll(">", ">");
sValue = sValue.replaceAll("&", "&");
return sValue;
}
/**
* 获取八位不重复随机码(取当前时间戳转化为16进制)
*
* @param time
* @return
*/
public final static String toHex(long time) {
return Integer.toHexString((int) time);
}
public static String getVerificationCode(int count, Boolean isLetter) {
String[] beforeLetterShuffle = new String[] { "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M",
"N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z" };
String[] beforeNumberShuffle = new String[] { "1", "2", "3", "4", "5", "6", "7", "8", "9", "8" };
List list = Arrays.asList(isLetter ? beforeLetterShuffle : beforeNumberShuffle);
Collections.shuffle(list);
StringBuilder sb = new StringBuilder();
for (int i = 0; i < list.size(); i++) {
sb.append(list.get(i));
}
String afterShuffle = sb.toString();
String result = afterShuffle.substring(0, count);
return result;
}
/**
* 检测字符串是否为空(null,"","null")
*
* @param value
* @return 为空则返回true,否则返回false
*/
public final static boolean isNullOrEmpty(String value) {
return value == null || "".equals(value.trim()) || "null".equals(value.trim());
}
/**
* 判断在values数组中是否存在value元素
*
* @param values
* 数组
* @param value
* 字符串
* @return 存在,返回true。反之,false。
*/
public static boolean contains(String[] values, String value) {
if (values != null && values.length > 0) {
for (String s : values) {
if (s != null) {
if (s.equals(value)) {
return true;
}
}
}
}
return false;
}
/**
* json字符串转换为List