From cc40427b457d2e2836e6bffd3f05998c866b3e87 Mon Sep 17 00:00:00 2001 From: WuXianChaoPin <1029559041@qq.com> Date: Wed, 9 May 2018 18:53:19 +0800 Subject: [PATCH] thift --- core/src/main/java/core/aop/Advice.java | 3 +- core/src/main/java/core/dao/BaseDao1.java | 53 +++++++++++++++++-- .../main/java/core/service/BaseService.java | 49 +++++++---------- core/src/main/java/core/util/DBAction.java | 11 +++- db/pom.xml | 5 ++ .../main/java/db/config/HibernateConfig.java | 24 ++++++++- db/src/main/java/db/model/AbstractModel.java | 31 ++++++++++- db/src/main/java/db/model/CidEntity.java | 4 +- db/src/main/java/db/model/DataModel.java | 4 +- .../java/db/model/ScheduledTaskEntity.java | 2 +- db/src/main/java/db/model/TaskEntity.java | 2 +- .../java/web/controller/AdminController.java | 5 ++ .../java/web/controller/BaseController.java | 19 +++++-- .../web/controller/CommentController.java | 5 ++ .../java/web/controller/DataController.java | 7 +++ web/src/main/resources/log4j2.xml | 4 +- web/src/test/java/SpringTest.java | 28 +++++++++- web/src/test/java/Test.java | 8 +++ 18 files changed, 214 insertions(+), 50 deletions(-) create mode 100644 web/src/test/java/Test.java diff --git a/core/src/main/java/core/aop/Advice.java b/core/src/main/java/core/aop/Advice.java index dd94239..45c59e1 100644 --- a/core/src/main/java/core/aop/Advice.java +++ b/core/src/main/java/core/aop/Advice.java @@ -1,5 +1,6 @@ package core.aop; +import db.model.AbstractModel; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import org.springframework.aop.MethodBeforeAdvice; @@ -15,7 +16,7 @@ import java.util.Arrays; public class Advice implements MethodBeforeAdvice { private Logger log=LogManager.getLogger(); @Override - public void before(Method method, Object[] objects, Object o) throws Throwable { + public void before(Method method, Object[] objects, Object o) { log.info("类:" + o.getClass() + ",方法:" + method.getName() + "被调用,传入参数:" + Arrays.asList(objects)); } } diff --git a/core/src/main/java/core/dao/BaseDao1.java b/core/src/main/java/core/dao/BaseDao1.java index e20edcb..e36e5ad 100644 --- a/core/src/main/java/core/dao/BaseDao1.java +++ b/core/src/main/java/core/dao/BaseDao1.java @@ -9,6 +9,8 @@ import org.springframework.stereotype.Repository; import org.springframework.transaction.annotation.Transactional; import java.io.Serializable; +import java.util.ArrayList; +import java.util.List; /** * Created by reborn on 2017/7/31. @@ -22,11 +24,54 @@ public class BaseDao1 extends HibernateTemplate{ super(aliyun); } - public void delete(Class tClass, Serializable key) throws DataAccessException { - T model = load(tClass, key); - if (model != null) { - delete(model); + + public T save(T entity) { + try { + super.save(entity); + }catch (DataAccessException e){ + entity.setDataAccessException(e); + } + return entity; + } + + public T update(T entity){ + try { + super.update(entity); + }catch (DataAccessException e){ + entity.setDataAccessException(e); + } + return entity; + + } + + public T get(T entity){ + try{ + entity=(T)(super.get(entity.getClass(),entity.primaryKey())); + }catch (DataAccessException e){ + entity.setDataAccessException(e); + } + return entity; + } + + public T delete(T entity) { + + T model = get(entity); + try { + if ( entity.getDataAccessException()!= null) { + super.delete(model); + } + } catch (DataAccessException e) { + entity.setDataAccessException(e); + } + return entity; + } + + public List delete(List entitys) { + List result=new ArrayList<>(); + for(T entity:entitys){ + result.add(delete(entity)); } + return result; } diff --git a/core/src/main/java/core/service/BaseService.java b/core/src/main/java/core/service/BaseService.java index db38298..fc55f18 100644 --- a/core/src/main/java/core/service/BaseService.java +++ b/core/src/main/java/core/service/BaseService.java @@ -10,6 +10,9 @@ import org.springframework.stereotype.Service; import javax.annotation.Resource; import java.io.Serializable; +import java.util.List; + +import static core.util.DBAction.BD; /** * Created by reborn on 2017/7/28. @@ -24,37 +27,25 @@ public class BaseService { @Resource protected BaseDao2 baseDao2; - public String curd(DBAction action, T command) { - Class tClass = (Class) command.getClass(); - try { - switch (action) { - case C: - case U: - baseDao1.saveOrUpdate(command); - break; - case R: - if(command.primaryKey()!=null) { - T model = baseDao1.get(tClass, command.primaryKey()); - return model == null ? "找不到主键=" + command.primaryKey() + "" : model.toString(); - }else{ - throw new RuntimeException(command.getClass()+".primaryKey()方法返回null"); - } - case D: - if(command.getCheckeds()==null) { - baseDao1.delete(tClass, command.primaryKey()); - }else{ - for (Serializable checked:command.getCheckeds()){ - baseDao1.delete(tClass,checked); - } - } - break; - } - return action.getEn() + " success"; - } catch (Exception e) { - log.error((command.tableNote()==null?command.getClass():command.tableNote()) + "进行" + action.getCh() + "操作失败,原因是:" + e.getMessage()); + public T curd(DBAction action, T command) { + switch (action) { + case C: + return baseDao1.save(command); + case U: + return baseDao1.update(command); + case R: + return baseDao1.get(command); + case D: + return baseDao1.delete(command); + default: + throw new RuntimeException("非法操作:" + action); } - return action.getEn() + " fail"; } + public List find(T command, int firstResult, int maxResults){ + return (List) baseDao1.findByCriteria(command.getCriteria(),firstResult,maxResults); + } + + } diff --git a/core/src/main/java/core/util/DBAction.java b/core/src/main/java/core/util/DBAction.java index b1a5e00..ff9c77d 100644 --- a/core/src/main/java/core/util/DBAction.java +++ b/core/src/main/java/core/util/DBAction.java @@ -11,7 +11,16 @@ public enum DBAction { R("读取","Retrieve"), - D("删除","Delete"); + D("删除","Delete"), + + BC("批量创建","BatchCreate"), + + BU("批量更新","BatchUpdate"), + + BR("批量读取","BatchRetrieve"), + + BD("批量删除","BatchDelete"); + private String ch; diff --git a/db/pom.xml b/db/pom.xml index 3820860..4b20b33 100644 --- a/db/pom.xml +++ b/db/pom.xml @@ -59,5 +59,10 @@ com.alibaba druid + + + org.apache.commons + commons-lang3 + \ No newline at end of file diff --git a/db/src/main/java/db/config/HibernateConfig.java b/db/src/main/java/db/config/HibernateConfig.java index 0ee7b31..ebe7b5e 100644 --- a/db/src/main/java/db/config/HibernateConfig.java +++ b/db/src/main/java/db/config/HibernateConfig.java @@ -1,6 +1,7 @@ package db.config; import com.alibaba.druid.pool.DruidDataSource; +import org.apache.commons.lang3.StringUtils; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import org.hibernate.SessionFactory; @@ -8,10 +9,14 @@ import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Bean; import org.springframework.orm.hibernate5.HibernateTransactionManager; import org.springframework.orm.hibernate5.LocalSessionFactoryBean; +import org.springframework.util.ObjectUtils; +import org.springframework.util.ReflectionUtils; import javax.annotation.PostConstruct; import javax.sql.DataSource; import java.io.IOException; +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; import java.util.Properties; /** @@ -43,7 +48,7 @@ public class HibernateConfig{ @Value("${sessionFactory.scan}") private String packagesToScan[]; - + private static final String tableNote="tableNote"; private LocalSessionFactoryBean aliyun = new LocalSessionFactoryBean(); @@ -76,6 +81,7 @@ public class HibernateConfig{ bean.setPackagesToScan(packagesToScan); try { bean.afterPropertiesSet(); + checkClass(bean); } catch (IOException e) { e.printStackTrace(); } @@ -106,7 +112,21 @@ public class HibernateConfig{ return hibernateTransactionManager; } - + private void checkClass(LocalSessionFactoryBean bean){ + for(Class c:bean.getMetadataSources().getAnnotatedClasses()){ + try { + Method method=ReflectionUtils.findMethod(c,tableNote); + Object result=ReflectionUtils.invokeMethod(method,c.newInstance()); + if(ObjectUtils.isEmpty(result)){ + throw new RuntimeException(method+"没有正确重写"); + } + } catch (IllegalAccessException e) { + e.printStackTrace(); + } catch (InstantiationException e) { + e.printStackTrace(); + } + } + } } diff --git a/db/src/main/java/db/model/AbstractModel.java b/db/src/main/java/db/model/AbstractModel.java index 2aced40..59b8e6a 100644 --- a/db/src/main/java/db/model/AbstractModel.java +++ b/db/src/main/java/db/model/AbstractModel.java @@ -1,9 +1,13 @@ package db.model; +import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.SerializationFeature; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; +import org.hibernate.criterion.DetachedCriteria; +import org.springframework.dao.DataAccessException; import java.io.Serializable; @@ -18,9 +22,18 @@ public abstract class AbstractModel { public abstract String tableNote(); + private DataAccessException dataAccessException; + private static ObjectMapper objectMapper=new ObjectMapper(); - public Serializable[] checkeds; + static { + objectMapper.enable(SerializationFeature.INDENT_OUTPUT); + objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL); + } + + private Serializable[] checkeds; + + private DetachedCriteria criteria; public Serializable[] getCheckeds() { return checkeds; @@ -30,6 +43,22 @@ public abstract class AbstractModel { this.checkeds = checkeds; } + public DataAccessException getDataAccessException() { + return dataAccessException; + } + + public void setDataAccessException(DataAccessException dataAccessException) { + this.dataAccessException = dataAccessException; + } + + public DetachedCriteria getCriteria() { + return criteria; + } + + public void setCriteria(DetachedCriteria criteria) { + this.criteria = criteria; + } + @Override public String toString() { try { diff --git a/db/src/main/java/db/model/CidEntity.java b/db/src/main/java/db/model/CidEntity.java index a0cd8b9..f392167 100644 --- a/db/src/main/java/db/model/CidEntity.java +++ b/db/src/main/java/db/model/CidEntity.java @@ -5,7 +5,7 @@ import java.io.Serializable; import java.util.Objects; @Entity -@Table(name = "cid", schema = "bilibili", catalog = "") +@Table(name = "cid", schema = "bilibili", catalog = "bilibili") public class CidEntity extends AbstractModel { private int cid; private Integer maxlimit; @@ -279,6 +279,6 @@ public class CidEntity extends AbstractModel { @Override public String tableNote() { - return null; + return "CID表"; } } diff --git a/db/src/main/java/db/model/DataModel.java b/db/src/main/java/db/model/DataModel.java index 5a91574..9d2d4ba 100644 --- a/db/src/main/java/db/model/DataModel.java +++ b/db/src/main/java/db/model/DataModel.java @@ -5,7 +5,7 @@ import java.io.Serializable; import java.util.Objects; @Entity -@Table(name = "data", schema = "bilibili", catalog = "") +@Table(name = "data", schema = "bilibili", catalog = "bilibili") public class DataModel extends AbstractModel { private int cid; private Integer aid; @@ -376,6 +376,6 @@ public class DataModel extends AbstractModel { @Override public String tableNote() { - return null; + return "history接口数据表"; } } diff --git a/db/src/main/java/db/model/ScheduledTaskEntity.java b/db/src/main/java/db/model/ScheduledTaskEntity.java index ea4c62f..ceb37db 100644 --- a/db/src/main/java/db/model/ScheduledTaskEntity.java +++ b/db/src/main/java/db/model/ScheduledTaskEntity.java @@ -6,7 +6,7 @@ import java.sql.Timestamp; import java.util.Objects; @Entity -@Table(name = "scheduled_task", schema = "webcrawler", catalog = "") +@Table(name = "scheduled_task", schema = "bilibili", catalog = "bilibili") public class ScheduledTaskEntity extends AbstractModel { private int id; private int taskId; diff --git a/db/src/main/java/db/model/TaskEntity.java b/db/src/main/java/db/model/TaskEntity.java index 5132119..dcfe493 100644 --- a/db/src/main/java/db/model/TaskEntity.java +++ b/db/src/main/java/db/model/TaskEntity.java @@ -5,7 +5,7 @@ import java.io.Serializable; import java.util.Objects; @Entity -@Table(name = "task", schema = "webcrawler", catalog = "") +@Table(name = "task", schema = "bilibili", catalog = "bilibili") public class TaskEntity extends AbstractModel { private int id; private String api; diff --git a/web/src/main/java/web/controller/AdminController.java b/web/src/main/java/web/controller/AdminController.java index 198b060..780b5ba 100644 --- a/web/src/main/java/web/controller/AdminController.java +++ b/web/src/main/java/web/controller/AdminController.java @@ -1,5 +1,6 @@ package web.controller; +import core.util.DBAction; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; @@ -25,4 +26,8 @@ public class AdminController extends BaseController{ return "test2"; } + @Override + public boolean checkAction(DBAction action) { + return true; + } } diff --git a/web/src/main/java/web/controller/BaseController.java b/web/src/main/java/web/controller/BaseController.java index fd04444..1d0b2b5 100644 --- a/web/src/main/java/web/controller/BaseController.java +++ b/web/src/main/java/web/controller/BaseController.java @@ -5,16 +5,18 @@ import core.util.DBAction; import db.model.AbstractModel; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; +import org.springframework.web.bind.annotation.ModelAttribute; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; import javax.annotation.Resource; +import java.util.List; /** * Created by reborn on 2017/9/14. */ -public class BaseController{ +public abstract class BaseController{ protected Logger log=LogManager.getLogger(); @Resource @@ -22,10 +24,21 @@ public class BaseController{ @ResponseBody @RequestMapping(value = "{action}", produces = "application/json;charset=UTF-8") - public String curd(@PathVariable DBAction action, T model) { - log.info((model.tableNote()==null?model.getClass():model.tableNote()) + "进行" + action.getCh() + "操作请求"); + public T curd(@PathVariable DBAction action,T model) { + log.info(model.tableNote()+ "进行" + action.getCh() + "操作请求"); return baseService.curd(action, model); } + @ResponseBody + @RequestMapping(value = "batch/{action}", produces = "application/json;charset=UTF-8") + public List find(@PathVariable DBAction action,T queryCommand,Integer firstResult,Integer maxResults){ + if(action.equals(DBAction.BR)) { + return baseService.find(queryCommand, firstResult, maxResults); + }else{ + throw new RuntimeException("非法操作:" + action); + } + } + + public abstract boolean checkAction(DBAction action); } diff --git a/web/src/main/java/web/controller/CommentController.java b/web/src/main/java/web/controller/CommentController.java index 8a0a09c..d665849 100644 --- a/web/src/main/java/web/controller/CommentController.java +++ b/web/src/main/java/web/controller/CommentController.java @@ -1,5 +1,6 @@ package web.controller; +import core.util.DBAction; import db.model.DataModel; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; @@ -8,4 +9,8 @@ import org.springframework.web.bind.annotation.RequestMapping; @RequestMapping("/comment") public class CommentController extends BaseController{ + @Override + public boolean checkAction(DBAction action) { + return true; + } } diff --git a/web/src/main/java/web/controller/DataController.java b/web/src/main/java/web/controller/DataController.java index 68f7298..b512f89 100644 --- a/web/src/main/java/web/controller/DataController.java +++ b/web/src/main/java/web/controller/DataController.java @@ -1,5 +1,6 @@ package web.controller; +import core.util.DBAction; import db.model.DataModel; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.PathVariable; @@ -7,6 +8,7 @@ import org.springframework.web.bind.annotation.RequestMapping; import web.service.DataService; import javax.annotation.Resource; +import java.util.EnumSet; @Controller @RequestMapping("/data") @@ -25,4 +27,9 @@ public class DataController extends BaseController { public void stop(){ dataService.stop(); } + + @Override + public boolean checkAction(DBAction action) { + return !EnumSet.of(DBAction.D,DBAction.BD).contains(action); + } } diff --git a/web/src/main/resources/log4j2.xml b/web/src/main/resources/log4j2.xml index cecb423..1e1cc2b 100644 --- a/web/src/main/resources/log4j2.xml +++ b/web/src/main/resources/log4j2.xml @@ -16,10 +16,10 @@ - + - + diff --git a/web/src/test/java/SpringTest.java b/web/src/test/java/SpringTest.java index d9616d5..c88f9de 100644 --- a/web/src/test/java/SpringTest.java +++ b/web/src/test/java/SpringTest.java @@ -14,11 +14,20 @@ import org.hibernate.criterion.Projections; import org.hibernate.service.ServiceRegistry; import org.hibernate.tool.hbm2ddl.SchemaExport; import org.hibernate.tool.schema.TargetType; +import org.junit.Before; +import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit.jupiter.web.SpringJUnitWebConfig; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; +import org.springframework.test.web.servlet.MockMvc; +import org.springframework.test.web.servlet.MvcResult; +import org.springframework.test.web.servlet.ResultActions; +import org.springframework.test.web.servlet.request.MockMvcRequestBuilders; +import org.springframework.test.web.servlet.setup.MockMvcBuilders; import web.config.AppConfig; +import web.config.SpringConfig; +import web.controller.DataController; import javax.annotation.Resource; import java.io.File; @@ -30,13 +39,30 @@ import java.util.List; //让测试运行于Spring环境 @RunWith(SpringJUnit4ClassRunner.class) @SpringJUnitWebConfig -@ContextConfiguration(classes = {AppConfig.class}) +@ContextConfiguration(classes = {AppConfig.class,SpringConfig.class}) public class SpringTest { private Logger log = LogManager.getLogger(); @Resource private BaseDao1 baseDao1; + @Resource + private DataController dataController; + + private MockMvc mockMvc; + + @Before + public void setup(){ + mockMvc = MockMvcBuilders.standaloneSetup(dataController).build(); + } + + @Test + public void test() throws Exception { + ResultActions resultActions = this.mockMvc.perform(MockMvcRequestBuilders.get("/data/R.do").param("cid", "103")); + MvcResult mvcResult = resultActions.andReturn(); + String result = mvcResult.getResponse().getContentAsString(); + log.info("=====客户端获得反馈数据:" + result); + } // @Test public void exportTableSql() { diff --git a/web/src/test/java/Test.java b/web/src/test/java/Test.java new file mode 100644 index 0000000..8a0ea4e --- /dev/null +++ b/web/src/test/java/Test.java @@ -0,0 +1,8 @@ +import db.model.AbstractModel; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +public class Test { + private static Logger log = LogManager.getLogger(); + +}