Bladeren bron

使用注解方式进行锁

周浩 9 jaren geleden
bovenliggende
commit
3003e4cafc

+ 84 - 129
hsweb-web-service-impl-common/src/main/java/org/hsweb/web/service/impl/form/DynamicFormServiceImpl.java

@@ -1,15 +1,14 @@
 package org.hsweb.web.service.impl.form;
 
 import com.alibaba.fastjson.JSON;
-import org.hsweb.concurrent.lock.LockFactory;
 import org.hsweb.concurrent.lock.annotation.LockName;
 import org.hsweb.concurrent.lock.annotation.ReadLock;
 import org.hsweb.concurrent.lock.annotation.WriteLock;
-import org.hsweb.web.core.Install;
 import org.hsweb.web.bean.common.*;
 import org.hsweb.web.bean.po.GenericPo;
 import org.hsweb.web.bean.po.form.Form;
 import org.hsweb.web.bean.po.history.History;
+import org.hsweb.web.core.Install;
 import org.hsweb.web.service.form.DynamicFormService;
 import org.hsweb.web.service.form.FormService;
 import org.hsweb.web.service.history.HistoryService;
@@ -27,8 +26,6 @@ import java.util.LinkedHashSet;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
-import java.util.concurrent.locks.Lock;
-import java.util.concurrent.locks.ReadWriteLock;
 
 /**
  * Created by zhouhao on 16-4-14.
@@ -37,10 +34,6 @@ import java.util.concurrent.locks.ReadWriteLock;
 public class DynamicFormServiceImpl implements DynamicFormService {
 
     private final Logger logger = LoggerFactory.getLogger(this.getClass());
-    @Autowired
-    protected LockFactory lockFactory;
-
-    protected Lock writeLock, readLock;
 
     @Autowired(required = false)
     protected FormParser formParser = new DefaultFormParser();
@@ -77,9 +70,6 @@ public class DynamicFormServiceImpl implements DynamicFormService {
 
     @PostConstruct
     public void init() {
-        ReadWriteLock readWriteLock = lockFactory.createReadWriteLock("dynamicForm.lock");
-        writeLock = readWriteLock.writeLock();
-        readLock = readWriteLock.readLock();
         QueryParam param = new QueryParam();
         param.where("using", 1);
         try {
@@ -102,39 +92,30 @@ public class DynamicFormServiceImpl implements DynamicFormService {
 
     @Override
     @WriteLock
-    @LockName(value = "'form.lock.'+#form.name",expression = true)
+    @LockName(value = "'form.lock.'+#form.name", isExpression = true)
     public void deploy(Form form) throws Exception {
-        try {
-            writeLock.lock();
-            TableMetaData metaData = formParser.parse(form);
-            initDefaultField(metaData);
-            History history = historyService.selectLastHistoryByType("form.deploy." + form.getName());
-            //首次部署
-            if (history == null) {
-                dataBase.createTable(metaData);
-            } else {
-                Form lastDeploy = JSON.parseObject(history.getChange_after(), Form.class);
-                TableMetaData lastDeployMetaData = formParser.parse(lastDeploy);
-                initDefaultField(lastDeployMetaData);
-                //向上发布
-                dataBase.updateTable(lastDeployMetaData);//先放入旧的结构
-                //更新结构
-                dataBase.alterTable(metaData);
-            }
-        } finally {
-            writeLock.unlock();
+        TableMetaData metaData = formParser.parse(form);
+        initDefaultField(metaData);
+        History history = historyService.selectLastHistoryByType("form.deploy." + form.getName());
+        //首次部署
+        if (history == null) {
+            dataBase.createTable(metaData);
+        } else {
+            Form lastDeploy = JSON.parseObject(history.getChange_after(), Form.class);
+            TableMetaData lastDeployMetaData = formParser.parse(lastDeploy);
+            initDefaultField(lastDeployMetaData);
+            //向上发布
+            dataBase.updateTable(lastDeployMetaData);//先放入旧的结构
+            //更新结构
+            dataBase.alterTable(metaData);
         }
     }
 
     @Override
     @WriteLock
+    @LockName(value = "'form.lock.'+#form.name", isExpression = true)
     public void unDeploy(Form form) throws Exception {
-        try {
-            writeLock.lock();
-            dataBase.removeTable(form.getName());
-        } finally {
-            writeLock.unlock();
-        }
+        dataBase.removeTable(form.getName());
     }
 
     public Table getTableByName(String name) throws Exception {
@@ -147,138 +128,112 @@ public class DynamicFormServiceImpl implements DynamicFormService {
 
     @Override
     @ReadLock
+    @LockName(value = "'form.lock.'+#name", isExpression = true)
     public <T> PagerResult<T> selectPager(String name, QueryParam param) throws Exception {
         PagerResult<T> result = new PagerResult<>();
-        try {
-            readLock.lock();
-            Table table = getTableByName(name);
-            Query query = table.createQuery();
-            QueryParamProxy proxy = QueryParamProxy.build(param);
-            int total = query.total(proxy);
-            result.setTotal(total);
-            param.rePaging(total);
-            proxy = QueryParamProxy.build(param);
-            result.setData(query.list(proxy));
-        } finally {
-            readLock.unlock();
-        }
+        Table table = getTableByName(name);
+        Query query = table.createQuery();
+        QueryParamProxy proxy = QueryParamProxy.build(param);
+        int total = query.total(proxy);
+        result.setTotal(total);
+        param.rePaging(total);
+        proxy = QueryParamProxy.build(param);
+        result.setData(query.list(proxy));
         return result;
     }
 
     @Override
+    @ReadLock
+    @LockName(value = "'form.lock.'+#name", isExpression = true)
     public <T> List<T> select(String name, QueryParam param) throws Exception {
-        try {
-            readLock.lock();
-            Table table = getTableByName(name);
-            Query query = table.createQuery();
-            param.setPaging(false);
-            QueryParamProxy proxy = QueryParamProxy.build(param);
-            return query.list(proxy);
-        } finally {
-            readLock.unlock();
-        }
+        Table table = getTableByName(name);
+        Query query = table.createQuery();
+        param.setPaging(false);
+        QueryParamProxy proxy = QueryParamProxy.build(param);
+        return query.list(proxy);
     }
 
     @Override
+    @ReadLock
+    @LockName(value = "'form.lock.'+#name", isExpression = true)
     public int total(String name, QueryParam param) throws Exception {
-        try {
-            readLock.lock();
-            Table table = getTableByName(name);
-            Query query = table.createQuery();
-            param.setPaging(false);
-            QueryParamProxy proxy = QueryParamProxy.build(param);
-            return query.total(proxy);
-        } finally {
-            readLock.unlock();
-        }
+        Table table = getTableByName(name);
+        Query query = table.createQuery();
+        param.setPaging(false);
+        QueryParamProxy proxy = QueryParamProxy.build(param);
+        return query.total(proxy);
     }
 
     @Override
+    @ReadLock
+    @LockName(value = "'form.lock.'+#name", isExpression = true)
     public String insert(String name, InsertParam<Map<String, Object>> param) throws Exception {
-        try {
-            readLock.lock();
-            Table table = getTableByName(name);
-            Insert insert = table.createInsert();
-            InsertParamProxy paramProxy = InsertParamProxy.build(param);
-            String primaryKeyName = getPrimaryKeyName(name);
-            String pk = GenericPo.createUID();
-            paramProxy.value(primaryKeyName, pk);
-            insert.insert(paramProxy);
-            return pk;
-        } finally {
-            readLock.unlock();
-        }
+        Table table = getTableByName(name);
+        Insert insert = table.createInsert();
+        InsertParamProxy paramProxy = InsertParamProxy.build(param);
+        String primaryKeyName = getPrimaryKeyName(name);
+        String pk = GenericPo.createUID();
+        paramProxy.value(primaryKeyName, pk);
+        insert.insert(paramProxy);
+        return pk;
     }
 
     @Override
+    @ReadLock
+    @LockName(value = "'form.lock.'+#name", isExpression = true)
     public boolean deleteByPk(String name, String pk) throws Exception {
-        try {
-            readLock.lock();
-            String primaryKeyName = getPrimaryKeyName(name);
-            Table table = getTableByName(name);
-            Delete delete = table.createDelete();
-            return delete.delete(DeleteParamProxy.build(new DeleteParam()).where(primaryKeyName, pk)) == 1;
-        } finally {
-            readLock.unlock();
-        }
+        String primaryKeyName = getPrimaryKeyName(name);
+        Table table = getTableByName(name);
+        Delete delete = table.createDelete();
+        return delete.delete(DeleteParamProxy.build(new DeleteParam()).where(primaryKeyName, pk)) == 1;
     }
 
     @Override
+    @ReadLock
+    @LockName(value = "'form.lock.'+#name", isExpression = true)
     public int delete(String name, DeleteParam where) throws Exception {
-        try {
-            readLock.lock();
-            Table table = getTableByName(name);
-            Delete delete = table.createDelete();
-            return delete.delete(DeleteParamProxy.build(where));
-        } finally {
-            readLock.unlock();
-        }
+        Table table = getTableByName(name);
+        Delete delete = table.createDelete();
+        return delete.delete(DeleteParamProxy.build(where));
     }
 
     @Override
+    @ReadLock
+    @LockName(value = "'form.lock.'+#name", isExpression = true)
     public int updateByPk(String name, String pk, UpdateParam<Map<String, Object>> param) throws Exception {
-        try {
-            readLock.lock();
-            Table table = getTableByName(name);
-            Update update = table.createUpdate();
-            UpdateParamProxy paramProxy = UpdateParamProxy.build(param);
-            paramProxy.where(getPrimaryKeyName(name), pk);
-            return update.update(paramProxy);
-        } finally {
-            readLock.unlock();
-        }
+        Table table = getTableByName(name);
+        Update update = table.createUpdate();
+        UpdateParamProxy paramProxy = UpdateParamProxy.build(param);
+        paramProxy.where(getPrimaryKeyName(name), pk);
+        return update.update(paramProxy);
     }
 
     @Override
+    @ReadLock
+    @LockName(value = "'form.lock.'+#name", isExpression = true)
     public int update(String name, UpdateParam<Map<String, Object>> param) throws Exception {
-        try {
-            readLock.lock();
-            Table table = getTableByName(name);
-            Update update = table.createUpdate();
-            UpdateParamProxy paramProxy = UpdateParamProxy.build(param);
-            return update.update(paramProxy);
-        } finally {
-            readLock.unlock();
-        }
+        Table table = getTableByName(name);
+        Update update = table.createUpdate();
+        UpdateParamProxy paramProxy = UpdateParamProxy.build(param);
+        return update.update(paramProxy);
     }
 
+    @ReadLock
+    @LockName(value = "'form.lock.'+#tableName", isExpression = true)
     public String getPrimaryKeyName(String tableName) throws Exception {
         Table table = getTableByName(tableName);
         return table.getMetaData().attrWrapper("primaryKey", "u_id").toString();
     }
 
     @Override
+    @ReadLock
+    @LockName(value = "'form.lock.'+#tableName", isExpression = true)
     public <T> T selectByPk(String name, Object pk) throws Exception {
-        try {
-            readLock.lock();
-            Table table = getTableByName(name);
-            Query query = table.createQuery();
-            QueryParamProxy proxy = new QueryParamProxy();
-            proxy.where(getPrimaryKeyName(name), pk);
-            return query.single(proxy);
-        } finally {
-            readLock.unlock();
-        }
+        Table table = getTableByName(name);
+        Query query = table.createQuery();
+        QueryParamProxy proxy = new QueryParamProxy();
+        proxy.where(getPrimaryKeyName(name), pk);
+        return query.single(proxy);
     }
 
     public static class QueryParamProxy extends org.webbuilder.sql.param.query.QueryParam {