Sfoglia il codice sorgente

user service的一些配置

skyfffire 2 mesi fa
parent
commit
3610c0d4bb

+ 15 - 3
README.MD

@@ -1,3 +1,12 @@
+# MySQL运行指南
+
+## 创建网络
+> docker network create dalian-nft-network
+## 运行MySQL,注意修改密码
+> docker run -d --name mysql-container --network dalian-nft-network -p 3306:3306 -v G:\DockerMySQL\Data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -e MYSQL_ROOT_HOST=% mysql/mysql-server:8.0
+## 附上:已存在容器绑定网络
+> docker network connect dalian-nft-network mysql-container
+
 # 运行指南之远程部署
 
 ## 步骤 1:在 IDEA 中配置远程 Docker 连接
@@ -31,7 +40,7 @@
 > 点击 Run options 右边的文件夹图标,打开 Modify options。<br>
 > 勾选 Environment variables。<br>
 > 在 Environment variables 输入框中,点击右侧的图标,添加服务器的数据库配置:<br>
-> DB_URL = jdbc:mysql://your_server_db_host:3306/dalian-nft-api<br>
+> DB_URL = jdbc:mysql://dalian-nft-network:3306/dalian-nft-api<br>
 > DB_USER = root<br>
 > DB_PASSWORD = your_server_db_password<br>
 > DEV_MODE = 1 或 0<br>
@@ -39,13 +48,16 @@
 > 关键:配置端口映射<br>
 > 勾选 Bind ports。<br>
 > 添加一个映射,将服务器的端口(Host port)映射到容器的端口(Container port),例如 8080:8080。<br>
+> 
+> Modify - Run Options
+> 在这个新的输入框中输入:--network dalian-nft-network
 
 
 
 服务器上一直pull不下来mysql/mysql-server:8.0
 索性使用mysql:8.0
 或者先pull再构建也可以,国内源是这样的,从2023年之后不稳定
-
+虽然宿主机的端口是33061,但是使用容器内部网络访问时应该写3306
 docker run -d --name mysql-container -p 33061:3306 -v /app/mysql:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=xxxxxx -e MYSQL_ROOT_HOST=% mysql:8.0
 
-## 使用IDEA并在本地生成代码时,可以在运行里配置环境变量
+## 使用IDEA并在本地生成代码时,可以在运行里配置数据库相关环境变量

+ 9 - 0
src/main/java/common/all.sqlt

@@ -0,0 +1,9 @@
+#判断某实体是否存在
+#sql("hasRecord")
+select exists(
+   select 1 from #(_PARA_ARRAY_[0])
+   where chainId=#para(1) and hash=#para(2)
+   limit 1
+)
+#end
+

+ 24 - 0
src/main/java/common/interceptor/ExceptionInterceptor.java

@@ -0,0 +1,24 @@
+package common.interceptor;
+
+import com.alibaba.fastjson.JSONObject;
+import com.jfinal.aop.Interceptor;
+import com.jfinal.aop.Invocation;
+import com.jfinal.core.Controller;
+import com.jfinal.json.FastJson;
+import common.utils.http.MyRet;
+
+public class ExceptionInterceptor implements Interceptor {
+	@Override
+	public void intercept(Invocation inv) {
+		try {
+			inv.invoke();
+		} catch (Exception e) {
+			e.printStackTrace();
+
+			Controller c = inv.getController();
+			String requestJsonStr = (String) c.getRequest().getAttribute("data");
+			JSONObject requestJson = FastJson.getJson().parse(requestJsonStr, JSONObject.class);
+			c.renderJson(MyRet.fail("Exception: " + e.getMessage()).setData(requestJson));
+		}
+	}
+}

+ 60 - 0
src/main/java/common/interceptor/empty/EmptyInterceptor.java

