Browse Source

jdbcTemplate 预编译拦截

demon 8 years ago
parent
commit
c8d0c23480

+ 6 - 0
pom.xml

@ -127,6 +127,12 @@
            <artifactId>activemq-core</artifactId>
            <version>5.7.0</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.aspectj/aspectjweaver -->
        <dependency>
            <groupId>org.aspectj</groupId>
            <artifactId>aspectjweaver</artifactId>
            <version>1.8.9</version>
        </dependency>
    </dependencies>

+ 4 - 4
src/main/java/com/yihu/hos/datacollect/dao/DatacollectDao.java

@ -3,11 +3,11 @@ package com.yihu.hos.datacollect.dao;
import com.yihu.hos.datacollect.dao.intf.IDatacollectDao;
import com.yihu.hos.datacollect.model.DtoJobDataset;
import com.yihu.hos.datacollect.model.RsJobDataset;
import com.yihu.hos.web.framework.dao.SQLGeneralDAO;
import com.yihu.hos.resource.model.RsDatasourceDataset;
import com.yihu.hos.web.framework.constrant.DateConvert;
import com.yihu.hos.web.framework.dao.SQLGeneralDAO;
import com.yihu.hos.web.framework.model.DataGridResult;
import com.yihu.hos.web.framework.model.SimpleChartItem;
import com.yihu.hos.resource.model.RsDatasourceDataset;
import org.springframework.stereotype.Repository;
import org.springframework.util.StringUtils;
@ -83,8 +83,8 @@ public class DatacollectDao extends SQLGeneralDAO implements IDatacollectDao {
    @Override
    public List<RsJobDataset> getJobDataset(String jobId) throws Exception
    {
        String sql = "select * from rs_job_dataset where job_id='"+jobId+"'";
        return super.queryListBySql(sql, RsJobDataset.class);
        List<RsJobDataset> flowTemps = (List<RsJobDataset>) super.hibernateTemplate.find("from RsJobDataset s where s.jobId=? ", jobId);
        return flowTemps;
    }

+ 17 - 21
src/main/java/com/yihu/hos/interceptor/AuditInterceptor.java

@ -3,14 +3,10 @@ package com.yihu.hos.interceptor;
import com.yihu.hos.common.constants.ContextAttributes;
import org.apache.commons.lang3.StringUtils;
import org.hibernate.EmptyInterceptor;
import org.hibernate.type.Type;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
import java.io.Serializable;
import java.util.Iterator;
/**
 * @author HZY
 * @vsrsion 1.0
@ -34,23 +30,23 @@ public class AuditInterceptor extends EmptyInterceptor {
        return super.onPrepareStatement(completeSql);
    }
    @Override
    public void onDelete(
            Object entity,
            Serializable id,
            Object[] state,
            String[] propertyNames,
            Type[] types) {
        System.out.println("33333333333333");
        super.onDelete(entity,id,state,propertyNames,types);
    }
    @Override
    public void preFlush(Iterator entities) {
        System.out.println("preflush..............");
        super.preFlush(entities);
    }
//    @Override
//    public void onDelete(
//            Object entity,
//            Serializable id,
//            Object[] state,
//            String[] propertyNames,
//            Type[] types) {
//        System.out.println("33333333333333");
//        super.onDelete(entity,id,state,propertyNames,types);
//    }
//    @Override
//    public void preFlush(Iterator entities) {
//        System.out.println("preflush..............");
//        super.preFlush(entities);
//    }
    private String getSchema() {
        return LocalContext.getContext().getAttachment(ContextAttributes.SCHEMA);

+ 66 - 0
src/main/java/com/yihu/hos/interceptor/JdbcTemplateAdvice.java

@ -0,0 +1,66 @@
package com.yihu.hos.interceptor;
import com.yihu.hos.common.constants.ContextAttributes;
import org.apache.commons.lang3.StringUtils;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.springframework.stereotype.Component;
/**
 *  jdbctemplate 预编译执行拦截
 * @author HZY
 * @vsrsion 1.0
 * Created at 2016/12/7.
 */
@Aspect
@Component
public class JdbcTemplateAdvice {
    @Around("execution(* org.springframework.jdbc.core.JdbcTemplate.query*(..)) || execution(* org.springframework.jdbc.core.JdbcTemplate.execute*(..))")
    public void process(ProceedingJoinPoint point) throws Throwable {
        String schemaName = getSchema();
        //访问目标方法的参数:
        Object[] args = point.getArgs();
        if (args != null && args.length > 0 && args[0].getClass() == String.class) {
            String completeSql = args[0].toString();
            if (StringUtils.isNotEmpty(schemaName)) {
                String myCatAnnotation = "/*#mycat:schema=" + schemaName + "*/ ";
                completeSql = myCatAnnotation + completeSql;
            }
            args[0]=completeSql;
        }
        //用改变后的参数执行目标方法
        point.proceed(args);
    }
//    @Before("execution(* org.springframework.jdbc.core.JdbcTemplate.query*(..)) || execution(* org.springframework.jdbc.core.JdbcTemplate.execute*(..))")
//    public void permissionCheck(JoinPoint point) {
//        System.out.println("@Before:模拟权限检查...");
//        System.out.println("@Before:目标方法为:" +
//                point.getSignature().getDeclaringTypeName() +
//                "." + point.getSignature().getName());
//        System.out.println("@Before:参数为:" + Arrays.toString(point.getArgs()));
//        System.out.println("@Before:被织入的目标对象为:" + point.getTarget());
//
//        String schemaName = getSchema();
//        //访问目标方法的参数:
//        Object[] args = point.getArgs();
//        if (args != null && args.length > 0 && args[0].getClass() == String.class) {
//            String completeSql = args[0].toString();
//            if (StringUtils.isNotEmpty(schemaName)) {
//                String myCatAnnotation = "/*#mycat:schema=" + schemaName + "*/ ";
//                completeSql = myCatAnnotation + completeSql;
//            }
//            args[0]=completeSql;
//        }
//
//    }
    private String getSchema() {
        return LocalContext.getContext().getAttachment(ContextAttributes.SCHEMA);
    }
}