修复热部署转换问题
parent
9ff8613336
commit
5d0e3a7034
|
@ -0,0 +1,141 @@
|
||||||
|
package com.ruoyi.common.utils.bean;
|
||||||
|
|
||||||
|
import java.lang.reflect.Method;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.regex.Matcher;
|
||||||
|
import java.util.regex.Pattern;
|
||||||
|
|
||||||
|
import com.ruoyi.project.system.dept.domain.Dept;
|
||||||
|
import com.ruoyi.project.system.user.domain.User;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Bean 工具类
|
||||||
|
*
|
||||||
|
* @author ruoyi
|
||||||
|
*/
|
||||||
|
public class BeanUtils
|
||||||
|
{
|
||||||
|
/** Bean方法名中属性名开始的下标 */
|
||||||
|
private static final int BEAN_METHOD_PROP_INDEX = 3;
|
||||||
|
|
||||||
|
/** * 匹配getter方法的正则表达式 */
|
||||||
|
private static final Pattern GET_PATTERN = Pattern.compile("get(\\p{javaUpperCase}\\w*)");
|
||||||
|
|
||||||
|
/** * 匹配setter方法的正则表达式 */
|
||||||
|
private static final Pattern SET_PATTERN = Pattern.compile("set(\\p{javaUpperCase}\\w*)");
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Bean属性复制工具方法。
|
||||||
|
*
|
||||||
|
* @param dest 目标对象
|
||||||
|
* @param src 源对象
|
||||||
|
*/
|
||||||
|
public static void copyBeanProp(Object dest, Object src)
|
||||||
|
{
|
||||||
|
List<Method> destSetters = getSetterMethods(dest);
|
||||||
|
List<Method> srcGetters = getGetterMethods(src);
|
||||||
|
try
|
||||||
|
{
|
||||||
|
for (Method setter : destSetters)
|
||||||
|
{
|
||||||
|
for (Method getter : srcGetters)
|
||||||
|
{
|
||||||
|
if (isMethodPropEquals(setter.getName(), getter.getName())
|
||||||
|
&& setter.getParameterTypes()[0].equals(getter.getReturnType()))
|
||||||
|
{
|
||||||
|
setter.invoke(dest, getter.invoke(src));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (Exception e)
|
||||||
|
{
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取对象的setter方法。
|
||||||
|
*
|
||||||
|
* @param obj 对象
|
||||||
|
* @return 对象的setter方法列表
|
||||||
|
*/
|
||||||
|
public static List<Method> getSetterMethods(Object obj)
|
||||||
|
{
|
||||||
|
// setter方法列表
|
||||||
|
List<Method> setterMethods = new ArrayList<Method>();
|
||||||
|
|
||||||
|
// 获取所有方法
|
||||||
|
Method[] methods = obj.getClass().getMethods();
|
||||||
|
|
||||||
|
// 查找setter方法
|
||||||
|
|
||||||
|
for (Method method : methods)
|
||||||
|
{
|
||||||
|
Matcher m = SET_PATTERN.matcher(method.getName());
|
||||||
|
if (m.matches() && (method.getParameterTypes().length == 1))
|
||||||
|
{
|
||||||
|
setterMethods.add(method);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// 返回setter方法列表
|
||||||
|
return setterMethods;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取对象的getter方法。
|
||||||
|
*
|
||||||
|
* @param obj 对象
|
||||||
|
* @return 对象的getter方法列表
|
||||||
|
*/
|
||||||
|
|
||||||
|
public static List<Method> getGetterMethods(Object obj)
|
||||||
|
{
|
||||||
|
// getter方法列表
|
||||||
|
List<Method> getterMethods = new ArrayList<Method>();
|
||||||
|
// 获取所有方法
|
||||||
|
Method[] methods = obj.getClass().getMethods();
|
||||||
|
// 查找getter方法
|
||||||
|
for (Method method : methods)
|
||||||
|
{
|
||||||
|
Matcher m = GET_PATTERN.matcher(method.getName());
|
||||||
|
if (m.matches() && (method.getParameterTypes().length == 0))
|
||||||
|
{
|
||||||
|
getterMethods.add(method);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// 返回getter方法列表
|
||||||
|
return getterMethods;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 检查Bean方法名中的属性名是否相等。<br>
|
||||||
|
* 如getName()和setName()属性名一样,getName()和setAge()属性名不一样。
|
||||||
|
*
|
||||||
|
* @param m1 方法名1
|
||||||
|
* @param m2 方法名2
|
||||||
|
* @return 属性名一样返回true,否则返回false
|
||||||
|
*/
|
||||||
|
|
||||||
|
public static boolean isMethodPropEquals(String m1, String m2)
|
||||||
|
{
|
||||||
|
return m1.substring(BEAN_METHOD_PROP_INDEX).equals(m2.substring(BEAN_METHOD_PROP_INDEX));
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void main(String[] args)
|
||||||
|
{
|
||||||
|
User user = new User();
|
||||||
|
|
||||||
|
User zhen = new User();
|
||||||
|
zhen.setUserName("测试名称");
|
||||||
|
Dept dept = new Dept();
|
||||||
|
dept.setDeptId(11L);
|
||||||
|
dept.setDeptName("测试部门");
|
||||||
|
zhen.setDept(dept);
|
||||||
|
|
||||||
|
BeanUtils.copyBeanProp(user, zhen);
|
||||||
|
|
||||||
|
System.out.println(user.getDept().getDeptName());
|
||||||
|
}
|
||||||
|
}
|
|
@ -6,6 +6,8 @@ import org.apache.shiro.session.Session;
|
||||||
import org.apache.shiro.subject.PrincipalCollection;
|
import org.apache.shiro.subject.PrincipalCollection;
|
||||||
import org.apache.shiro.subject.SimplePrincipalCollection;
|
import org.apache.shiro.subject.SimplePrincipalCollection;
|
||||||
import org.apache.shiro.subject.Subject;
|
import org.apache.shiro.subject.Subject;
|
||||||
|
|
||||||
|
import com.ruoyi.common.utils.bean.BeanUtils;
|
||||||
import com.ruoyi.framework.shiro.realm.UserRealm;
|
import com.ruoyi.framework.shiro.realm.UserRealm;
|
||||||
import com.ruoyi.project.system.user.domain.User;
|
import com.ruoyi.project.system.user.domain.User;
|
||||||
|
|
||||||
|
@ -34,7 +36,9 @@ public class ShiroUtils
|
||||||
|
|
||||||
public static User getUser()
|
public static User getUser()
|
||||||
{
|
{
|
||||||
return (User) getSubjct().getPrincipal();
|
User user = new User();
|
||||||
|
BeanUtils.copyBeanProp(user, getSubjct().getPrincipal());
|
||||||
|
return user;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void setUser(User user)
|
public static void setUser(User user)
|
||||||
|
|
|
@ -4,8 +4,6 @@ import java.util.Date;
|
||||||
import java.util.concurrent.ExecutorService;
|
import java.util.concurrent.ExecutorService;
|
||||||
import java.util.concurrent.Executors;
|
import java.util.concurrent.Executors;
|
||||||
import java.util.concurrent.Future;
|
import java.util.concurrent.Future;
|
||||||
import org.apache.commons.beanutils.PropertyUtils;
|
|
||||||
import org.quartz.JobDataMap;
|
|
||||||
import org.quartz.JobExecutionContext;
|
import org.quartz.JobExecutionContext;
|
||||||
import org.quartz.JobExecutionException;
|
import org.quartz.JobExecutionException;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
|
@ -13,6 +11,7 @@ import org.slf4j.LoggerFactory;
|
||||||
import org.springframework.scheduling.quartz.QuartzJobBean;
|
import org.springframework.scheduling.quartz.QuartzJobBean;
|
||||||
import com.ruoyi.common.constant.Constants;
|
import com.ruoyi.common.constant.Constants;
|
||||||
import com.ruoyi.common.constant.ScheduleConstants;
|
import com.ruoyi.common.constant.ScheduleConstants;
|
||||||
|
import com.ruoyi.common.utils.bean.BeanUtils;
|
||||||
import com.ruoyi.common.utils.spring.SpringUtils;
|
import com.ruoyi.common.utils.spring.SpringUtils;
|
||||||
import com.ruoyi.project.monitor.job.domain.Job;
|
import com.ruoyi.project.monitor.job.domain.Job;
|
||||||
import com.ruoyi.project.monitor.job.domain.JobLog;
|
import com.ruoyi.project.monitor.job.domain.JobLog;
|
||||||
|
@ -33,17 +32,8 @@ public class ScheduleJob extends QuartzJobBean
|
||||||
@Override
|
@Override
|
||||||
protected void executeInternal(JobExecutionContext context) throws JobExecutionException
|
protected void executeInternal(JobExecutionContext context) throws JobExecutionException
|
||||||
{
|
{
|
||||||
// Job job = (Job) context.getMergedJobDataMap().get(ScheduleConstants.JOB_PARAM_KEY);
|
|
||||||
JobDataMap jobDataMap = context.getMergedJobDataMap();
|
|
||||||
Job job = new Job();
|
Job job = new Job();
|
||||||
try
|
BeanUtils.copyBeanProp(job, context.getMergedJobDataMap().get(ScheduleConstants.JOB_PARAM_KEY));
|
||||||
{
|
|
||||||
PropertyUtils.copyProperties(job, jobDataMap.get(ScheduleConstants.JOB_PARAM_KEY));
|
|
||||||
}
|
|
||||||
catch (Exception e)
|
|
||||||
{
|
|
||||||
log.error("copyProperties执行异常 - :", e);
|
|
||||||
}
|
|
||||||
|
|
||||||
IJobLogService jobLogService = (IJobLogService) SpringUtils.getBean(IJobLogService.class);
|
IJobLogService jobLogService = (IJobLogService) SpringUtils.getBean(IJobLogService.class);
|
||||||
|
|
||||||
|
|
|
@ -42,7 +42,8 @@ spring:
|
||||||
max-request-size: 30Mb
|
max-request-size: 30Mb
|
||||||
devtools:
|
devtools:
|
||||||
restart:
|
restart:
|
||||||
enabled: true
|
#禁用devtools模块的热部署功能
|
||||||
|
enabled: true
|
||||||
# MyBatis
|
# MyBatis
|
||||||
mybatis:
|
mybatis:
|
||||||
# 搜索指定包别名
|
# 搜索指定包别名
|
||||||
|
|
|
@ -35,7 +35,7 @@
|
||||||
<img th:src="(${user.avatar} == '') ? '/img/profile.jpg' : '/profile/' + ${user.avatar}" alt="image" class="img-circle" height="60" width="60"/></span>
|
<img th:src="(${user.avatar} == '') ? '/img/profile.jpg' : '/profile/' + ${user.avatar}" alt="image" class="img-circle" height="60" width="60"/></span>
|
||||||
<a data-toggle="dropdown" class="dropdown-toggle" href="#">
|
<a data-toggle="dropdown" class="dropdown-toggle" href="#">
|
||||||
<span class="clear"><span class="block m-t-xs"><strong class="font-bold">[[${user.userName}]]</strong></span>
|
<span class="clear"><span class="block m-t-xs"><strong class="font-bold">[[${user.userName}]]</strong></span>
|
||||||
<span class="text-muted text-xs block"><span>[[${user.dept.deptName}]]</span> <b class="caret"></b></span> </span> </a>
|
<span class="text-muted text-xs block"><span th:if="${not #strings.isEmpty(user.dept)}">[[${user.dept.deptName}]]</span> <b class="caret"></b></span> </span> </a>
|
||||||
<ul class="dropdown-menu animated fadeInRight m-t-xs">
|
<ul class="dropdown-menu animated fadeInRight m-t-xs">
|
||||||
<li><a class="menuItem" th:href="@{/system/user/profile}">个人信息</a></li>
|
<li><a class="menuItem" th:href="@{/system/user/profile}">个人信息</a></li>
|
||||||
<li class="divider"></li>
|
<li class="divider"></li>
|
||||||
|
|
Loading…
Reference in New Issue