@@ -0,0 +1,60 @@
+package common.interceptor.empty;
+
+import com.alibaba.fastjson.JSONObject;
+import com.jfinal.aop.Interceptor;
+import com.jfinal.aop.Invocation;
+import com.jfinal.core.Controller;
+import com.jfinal.kit.StrKit;
+import common.utils.http.MyController;
+import common.utils.http.MyRet;
+
+public class EmptyInterceptor implements Interceptor {
+	@Override
+	public void intercept(Invocation inv) {
+		EmptyInterface annotation = inv.getMethod().getAnnotation(EmptyInterface.class);
+		
+		if (annotation == null) {
+			inv.invoke();
+		} else {
+			String[] keyArray = annotation.keyArray();
+			Controller controller = inv.getController();
+			JSONObject paramsModel = MyController.getJsonModelByRequestAndType(controller.getRequest(), JSONObject.class);
+			
+			if (isNotEmpty(paramsModel, keyArray)) {
+				inv.invoke();
+			} else {
+				String errorMsgBuilder = "params must include: " +
+						EmptyInterceptor.formatParams(keyArray) +
+						", response 'data' is your params.";
+				
+				controller.renderJson(MyRet.fail(errorMsgBuilder).setData(paramsModel));
+			}
+		}
+	}
+	
+	private boolean isNotEmpty(JSONObject paramsModel, String[] keyArray) {
+		for (String key : keyArray) {
+			if (StrKit.isBlank(paramsModel.getString(key))) {
+				return false;
+			}
+		}
+		
+		return true;
+	} 
+	
+	public static String formatParams(String[] keyArray) {
+		StringBuilder builder = new StringBuilder();
+		
+		builder.append('[');
+		for (int i = 0; i < keyArray.length; i++) {
+			String key = keyArray[i];
+			
+			builder.append(key);
+			
+			if (i < keyArray.length - 1) builder.append(',');
+		}
+		builder.append(']');
+		
+		return builder.toString();
+	}
+}

+ 10 - 0
src/main/java/common/interceptor/empty/EmptyInterface.java

@@ -0,0 +1,10 @@
+package common.interceptor.empty;
+
+import java.lang.annotation.*;
+
+@Inherited
+@Retention(RetentionPolicy.RUNTIME)
+@Target({ElementType.TYPE, ElementType.METHOD})
+public @interface EmptyInterface {
+	String[] keyArray();
+}

+ 15 - 3
src/main/java/common/jfinal/AppConfig.java

@@ -5,7 +5,12 @@ import com.jfinal.plugin.activerecord.ActiveRecordPlugin;
 import com.jfinal.plugin.druid.DruidPlugin;
 import com.jfinal.server.undertow.UndertowServer;
 import com.jfinal.template.Engine;
+import common.interceptor.AuthInterceptor;
+import common.interceptor.ExceptionInterceptor;
+import common.interceptor.empty.EmptyInterceptor;
+import common.model._MappingKit;
 import modules.hello.HelloController;
+import modules.user.UserController;
 
 public class AppConfig extends JFinalConfig {
     static String DB_URL = System.getenv("DB_URL");
@@ -30,6 +35,8 @@ public class AppConfig extends JFinalConfig {
     @Override
     public void configRoute(Routes routes) {
         routes.add("/", HelloController.class);
+        
+        routes.add("/user", UserController.class);
     }
 
     @Override
@@ -46,15 +53,20 @@ public class AppConfig extends JFinalConfig {
         // 是否打印SQL
         arp.setShowSql(DEV_MODE.equals("1"));
         // 加载sql模板
-//        arp.addSqlTemplate("/common/all.sqlt");
+        arp.addSqlTemplate("/common/all.sqlt");
         // 映射实体
-//        _MappingKit.mapping(arp);
+        _MappingKit.mapping(arp);
         plugins.add(arp);
     }
 
     @Override
     public void configInterceptor(Interceptors interceptors) {
-
+        // 配置全局异常拦截器
+        interceptors.addGlobalActionInterceptor(new ExceptionInterceptor());
+        // 配置全局参数拦截校验器
+        interceptors.addGlobalActionInterceptor(new EmptyInterceptor());
+        // 配置全局权限校验拦截器
+        interceptors.addGlobalActionInterceptor(new AuthInterceptor());
     }
 
     @Override

+ 13 - 0
src/main/java/modules/user/UserController.java

@@ -0,0 +1,13 @@
+package modules.user;
+
+import com.jfinal.aop.Inject;
+import common.utils.http.MyController;
+
+public class UserController extends MyController {
+    @Inject
+    private UserService service;
+
+    public void hello() {
+        renderText(service.hello());
+    }
+}

+ 7 - 0
src/main/java/modules/user/UserService.java

@@ -0,0 +1,7 @@
+package modules.user;
+
+public class UserService {
+    public String hello() {
+        return "Hello User";
+    }
+}

+ 8 - 0
src/test/rest/http-client.env.json

@@ -0,0 +1,8 @@
+{
+  "dev": {
+    "baseUrl": "http://localhost:8888"
+  },
+  "pro": {
+    "baseUrl": "http://117.72.208.239:8888"
+  }
+}