diff --git a/hsweb-authorization/hsweb-authorization-api/src/main/java/org/hswebframework/web/authorization/Authentication.java b/hsweb-authorization/hsweb-authorization-api/src/main/java/org/hswebframework/web/authorization/Authentication.java
index fbe205c7f..28f5d33e1 100644
--- a/hsweb-authorization/hsweb-authorization-api/src/main/java/org/hswebframework/web/authorization/Authentication.java
+++ b/hsweb-authorization/hsweb-authorization-api/src/main/java/org/hswebframework/web/authorization/Authentication.java
@@ -43,7 +43,7 @@ public interface Authentication extends Serializable {
* //如果权限信息不存在将抛出{@link NoSuchElementException}建议使用下面的方式获取
* Authentication auth=Authentication.current().orElse(null);
* //或者
- * Authentication auth=Authentication.current().orElseThrow(AuthorizeException::new);
+ * Authentication auth=Authentication.current().orElseThrow(UnAuthorizedException::new);
*
*
* @return 返回Optional对象进行操作
diff --git a/hsweb-authorization/hsweb-authorization-cloud/pom.xml b/hsweb-authorization/hsweb-authorization-cloud/pom.xml
new file mode 100644
index 000000000..dd4580bc8
--- /dev/null
+++ b/hsweb-authorization/hsweb-authorization-cloud/pom.xml
@@ -0,0 +1,32 @@
+
+
+
+ hsweb-authorization
+ org.hswebframework.web
+ 3.0-SNAPSHOT
+
+ 4.0.0
+
+ hsweb-authorization-cloud
+
+
+
+ org.hswebframework.web
+ hsweb-authorization-api
+ ${project.version}
+
+
+ org.springframework.cloud
+ spring-cloud-netflix-core
+ 1.3.1.RELEASE
+ true
+
+
+ org.springframework
+ spring-web
+ true
+
+
+
\ No newline at end of file
diff --git a/hsweb-authorization/hsweb-authorization-cloud/src/main/java/org/hswebframework/web/authorization/cloud/feign/FeignUserTokenManager.java b/hsweb-authorization/hsweb-authorization-cloud/src/main/java/org/hswebframework/web/authorization/cloud/feign/FeignUserTokenManager.java
new file mode 100644
index 000000000..7a66c0a10
--- /dev/null
+++ b/hsweb-authorization/hsweb-authorization-cloud/src/main/java/org/hswebframework/web/authorization/cloud/feign/FeignUserTokenManager.java
@@ -0,0 +1,69 @@
+package org.hswebframework.web.authorization.cloud.feign;
+
+import org.hswebframework.web.authorization.token.TokenState;
+import org.hswebframework.web.authorization.token.UserToken;
+import org.hswebframework.web.authorization.token.UserTokenManager;
+import org.springframework.cloud.netflix.feign.FeignClient;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+/**
+ * @author zhouhao
+ * @since
+ */
+@FeignClient(name = "${hsweb.cloud.user-center.name:user-center}")
+public interface FeignUserTokenManager extends UserTokenManager {
+
+ @Override
+ @GetMapping("/user-token/token/{token}")
+ UserToken getByToken(@PathVariable String token);
+
+ @Override
+ @GetMapping("/user-token/user/{userId}")
+ List getByUserId(@PathVariable String userId);
+
+ @Override
+ @GetMapping("/user-token/user/{userId}/logged")
+ boolean userIsLoggedIn(@PathVariable String userId);
+
+ @Override
+ @GetMapping("/user-token/token/{token}/logged")
+ boolean tokenIsLoggedIn(@PathVariable String token);
+
+ @Override
+ @GetMapping("/user-token/user/total")
+ long totalUser();
+
+ @Override
+ @GetMapping("/user-token/token/total")
+ long totalToken();
+
+ @Override
+ @GetMapping("/user-token}")
+ List allLoggedUser();
+
+ @Override
+ @DeleteMapping("/user-token/user/{userId}")
+ void signOutByUserId(@PathVariable String userId);
+
+ @Override
+ @DeleteMapping("/user-token/token/{token}")
+ void signOutByToken(@PathVariable String token);
+
+ @Override
+ @PutMapping("/user-token/user/{userId}/{state}")
+ void changeUserState(@PathVariable String userId, @PathVariable TokenState state);
+
+ @Override
+ @PutMapping("/user-token/token/{token}/{state}")
+ void changeTokenState(String token, TokenState state);
+
+ @Override
+ @PostMapping("/user-token/{token}/{userId}/{maxInactiveInterval}")
+ UserToken signIn(@PathVariable String token, @PathVariable String userId, @PathVariable long maxInactiveInterval);
+
+ @Override
+ @GetMapping("/user-token/{token}/touch")
+ void touch(String token);
+}
diff --git a/hsweb-authorization/hsweb-authorization-cloud/src/main/java/org/hswebframework/web/authorization/cloud/redis/RedisUserTokenManager.java b/hsweb-authorization/hsweb-authorization-cloud/src/main/java/org/hswebframework/web/authorization/cloud/redis/RedisUserTokenManager.java
new file mode 100644
index 000000000..c8b1e200c
--- /dev/null
+++ b/hsweb-authorization/hsweb-authorization-cloud/src/main/java/org/hswebframework/web/authorization/cloud/redis/RedisUserTokenManager.java
@@ -0,0 +1,12 @@
+package org.hswebframework.web.authorization.cloud.redis;
+
+import org.hswebframework.web.authorization.token.UserTokenManager;
+
+/**
+ * TODO 完成注释
+ *
+ * @author zhouhao
+ * @since
+ */
+public abstract class RedisUserTokenManager implements UserTokenManager {
+}
diff --git a/hsweb-authorization/pom.xml b/hsweb-authorization/pom.xml
index 76bc23df4..dbd3963d3 100644
--- a/hsweb-authorization/pom.xml
+++ b/hsweb-authorization/pom.xml
@@ -16,6 +16,7 @@
hsweb-authorization-oauth2
hsweb-authorization-basic
hsweb-authorization-jwt
+ hsweb-authorization-cloud
diff --git a/hsweb-examples/pom.xml b/hsweb-examples/pom.xml
index ce489609e..8a2932259 100644
--- a/hsweb-examples/pom.xml
+++ b/hsweb-examples/pom.xml
@@ -33,6 +33,7 @@
hsweb-examples-oauth2
hsweb-examples-custom-entity
hsweb-examples-workflow
+ hsweb-examples-cloud
diff --git a/hsweb-system/hsweb-system-database-manager/hsweb-system-database-manager-simple/src/main/java/org/hswebframework/web/datasource/manager/simple/DefaultLocalTransactionExecutor.java b/hsweb-system/hsweb-system-database-manager/hsweb-system-database-manager-simple/src/main/java/org/hswebframework/web/datasource/manager/simple/DefaultLocalTransactionExecutor.java
index d8c2570c7..43264800c 100644
--- a/hsweb-system/hsweb-system-database-manager/hsweb-system-database-manager-simple/src/main/java/org/hswebframework/web/datasource/manager/simple/DefaultLocalTransactionExecutor.java
+++ b/hsweb-system/hsweb-system-database-manager/hsweb-system-database-manager-simple/src/main/java/org/hswebframework/web/datasource/manager/simple/DefaultLocalTransactionExecutor.java
@@ -23,7 +23,7 @@ import java.util.function.Consumer;
import java.util.stream.Collectors;
/**
- * TODO 完成注释
+ * 默认的事务执行器
*
* @author zhouhao
*/
@@ -51,6 +51,7 @@ public class DefaultLocalTransactionExecutor implements TransactionExecutor {
private volatile boolean running = false;
+ /* 线程循环开始等待sql进入的时候执行一次,sql进入的时候执行一次,然后唤醒线程开始执行sql */
private CyclicBarrier waitToReady = new CyclicBarrier(2);
private CountDownLatch waitClose = new CountDownLatch(1);
@@ -83,8 +84,10 @@ public class DefaultLocalTransactionExecutor implements TransactionExecutor {
try {
logger.debug("wait transaction {} close", transactionId);
if (!running) {
+ //先唤醒执行,继续执行任务
waitToReady.await();
}
+ //等待执行结束
waitClose.await();
} catch (Exception e) {
throw new RuntimeException(e);
@@ -136,18 +139,20 @@ public class DefaultLocalTransactionExecutor implements TransactionExecutor {
if (datasourceId != null) {
DataSourceHolder.switcher().use(datasourceId);
}
+ //开启事务
transactionStatus = transactionTemplate.getTransactionManager().getTransaction(transactionTemplate);
if (sqlRequestExecutor == null) {
buildDefaultSqlRequestExecutor();
}
while (!shutdown) {
logger.debug("wait sql execute request {}", transactionId);
- waitToReady.await();
- waitToReady.reset();
+ waitToReady.await();//等待有新的sql进来
+ waitToReady.reset();//重置,下一次循环继续等待
+ //执行sql
doExecute();
}
} catch (Exception e) {
- rollback();
+ rollback();//回滚
logger.error("execute sql error {}", transactionId, e);
} finally {
try {
@@ -158,6 +163,7 @@ public class DefaultLocalTransactionExecutor implements TransactionExecutor {
logger.debug("Roll Back transaction {}", transactionId);
transactionTemplate.getTransactionManager().rollback(transactionStatus);
}
+ //结束事务
waitClose.countDown();
} finally {
DataSourceHolder.switcher().reset();
@@ -171,15 +177,18 @@ public class DefaultLocalTransactionExecutor implements TransactionExecutor {
running = true;
logger.debug("start execute sql {}", transactionId);
try {
- List requests = execution.request.getSql().stream()
+ List requests = execution.request.getSql()
+ .stream()
.map(sqlInfo -> {
try {
+ //执行sql
return sqlRequestExecutor.apply(sqlExecutor, sqlInfo);
} catch (SQLException e) {
throw new RuntimeException(e);
}
})
.collect(Collectors.toList());
+ //通过回调返回执行结果
execution.callback.accept(requests);
} catch (Exception e) {
rollback();
@@ -194,9 +203,11 @@ public class DefaultLocalTransactionExecutor implements TransactionExecutor {
if (shutdown) {
throw new UnsupportedOperationException("transaction is close");
}
+ //执行倒计时,执行sql是异步的,通过此方式等待sql执行完毕
CountDownLatch countDownLatch = new CountDownLatch(1);
List results = new ArrayList<>();
+ //异常信息
Exception[] exceptions = new Exception[1];
Execution execution = new Execution();
@@ -213,9 +224,12 @@ public class DefaultLocalTransactionExecutor implements TransactionExecutor {
logger.debug("submit sql execute job {}", transactionId);
executionQueue.add(execution);
try {
+ //当前没有在执行sql,说明现在正在等待新的sql进入,唤醒之
if (!running)
waitToReady.await();
+ //等待sql执行完毕
countDownLatch.await();
+ //判断是否有异常
Exception exception;
if ((exception = exceptions[0]) != null) {
if (exception instanceof RuntimeException) {
diff --git a/hsweb-system/hsweb-system-database-manager/hsweb-system-database-manager-simple/src/main/java/org/hswebframework/web/datasource/manager/simple/SimpleDatabaseManagerService.java b/hsweb-system/hsweb-system-database-manager/hsweb-system-database-manager-simple/src/main/java/org/hswebframework/web/datasource/manager/simple/SimpleDatabaseManagerService.java
index f5e424be9..dad999463 100644
--- a/hsweb-system/hsweb-system-database-manager/hsweb-system-database-manager-simple/src/main/java/org/hswebframework/web/datasource/manager/simple/SimpleDatabaseManagerService.java
+++ b/hsweb-system/hsweb-system-database-manager/hsweb-system-database-manager-simple/src/main/java/org/hswebframework/web/datasource/manager/simple/SimpleDatabaseManagerService.java
@@ -95,6 +95,7 @@ public class SimpleDatabaseManagerService implements DatabaseManagerService {
@Override
public Map> getMetas(String datasourceId) {
+
return null;
}
}
diff --git a/hsweb-system/hsweb-system-database-manager/hsweb-system-database-manager-simple/src/main/java/org/hswebframework/web/datasource/manager/simple/TransactionExecutor.java b/hsweb-system/hsweb-system-database-manager/hsweb-system-database-manager-simple/src/main/java/org/hswebframework/web/datasource/manager/simple/TransactionExecutor.java
index 815bcabc0..f34330509 100644
--- a/hsweb-system/hsweb-system-database-manager/hsweb-system-database-manager-simple/src/main/java/org/hswebframework/web/datasource/manager/simple/TransactionExecutor.java
+++ b/hsweb-system/hsweb-system-database-manager/hsweb-system-database-manager-simple/src/main/java/org/hswebframework/web/datasource/manager/simple/TransactionExecutor.java
@@ -6,8 +6,6 @@ import org.hswebframework.web.database.manager.SqlExecuteResult;
import java.util.List;
/**
- * TODO 完成注释
- *
* @author zhouhao
*/
public interface TransactionExecutor extends Runnable {
diff --git a/pom.xml b/pom.xml
index 9763bc10d..c88333197 100644
--- a/pom.xml
+++ b/pom.xml
@@ -43,8 +43,7 @@
pom
-
- ${project.groupId}:${project.artifactId}
+ hsweb framework
http://www.hswebframework.org
hsweb (haʊs wɛb) 是一个用于快速搭建企业后台管理系统的基础项目,集成一揽子便捷功能如:通用增删改查,在线代码生成,权限管理(可控制到列和行),动态多数据源分布式事务,动态脚本,动态定时任务,在线数据库维护等等
@@ -160,6 +159,18 @@
+
+
+ sonatype-releases
+ sonatype repository
+ https://oss.sonatype.org/service/local/staging/deploy/maven2
+
+
+ sonatype-snapshots
+ Nexus Snapshot Repository
+ https://oss.sonatype.org/content/repositories/snapshots
+
+
@@ -190,36 +201,36 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -375,29 +386,17 @@
http://maven.aliyun.com/nexus/content/groups/public/
-
-
-
-
-
-
-
-
-
-
-
-
- sonatype-releases
- sonatype repository
- https://oss.sonatype.org/service/local/staging/deploy/maven2
+ releases
+ Nexus Release Repository
+ http://nexus.hsweb.me/content/repositories/releases/
- sonatype-snapshots
+ snapshots
Nexus Snapshot Repository
- https://oss.sonatype.org/content/repositories/snapshots
+ http://nexus.hsweb.me/content/repositories/snapshots/
@@ -411,9 +410,9 @@
- aliyun-nexus
- aliyun
- http://maven.aliyun.com/nexus/content/groups/public/
+ aliyun-nexus
+ aliyun
+ http://maven.aliyun.com/nexus/content/groups/public/
\ No newline at end of file