From 7505fe3de7c612cca9614239d4576d46e417c2b8 Mon Sep 17 00:00:00 2001 From: litongjava Date: Tue, 19 Dec 2023 23:09:50 -1000 Subject: [PATCH 01/39] add tio-server --- frameworks/Java/tio-server/.gitignore | 1 + frameworks/Java/tio-server/README.md | 21 +++ .../Java/tio-server/benchmark_config.json | 24 +++ frameworks/Java/tio-server/config.toml | 15 ++ frameworks/Java/tio-server/pom.xml | 167 ++++++++++++++++++ .../litongjava/tio/http/server/MainApp.java | 40 +++++ .../server/controller/IndexController.java | 40 +++++ .../tio/http/server/model/Message.java | 12 ++ .../tio-server/src/main/resources/logback.xml | 52 ++++++ ...0\346\234\254\346\226\207\346\241\243.jnt" | Bin 0 -> 4544 bytes .../Java/tio-server/tio-server.dockerfile | 13 ++ 11 files changed, 385 insertions(+) create mode 100644 frameworks/Java/tio-server/.gitignore create mode 100644 frameworks/Java/tio-server/README.md create mode 100644 frameworks/Java/tio-server/benchmark_config.json create mode 100644 frameworks/Java/tio-server/config.toml create mode 100644 frameworks/Java/tio-server/pom.xml create mode 100644 frameworks/Java/tio-server/src/main/java/com/litongjava/tio/http/server/MainApp.java create mode 100644 frameworks/Java/tio-server/src/main/java/com/litongjava/tio/http/server/controller/IndexController.java create mode 100644 frameworks/Java/tio-server/src/main/java/com/litongjava/tio/http/server/model/Message.java create mode 100644 frameworks/Java/tio-server/src/main/resources/logback.xml create mode 100644 "frameworks/Java/tio-server/src/test/java/\346\226\260\345\273\272\346\227\245\350\256\260\346\234\254\346\226\207\346\241\243.jnt" create mode 100644 frameworks/Java/tio-server/tio-server.dockerfile diff --git a/frameworks/Java/tio-server/.gitignore b/frameworks/Java/tio-server/.gitignore new file mode 100644 index 00000000000..b83d22266ac --- /dev/null +++ b/frameworks/Java/tio-server/.gitignore @@ -0,0 +1 @@ +/target/ diff --git a/frameworks/Java/tio-server/README.md b/frameworks/Java/tio-server/README.md new file mode 100644 index 00000000000..5582229f2d8 --- /dev/null +++ b/frameworks/Java/tio-server/README.md @@ -0,0 +1,21 @@ +# t-io Benchmarking Test + +This is the tio-server portion of a [benchmarking test suite](../) comparing a variety of web development platforms. + +## Controller + +These implementations use the tio-server's controller. +* [Plaintext test source](src/main/java/com/litongjava/tio/http/server/controller/IndexController.java) +* [JSON test source](src/main/java/com/litongjava/tio/http/server/controller/IndexController.java) + + +## Versions +3.5.5.v20191010-RELEASE (https://gitee.com/litongjava/t-io) + +## Test URLs + +All implementations use the same URLs. + + * Plaintext - `http://localhost:8080/plaintext` + * JSON - `http://localhost:8080/json` + diff --git a/frameworks/Java/tio-server/benchmark_config.json b/frameworks/Java/tio-server/benchmark_config.json new file mode 100644 index 00000000000..6e94e367d12 --- /dev/null +++ b/frameworks/Java/tio-server/benchmark_config.json @@ -0,0 +1,24 @@ +{ + "framework": "tio-server", + "tests": [{ + "default": { + "json_url": "/json", + "plaintext_url": "/plaintext", + "port": 8080, + "approach": "Realistic", + "classification": "Micro", + "database": "None", + "framework": "tio-server", + "language": "Java", + "flavor": "None", + "orm": "Raw", + "platform": "t-io", + "webserver": "None", + "os": "Linux", + "database_os": "Linux", + "display_name": "tio-server", + "notes": "tio-server", + "versus": "t-io" + } + }] +} diff --git a/frameworks/Java/tio-server/config.toml b/frameworks/Java/tio-server/config.toml new file mode 100644 index 00000000000..31b198ee34b --- /dev/null +++ b/frameworks/Java/tio-server/config.toml @@ -0,0 +1,15 @@ +[framework] +name = "t-io" + +[main] +urls.plaintext = "/plaintext" +urls.json = "/json" +approach = "Realistic" +classification = "Micro" +database = "None" +database_os = "Linux" +os = "Linux" +orm = "Raw" +platform = "t-io" +webserver = "None" +versus = "t-io" diff --git a/frameworks/Java/tio-server/pom.xml b/frameworks/Java/tio-server/pom.xml new file mode 100644 index 00000000000..2c5c4174a4c --- /dev/null +++ b/frameworks/Java/tio-server/pom.xml @@ -0,0 +1,167 @@ + + 4.0.0 + com.litongjava + tio-server-benchmark + 1.0 + ${project.artifactId} + + UTF-8 + 1.8 + ${java.version} + ${java.version} + com.litongjava.tio.http.server.MainApp + + + + com.litongjava + tio-server + 3.7.3.v20231218-RELEASE + + + + com.litongjava + tio-http-server + 3.7.3.v20231218-RELEASE + + + + + + development + + true + + + + ch.qos.logback + logback-classic + 1.2.3 + + + + + + + production + + + ch.qos.logback + logback-classic + 1.2.3 + + + + + + org.springframework.boot + spring-boot-maven-plugin + 2.7.4 + + ${main.class} + org.projectlombok + + + + + + repackage + + + + + + + + + + assembly + + + ch.qos.logback + logback-classic + 1.2.3 + + + + + + org.apache.maven.plugins + maven-jar-plugin + 3.2.0 + + + org.apache.maven.plugins + maven-assembly-plugin + 3.1.1 + + + + ${main.class} + + + + jar-with-dependencies + + false + + + + make-assembly + package + + single + + + + + + + + + native + + + + org.slf4j + slf4j-jdk14 + 1.7.31 + + + + org.graalvm.sdk + graal-sdk + ${graalvm.version} + provided + + + + ${final.name} + + + org.graalvm.nativeimage + native-image-maven-plugin + 21.2.0 + + + + native-image + + package + + + + false + ${project.build.finalName} + ${main.class} + + -H:+RemoveSaturatedTypeFlows + --allow-incomplete-classpath + --no-fallback + + + + + + + + \ No newline at end of file diff --git a/frameworks/Java/tio-server/src/main/java/com/litongjava/tio/http/server/MainApp.java b/frameworks/Java/tio-server/src/main/java/com/litongjava/tio/http/server/MainApp.java new file mode 100644 index 00000000000..25c8ff0ea55 --- /dev/null +++ b/frameworks/Java/tio-server/src/main/java/com/litongjava/tio/http/server/MainApp.java @@ -0,0 +1,40 @@ +package com.litongjava.tio.http.server; + +import java.io.IOException; + +import com.litongjava.tio.http.common.HttpConfig; +import com.litongjava.tio.http.common.handler.HttpRequestHandler; +import com.litongjava.tio.http.server.controller.IndexController; +import com.litongjava.tio.http.server.handler.HttpRoutes; +import com.litongjava.tio.http.server.handler.SimpleHttpDispahterHanlder; +import com.litongjava.tio.http.server.handler.SimpleHttpRoutes; +import com.litongjava.tio.server.ServerTioConfig; + +public class MainApp { + + public static void main(String[] args) throws IOException { + // add route + IndexController controller = new IndexController(); + HttpRoutes simpleHttpRoutes = new SimpleHttpRoutes(); + simpleHttpRoutes.add("/", controller::index); + simpleHttpRoutes.add("/plaintext", controller::plaintext); + simpleHttpRoutes.add("/json", controller::json); + + // config server + HttpConfig httpConfig = new HttpConfig(8080, null, null, null); + httpConfig.setUseSession(false); + httpConfig.setWelcomeFile(null); + httpConfig.setCheckHost(false); + httpConfig.setCompatible1_0(false); + + HttpRequestHandler requestHandler = new SimpleHttpDispahterHanlder(httpConfig, simpleHttpRoutes); + HttpServerStarter httpServerStarter = new HttpServerStarter(httpConfig, requestHandler); + ServerTioConfig serverTioConfig = httpServerStarter.getServerTioConfig(); + // close Heartbeat + serverTioConfig.setHeartbeatTimeout(0); + serverTioConfig.statOn = false; + // start server + httpServerStarter.start(); + } + +} \ No newline at end of file diff --git a/frameworks/Java/tio-server/src/main/java/com/litongjava/tio/http/server/controller/IndexController.java b/frameworks/Java/tio-server/src/main/java/com/litongjava/tio/http/server/controller/IndexController.java new file mode 100644 index 00000000000..cf87426dda3 --- /dev/null +++ b/frameworks/Java/tio-server/src/main/java/com/litongjava/tio/http/server/controller/IndexController.java @@ -0,0 +1,40 @@ +package com.litongjava.tio.http.server.controller; + +import com.alibaba.fastjson2.JSON; +import com.litongjava.tio.http.common.HeaderName; +import com.litongjava.tio.http.common.HeaderValue; +import com.litongjava.tio.http.common.HttpRequest; +import com.litongjava.tio.http.common.HttpResponse; +import com.litongjava.tio.http.server.model.Message; +import com.litongjava.tio.http.server.util.Resps; + +/** + * ab -k -n1000000 -c10 http://127.0.0.1:8080/json + * ab -k -n1000000 -c10 http://127.0.0.1:8080/plaintext + */ +public class IndexController { + private static final String HELLO_WORLD = "Hello, World!"; + + private static final byte[] HELLO_WORLD_BYTES = HELLO_WORLD.getBytes(); + + public HttpResponse index(HttpRequest request) { + return Resps.txt(request, "tio-server"); + } + + public HttpResponse plaintext(HttpRequest request) { + // 更高性能的写法 + HttpResponse ret = new HttpResponse(request); + ret.setBody(HELLO_WORLD_BYTES); + ret.addHeader(HeaderName.Content_Type, HeaderValue.Content_Type.TEXT_PLAIN_TXT); + return ret; + } + + // 在IndexController中添加 + public HttpResponse json(HttpRequest request) { + // 更高性能的写法 + HttpResponse ret = new HttpResponse(request); + ret.setBody(JSON.toJSONString(new Message(HELLO_WORLD)).getBytes()); + ret.addHeader(HeaderName.Content_Type, HeaderValue.Content_Type.TEXT_PLAIN_JSON); + return ret; + } +} diff --git a/frameworks/Java/tio-server/src/main/java/com/litongjava/tio/http/server/model/Message.java b/frameworks/Java/tio-server/src/main/java/com/litongjava/tio/http/server/model/Message.java new file mode 100644 index 00000000000..2ad66214e0f --- /dev/null +++ b/frameworks/Java/tio-server/src/main/java/com/litongjava/tio/http/server/model/Message.java @@ -0,0 +1,12 @@ +package com.litongjava.tio.http.server.model; +public final class Message { + private final String message; + + public Message(String message) { + this.message = message; + } + + public String getMessage() { + return message; + } +} diff --git a/frameworks/Java/tio-server/src/main/resources/logback.xml b/frameworks/Java/tio-server/src/main/resources/logback.xml new file mode 100644 index 00000000000..c4d4a1df9ac --- /dev/null +++ b/frameworks/Java/tio-server/src/main/resources/logback.xml @@ -0,0 +1,52 @@ + + + + + + + + + + + ${CONSOLE_LOG_PATTERN} + + + + + + + ${CONSOLE_LOG_PATTERN} + + + + ${LOG_HOME}/project-name-%d{yyyy-MM-dd}.log + + 180 + + + + 10MB + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git "a/frameworks/Java/tio-server/src/test/java/\346\226\260\345\273\272\346\227\245\350\256\260\346\234\254\346\226\207\346\241\243.jnt" "b/frameworks/Java/tio-server/src/test/java/\346\226\260\345\273\272\346\227\245\350\256\260\346\234\254\346\226\207\346\241\243.jnt" new file mode 100644 index 0000000000000000000000000000000000000000..e63c25323a2203faf5bc11b08eaca2f75fb6013b GIT binary patch literal 4544 zcmeHJZ)j6j6hE(Nw3WIg?QD};ZNiiW>xbAsq9Pg-1x09TEkjsU>e{Z3cFk(j>GtJS z9dkNC*^mxI*@v;QQRom6r_;1$U_nsyg9vkUMf|oYaSS$RvfuCZ-udWi7P^5<`U^Mb z+;i`{=bm%#`<+)8ULwDXNWCGh97vfXVnCz;cJ~?=VmlrT4IgcI(RyPyrSIV4`KyE7M&YZ(*JqyEi25;=jHW|L2u5W!m!u@u8ZCrL42Pw2wqetAY`R0~xtKFc=?>^_ zV`7~==<{szilNDfF?VtB}Drmo2+UGF*$E4mcQ*Q zlYjG-eMSAzo9+{LBoS>tl%}70H2eAKb70P=1MrW<=iIN(-9N2E|I9Vvly%_vUNHV% z@L)44K@B)Q2##+>C8|Mf2xF`RwpxreV`e>S!xNDI@pWtEle{$*H1BI^pYtE^|6lbd z+xS^0V`>wOKaQyOApSQHUk~C7!qQ?@!M9}@#+j8`5kJq%RGV<3=EhOiI}s(nJvQMhq|N#gprr?uzYCV9BY=}<>;&u7RM2s2X`k~f z;^%p7vv1;G>J!mV{7+*ki@)dN!4O&*+D0^u$vi|Jr;U=x#6M&2olgE1ZFhZjJWnbs h&fF&dkn{LF`A>0x=~Fg)oyeAdXXa&BC!dz5KLOxACUgJ* literal 0 HcmV?d00001 diff --git a/frameworks/Java/tio-server/tio-server.dockerfile b/frameworks/Java/tio-server/tio-server.dockerfile new file mode 100644 index 00000000000..5f99958b62a --- /dev/null +++ b/frameworks/Java/tio-server/tio-server.dockerfile @@ -0,0 +1,13 @@ +FROM maven:3.6.1-jdk-11-slim as maven +WORKDIR /t-io +COPY pom.xml pom.xml +COPY src src +COPY script script +RUN mvn package -q + +#TODO use separate JDK/JRE for the RUN (as the other builds) +WORKDIR /t-io/target/tio-http-server-benchmark + +EXPOSE 8080 + +CMD ["java", "-server", "-Xms1G", "-Xmx1G", "-XX:+UseNUMA", "-XX:+UseParallelGC", "-Dpacket.handler.mode=queue1", "-cp", "/t-io/target/tio-http-server-benchmark/config:/t-io/target/tio-http-server-benchmark/lib/*", "org.tio.http.server.benchmark.TioBenchmarkStarter"] From de44a2d6780deabda01c94adf04a34b2a84c4bde Mon Sep 17 00:00:00 2001 From: litongjava Date: Tue, 19 Dec 2023 23:20:07 -1000 Subject: [PATCH 02/39] add simple docker file --- frameworks/Java/tio-server/tio-server.dockerfile | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/frameworks/Java/tio-server/tio-server.dockerfile b/frameworks/Java/tio-server/tio-server.dockerfile index 5f99958b62a..abfe8ae2269 100644 --- a/frameworks/Java/tio-server/tio-server.dockerfile +++ b/frameworks/Java/tio-server/tio-server.dockerfile @@ -1,13 +1,13 @@ -FROM maven:3.6.1-jdk-11-slim as maven +FROM maven:3.6.1-jdk-8-slim as maven WORKDIR /t-io COPY pom.xml pom.xml COPY src src COPY script script -RUN mvn package -q +RUN mvn package -Passembly -q #TODO use separate JDK/JRE for the RUN (as the other builds) -WORKDIR /t-io/target/tio-http-server-benchmark +WORKDIR /t-io/target/tio-server-benchmark EXPOSE 8080 -CMD ["java", "-server", "-Xms1G", "-Xmx1G", "-XX:+UseNUMA", "-XX:+UseParallelGC", "-Dpacket.handler.mode=queue1", "-cp", "/t-io/target/tio-http-server-benchmark/config:/t-io/target/tio-http-server-benchmark/lib/*", "org.tio.http.server.benchmark.TioBenchmarkStarter"] +CMD ["java", "-server", "-Xms1G", "-Xmx1G", "-XX:+UseNUMA", "-XX:+UseParallelGC", "-Dpacket.handler.mode=queue1", "-jar", "/t-io/target/tio-server-benchmark-1.0.jar"] From 9d464a2c2ead5402c1f958eedaff92851291ebcd Mon Sep 17 00:00:00 2001 From: litongjava Date: Tue, 19 Dec 2023 23:23:25 -1000 Subject: [PATCH 03/39] fix docker file --- frameworks/Java/tio-server/tio-server.dockerfile | 1 - 1 file changed, 1 deletion(-) diff --git a/frameworks/Java/tio-server/tio-server.dockerfile b/frameworks/Java/tio-server/tio-server.dockerfile index abfe8ae2269..ad3522e9b68 100644 --- a/frameworks/Java/tio-server/tio-server.dockerfile +++ b/frameworks/Java/tio-server/tio-server.dockerfile @@ -2,7 +2,6 @@ FROM maven:3.6.1-jdk-8-slim as maven WORKDIR /t-io COPY pom.xml pom.xml COPY src src -COPY script script RUN mvn package -Passembly -q #TODO use separate JDK/JRE for the RUN (as the other builds) From 822f801db4b0761f439f498a20ebaa856f67ddf2 Mon Sep 17 00:00:00 2001 From: litongjava Date: Tue, 19 Dec 2023 23:27:11 -1000 Subject: [PATCH 04/39] chage log level to info --- frameworks/Java/tio-server/README.md | 10 +++++++++- .../Java/tio-server/src/main/resources/logback.xml | 2 +- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/frameworks/Java/tio-server/README.md b/frameworks/Java/tio-server/README.md index 5582229f2d8..224ef19168f 100644 --- a/frameworks/Java/tio-server/README.md +++ b/frameworks/Java/tio-server/README.md @@ -10,7 +10,7 @@ These implementations use the tio-server's controller. ## Versions -3.5.5.v20191010-RELEASE (https://gitee.com/litongjava/t-io) +3.7.3.v20231218-RELEASE (https://gitee.com/litongjava/t-io) ## Test URLs @@ -19,3 +19,11 @@ All implementations use the same URLs. * Plaintext - `http://localhost:8080/plaintext` * JSON - `http://localhost:8080/json` + ## Hot to run + ``` + docker build -t tio-server-benchmark -f tio-server.dockerfile . +``` + +``` +docker run --rm -p 8080:8080 tio-server-benchmark +``` \ No newline at end of file diff --git a/frameworks/Java/tio-server/src/main/resources/logback.xml b/frameworks/Java/tio-server/src/main/resources/logback.xml index c4d4a1df9ac..aff0c711191 100644 --- a/frameworks/Java/tio-server/src/main/resources/logback.xml +++ b/frameworks/Java/tio-server/src/main/resources/logback.xml @@ -45,7 +45,7 @@ - + From f83b6cd465ce52db344813e8d99f5b35cd84ec46 Mon Sep 17 00:00:00 2001 From: litongjava Date: Wed, 20 Dec 2023 01:39:01 -1000 Subject: [PATCH 05/39] add template and activate record --- frameworks/Java/tio-server/README.md | 31 +++- frameworks/Java/tio-server/pom.xml | 20 ++- .../Java/tio-server/sql/hello_world.sql | 76 +++++++++ .../litongjava/tio/http/server/MainApp.java | 14 ++ .../http/server/config/EnjoyEngineConfig.java | 22 +++ .../tio/http/server/config/MysqlDbConfig.java | 32 ++++ .../http/server/controller/DbController.java | 154 ++++++++++++++++++ .../tio/http/server/model/Fortune.java | 23 +++ .../tio/http/server/model/World.java | 32 ++++ .../http/server/utils/BeanConverterUtils.java | 31 ++++ .../http/server/utils/EnviormentUtils.java | 106 ++++++++++++ .../main/resources/templates/fortunes.html | 20 +++ 12 files changed, 555 insertions(+), 6 deletions(-) create mode 100644 frameworks/Java/tio-server/sql/hello_world.sql create mode 100644 frameworks/Java/tio-server/src/main/java/com/litongjava/tio/http/server/config/EnjoyEngineConfig.java create mode 100644 frameworks/Java/tio-server/src/main/java/com/litongjava/tio/http/server/config/MysqlDbConfig.java create mode 100644 frameworks/Java/tio-server/src/main/java/com/litongjava/tio/http/server/controller/DbController.java create mode 100644 frameworks/Java/tio-server/src/main/java/com/litongjava/tio/http/server/model/Fortune.java create mode 100644 frameworks/Java/tio-server/src/main/java/com/litongjava/tio/http/server/model/World.java create mode 100644 frameworks/Java/tio-server/src/main/java/com/litongjava/tio/http/server/utils/BeanConverterUtils.java create mode 100644 frameworks/Java/tio-server/src/main/java/com/litongjava/tio/http/server/utils/EnviormentUtils.java create mode 100644 frameworks/Java/tio-server/src/main/resources/templates/fortunes.html diff --git a/frameworks/Java/tio-server/README.md b/frameworks/Java/tio-server/README.md index 224ef19168f..a56bc0ab700 100644 --- a/frameworks/Java/tio-server/README.md +++ b/frameworks/Java/tio-server/README.md @@ -16,9 +16,34 @@ These implementations use the tio-server's controller. All implementations use the same URLs. - * Plaintext - `http://localhost:8080/plaintext` - * JSON - `http://localhost:8080/json` - +### Plaintext Test + + http://localhost:8080/plaintext + +### JSON Encoding Test + + http://localhost:8080/json + +### Database Query Test + + http://localhost:8080/db + +### Database Queries Test + + http://localhost:8080/queries?queries=5 + +### Cache Query Test + + http://localhost:8080/cache + +### Template rendering Test + + http://localhost:8080/fortunes + +### Database Update Test + + http://localhost:8080/updates?queries=5 + ## Hot to run ``` docker build -t tio-server-benchmark -f tio-server.dockerfile . diff --git a/frameworks/Java/tio-server/pom.xml b/frameworks/Java/tio-server/pom.xml index 2c5c4174a4c..0c8f0801589 100644 --- a/frameworks/Java/tio-server/pom.xml +++ b/frameworks/Java/tio-server/pom.xml @@ -14,15 +14,29 @@ com.litongjava - tio-server + tio-http-server 3.7.3.v20231218-RELEASE com.litongjava - tio-http-server - 3.7.3.v20231218-RELEASE + table-to-json + 1.2.1 + + + + mysql + mysql-connector-java + 5.1.46 + + + + com.zaxxer + HikariCP + 4.0.3 + + diff --git a/frameworks/Java/tio-server/sql/hello_world.sql b/frameworks/Java/tio-server/sql/hello_world.sql new file mode 100644 index 00000000000..2e3f99ad304 --- /dev/null +++ b/frameworks/Java/tio-server/sql/hello_world.sql @@ -0,0 +1,76 @@ +/* + Source Schema : hello_world +*/ + +SET NAMES utf8mb4; +SET FOREIGN_KEY_CHECKS = 0; + +-- ---------------------------- +-- Table structure for fortune +-- ---------------------------- +DROP TABLE IF EXISTS `fortune`; +CREATE TABLE `fortune` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `message` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of fortune +-- ---------------------------- + +INSERT INTO `fortune` (`message`) VALUES ('Fortune 1'); +INSERT INTO `fortune` (`message`) VALUES ('Fortune 2'); +INSERT INTO `fortune` (`message`) VALUES ('Fortune 3'); +INSERT INTO `fortune` (`message`) VALUES ('Fortune 4'); +INSERT INTO `fortune` (`message`) VALUES ('Fortune 5'); +INSERT INTO `fortune` (`message`) VALUES ('Fortune 6'); +INSERT INTO `fortune` (`message`) VALUES ('Fortune 7'); +INSERT INTO `fortune` (`message`) VALUES ('Fortune 8'); +INSERT INTO `fortune` (`message`) VALUES ('Fortune 9'); +INSERT INTO `fortune` (`message`) VALUES ('Fortune 10'); +-- ---------------------------- +-- Table structure for world +-- ---------------------------- +DROP TABLE IF EXISTS `world`; +CREATE TABLE `world` ( + `id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT, + `randomNumber` int(11) NOT NULL, + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of world +-- ---------------------------- +INSERT INTO world (randomNumber) VALUES (FLOOR(1 + RAND() * 10001)); +INSERT INTO world (randomNumber) VALUES (FLOOR(1 + RAND() * 10001)); +INSERT INTO world (randomNumber) VALUES (FLOOR(1 + RAND() * 10001)); +INSERT INTO world (randomNumber) VALUES (FLOOR(1 + RAND() * 10001)); +INSERT INTO world (randomNumber) VALUES (FLOOR(1 + RAND() * 10001)); +INSERT INTO world (randomNumber) VALUES (FLOOR(1 + RAND() * 10001)); +INSERT INTO world (randomNumber) VALUES (FLOOR(1 + RAND() * 10001)); +INSERT INTO world (randomNumber) VALUES (FLOOR(1 + RAND() * 10001)); +INSERT INTO world (randomNumber) VALUES (FLOOR(1 + RAND() * 10001)); +INSERT INTO world (randomNumber) VALUES (FLOOR(1 + RAND() * 10001)); +INSERT INTO world (randomNumber) VALUES (FLOOR(1 + RAND() * 10001)); +INSERT INTO world (randomNumber) VALUES (FLOOR(1 + RAND() * 10001)); +INSERT INTO world (randomNumber) VALUES (FLOOR(1 + RAND() * 10001)); +INSERT INTO world (randomNumber) VALUES (FLOOR(1 + RAND() * 10001)); +INSERT INTO world (randomNumber) VALUES (FLOOR(1 + RAND() * 10001)); +INSERT INTO world (randomNumber) VALUES (FLOOR(1 + RAND() * 10001)); +INSERT INTO world (randomNumber) VALUES (FLOOR(1 + RAND() * 10001)); +INSERT INTO world (randomNumber) VALUES (FLOOR(1 + RAND() * 10001)); +INSERT INTO world (randomNumber) VALUES (FLOOR(1 + RAND() * 10001)); +INSERT INTO world (randomNumber) VALUES (FLOOR(1 + RAND() * 10001)); +INSERT INTO world (randomNumber) VALUES (FLOOR(1 + RAND() * 10001)); +INSERT INTO world (randomNumber) VALUES (FLOOR(1 + RAND() * 10001)); +INSERT INTO world (randomNumber) VALUES (FLOOR(1 + RAND() * 10001)); +INSERT INTO world (randomNumber) VALUES (FLOOR(1 + RAND() * 10001)); +INSERT INTO world (randomNumber) VALUES (FLOOR(1 + RAND() * 10001)); +INSERT INTO world (randomNumber) VALUES (FLOOR(1 + RAND() * 10001)); +INSERT INTO world (randomNumber) VALUES (FLOOR(1 + RAND() * 10001)); +INSERT INTO world (randomNumber) VALUES (FLOOR(1 + RAND() * 10001)); +INSERT INTO world (randomNumber) VALUES (FLOOR(1 + RAND() * 10001)); +INSERT INTO world (randomNumber) VALUES (FLOOR(1 + RAND() * 10001)); + +SET FOREIGN_KEY_CHECKS = 1; diff --git a/frameworks/Java/tio-server/src/main/java/com/litongjava/tio/http/server/MainApp.java b/frameworks/Java/tio-server/src/main/java/com/litongjava/tio/http/server/MainApp.java index 25c8ff0ea55..300e46523af 100644 --- a/frameworks/Java/tio-server/src/main/java/com/litongjava/tio/http/server/MainApp.java +++ b/frameworks/Java/tio-server/src/main/java/com/litongjava/tio/http/server/MainApp.java @@ -4,6 +4,9 @@ import com.litongjava.tio.http.common.HttpConfig; import com.litongjava.tio.http.common.handler.HttpRequestHandler; +import com.litongjava.tio.http.server.config.EnjoyEngineConfig; +import com.litongjava.tio.http.server.config.MysqlDbConfig; +import com.litongjava.tio.http.server.controller.DbController; import com.litongjava.tio.http.server.controller.IndexController; import com.litongjava.tio.http.server.handler.HttpRoutes; import com.litongjava.tio.http.server.handler.SimpleHttpDispahterHanlder; @@ -19,6 +22,13 @@ public static void main(String[] args) throws IOException { simpleHttpRoutes.add("/", controller::index); simpleHttpRoutes.add("/plaintext", controller::plaintext); simpleHttpRoutes.add("/json", controller::json); + + DbController dbQueryController = new DbController(); + simpleHttpRoutes.add("/db", dbQueryController::db); + simpleHttpRoutes.add("/queries", dbQueryController::queries); + simpleHttpRoutes.add("/updates", dbQueryController::updates); + simpleHttpRoutes.add("/fortunes", dbQueryController::fortunes); + // config server HttpConfig httpConfig = new HttpConfig(8080, null, null, null); @@ -35,6 +45,10 @@ public static void main(String[] args) throws IOException { serverTioConfig.statOn = false; // start server httpServerStarter.start(); + + new MysqlDbConfig().init(); + new EnjoyEngineConfig().engine(); + } } \ No newline at end of file diff --git a/frameworks/Java/tio-server/src/main/java/com/litongjava/tio/http/server/config/EnjoyEngineConfig.java b/frameworks/Java/tio-server/src/main/java/com/litongjava/tio/http/server/config/EnjoyEngineConfig.java new file mode 100644 index 00000000000..b40c74c448d --- /dev/null +++ b/frameworks/Java/tio-server/src/main/java/com/litongjava/tio/http/server/config/EnjoyEngineConfig.java @@ -0,0 +1,22 @@ +package com.litongjava.tio.http.server.config; + +import com.jfinal.template.Engine; + +public class EnjoyEngineConfig { + + private final String RESOURCE_BASE_PATH = "/templates/"; + + public Engine engine() { + Engine engine = Engine.use(); + engine.setBaseTemplatePath(RESOURCE_BASE_PATH); + engine.setToClassPathSourceFactory(); + // 支持模板热加载,绝大多数生产环境下也建议配置成 true,除非是极端高性能的场景 + // engine.setDevMode(true); + // 配置极速模式,性能提升 13% + Engine.setFastMode(true); + // jfinal 4.9.02 新增配置:支持中文表达式、中文变量名、中文方法名、中文模板函数名 + Engine.setChineseExpression(true); + return engine; + } + +} diff --git a/frameworks/Java/tio-server/src/main/java/com/litongjava/tio/http/server/config/MysqlDbConfig.java b/frameworks/Java/tio-server/src/main/java/com/litongjava/tio/http/server/config/MysqlDbConfig.java new file mode 100644 index 00000000000..105abc47767 --- /dev/null +++ b/frameworks/Java/tio-server/src/main/java/com/litongjava/tio/http/server/config/MysqlDbConfig.java @@ -0,0 +1,32 @@ +package com.litongjava.tio.http.server.config; + +import com.jfinal.plugin.activerecord.ActiveRecordPlugin; +import com.jfinal.plugin.activerecord.OrderedFieldContainerFactory; +import com.jfinal.plugin.hikaricp.HikariCpPlugin; + +public class MysqlDbConfig { + + public void init() { + // start active recored + // String jdbcUrl = P.get("jdbc.url"); + String jdbcUrl = "jdbc:mysql://192.168.3.9/hello_world"; + // String jdbcUser = P.get("jdbc.user"); + String jdbcUser = "root"; + +// String jdbcPswd = P.get("jdbc.pswd"); + String jdbcPswd = "robot_123456#"; + HikariCpPlugin hikariCpPlugin = new HikariCpPlugin(jdbcUrl, jdbcUser, jdbcPswd); + + ActiveRecordPlugin arp = new ActiveRecordPlugin(hikariCpPlugin); + arp.setContainerFactory(new OrderedFieldContainerFactory()); + +// Engine engine = arp.getEngine(); +// engine.setSourceFactory(new ClassPathSourceFactory()); +// engine.setCompressorOn(' '); +// engine.setCompressorOn('\n'); + // arp.addSqlTemplate("/sql/all_sqls.sql"); +// arp.start(); + hikariCpPlugin.start(); + arp.start(); + } +} diff --git a/frameworks/Java/tio-server/src/main/java/com/litongjava/tio/http/server/controller/DbController.java b/frameworks/Java/tio-server/src/main/java/com/litongjava/tio/http/server/controller/DbController.java new file mode 100644 index 00000000000..24f70c84001 --- /dev/null +++ b/frameworks/Java/tio-server/src/main/java/com/litongjava/tio/http/server/controller/DbController.java @@ -0,0 +1,154 @@ +package com.litongjava.tio.http.server.controller; + +import java.util.ArrayList; +import java.util.Comparator; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Objects; +import java.util.concurrent.ThreadLocalRandom; +import java.util.stream.Collectors; +import java.util.stream.IntStream; + +import com.alibaba.fastjson2.JSON; +import com.jfinal.plugin.activerecord.Db; +import com.jfinal.plugin.activerecord.Record; +import com.jfinal.template.Engine; +import com.jfinal.template.Template; +import com.litongjava.tio.http.common.HeaderName; +import com.litongjava.tio.http.common.HeaderValue; +import com.litongjava.tio.http.common.HttpRequest; +import com.litongjava.tio.http.common.HttpResponse; +import com.litongjava.tio.http.server.model.Fortune; +import com.litongjava.tio.http.server.util.Resps; +import com.litongjava.tio.http.server.utils.BeanConverterUtils; + +public class DbController { + + private static final int MIN_WORLD_NUMBER = 1; + private static final int MAX_WORLD_NUMBER_PLUS_ONE = 10_001; + + private static int randomWorldNumber() { + return ThreadLocalRandom.current().nextInt(MIN_WORLD_NUMBER, MAX_WORLD_NUMBER_PLUS_ONE); + } + + private static IntStream randomWorldNumbers() { + return ThreadLocalRandom.current().ints(MIN_WORLD_NUMBER, MAX_WORLD_NUMBER_PLUS_ONE) + // distinct() allows us to avoid using Hibernate's first-level cache in + // the JPA-based implementation. Using a cache like that would bypass + // querying the database, which would violate the test requirements. + .distinct(); + } + + private static int parseQueryCount(String textValue) { + if (textValue == null) { + return 1; + } + int parsedValue; + try { + parsedValue = Integer.parseInt(textValue); + } catch (NumberFormatException e) { + return 1; + } + return Math.min(500, Math.max(1, parsedValue)); + } + + // @GetMapping("/db") + public HttpResponse db(HttpRequest request) { + Integer id = request.getInt("id"); + if (id == null) { + id = randomWorldNumber(); + } + + HttpResponse httpResponse = new HttpResponse(request); + + // int id = 11; + // String sql="SELECT id, randomNumber FROM world WHERE id = ?"; + + Record recored = Db.findById("world", id); + if (recored != null) { + httpResponse.setBody(JSON.toJSONString(recored.toMap()).getBytes()); + } else { + httpResponse.setBody("{}".getBytes()); + } + + httpResponse.addHeader(HeaderName.Content_Type, HeaderValue.Content_Type.TEXT_PLAIN_JSON); + + return httpResponse; + } + + // @GetMapping("/queries") + public HttpResponse queries(HttpRequest request) { + String queries = request.getParam("queries"); + List> recordMaps = randomWorldNumbers() + // limit + .limit(parseQueryCount(queries)) // 限制查询数量 + .mapToObj(id -> Db.findById("world", id)) // 使用 mapToObj 将 int 映射为对象 + .filter(Objects::nonNull) // 过滤掉 null 值 + .map(Record::toMap) // 将每个 Record 对象转换为 Map + .collect(Collectors.toList()); // 收集到 List + + HttpResponse httpResponse = new HttpResponse(request); + httpResponse.addHeader(HeaderName.Content_Type, HeaderValue.Content_Type.TEXT_PLAIN_JSON); + httpResponse.setBody(JSON.toJSONString(recordMaps).getBytes()); + return httpResponse; + } + +//@GetMapping("/updates") + public HttpResponse updates(HttpRequest request) { + String queries = request.getParam("queries"); + List> updatedRecords = randomWorldNumbers()// random numbers + // limit + .limit(parseQueryCount(queries)) + // map + .mapToObj(id -> Db.findById("world", id)) + // not null + .filter(Objects::nonNull).map(record -> { + int currentRandomNumber = record.getInt("randomNumber"); // "randomnumber" + int newRandomNumber; + do { + newRandomNumber = randomWorldNumber(); + } while (newRandomNumber == currentRandomNumber); + + record.set("randomnumber", newRandomNumber); + Db.update("world", "id", record); // update + return record; + }) + // tomap + .map(Record::toMap) + // to List + .collect(Collectors.toList()); + + HttpResponse httpResponse = new HttpResponse(request); + httpResponse.addHeader(HeaderName.Content_Type, HeaderValue.Content_Type.TEXT_PLAIN_JSON); + httpResponse.setBody(JSON.toJSONString(updatedRecords).getBytes()); + return httpResponse; + } + +//@GetMapping("/fortunes") + public HttpResponse fortunes(HttpRequest request) throws IllegalAccessException, InstantiationException { + List records = Db.find("SELECT * FROM fortune"); // 假设表名为 "fortune" + + List fortunes = new ArrayList<>(records.size()); + for (Record record : records) { + + fortunes.add(BeanConverterUtils.toBean(record.toMap(), Fortune.class)); + } + // 添加额外的 Fortune + fortunes.add(new Fortune(0, "Additional fortune added at request time.")); + + // 按照消息排序 + fortunes.sort(Comparator.comparing(Fortune::getMessage)); + + Map viewData = new HashMap<>(); + viewData.put("fortunes", fortunes); + + // 转换为 HTML + Engine engine = Engine.use(); + String filename = "fortunes.html"; + Template template = engine.getTemplate(filename); + String html = template.renderToString(viewData); + + return Resps.html(request, html); + } +} diff --git a/frameworks/Java/tio-server/src/main/java/com/litongjava/tio/http/server/model/Fortune.java b/frameworks/Java/tio-server/src/main/java/com/litongjava/tio/http/server/model/Fortune.java new file mode 100644 index 00000000000..3407a33f3c9 --- /dev/null +++ b/frameworks/Java/tio-server/src/main/java/com/litongjava/tio/http/server/model/Fortune.java @@ -0,0 +1,23 @@ +package com.litongjava.tio.http.server.model; + +public final class Fortune { + + public int id; + public String message; + + public Fortune() { + } + + public Fortune(int id, String message) { + this.id = id; + this.message = message; + } + + public int getId() { + return id; + } + + public String getMessage() { + return message; + } +} \ No newline at end of file diff --git a/frameworks/Java/tio-server/src/main/java/com/litongjava/tio/http/server/model/World.java b/frameworks/Java/tio-server/src/main/java/com/litongjava/tio/http/server/model/World.java new file mode 100644 index 00000000000..06c4ed9a22b --- /dev/null +++ b/frameworks/Java/tio-server/src/main/java/com/litongjava/tio/http/server/model/World.java @@ -0,0 +1,32 @@ +package com.litongjava.tio.http.server.model; + +public final class World { + + public int id; + public int randomnumber; + + protected World() { + } + + public World(int id, int randomnumber) { + this.id = id; + this.randomnumber = randomnumber; + } + + public int getId() { + return id; + } + + public void setId(int id) { + this.id = id; + } + + public int getRandomnumber() { + return randomnumber; + } + + public void setRandomnumber(int randomnumber) { + this.randomnumber = randomnumber; + } + +} \ No newline at end of file diff --git a/frameworks/Java/tio-server/src/main/java/com/litongjava/tio/http/server/utils/BeanConverterUtils.java b/frameworks/Java/tio-server/src/main/java/com/litongjava/tio/http/server/utils/BeanConverterUtils.java new file mode 100644 index 00000000000..11796feeb0f --- /dev/null +++ b/frameworks/Java/tio-server/src/main/java/com/litongjava/tio/http/server/utils/BeanConverterUtils.java @@ -0,0 +1,31 @@ +package com.litongjava.tio.http.server.utils; + +import java.lang.reflect.Field; +import java.util.Map; + +public class BeanConverterUtils { + + /** + * Map to to bean + */ + public static T toBean(Map map, Class beanClass) + throws IllegalAccessException, InstantiationException { + + T bean = beanClass.newInstance(); // 创建 Bean 的实例 + + for (Field field : beanClass.getDeclaredFields()) { + field.setAccessible(true); // 确保私有字段也可以访问 + + if (map.containsKey(field.getName())) { + Object value = map.get(field.getName()); + + // 如果字段类型与值类型兼容,则设置字段的值 + if (value != null && field.getType().isAssignableFrom(value.getClass())) { + field.set(bean, value); + } + } + } + + return bean; + } +} diff --git a/frameworks/Java/tio-server/src/main/java/com/litongjava/tio/http/server/utils/EnviormentUtils.java b/frameworks/Java/tio-server/src/main/java/com/litongjava/tio/http/server/utils/EnviormentUtils.java new file mode 100644 index 00000000000..b9fd700f0fc --- /dev/null +++ b/frameworks/Java/tio-server/src/main/java/com/litongjava/tio/http/server/utils/EnviormentUtils.java @@ -0,0 +1,106 @@ +package com.litongjava.tio.http.server.utils; + +import java.util.HashMap; +import java.util.Map; + +public class EnviormentUtils { + private static String[] args; + private static Map cmdArgsMap = new HashMap<>(); + + public static String[] getArgs() { + return args; + } + + public Map getCmdArgsMap() { + return cmdArgsMap; + } + + public static Map buildCmdArgsMap(String[] args) { + EnviormentUtils.args = args; + Map result = new HashMap<>(); + for (String arg : args) { + if (arg.startsWith("--")) { + String[] parts = arg.substring(2).split("=", 2); + if (parts.length == 2) { + result.put(parts[0], parts[1]); + } + } + } + cmdArgsMap = result; + return result; + } + + public static String getStr(String key) { + // comamdn line + String value = cmdArgsMap.get(key); + // enviorment + if (value == null) { + value = System.getProperty(key); + } + + // config file + if (value == null) { +// if (PropUtils.isLoad()) { +// value = PropUtils.get(key); +// } + + } + + return value; + } + + public static String get(String key) { + return getStr(key); + } + + public static Integer getInt(String key) { + String value = getStr(key); + if (value != null) { + return Integer.valueOf(value); + } else { + return null; + } + + } + + public static int getInt(String key, int defaultValue) { + String value = get(key); + if (value != null) { + return Integer.parseInt(value); + } else { + return defaultValue; + } + } + + public static String get(String key, String defaultValue) { + String value = get(key); + if (value != null) { + return value; + } else { + return defaultValue; + } + } + + public static boolean getBoolean(String key) { + return Boolean.parseBoolean(get(key)); + } + + public static boolean getBoolean(String key, boolean defaultValue) { + String value = get(key); + if (value != null) { + return Boolean.parseBoolean(value); + } else { + return defaultValue; + } + } + +// public static void load(String profile) { +// if (PropUtils.isLoad()) { +// PropUtils.use("app-" + profile + ".properties"); +// } else { +// PropUtils.use(profile); + +// } + +// } +} diff --git a/frameworks/Java/tio-server/src/main/resources/templates/fortunes.html b/frameworks/Java/tio-server/src/main/resources/templates/fortunes.html new file mode 100644 index 00000000000..46e6cba0ed7 --- /dev/null +++ b/frameworks/Java/tio-server/src/main/resources/templates/fortunes.html @@ -0,0 +1,20 @@ + + + + Fortunes + + + + + + + + #for(fortune : fortunes) + + + + + #end +
idmessage
#(fortune.id)#(fortune.message)
+ + From cf3f126bf3044b5f72d47bed93a835f183380f13 Mon Sep 17 00:00:00 2001 From: litongjava Date: Wed, 20 Dec 2023 02:15:52 -1000 Subject: [PATCH 06/39] add cache --- .../resources/conf/ebean_mysql/db.properties | 2 +- frameworks/Java/tio-server/pom.xml | 6 +++ .../litongjava/tio/http/server/MainApp.java | 11 +++-- .../http/server/controller/DbController.java | 47 +++++-------------- 4 files changed, 28 insertions(+), 38 deletions(-) diff --git a/frameworks/Java/act/src/main/resources/conf/ebean_mysql/db.properties b/frameworks/Java/act/src/main/resources/conf/ebean_mysql/db.properties index ad3ec4111b3..c3b6905d822 100644 --- a/frameworks/Java/act/src/main/resources/conf/ebean_mysql/db.properties +++ b/frameworks/Java/act/src/main/resources/conf/ebean_mysql/db.properties @@ -3,7 +3,7 @@ mysql.host=localhost app.batch_save=false db.impl=act.db.ebean.EbeanPlugin -db.url=jdbc:mysql://${mysql.host}:3306/hello_world?jdbcCompliantTruncation=false&elideSetAutoCommits=true&useLocalSessionState=true&cachePrepStmts=true&cacheCallableStmts=true&alwaysSendSetIsolation=false&prepStmtCacheSize=4096&cacheServerConfiguration=true&prepStmtCacheSqlLimit=2048&zeroDateTimeBehavior=convertToNull&traceProtocol=false&useUnbufferedInput=false&useReadAheadInput=false&maintainTimeStats=false&useServerPrepStmts=true&cacheRSMetadata=true&serverTimezone=UTC&useSSL=false +db.url=jdbc:mysql://${mysql.host}:3306/hello_world?jdbcCompliantTruncation=false&elideSetAutoCommits=true&useLocalSessionState=true&PrepStmts=true&cacheCallableStmts=true&alwaysSendSetIsolation=false&prepStmtCacheSize=4096&cacheServerConfiguration=true&prepStmtCacheSqlLimit=2048&zeroDateTimeBehavior=convertToNull&traceProtocol=false&useUnbufferedInput=false&useReadAheadInput=false&maintainTimeStats=false&useServerPrepStmts=true&cacheRSMetadata=true&serverTimezone=UTC&useSSL=false db.slave.maxConnections=48 db.slave.minConnections=48 diff --git a/frameworks/Java/tio-server/pom.xml b/frameworks/Java/tio-server/pom.xml index 0c8f0801589..01225e7405f 100644 --- a/frameworks/Java/tio-server/pom.xml +++ b/frameworks/Java/tio-server/pom.xml @@ -18,6 +18,7 @@ 3.7.3.v20231218-RELEASE + com.litongjava table-to-json @@ -46,6 +47,11 @@ true + + org.slf4j + slf4j-api + 1.7.25 + ch.qos.logback logback-classic diff --git a/frameworks/Java/tio-server/src/main/java/com/litongjava/tio/http/server/MainApp.java b/frameworks/Java/tio-server/src/main/java/com/litongjava/tio/http/server/MainApp.java index 300e46523af..c737e7549f3 100644 --- a/frameworks/Java/tio-server/src/main/java/com/litongjava/tio/http/server/MainApp.java +++ b/frameworks/Java/tio-server/src/main/java/com/litongjava/tio/http/server/MainApp.java @@ -4,8 +4,10 @@ import com.litongjava.tio.http.common.HttpConfig; import com.litongjava.tio.http.common.handler.HttpRequestHandler; +import com.litongjava.tio.http.server.config.CaffeineCacheConfig; import com.litongjava.tio.http.server.config.EnjoyEngineConfig; import com.litongjava.tio.http.server.config.MysqlDbConfig; +import com.litongjava.tio.http.server.controller.CacheController; import com.litongjava.tio.http.server.controller.DbController; import com.litongjava.tio.http.server.controller.IndexController; import com.litongjava.tio.http.server.handler.HttpRoutes; @@ -22,13 +24,16 @@ public static void main(String[] args) throws IOException { simpleHttpRoutes.add("/", controller::index); simpleHttpRoutes.add("/plaintext", controller::plaintext); simpleHttpRoutes.add("/json", controller::json); - + DbController dbQueryController = new DbController(); simpleHttpRoutes.add("/db", dbQueryController::db); simpleHttpRoutes.add("/queries", dbQueryController::queries); simpleHttpRoutes.add("/updates", dbQueryController::updates); simpleHttpRoutes.add("/fortunes", dbQueryController::fortunes); - + + CacheController cacheController = new CacheController(); + simpleHttpRoutes.add("/cacheQuery", cacheController::cacheQuery); + simpleHttpRoutes.add("/cacheList", cacheController::cacheList); // config server HttpConfig httpConfig = new HttpConfig(8080, null, null, null); @@ -48,7 +53,7 @@ public static void main(String[] args) throws IOException { new MysqlDbConfig().init(); new EnjoyEngineConfig().engine(); + new CaffeineCacheConfig().register(); } - } \ No newline at end of file diff --git a/frameworks/Java/tio-server/src/main/java/com/litongjava/tio/http/server/controller/DbController.java b/frameworks/Java/tio-server/src/main/java/com/litongjava/tio/http/server/controller/DbController.java index 24f70c84001..bce249296a8 100644 --- a/frameworks/Java/tio-server/src/main/java/com/litongjava/tio/http/server/controller/DbController.java +++ b/frameworks/Java/tio-server/src/main/java/com/litongjava/tio/http/server/controller/DbController.java @@ -6,9 +6,7 @@ import java.util.List; import java.util.Map; import java.util.Objects; -import java.util.concurrent.ThreadLocalRandom; import java.util.stream.Collectors; -import java.util.stream.IntStream; import com.alibaba.fastjson2.JSON; import com.jfinal.plugin.activerecord.Db; @@ -22,42 +20,19 @@ import com.litongjava.tio.http.server.model.Fortune; import com.litongjava.tio.http.server.util.Resps; import com.litongjava.tio.http.server.utils.BeanConverterUtils; +import com.litongjava.tio.http.server.utils.RandomUtils; +import com.litongjava.tio.utils.cache.ICache; +import com.litongjava.tio.utils.cache.caffeine.CaffeineCache; public class DbController { - private static final int MIN_WORLD_NUMBER = 1; - private static final int MAX_WORLD_NUMBER_PLUS_ONE = 10_001; - private static int randomWorldNumber() { - return ThreadLocalRandom.current().nextInt(MIN_WORLD_NUMBER, MAX_WORLD_NUMBER_PLUS_ONE); - } - - private static IntStream randomWorldNumbers() { - return ThreadLocalRandom.current().ints(MIN_WORLD_NUMBER, MAX_WORLD_NUMBER_PLUS_ONE) - // distinct() allows us to avoid using Hibernate's first-level cache in - // the JPA-based implementation. Using a cache like that would bypass - // querying the database, which would violate the test requirements. - .distinct(); - } - - private static int parseQueryCount(String textValue) { - if (textValue == null) { - return 1; - } - int parsedValue; - try { - parsedValue = Integer.parseInt(textValue); - } catch (NumberFormatException e) { - return 1; - } - return Math.min(500, Math.max(1, parsedValue)); - } // @GetMapping("/db") public HttpResponse db(HttpRequest request) { Integer id = request.getInt("id"); if (id == null) { - id = randomWorldNumber(); + id = RandomUtils.randomWorldNumber(); } HttpResponse httpResponse = new HttpResponse(request); @@ -80,9 +55,9 @@ public HttpResponse db(HttpRequest request) { // @GetMapping("/queries") public HttpResponse queries(HttpRequest request) { String queries = request.getParam("queries"); - List> recordMaps = randomWorldNumbers() + List> recordMaps = RandomUtils.randomWorldNumbers() // limit - .limit(parseQueryCount(queries)) // 限制查询数量 + .limit(RandomUtils.parseQueryCount(queries)) // 限制查询数量 .mapToObj(id -> Db.findById("world", id)) // 使用 mapToObj 将 int 映射为对象 .filter(Objects::nonNull) // 过滤掉 null 值 .map(Record::toMap) // 将每个 Record 对象转换为 Map @@ -97,9 +72,13 @@ public HttpResponse queries(HttpRequest request) { //@GetMapping("/updates") public HttpResponse updates(HttpRequest request) { String queries = request.getParam("queries"); - List> updatedRecords = randomWorldNumbers()// random numbers + + ICache cache = CaffeineCache.getCache("world"); + cache.clear(); + + List> updatedRecords = RandomUtils.randomWorldNumbers()// random numbers // limit - .limit(parseQueryCount(queries)) + .limit(RandomUtils.parseQueryCount(queries)) // map .mapToObj(id -> Db.findById("world", id)) // not null @@ -107,7 +86,7 @@ public HttpResponse updates(HttpRequest request) { int currentRandomNumber = record.getInt("randomNumber"); // "randomnumber" int newRandomNumber; do { - newRandomNumber = randomWorldNumber(); + newRandomNumber = RandomUtils.randomWorldNumber(); } while (newRandomNumber == currentRandomNumber); record.set("randomnumber", newRandomNumber); From 2179467b28e04522238840df5f4648f2e823c651 Mon Sep 17 00:00:00 2001 From: litongjava Date: Wed, 20 Dec 2023 02:25:45 -1000 Subject: [PATCH 07/39] update reupadme.md --- frameworks/Java/tio-server/README.md | 27 +++++++++++++++++++ .../Java/tio-server/benchmark_config.json | 7 ++++- frameworks/Java/tio-server/config.toml | 4 +++ .../http/server/controller/DbController.java | 2 -- 4 files changed, 37 insertions(+), 3 deletions(-) diff --git a/frameworks/Java/tio-server/README.md b/frameworks/Java/tio-server/README.md index a56bc0ab700..90de4be5c7d 100644 --- a/frameworks/Java/tio-server/README.md +++ b/frameworks/Java/tio-server/README.md @@ -5,9 +5,36 @@ This is the tio-server portion of a [benchmarking test suite](../) comparing a v ## Controller These implementations use the tio-server's controller. +* [Plaintext test source]() +* [JSON test source]() + +### Plaintext Test + * [Plaintext test source](src/main/java/com/litongjava/tio/http/server/controller/IndexController.java) + +### JSON Serialization Test + * [JSON test source](src/main/java/com/litongjava/tio/http/server/controller/IndexController.java) +### Database Query Test + +* [Database Query test source](src/main/java/com/litongjava/tio/http/server/controller/DbController.java)) + +### Database Queries Test + +* [Database Queries test source](src/main/java/com/litongjava/tio/http/server/controller/DbController.java)) + +### Database Update Test + +* [Database Update test source](src/main/java/com/litongjava/tio/http/server/controller/DbController.java)) + +### Template rendering Test + +* [Template rendering test source](src/main/java/com/litongjava/tio/http/server/controller/DbController.java)) + +### Cache Query Test +* [Cache query test source](src/main/java/com/litongjava/tio/http/server/controller/CacheController.java)) + ## Versions 3.7.3.v20231218-RELEASE (https://gitee.com/litongjava/t-io) diff --git a/frameworks/Java/tio-server/benchmark_config.json b/frameworks/Java/tio-server/benchmark_config.json index 6e94e367d12..8ce3592df9c 100644 --- a/frameworks/Java/tio-server/benchmark_config.json +++ b/frameworks/Java/tio-server/benchmark_config.json @@ -2,8 +2,13 @@ "framework": "tio-server", "tests": [{ "default": { - "json_url": "/json", "plaintext_url": "/plaintext", + "json_url": "/json", + "db_url": "/db", + "query_url": "/queries?queries=", + "fortune_url": "/fortunes", + "update_url": "/updates?queries=", + "cached_query" : "/cachedQuery?queries=", "port": 8080, "approach": "Realistic", "classification": "Micro", diff --git a/frameworks/Java/tio-server/config.toml b/frameworks/Java/tio-server/config.toml index 31b198ee34b..93dddb241c9 100644 --- a/frameworks/Java/tio-server/config.toml +++ b/frameworks/Java/tio-server/config.toml @@ -4,6 +4,10 @@ name = "t-io" [main] urls.plaintext = "/plaintext" urls.json = "/json" +urls.query = "/queries?queries=" +urls.update = "/updates?queries=" +urls.fortune = "/fortunes" +urls.cached_query = "/cachedQuery?queries=" approach = "Realistic" classification = "Micro" database = "None" diff --git a/frameworks/Java/tio-server/src/main/java/com/litongjava/tio/http/server/controller/DbController.java b/frameworks/Java/tio-server/src/main/java/com/litongjava/tio/http/server/controller/DbController.java index bce249296a8..ec846ab3f30 100644 --- a/frameworks/Java/tio-server/src/main/java/com/litongjava/tio/http/server/controller/DbController.java +++ b/frameworks/Java/tio-server/src/main/java/com/litongjava/tio/http/server/controller/DbController.java @@ -26,8 +26,6 @@ public class DbController { - - // @GetMapping("/db") public HttpResponse db(HttpRequest request) { Integer id = request.getInt("id"); From 8cf2e77618363f240e40159d24ef46104015c647 Mon Sep 17 00:00:00 2001 From: litongjava Date: Wed, 20 Dec 2023 02:31:44 -1000 Subject: [PATCH 08/39] update cache query --- frameworks/Java/tio-server/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frameworks/Java/tio-server/README.md b/frameworks/Java/tio-server/README.md index 90de4be5c7d..839e2443911 100644 --- a/frameworks/Java/tio-server/README.md +++ b/frameworks/Java/tio-server/README.md @@ -61,7 +61,7 @@ All implementations use the same URLs. ### Cache Query Test - http://localhost:8080/cache + http://localhost:8080/cacheQuery?queries=10000 ### Template rendering Test From 976bb1b55cf019b9d9a5cbef6b1e3e073fc6967c Mon Sep 17 00:00:00 2001 From: litongjava Date: Wed, 20 Dec 2023 02:45:13 -1000 Subject: [PATCH 09/39] test on windows --- .../tio-server/api/tio-server-benchmark.md | 227 ++++++++++++++++++ .../server/config/CaffeineCacheConfig.java | 19 ++ .../server/controller/CacheController.java | 69 ++++++ .../tio/http/server/services/CacheName.java | 50 ++++ .../server/services/CacheNameService.java | 17 ++ .../tio/http/server/utils/RandomUtils.java | 35 +++ 6 files changed, 417 insertions(+) create mode 100644 frameworks/Java/tio-server/api/tio-server-benchmark.md create mode 100644 frameworks/Java/tio-server/src/main/java/com/litongjava/tio/http/server/config/CaffeineCacheConfig.java create mode 100644 frameworks/Java/tio-server/src/main/java/com/litongjava/tio/http/server/controller/CacheController.java create mode 100644 frameworks/Java/tio-server/src/main/java/com/litongjava/tio/http/server/services/CacheName.java create mode 100644 frameworks/Java/tio-server/src/main/java/com/litongjava/tio/http/server/services/CacheNameService.java create mode 100644 frameworks/Java/tio-server/src/main/java/com/litongjava/tio/http/server/utils/RandomUtils.java diff --git a/frameworks/Java/tio-server/api/tio-server-benchmark.md b/frameworks/Java/tio-server/api/tio-server-benchmark.md new file mode 100644 index 00000000000..1d302df2d5d --- /dev/null +++ b/frameworks/Java/tio-server/api/tio-server-benchmark.md @@ -0,0 +1,227 @@ +--- +title: tio-server-benchmark v1.0.0 +language_tabs: + - shell: Shell + - http: HTTP + - javascript: JavaScript + - ruby: Ruby + - python: Python + - php: PHP + - java: Java + - go: Go +toc_footers: [] +includes: [] +search: true +code_clipboard: true +highlight_theme: darkula +headingLevel: 2 +generator: "@tarslib/widdershins v4.0.17" + +--- + +# tio-server-benchmark + +> v1.0.0 + +Base URLs: + +# Authentication + +# Default + +## GET plaintext + +GET /plaintext + +> 返回示例 + +> 200 Response + +```json +{} +``` + +### 返回结果 + +|状态码|状态码含义|说明|数据模型| +|---|---|---|---| +|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|成功|Inline| + +### 返回数据结构 + +## GET json + +GET /json + +> 返回示例 + +> 200 Response + +```json +{} +``` + +### 返回结果 + +|状态码|状态码含义|说明|数据模型| +|---|---|---|---| +|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|成功|Inline| + +### 返回数据结构 + +## GET db + +GET /db + +### 请求参数 + +|名称|位置|类型|必选|说明| +|---|---|---|---|---| +|id|query|string| 否 |none| + +> 返回示例 + +> 200 Response + +```json +{ + "id": 0, + "randomNumber": 0 +} +``` + +### 返回结果 + +|状态码|状态码含义|说明|数据模型| +|---|---|---|---| +|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|成功|Inline| + +### 返回数据结构 + +状态码 **200** + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|» id|integer|true|none||none| +|» randomNumber|integer|true|none||none| + +## GET updates + +GET /updates + +### 请求参数 + +|名称|位置|类型|必选|说明| +|---|---|---|---|---| +|queries|query|string| 否 |none| + +> 返回示例 + +> 成功 + +```json +[ + { + "id": 28, + "randomNumber": 5399, + "randomnumber": 1498 + } +] +``` + +### 返回结果 + +|状态码|状态码含义|说明|数据模型| +|---|---|---|---| +|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|成功|Inline| + +### 返回数据结构 + +状态码 **200** + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|» id|integer|false|none||none| +|» randomNumber|integer|false|none||none| +|» randomnumber|integer|false|none||none| + +## GET fortunes + +GET /fortunes + +> 返回示例 + +> 200 Response + +```json +{} +``` + +### 返回结果 + +|状态码|状态码含义|说明|数据模型| +|---|---|---|---| +|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|成功|Inline| + +### 返回数据结构 + +## GET cacheQuery + +GET /cacheQuery + +### 请求参数 + +|名称|位置|类型|必选|说明| +|---|---|---|---|---| +|queries|query|string| 否 |none| + +> 返回示例 + +> 200 Response + +```json +[ + { + "id": 0, + "randomNumber": 0 + } +] +``` + +### 返回结果 + +|状态码|状态码含义|说明|数据模型| +|---|---|---|---| +|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|成功|Inline| + +### 返回数据结构 + +状态码 **200** + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|» id|integer|false|none||none| +|» randomNumber|integer|false|none||none| + +## GET cacheList + +GET /cacheList + +> 返回示例 + +> 200 Response + +```json +{} +``` + +### 返回结果 + +|状态码|状态码含义|说明|数据模型| +|---|---|---|---| +|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|成功|Inline| + +### 返回数据结构 + +# 数据模型 + diff --git a/frameworks/Java/tio-server/src/main/java/com/litongjava/tio/http/server/config/CaffeineCacheConfig.java b/frameworks/Java/tio-server/src/main/java/com/litongjava/tio/http/server/config/CaffeineCacheConfig.java new file mode 100644 index 00000000000..1eb3e61fc11 --- /dev/null +++ b/frameworks/Java/tio-server/src/main/java/com/litongjava/tio/http/server/config/CaffeineCacheConfig.java @@ -0,0 +1,19 @@ +package com.litongjava.tio.http.server.config; + +import java.util.List; + +import com.litongjava.tio.http.server.services.CacheName; +import com.litongjava.tio.http.server.services.CacheNameService; +import com.litongjava.tio.utils.cache.caffeine.CaffeineCache; + +public class CaffeineCacheConfig { + + public CacheNameService register() { + CacheNameService cacheNameService = new CacheNameService(); + List names = cacheNameService.cacheNames(); + for (CacheName cacheName : names) { + CaffeineCache.register(cacheName.getName(), cacheName.getTimeToLiveSeconds(), cacheName.getTimeToIdleSeconds()); + } + return cacheNameService; + } +} diff --git a/frameworks/Java/tio-server/src/main/java/com/litongjava/tio/http/server/controller/CacheController.java b/frameworks/Java/tio-server/src/main/java/com/litongjava/tio/http/server/controller/CacheController.java new file mode 100644 index 00000000000..87a3e3f1b1d --- /dev/null +++ b/frameworks/Java/tio-server/src/main/java/com/litongjava/tio/http/server/controller/CacheController.java @@ -0,0 +1,69 @@ +package com.litongjava.tio.http.server.controller; + +import java.util.Collection; +import java.util.List; +import java.util.Map; +import java.util.Objects; +import java.util.stream.Collectors; + +import com.alibaba.fastjson2.JSON; +import com.jfinal.plugin.activerecord.Db; +import com.jfinal.plugin.activerecord.Record; +import com.litongjava.tio.http.common.HeaderName; +import com.litongjava.tio.http.common.HeaderValue; +import com.litongjava.tio.http.common.HttpRequest; +import com.litongjava.tio.http.common.HttpResponse; +import com.litongjava.tio.http.server.utils.RandomUtils; +import com.litongjava.tio.utils.cache.CacheUtils; +import com.litongjava.tio.utils.cache.FirsthandCreater; +import com.litongjava.tio.utils.cache.ICache; +import com.litongjava.tio.utils.cache.caffeine.CaffeineCache; + +public class CacheController { + // private Logger log = LoggerFactory.getLogger(this.getClass()); + + public HttpResponse cacheQuery(HttpRequest request) { + String queries = request.getParam("queries"); + List> recordMaps = RandomUtils.randomWorldNumbers() + // limit + .limit(RandomUtils.parseQueryCount(queries)) // 限制查询数量 + .mapToObj(id -> findByIdWithCache("world", id)) // 使用 mapToObj 将 int 映射为对象 + .filter(Objects::nonNull) // 过滤掉 null 值 + .map(Record::toMap) // 将每个 Record 对象转换为 Map + .collect(Collectors.toList()); // 收集到 List + + HttpResponse httpResponse = new HttpResponse(request); + httpResponse.addHeader(HeaderName.Content_Type, HeaderValue.Content_Type.TEXT_PLAIN_JSON); + httpResponse.setBody(JSON.toJSONString(recordMaps).getBytes()); + return httpResponse; + + } + + private Record findByIdWithCache(String tableName, int id) { + + ICache cache = CaffeineCache.getCache("world"); + + // firsthandCreater用户查询数据库 + FirsthandCreater firsthandCreater = new FirsthandCreater() { + @Override + public Record create() { + // log.info("select from db:{},id", tableName, id); + return Db.findById(tableName, id); + } + }; + + String key = id + ""; + boolean putTempToCacheIfNull = false; + Record value = CacheUtils.get(cache, key, putTempToCacheIfNull, firsthandCreater); + return value; + } + + public HttpResponse cacheList(HttpRequest request) { + Collection keys = CaffeineCache.getCache("world").keys(); + + HttpResponse httpResponse = new HttpResponse(request); + httpResponse.addHeader(HeaderName.Content_Type, HeaderValue.Content_Type.TEXT_PLAIN_JSON); + httpResponse.setBody(JSON.toJSONString(keys).getBytes()); + return httpResponse; + } +} diff --git a/frameworks/Java/tio-server/src/main/java/com/litongjava/tio/http/server/services/CacheName.java b/frameworks/Java/tio-server/src/main/java/com/litongjava/tio/http/server/services/CacheName.java new file mode 100644 index 00000000000..5707d4f05d4 --- /dev/null +++ b/frameworks/Java/tio-server/src/main/java/com/litongjava/tio/http/server/services/CacheName.java @@ -0,0 +1,50 @@ +package com.litongjava.tio.http.server.services; + +public class CacheName { + // `cacheName`(缓存名称) + private String name; + // `timeToLiveSeconds`(生存时间)和`timeToIdleSeconds`(闲置时间)。 + private Long timeToLiveSeconds; + private Long timeToIdleSeconds; + + public CacheName() { + } + + public CacheName(String name, Long timeToLiveSeconds, Long timeToIdleSeconds) { + super(); + this.name = name; + this.timeToLiveSeconds = timeToLiveSeconds; + this.timeToIdleSeconds = timeToIdleSeconds; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public Long getTimeToLiveSeconds() { + return timeToLiveSeconds; + } + + public void setTimeToLiveSeconds(Long timeToLiveSeconds) { + this.timeToLiveSeconds = timeToLiveSeconds; + } + + public Long getTimeToIdleSeconds() { + return timeToIdleSeconds; + } + + public void setTimeToIdleSeconds(Long timeToIdleSeconds) { + this.timeToIdleSeconds = timeToIdleSeconds; + } + + @Override + public String toString() { + return "CacheName [name=" + name + ", timeToLiveSeconds=" + timeToLiveSeconds + ", timeToIdleSeconds=" + + timeToIdleSeconds + "]"; + } + +} \ No newline at end of file diff --git a/frameworks/Java/tio-server/src/main/java/com/litongjava/tio/http/server/services/CacheNameService.java b/frameworks/Java/tio-server/src/main/java/com/litongjava/tio/http/server/services/CacheNameService.java new file mode 100644 index 00000000000..a5b093592cb --- /dev/null +++ b/frameworks/Java/tio-server/src/main/java/com/litongjava/tio/http/server/services/CacheNameService.java @@ -0,0 +1,17 @@ +package com.litongjava.tio.http.server.services; + +import java.util.ArrayList; +import java.util.List; + +import com.litongjava.tio.utils.time.Time; + +public class CacheNameService { + private CacheName demo = new CacheName("world", null, Time.MINUTE_1 * 10); + + public List cacheNames() { + List list = new ArrayList<>(); + list.add(demo); + return list; + } + +} diff --git a/frameworks/Java/tio-server/src/main/java/com/litongjava/tio/http/server/utils/RandomUtils.java b/frameworks/Java/tio-server/src/main/java/com/litongjava/tio/http/server/utils/RandomUtils.java new file mode 100644 index 00000000000..850bc16f28c --- /dev/null +++ b/frameworks/Java/tio-server/src/main/java/com/litongjava/tio/http/server/utils/RandomUtils.java @@ -0,0 +1,35 @@ +package com.litongjava.tio.http.server.utils; + +import java.util.concurrent.ThreadLocalRandom; +import java.util.stream.IntStream; + +public class RandomUtils { + + private static final int MIN_WORLD_NUMBER = 1; + private static final int MAX_WORLD_NUMBER_PLUS_ONE = 10_001; + + public static int randomWorldNumber() { + return ThreadLocalRandom.current().nextInt(MIN_WORLD_NUMBER, MAX_WORLD_NUMBER_PLUS_ONE); + } + + public static IntStream randomWorldNumbers() { + return ThreadLocalRandom.current().ints(MIN_WORLD_NUMBER, MAX_WORLD_NUMBER_PLUS_ONE) + // distinct() allows us to avoid using Hibernate's first-level cache in + // the JPA-based implementation. Using a cache like that would bypass + // querying the database, which would violate the test requirements. + .distinct(); + } + + public static int parseQueryCount(String textValue) { + if (textValue == null) { + return 1; + } + int parsedValue; + try { + parsedValue = Integer.parseInt(textValue); + } catch (NumberFormatException e) { + return 1; + } + return Math.min(500, Math.max(1, parsedValue)); + } +} From 50d34529b139836dc213dd5c00aa8d53bc55de91 Mon Sep 17 00:00:00 2001 From: litongjava Date: Wed, 20 Dec 2023 02:54:00 -1000 Subject: [PATCH 10/39] chage to EnviormentUtils --- .../litongjava/tio/http/server/MainApp.java | 2 + .../tio/http/server/config/MysqlDbConfig.java | 14 ++- .../http/server/utils/EnviormentUtils.java | 106 ------------------ 3 files changed, 10 insertions(+), 112 deletions(-) delete mode 100644 frameworks/Java/tio-server/src/main/java/com/litongjava/tio/http/server/utils/EnviormentUtils.java diff --git a/frameworks/Java/tio-server/src/main/java/com/litongjava/tio/http/server/MainApp.java b/frameworks/Java/tio-server/src/main/java/com/litongjava/tio/http/server/MainApp.java index c737e7549f3..c43e7b8f6a2 100644 --- a/frameworks/Java/tio-server/src/main/java/com/litongjava/tio/http/server/MainApp.java +++ b/frameworks/Java/tio-server/src/main/java/com/litongjava/tio/http/server/MainApp.java @@ -14,10 +14,12 @@ import com.litongjava.tio.http.server.handler.SimpleHttpDispahterHanlder; import com.litongjava.tio.http.server.handler.SimpleHttpRoutes; import com.litongjava.tio.server.ServerTioConfig; +import com.litongjava.tio.utils.enviorment.EnviormentUtils; public class MainApp { public static void main(String[] args) throws IOException { + EnviormentUtils.buildCmdArgsMap(args); // add route IndexController controller = new IndexController(); HttpRoutes simpleHttpRoutes = new SimpleHttpRoutes(); diff --git a/frameworks/Java/tio-server/src/main/java/com/litongjava/tio/http/server/config/MysqlDbConfig.java b/frameworks/Java/tio-server/src/main/java/com/litongjava/tio/http/server/config/MysqlDbConfig.java index 105abc47767..6aec6e13462 100644 --- a/frameworks/Java/tio-server/src/main/java/com/litongjava/tio/http/server/config/MysqlDbConfig.java +++ b/frameworks/Java/tio-server/src/main/java/com/litongjava/tio/http/server/config/MysqlDbConfig.java @@ -3,18 +3,20 @@ import com.jfinal.plugin.activerecord.ActiveRecordPlugin; import com.jfinal.plugin.activerecord.OrderedFieldContainerFactory; import com.jfinal.plugin.hikaricp.HikariCpPlugin; +import com.litongjava.tio.utils.enviorment.EnviormentUtils; public class MysqlDbConfig { public void init() { // start active recored - // String jdbcUrl = P.get("jdbc.url"); - String jdbcUrl = "jdbc:mysql://192.168.3.9/hello_world"; - // String jdbcUser = P.get("jdbc.user"); - String jdbcUser = "root"; + String jdbcUrl = EnviormentUtils.get("jdbc.url"); + // String jdbcUrl = "jdbc:mysql://192.168.3.9/hello_world"; -// String jdbcPswd = P.get("jdbc.pswd"); - String jdbcPswd = "robot_123456#"; + String jdbcUser = EnviormentUtils.get("jdbc.user"); +// String jdbcUser = "root"; + + String jdbcPswd = EnviormentUtils.get("jdbc.pswd"); +// String jdbcPswd = "robot_123456#"; HikariCpPlugin hikariCpPlugin = new HikariCpPlugin(jdbcUrl, jdbcUser, jdbcPswd); ActiveRecordPlugin arp = new ActiveRecordPlugin(hikariCpPlugin); diff --git a/frameworks/Java/tio-server/src/main/java/com/litongjava/tio/http/server/utils/EnviormentUtils.java b/frameworks/Java/tio-server/src/main/java/com/litongjava/tio/http/server/utils/EnviormentUtils.java deleted file mode 100644 index b9fd700f0fc..00000000000 --- a/frameworks/Java/tio-server/src/main/java/com/litongjava/tio/http/server/utils/EnviormentUtils.java +++ /dev/null @@ -1,106 +0,0 @@ -package com.litongjava.tio.http.server.utils; - -import java.util.HashMap; -import java.util.Map; - -public class EnviormentUtils { - private static String[] args; - private static Map cmdArgsMap = new HashMap<>(); - - public static String[] getArgs() { - return args; - } - - public Map getCmdArgsMap() { - return cmdArgsMap; - } - - public static Map buildCmdArgsMap(String[] args) { - EnviormentUtils.args = args; - Map result = new HashMap<>(); - for (String arg : args) { - if (arg.startsWith("--")) { - String[] parts = arg.substring(2).split("=", 2); - if (parts.length == 2) { - result.put(parts[0], parts[1]); - } - } - } - cmdArgsMap = result; - return result; - } - - public static String getStr(String key) { - // comamdn line - String value = cmdArgsMap.get(key); - // enviorment - if (value == null) { - value = System.getProperty(key); - } - - // config file - if (value == null) { -// if (PropUtils.isLoad()) { -// value = PropUtils.get(key); -// } - - } - - return value; - } - - public static String get(String key) { - return getStr(key); - } - - public static Integer getInt(String key) { - String value = getStr(key); - if (value != null) { - return Integer.valueOf(value); - } else { - return null; - } - - } - - public static int getInt(String key, int defaultValue) { - String value = get(key); - if (value != null) { - return Integer.parseInt(value); - } else { - return defaultValue; - } - } - - public static String get(String key, String defaultValue) { - String value = get(key); - if (value != null) { - return value; - } else { - return defaultValue; - } - } - - public static boolean getBoolean(String key) { - return Boolean.parseBoolean(get(key)); - } - - public static boolean getBoolean(String key, boolean defaultValue) { - String value = get(key); - if (value != null) { - return Boolean.parseBoolean(value); - } else { - return defaultValue; - } - } - -// public static void load(String profile) { -// if (PropUtils.isLoad()) { -// PropUtils.use("app-" + profile + ".properties"); -// } else { -// PropUtils.use(profile); - -// } - -// } -} From b1055519030e037b0b5153274ae9f219ce1934de Mon Sep 17 00:00:00 2001 From: litongjava Date: Wed, 20 Dec 2023 02:59:55 -1000 Subject: [PATCH 11/39] add java run with jdb info --- frameworks/Java/tio-server/README.md | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/frameworks/Java/tio-server/README.md b/frameworks/Java/tio-server/README.md index 839e2443911..ab6bd1da207 100644 --- a/frameworks/Java/tio-server/README.md +++ b/frameworks/Java/tio-server/README.md @@ -78,4 +78,16 @@ All implementations use the same URLs. ``` docker run --rm -p 8080:8080 tio-server-benchmark -``` \ No newline at end of file +``` + +The run is to specify the mysql database +**java** +-windows +``` +D:\java\jdk1.8.0_121\bin\java -jar target\tio-server-benchmark-1.0.jar --jdbc.url=jdbc:mysql://192.168.3.9/hello_world --jdbc.user=root --jdbc.pswd=robot_123456# +``` +**docker** + +``` +docker run --rm -p 8080:8080 tio-server-benchmark --jdbc.url=jdbc:mysql://192.168.3.9/hello_world --jdbc.user=root --jdbc.pswd=robot_123456# +``` From af916c53f86bde9d4271c5f224ae603fe82aaa6d Mon Sep 17 00:00:00 2001 From: litongjava Date: Wed, 20 Dec 2023 03:22:25 -1000 Subject: [PATCH 12/39] add EnviormentUtils --- frameworks/Java/tio-server/README.md | 20 ++-- .../litongjava/tio/http/server/MainApp.java | 21 ++-- .../tio/http/server/config/MysqlDbConfig.java | 2 +- .../http/server/utils/EnviormentUtils.java | 98 +++++++++++++++++++ 4 files changed, 126 insertions(+), 15 deletions(-) create mode 100644 frameworks/Java/tio-server/src/main/java/com/litongjava/tio/http/server/utils/EnviormentUtils.java diff --git a/frameworks/Java/tio-server/README.md b/frameworks/Java/tio-server/README.md index ab6bd1da207..6da9bb36cc6 100644 --- a/frameworks/Java/tio-server/README.md +++ b/frameworks/Java/tio-server/README.md @@ -72,22 +72,28 @@ All implementations use the same URLs. http://localhost:8080/updates?queries=5 ## Hot to run + ### docker ``` docker build -t tio-server-benchmark -f tio-server.dockerfile . ``` - +The run is to specify the mysql database ``` -docker run --rm -p 8080:8080 tio-server-benchmark +docker run --rm -p 8080:8080 tio-server-benchmark --jdbc.url=jdbc:mysql://192.168.3.9/hello_world --jdbc.user=root --jdbc.pswd=robot_123456# ``` -The run is to specify the mysql database -**java** +### windows + -windows ``` D:\java\jdk1.8.0_121\bin\java -jar target\tio-server-benchmark-1.0.jar --jdbc.url=jdbc:mysql://192.168.3.9/hello_world --jdbc.user=root --jdbc.pswd=robot_123456# ``` -**docker** - +or ``` -docker run --rm -p 8080:8080 tio-server-benchmark --jdbc.url=jdbc:mysql://192.168.3.9/hello_world --jdbc.user=root --jdbc.pswd=robot_123456# +set jdbc.url=jdbc:mysql://192.168.3.9/hello_world +set jdbc.user=root +set jdbc.pswd=robot_123456# +D:\java\jdk1.8.0_121\bin\java -jar target\tio-server-benchmark-1.0.jar ``` + + + diff --git a/frameworks/Java/tio-server/src/main/java/com/litongjava/tio/http/server/MainApp.java b/frameworks/Java/tio-server/src/main/java/com/litongjava/tio/http/server/MainApp.java index c43e7b8f6a2..42eff1ae1c3 100644 --- a/frameworks/Java/tio-server/src/main/java/com/litongjava/tio/http/server/MainApp.java +++ b/frameworks/Java/tio-server/src/main/java/com/litongjava/tio/http/server/MainApp.java @@ -13,12 +13,13 @@ import com.litongjava.tio.http.server.handler.HttpRoutes; import com.litongjava.tio.http.server.handler.SimpleHttpDispahterHanlder; import com.litongjava.tio.http.server.handler.SimpleHttpRoutes; +import com.litongjava.tio.http.server.utils.EnviormentUtils; import com.litongjava.tio.server.ServerTioConfig; -import com.litongjava.tio.utils.enviorment.EnviormentUtils; public class MainApp { - public static void main(String[] args) throws IOException { + public static void main(String[] args) { + long start = System.currentTimeMillis(); EnviormentUtils.buildCmdArgsMap(args); // add route IndexController controller = new IndexController(); @@ -51,11 +52,17 @@ public static void main(String[] args) throws IOException { serverTioConfig.setHeartbeatTimeout(0); serverTioConfig.statOn = false; // start server - httpServerStarter.start(); - - new MysqlDbConfig().init(); - new EnjoyEngineConfig().engine(); - new CaffeineCacheConfig().register(); + try { + httpServerStarter.start(); + new MysqlDbConfig().init(); + new EnjoyEngineConfig().engine(); + new CaffeineCacheConfig().register(); + long end = System.currentTimeMillis(); + System.out.println((end - start) + "ms"); + } catch (Exception e) { + e.printStackTrace(); + System.exit(1); + } } } \ No newline at end of file diff --git a/frameworks/Java/tio-server/src/main/java/com/litongjava/tio/http/server/config/MysqlDbConfig.java b/frameworks/Java/tio-server/src/main/java/com/litongjava/tio/http/server/config/MysqlDbConfig.java index 6aec6e13462..cab5f2ddbfc 100644 --- a/frameworks/Java/tio-server/src/main/java/com/litongjava/tio/http/server/config/MysqlDbConfig.java +++ b/frameworks/Java/tio-server/src/main/java/com/litongjava/tio/http/server/config/MysqlDbConfig.java @@ -3,7 +3,7 @@ import com.jfinal.plugin.activerecord.ActiveRecordPlugin; import com.jfinal.plugin.activerecord.OrderedFieldContainerFactory; import com.jfinal.plugin.hikaricp.HikariCpPlugin; -import com.litongjava.tio.utils.enviorment.EnviormentUtils; +import com.litongjava.tio.http.server.utils.EnviormentUtils; public class MysqlDbConfig { diff --git a/frameworks/Java/tio-server/src/main/java/com/litongjava/tio/http/server/utils/EnviormentUtils.java b/frameworks/Java/tio-server/src/main/java/com/litongjava/tio/http/server/utils/EnviormentUtils.java new file mode 100644 index 00000000000..dc8b7dfe9d7 --- /dev/null +++ b/frameworks/Java/tio-server/src/main/java/com/litongjava/tio/http/server/utils/EnviormentUtils.java @@ -0,0 +1,98 @@ +package com.litongjava.tio.http.server.utils; + +import java.util.HashMap; +import java.util.Map; + +public class EnviormentUtils { + private static String[] args; + private static Map cmdArgsMap = new HashMap<>(); + + public static String[] getArgs() { + return args; + } + + public Map getCmdArgsMap() { + return cmdArgsMap; + } + + public static Map buildCmdArgsMap(String[] args) { + EnviormentUtils.args = args; + Map result = new HashMap<>(); + for (String arg : args) { + if (arg.startsWith("--")) { + String[] parts = arg.substring(2).split("=", 2); + if (parts.length == 2) { + result.put(parts[0], parts[1]); + } + } + } + cmdArgsMap = result; + return result; + } + + public static String getStr(String key) { + // comamdn line + String value = cmdArgsMap.get(key); + // enviorment + if (value == null) { + value = System.getProperty(key); + } + + // config file + if (value == null) { + value = System.getenv(key); + + } + + return value; + } + + public static String get(String key) { + return getStr(key); + } + + public static Integer getInt(String key) { + String value = getStr(key); + if (value != null) { + return Integer.valueOf(value); + } else { + return null; + } + + } + + public static int getInt(String key, int defaultValue) { + String value = get(key); + if (value != null) { + return Integer.parseInt(value); + } else { + return defaultValue; + } + } + + public static String get(String key, String defaultValue) { + String value = get(key); + if (value != null) { + return value; + } else { + return defaultValue; + } + } + + public static boolean getBoolean(String key) { + return Boolean.parseBoolean(get(key)); + } + + public static boolean getBoolean(String key, boolean defaultValue) { + String value = get(key); + if (value != null) { + return Boolean.parseBoolean(value); + } else { + return defaultValue; + } + } +// public static void main(String[] args) { +// String string = EnviormentUtils.get("jdbc.user"); +// System.out.println(string); +// } +} From 306ce04295305825ca3c7d3d708e2c453cdbff59 Mon Sep 17 00:00:00 2001 From: litongjava Date: Wed, 20 Dec 2023 03:34:34 -1000 Subject: [PATCH 13/39] change to JDBC_URL --- frameworks/Java/tio-server/README.md | 12 ++++++++---- .../tio/http/server/config/MysqlDbConfig.java | 6 +++--- 2 files changed, 11 insertions(+), 7 deletions(-) diff --git a/frameworks/Java/tio-server/README.md b/frameworks/Java/tio-server/README.md index 6da9bb36cc6..40883fdec07 100644 --- a/frameworks/Java/tio-server/README.md +++ b/frameworks/Java/tio-server/README.md @@ -78,20 +78,24 @@ All implementations use the same URLs. ``` The run is to specify the mysql database ``` -docker run --rm -p 8080:8080 tio-server-benchmark --jdbc.url=jdbc:mysql://192.168.3.9/hello_world --jdbc.user=root --jdbc.pswd=robot_123456# +docker run --rm -p 8080:8080 \ +-e JDBC_URL="jdbc:mysql://192.168.3.9/hello_world" \ +-e JDBC_USER="root" \ +-e JDBC_PSWD="robot_123456" \ +tio-server-benchmark ``` ### windows -windows ``` -D:\java\jdk1.8.0_121\bin\java -jar target\tio-server-benchmark-1.0.jar --jdbc.url=jdbc:mysql://192.168.3.9/hello_world --jdbc.user=root --jdbc.pswd=robot_123456# +D:\java\jdk1.8.0_121\bin\java -jar target\tio-server-benchmark-1.0.jar --JDBC_URL=jdbc:mysql://192.168.3.9/hello_world --jdbc.user=root --JDBC_PSWD=robot_123456# ``` or ``` -set jdbc.url=jdbc:mysql://192.168.3.9/hello_world +set JDBC_URL=jdbc:mysql://192.168.3.9/hello_world set jdbc.user=root -set jdbc.pswd=robot_123456# +set JDBC_PSWD=robot_123456# D:\java\jdk1.8.0_121\bin\java -jar target\tio-server-benchmark-1.0.jar ``` diff --git a/frameworks/Java/tio-server/src/main/java/com/litongjava/tio/http/server/config/MysqlDbConfig.java b/frameworks/Java/tio-server/src/main/java/com/litongjava/tio/http/server/config/MysqlDbConfig.java index cab5f2ddbfc..fb831f318ee 100644 --- a/frameworks/Java/tio-server/src/main/java/com/litongjava/tio/http/server/config/MysqlDbConfig.java +++ b/frameworks/Java/tio-server/src/main/java/com/litongjava/tio/http/server/config/MysqlDbConfig.java @@ -9,13 +9,13 @@ public class MysqlDbConfig { public void init() { // start active recored - String jdbcUrl = EnviormentUtils.get("jdbc.url"); + String jdbcUrl = EnviormentUtils.get("JDBC_URL"); // String jdbcUrl = "jdbc:mysql://192.168.3.9/hello_world"; - String jdbcUser = EnviormentUtils.get("jdbc.user"); + String jdbcUser = EnviormentUtils.get("JDBC_USER"); // String jdbcUser = "root"; - String jdbcPswd = EnviormentUtils.get("jdbc.pswd"); + String jdbcPswd = EnviormentUtils.get("JDBC_PSWD"); // String jdbcPswd = "robot_123456#"; HikariCpPlugin hikariCpPlugin = new HikariCpPlugin(jdbcUrl, jdbcUser, jdbcPswd); From 72907d4da6c3cc4ecf6c1e5b0a10714b63b506e0 Mon Sep 17 00:00:00 2001 From: litongjava Date: Wed, 20 Dec 2023 03:46:02 -1000 Subject: [PATCH 14/39] add mysql run cmd --- frameworks/Java/tio-server/README.md | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/frameworks/Java/tio-server/README.md b/frameworks/Java/tio-server/README.md index 40883fdec07..a5caaab3863 100644 --- a/frameworks/Java/tio-server/README.md +++ b/frameworks/Java/tio-server/README.md @@ -5,8 +5,6 @@ This is the tio-server portion of a [benchmarking test suite](../) comparing a v ## Controller These implementations use the tio-server's controller. -* [Plaintext test source]() -* [JSON test source]() ### Plaintext Test @@ -72,6 +70,19 @@ All implementations use the same URLs. http://localhost:8080/updates?queries=5 ## Hot to run + ### install mysql 8 + - 1.please instal mysql 8.0.32,example cmd + ``` + docker run --restart=always -d --name mysql_8 --hostname mysql \ +-p 3306:3306 \ +-e 'MYSQL_ROOT_PASSWORD=robot_123456#' -e 'MYSQL_ROOT_HOST=%' -e 'MYSQL_DATABASE=hello_world' \ +mysql/mysql-server:8.0.32 \ +--character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci --lower_case_table_names=1 + ``` + - 2.create database schema hello_world + - 3.create tablle,[example](sql/hello_world.sql) + - 4.import data + ### docker ``` docker build -t tio-server-benchmark -f tio-server.dockerfile . @@ -81,7 +92,7 @@ The run is to specify the mysql database docker run --rm -p 8080:8080 \ -e JDBC_URL="jdbc:mysql://192.168.3.9/hello_world" \ -e JDBC_USER="root" \ --e JDBC_PSWD="robot_123456" \ +-e JDBC_PSWD="robot_123456#" \ tio-server-benchmark ``` From b5c81b525be3e7b6ebc2dd8e815bff237dd2a469 Mon Sep 17 00:00:00 2001 From: litongjava Date: Thu, 21 Dec 2023 18:11:51 -1000 Subject: [PATCH 15/39] update dockerfile add jdbc info --- frameworks/Java/tio-server/tio-server.dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frameworks/Java/tio-server/tio-server.dockerfile b/frameworks/Java/tio-server/tio-server.dockerfile index ad3522e9b68..c97546ac903 100644 --- a/frameworks/Java/tio-server/tio-server.dockerfile +++ b/frameworks/Java/tio-server/tio-server.dockerfile @@ -9,4 +9,4 @@ WORKDIR /t-io/target/tio-server-benchmark EXPOSE 8080 -CMD ["java", "-server", "-Xms1G", "-Xmx1G", "-XX:+UseNUMA", "-XX:+UseParallelGC", "-Dpacket.handler.mode=queue1", "-jar", "/t-io/target/tio-server-benchmark-1.0.jar"] +CMD ["java", "-server", "-Xms1G", "-Xmx1G", "-XX:+UseNUMA", "-XX:+UseParallelGC", "-Dpacket.handler.mode=queue1", "-jar", "/t-io/target/tio-server-benchmark-1.0.jar" --JDBC_URL="jdbc:mysql://tfb-database/hello_world" --JDBC_USER="benchmarkdbuser" --JDBC_PSWD="benchmarkdbpass"] From 69f6805265509440a25d911d4001c272af158845 Mon Sep 17 00:00:00 2001 From: litongjava Date: Thu, 21 Dec 2023 18:16:14 -1000 Subject: [PATCH 16/39] fix jdbc info error --- frameworks/Java/tio-server/tio-server.dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frameworks/Java/tio-server/tio-server.dockerfile b/frameworks/Java/tio-server/tio-server.dockerfile index c97546ac903..507f74f9e33 100644 --- a/frameworks/Java/tio-server/tio-server.dockerfile +++ b/frameworks/Java/tio-server/tio-server.dockerfile @@ -9,4 +9,4 @@ WORKDIR /t-io/target/tio-server-benchmark EXPOSE 8080 -CMD ["java", "-server", "-Xms1G", "-Xmx1G", "-XX:+UseNUMA", "-XX:+UseParallelGC", "-Dpacket.handler.mode=queue1", "-jar", "/t-io/target/tio-server-benchmark-1.0.jar" --JDBC_URL="jdbc:mysql://tfb-database/hello_world" --JDBC_USER="benchmarkdbuser" --JDBC_PSWD="benchmarkdbpass"] +CMD ["java", "-server", "-Xms1G", "-Xmx1G", "-XX:+UseNUMA", "-XX:+UseParallelGC", "-Dpacket.handler.mode=queue1", "-jar", "/t-io/target/tio-server-benchmark-1.0.jar","--JDBC_URL=jdbc:mysql://tfb-database/hello_world","--JDBC_USER="benchmarkdbuser" ,--JDBC_PSWD="benchmarkdbpass"] From d3960466f0de8d1412080ee67dd3246206334771 Mon Sep 17 00:00:00 2001 From: litongjava Date: Thu, 21 Dec 2023 18:22:35 -1000 Subject: [PATCH 17/39] fix Unterminated quoted string on dockerfile --- frameworks/Java/tio-server/tio-server.dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frameworks/Java/tio-server/tio-server.dockerfile b/frameworks/Java/tio-server/tio-server.dockerfile index 507f74f9e33..2253296e6e0 100644 --- a/frameworks/Java/tio-server/tio-server.dockerfile +++ b/frameworks/Java/tio-server/tio-server.dockerfile @@ -9,4 +9,4 @@ WORKDIR /t-io/target/tio-server-benchmark EXPOSE 8080 -CMD ["java", "-server", "-Xms1G", "-Xmx1G", "-XX:+UseNUMA", "-XX:+UseParallelGC", "-Dpacket.handler.mode=queue1", "-jar", "/t-io/target/tio-server-benchmark-1.0.jar","--JDBC_URL=jdbc:mysql://tfb-database/hello_world","--JDBC_USER="benchmarkdbuser" ,--JDBC_PSWD="benchmarkdbpass"] +CMD ["java", "-server", "-Xms1G", "-Xmx1G", "-XX:+UseNUMA", "-XX:+UseParallelGC", "-Dpacket.handler.mode=queue1", "-jar", "/t-io/target/tio-server-benchmark-1.0.jar","--JDBC_URL=jdbc:mysql://tfb-database/hello_world","--JDBC_USER="benchmarkdbuser" ,"--JDBC_PSWD=benchmarkdbpass"] From 91d47b9c7a1a6cbaebaa164a1695173bb580f1c9 Mon Sep 17 00:00:00 2001 From: litongjava Date: Thu, 21 Dec 2023 18:32:50 -1000 Subject: [PATCH 18/39] fix jdb_user error --- frameworks/Java/tio-server/tio-server.dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frameworks/Java/tio-server/tio-server.dockerfile b/frameworks/Java/tio-server/tio-server.dockerfile index 2253296e6e0..15fddd6db5a 100644 --- a/frameworks/Java/tio-server/tio-server.dockerfile +++ b/frameworks/Java/tio-server/tio-server.dockerfile @@ -9,4 +9,4 @@ WORKDIR /t-io/target/tio-server-benchmark EXPOSE 8080 -CMD ["java", "-server", "-Xms1G", "-Xmx1G", "-XX:+UseNUMA", "-XX:+UseParallelGC", "-Dpacket.handler.mode=queue1", "-jar", "/t-io/target/tio-server-benchmark-1.0.jar","--JDBC_URL=jdbc:mysql://tfb-database/hello_world","--JDBC_USER="benchmarkdbuser" ,"--JDBC_PSWD=benchmarkdbpass"] +CMD ["java", "-server", "-Xms1G", "-Xmx1G", "-XX:+UseNUMA", "-XX:+UseParallelGC", "-Dpacket.handler.mode=queue1", "-jar", "/t-io/target/tio-server-benchmark-1.0.jar","--JDBC_URL=jdbc:mysql://tfb-database/hello_world","--JDBC_USER=benchmarkdbuser" ,"--JDBC_PSWD=benchmarkdbpass"] From 85376c39a926cf4234559016e4e3e02ab96263e7 Mon Sep 17 00:00:00 2001 From: litongjava Date: Thu, 21 Dec 2023 18:43:28 -1000 Subject: [PATCH 19/39] add "database": "MySQL", --- frameworks/Java/tio-server/benchmark_config.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frameworks/Java/tio-server/benchmark_config.json b/frameworks/Java/tio-server/benchmark_config.json index 8ce3592df9c..7958f115c87 100644 --- a/frameworks/Java/tio-server/benchmark_config.json +++ b/frameworks/Java/tio-server/benchmark_config.json @@ -12,7 +12,7 @@ "port": 8080, "approach": "Realistic", "classification": "Micro", - "database": "None", + "database": "MySQL", "framework": "tio-server", "language": "Java", "flavor": "None", From 6c83421c585a34f550a33cc202d43971b2c0bdf9 Mon Sep 17 00:00:00 2001 From: litongjava Date: Thu, 21 Dec 2023 18:57:32 -1000 Subject: [PATCH 20/39] chage in to Integer of Fortune --- frameworks/Java/tio-server/README.md | 2 +- .../java/com/litongjava/tio/http/server/model/Fortune.java | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/frameworks/Java/tio-server/README.md b/frameworks/Java/tio-server/README.md index a5caaab3863..99964299c8a 100644 --- a/frameworks/Java/tio-server/README.md +++ b/frameworks/Java/tio-server/README.md @@ -100,7 +100,7 @@ tio-server-benchmark -windows ``` -D:\java\jdk1.8.0_121\bin\java -jar target\tio-server-benchmark-1.0.jar --JDBC_URL=jdbc:mysql://192.168.3.9/hello_world --jdbc.user=root --JDBC_PSWD=robot_123456# +D:\java\jdk1.8.0_121\bin\java -jar target\tio-server-benchmark-1.0.jar --JDBC_URL=jdbc:mysql://192.168.3.9/hello_world --JDBC_USER=root --JDBC_PSWD=robot_123456# ``` or ``` diff --git a/frameworks/Java/tio-server/src/main/java/com/litongjava/tio/http/server/model/Fortune.java b/frameworks/Java/tio-server/src/main/java/com/litongjava/tio/http/server/model/Fortune.java index 3407a33f3c9..b79e0dd1d30 100644 --- a/frameworks/Java/tio-server/src/main/java/com/litongjava/tio/http/server/model/Fortune.java +++ b/frameworks/Java/tio-server/src/main/java/com/litongjava/tio/http/server/model/Fortune.java @@ -2,18 +2,18 @@ public final class Fortune { - public int id; + public Integer id; public String message; public Fortune() { } - public Fortune(int id, String message) { + public Fortune(Integer id, String message) { this.id = id; this.message = message; } - public int getId() { + public Integer getId() { return id; } From 2bde432f1df004239fe0ef66e39052156d430c14 Mon Sep 17 00:00:00 2001 From: litongjava Date: Thu, 21 Dec 2023 19:40:55 -1000 Subject: [PATCH 21/39] add #escape to avoid xxs --- .../litongjava/tio/http/server/controller/DbController.java | 2 +- .../java/com/litongjava/tio/http/server/model/Fortune.java | 6 +++--- .../tio-server/src/main/resources/templates/fortunes.html | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/frameworks/Java/tio-server/src/main/java/com/litongjava/tio/http/server/controller/DbController.java b/frameworks/Java/tio-server/src/main/java/com/litongjava/tio/http/server/controller/DbController.java index ec846ab3f30..f7f2b9c087b 100644 --- a/frameworks/Java/tio-server/src/main/java/com/litongjava/tio/http/server/controller/DbController.java +++ b/frameworks/Java/tio-server/src/main/java/com/litongjava/tio/http/server/controller/DbController.java @@ -112,7 +112,7 @@ public HttpResponse fortunes(HttpRequest request) throws IllegalAccessException, fortunes.add(BeanConverterUtils.toBean(record.toMap(), Fortune.class)); } // 添加额外的 Fortune - fortunes.add(new Fortune(0, "Additional fortune added at request time.")); + fortunes.add(new Fortune(0L, "Additional fortune added at request time.")); // 按照消息排序 fortunes.sort(Comparator.comparing(Fortune::getMessage)); diff --git a/frameworks/Java/tio-server/src/main/java/com/litongjava/tio/http/server/model/Fortune.java b/frameworks/Java/tio-server/src/main/java/com/litongjava/tio/http/server/model/Fortune.java index b79e0dd1d30..728db88b837 100644 --- a/frameworks/Java/tio-server/src/main/java/com/litongjava/tio/http/server/model/Fortune.java +++ b/frameworks/Java/tio-server/src/main/java/com/litongjava/tio/http/server/model/Fortune.java @@ -2,18 +2,18 @@ public final class Fortune { - public Integer id; + public Long id; public String message; public Fortune() { } - public Fortune(Integer id, String message) { + public Fortune(Long id, String message) { this.id = id; this.message = message; } - public Integer getId() { + public Long getId() { return id; } diff --git a/frameworks/Java/tio-server/src/main/resources/templates/fortunes.html b/frameworks/Java/tio-server/src/main/resources/templates/fortunes.html index 46e6cba0ed7..1f6817df007 100644 --- a/frameworks/Java/tio-server/src/main/resources/templates/fortunes.html +++ b/frameworks/Java/tio-server/src/main/resources/templates/fortunes.html @@ -12,7 +12,7 @@ #for(fortune : fortunes) #(fortune.id) - #(fortune.message) + #escape(fortune.message) #end From 81cee2d776d19c434e6f4168c83f09ad8de26979 Mon Sep 17 00:00:00 2001 From: litongjava Date: Wed, 27 Dec 2023 09:48:08 -1000 Subject: [PATCH 22/39] remove caffeine and add ehcache --- .../resources/conf/ebean_mysql/db.properties | 2 +- frameworks/Java/tio-server/pom.xml | 19 +- .../litongjava/tio/http/server/MainApp.java | 15 +- .../server/config/CaffeineCacheConfig.java | 19 -- .../server/config/EhCachePluginConfig.java | 13 ++ .../tio/http/server/config/MysqlDbConfig.java | 9 +- .../server/controller/CacheController.java | 39 +--- .../http/server/controller/DbController.java | 4 +- .../http/server/utils/EnviormentUtils.java | 194 +++++++++--------- .../tio-server/src/main/resources/ehcache.xml | 9 + 10 files changed, 154 insertions(+), 169 deletions(-) delete mode 100644 frameworks/Java/tio-server/src/main/java/com/litongjava/tio/http/server/config/CaffeineCacheConfig.java create mode 100644 frameworks/Java/tio-server/src/main/java/com/litongjava/tio/http/server/config/EhCachePluginConfig.java create mode 100644 frameworks/Java/tio-server/src/main/resources/ehcache.xml diff --git a/frameworks/Java/act/src/main/resources/conf/ebean_mysql/db.properties b/frameworks/Java/act/src/main/resources/conf/ebean_mysql/db.properties index c3b6905d822..ad3ec4111b3 100644 --- a/frameworks/Java/act/src/main/resources/conf/ebean_mysql/db.properties +++ b/frameworks/Java/act/src/main/resources/conf/ebean_mysql/db.properties @@ -3,7 +3,7 @@ mysql.host=localhost app.batch_save=false db.impl=act.db.ebean.EbeanPlugin -db.url=jdbc:mysql://${mysql.host}:3306/hello_world?jdbcCompliantTruncation=false&elideSetAutoCommits=true&useLocalSessionState=true&PrepStmts=true&cacheCallableStmts=true&alwaysSendSetIsolation=false&prepStmtCacheSize=4096&cacheServerConfiguration=true&prepStmtCacheSqlLimit=2048&zeroDateTimeBehavior=convertToNull&traceProtocol=false&useUnbufferedInput=false&useReadAheadInput=false&maintainTimeStats=false&useServerPrepStmts=true&cacheRSMetadata=true&serverTimezone=UTC&useSSL=false +db.url=jdbc:mysql://${mysql.host}:3306/hello_world?jdbcCompliantTruncation=false&elideSetAutoCommits=true&useLocalSessionState=true&cachePrepStmts=true&cacheCallableStmts=true&alwaysSendSetIsolation=false&prepStmtCacheSize=4096&cacheServerConfiguration=true&prepStmtCacheSqlLimit=2048&zeroDateTimeBehavior=convertToNull&traceProtocol=false&useUnbufferedInput=false&useReadAheadInput=false&maintainTimeStats=false&useServerPrepStmts=true&cacheRSMetadata=true&serverTimezone=UTC&useSSL=false db.slave.maxConnections=48 db.slave.minConnections=48 diff --git a/frameworks/Java/tio-server/pom.xml b/frameworks/Java/tio-server/pom.xml index 01225e7405f..2be7ddbdc70 100644 --- a/frameworks/Java/tio-server/pom.xml +++ b/frameworks/Java/tio-server/pom.xml @@ -15,14 +15,21 @@ com.litongjava tio-http-server - 3.7.3.v20231218-RELEASE + 3.7.3.v20231224-RELEASE + - com.litongjava - table-to-json - 1.2.1 + com.jfinal + activerecord + 5.1.2 + + + + net.sf.ehcache + ehcache-core + 2.6.11 @@ -155,7 +162,7 @@ - ${final.name} + ${project.build.finalName}-native org.graalvm.nativeimage @@ -171,7 +178,7 @@ false - ${project.build.finalName} + ${project.build.finalName}-native ${main.class} -H:+RemoveSaturatedTypeFlows diff --git a/frameworks/Java/tio-server/src/main/java/com/litongjava/tio/http/server/MainApp.java b/frameworks/Java/tio-server/src/main/java/com/litongjava/tio/http/server/MainApp.java index 42eff1ae1c3..ab9d909586f 100644 --- a/frameworks/Java/tio-server/src/main/java/com/litongjava/tio/http/server/MainApp.java +++ b/frameworks/Java/tio-server/src/main/java/com/litongjava/tio/http/server/MainApp.java @@ -1,26 +1,24 @@ package com.litongjava.tio.http.server; -import java.io.IOException; - import com.litongjava.tio.http.common.HttpConfig; import com.litongjava.tio.http.common.handler.HttpRequestHandler; -import com.litongjava.tio.http.server.config.CaffeineCacheConfig; +import com.litongjava.tio.http.server.config.EhCachePluginConfig; import com.litongjava.tio.http.server.config.EnjoyEngineConfig; import com.litongjava.tio.http.server.config.MysqlDbConfig; import com.litongjava.tio.http.server.controller.CacheController; import com.litongjava.tio.http.server.controller.DbController; import com.litongjava.tio.http.server.controller.IndexController; import com.litongjava.tio.http.server.handler.HttpRoutes; -import com.litongjava.tio.http.server.handler.SimpleHttpDispahterHanlder; +import com.litongjava.tio.http.server.handler.SimpleHttpDispatcherHandler; import com.litongjava.tio.http.server.handler.SimpleHttpRoutes; -import com.litongjava.tio.http.server.utils.EnviormentUtils; import com.litongjava.tio.server.ServerTioConfig; +import com.litongjava.tio.utils.environment.EnvironmentUtils; public class MainApp { public static void main(String[] args) { long start = System.currentTimeMillis(); - EnviormentUtils.buildCmdArgsMap(args); + EnvironmentUtils.buildCmdArgsMap(args); // add route IndexController controller = new IndexController(); HttpRoutes simpleHttpRoutes = new SimpleHttpRoutes(); @@ -36,7 +34,6 @@ public static void main(String[] args) { CacheController cacheController = new CacheController(); simpleHttpRoutes.add("/cacheQuery", cacheController::cacheQuery); - simpleHttpRoutes.add("/cacheList", cacheController::cacheList); // config server HttpConfig httpConfig = new HttpConfig(8080, null, null, null); @@ -45,7 +42,7 @@ public static void main(String[] args) { httpConfig.setCheckHost(false); httpConfig.setCompatible1_0(false); - HttpRequestHandler requestHandler = new SimpleHttpDispahterHanlder(httpConfig, simpleHttpRoutes); + HttpRequestHandler requestHandler = new SimpleHttpDispatcherHandler(httpConfig, simpleHttpRoutes); HttpServerStarter httpServerStarter = new HttpServerStarter(httpConfig, requestHandler); ServerTioConfig serverTioConfig = httpServerStarter.getServerTioConfig(); // close Heartbeat @@ -56,7 +53,7 @@ public static void main(String[] args) { httpServerStarter.start(); new MysqlDbConfig().init(); new EnjoyEngineConfig().engine(); - new CaffeineCacheConfig().register(); + new EhCachePluginConfig().ehCachePlugin(); long end = System.currentTimeMillis(); System.out.println((end - start) + "ms"); } catch (Exception e) { diff --git a/frameworks/Java/tio-server/src/main/java/com/litongjava/tio/http/server/config/CaffeineCacheConfig.java b/frameworks/Java/tio-server/src/main/java/com/litongjava/tio/http/server/config/CaffeineCacheConfig.java deleted file mode 100644 index 1eb3e61fc11..00000000000 --- a/frameworks/Java/tio-server/src/main/java/com/litongjava/tio/http/server/config/CaffeineCacheConfig.java +++ /dev/null @@ -1,19 +0,0 @@ -package com.litongjava.tio.http.server.config; - -import java.util.List; - -import com.litongjava.tio.http.server.services.CacheName; -import com.litongjava.tio.http.server.services.CacheNameService; -import com.litongjava.tio.utils.cache.caffeine.CaffeineCache; - -public class CaffeineCacheConfig { - - public CacheNameService register() { - CacheNameService cacheNameService = new CacheNameService(); - List names = cacheNameService.cacheNames(); - for (CacheName cacheName : names) { - CaffeineCache.register(cacheName.getName(), cacheName.getTimeToLiveSeconds(), cacheName.getTimeToIdleSeconds()); - } - return cacheNameService; - } -} diff --git a/frameworks/Java/tio-server/src/main/java/com/litongjava/tio/http/server/config/EhCachePluginConfig.java b/frameworks/Java/tio-server/src/main/java/com/litongjava/tio/http/server/config/EhCachePluginConfig.java new file mode 100644 index 00000000000..c101589e888 --- /dev/null +++ b/frameworks/Java/tio-server/src/main/java/com/litongjava/tio/http/server/config/EhCachePluginConfig.java @@ -0,0 +1,13 @@ +package com.litongjava.tio.http.server.config; + + +import com.jfinal.plugin.ehcache.EhCachePlugin; + +public class EhCachePluginConfig { + + public EhCachePlugin ehCachePlugin() { + EhCachePlugin ehCachePlugin = new EhCachePlugin(); + ehCachePlugin.start(); + return ehCachePlugin; + } +} diff --git a/frameworks/Java/tio-server/src/main/java/com/litongjava/tio/http/server/config/MysqlDbConfig.java b/frameworks/Java/tio-server/src/main/java/com/litongjava/tio/http/server/config/MysqlDbConfig.java index fb831f318ee..e5f41fd14b3 100644 --- a/frameworks/Java/tio-server/src/main/java/com/litongjava/tio/http/server/config/MysqlDbConfig.java +++ b/frameworks/Java/tio-server/src/main/java/com/litongjava/tio/http/server/config/MysqlDbConfig.java @@ -3,19 +3,20 @@ import com.jfinal.plugin.activerecord.ActiveRecordPlugin; import com.jfinal.plugin.activerecord.OrderedFieldContainerFactory; import com.jfinal.plugin.hikaricp.HikariCpPlugin; -import com.litongjava.tio.http.server.utils.EnviormentUtils; +import com.litongjava.tio.utils.environment.EnvironmentUtils; public class MysqlDbConfig { public void init() { // start active recored - String jdbcUrl = EnviormentUtils.get("JDBC_URL"); + + String jdbcUrl = EnvironmentUtils.get("JDBC_URL"); // String jdbcUrl = "jdbc:mysql://192.168.3.9/hello_world"; - String jdbcUser = EnviormentUtils.get("JDBC_USER"); + String jdbcUser = EnvironmentUtils.get("JDBC_USER"); // String jdbcUser = "root"; - String jdbcPswd = EnviormentUtils.get("JDBC_PSWD"); + String jdbcPswd = EnvironmentUtils.get("JDBC_PSWD"); // String jdbcPswd = "robot_123456#"; HikariCpPlugin hikariCpPlugin = new HikariCpPlugin(jdbcUrl, jdbcUser, jdbcPswd); diff --git a/frameworks/Java/tio-server/src/main/java/com/litongjava/tio/http/server/controller/CacheController.java b/frameworks/Java/tio-server/src/main/java/com/litongjava/tio/http/server/controller/CacheController.java index 87a3e3f1b1d..ef2664639ea 100644 --- a/frameworks/Java/tio-server/src/main/java/com/litongjava/tio/http/server/controller/CacheController.java +++ b/frameworks/Java/tio-server/src/main/java/com/litongjava/tio/http/server/controller/CacheController.java @@ -25,12 +25,12 @@ public class CacheController { public HttpResponse cacheQuery(HttpRequest request) { String queries = request.getParam("queries"); List> recordMaps = RandomUtils.randomWorldNumbers() - // limit - .limit(RandomUtils.parseQueryCount(queries)) // 限制查询数量 - .mapToObj(id -> findByIdWithCache("world", id)) // 使用 mapToObj 将 int 映射为对象 - .filter(Objects::nonNull) // 过滤掉 null 值 - .map(Record::toMap) // 将每个 Record 对象转换为 Map - .collect(Collectors.toList()); // 收集到 List + // limit + .limit(RandomUtils.parseQueryCount(queries)) // 限制查询数量 + .mapToObj(id -> findByIdWithCache("world", id)) // 使用 mapToObj 将 int 映射为对象 + .filter(Objects::nonNull) // 过滤掉 null 值 + .map(Record::toMap) // 将每个 Record 对象转换为 Map + .collect(Collectors.toList()); // 收集到 List HttpResponse httpResponse = new HttpResponse(request); httpResponse.addHeader(HeaderName.Content_Type, HeaderValue.Content_Type.TEXT_PLAIN_JSON); @@ -40,30 +40,7 @@ public HttpResponse cacheQuery(HttpRequest request) { } private Record findByIdWithCache(String tableName, int id) { - - ICache cache = CaffeineCache.getCache("world"); - - // firsthandCreater用户查询数据库 - FirsthandCreater firsthandCreater = new FirsthandCreater() { - @Override - public Record create() { - // log.info("select from db:{},id", tableName, id); - return Db.findById(tableName, id); - } - }; - - String key = id + ""; - boolean putTempToCacheIfNull = false; - Record value = CacheUtils.get(cache, key, putTempToCacheIfNull, firsthandCreater); - return value; - } - - public HttpResponse cacheList(HttpRequest request) { - Collection keys = CaffeineCache.getCache("world").keys(); - - HttpResponse httpResponse = new HttpResponse(request); - httpResponse.addHeader(HeaderName.Content_Type, HeaderValue.Content_Type.TEXT_PLAIN_JSON); - httpResponse.setBody(JSON.toJSONString(keys).getBytes()); - return httpResponse; + String sql = "SELECT id, randomNumber FROM world WHERE id = ?"; + return Db.findFirstByCache(tableName, id, sql, id); } } diff --git a/frameworks/Java/tio-server/src/main/java/com/litongjava/tio/http/server/controller/DbController.java b/frameworks/Java/tio-server/src/main/java/com/litongjava/tio/http/server/controller/DbController.java index f7f2b9c087b..d3461ff5cb5 100644 --- a/frameworks/Java/tio-server/src/main/java/com/litongjava/tio/http/server/controller/DbController.java +++ b/frameworks/Java/tio-server/src/main/java/com/litongjava/tio/http/server/controller/DbController.java @@ -11,6 +11,7 @@ import com.alibaba.fastjson2.JSON; import com.jfinal.plugin.activerecord.Db; import com.jfinal.plugin.activerecord.Record; +import com.jfinal.plugin.ehcache.CacheKit; import com.jfinal.template.Engine; import com.jfinal.template.Template; import com.litongjava.tio.http.common.HeaderName; @@ -71,8 +72,7 @@ public HttpResponse queries(HttpRequest request) { public HttpResponse updates(HttpRequest request) { String queries = request.getParam("queries"); - ICache cache = CaffeineCache.getCache("world"); - cache.clear(); + CacheKit.removeAll("world"); List> updatedRecords = RandomUtils.randomWorldNumbers()// random numbers // limit diff --git a/frameworks/Java/tio-server/src/main/java/com/litongjava/tio/http/server/utils/EnviormentUtils.java b/frameworks/Java/tio-server/src/main/java/com/litongjava/tio/http/server/utils/EnviormentUtils.java index dc8b7dfe9d7..39a1b5e8786 100644 --- a/frameworks/Java/tio-server/src/main/java/com/litongjava/tio/http/server/utils/EnviormentUtils.java +++ b/frameworks/Java/tio-server/src/main/java/com/litongjava/tio/http/server/utils/EnviormentUtils.java @@ -1,98 +1,98 @@ -package com.litongjava.tio.http.server.utils; - -import java.util.HashMap; -import java.util.Map; - -public class EnviormentUtils { - private static String[] args; - private static Map cmdArgsMap = new HashMap<>(); - - public static String[] getArgs() { - return args; - } - - public Map getCmdArgsMap() { - return cmdArgsMap; - } - - public static Map buildCmdArgsMap(String[] args) { - EnviormentUtils.args = args; - Map result = new HashMap<>(); - for (String arg : args) { - if (arg.startsWith("--")) { - String[] parts = arg.substring(2).split("=", 2); - if (parts.length == 2) { - result.put(parts[0], parts[1]); - } - } - } - cmdArgsMap = result; - return result; - } - - public static String getStr(String key) { - // comamdn line - String value = cmdArgsMap.get(key); - // enviorment - if (value == null) { - value = System.getProperty(key); - } - - // config file - if (value == null) { - value = System.getenv(key); - - } - - return value; - } - - public static String get(String key) { - return getStr(key); - } - - public static Integer getInt(String key) { - String value = getStr(key); - if (value != null) { - return Integer.valueOf(value); - } else { - return null; - } - - } - - public static int getInt(String key, int defaultValue) { - String value = get(key); - if (value != null) { - return Integer.parseInt(value); - } else { - return defaultValue; - } - } - - public static String get(String key, String defaultValue) { - String value = get(key); - if (value != null) { - return value; - } else { - return defaultValue; - } - } - - public static boolean getBoolean(String key) { - return Boolean.parseBoolean(get(key)); - } - - public static boolean getBoolean(String key, boolean defaultValue) { - String value = get(key); - if (value != null) { - return Boolean.parseBoolean(value); - } else { - return defaultValue; - } - } -// public static void main(String[] args) { -// String string = EnviormentUtils.get("jdbc.user"); -// System.out.println(string); +//package com.litongjava.tio.http.server.utils; +// +//import java.util.HashMap; +//import java.util.Map; +// +//public class EnviormentUtils { +// private static String[] args; +// private static Map cmdArgsMap = new HashMap<>(); +// +// public static String[] getArgs() { +// return args; // } -} +// +// public Map getCmdArgsMap() { +// return cmdArgsMap; +// } +// +// public static Map buildCmdArgsMap(String[] args) { +// EnviormentUtils.args = args; +// Map result = new HashMap<>(); +// for (String arg : args) { +// if (arg.startsWith("--")) { +// String[] parts = arg.substring(2).split("=", 2); +// if (parts.length == 2) { +// result.put(parts[0], parts[1]); +// } +// } +// } +// cmdArgsMap = result; +// return result; +// } +// +// public static String getStr(String key) { +// // comamdn line +// String value = cmdArgsMap.get(key); +// // enviorment +// if (value == null) { +// value = System.getProperty(key); +// } +// +// // config file +// if (value == null) { +// value = System.getenv(key); +// +// } +// +// return value; +// } +// +// public static String get(String key) { +// return getStr(key); +// } +// +// public static Integer getInt(String key) { +// String value = getStr(key); +// if (value != null) { +// return Integer.valueOf(value); +// } else { +// return null; +// } +// +// } +// +// public static int getInt(String key, int defaultValue) { +// String value = get(key); +// if (value != null) { +// return Integer.parseInt(value); +// } else { +// return defaultValue; +// } +// } +// +// public static String get(String key, String defaultValue) { +// String value = get(key); +// if (value != null) { +// return value; +// } else { +// return defaultValue; +// } +// } +// +// public static boolean getBoolean(String key) { +// return Boolean.parseBoolean(get(key)); +// } +// +// public static boolean getBoolean(String key, boolean defaultValue) { +// String value = get(key); +// if (value != null) { +// return Boolean.parseBoolean(value); +// } else { +// return defaultValue; +// } +// } +//// public static void main(String[] args) { +//// String string = EnviormentUtils.get("jdbc.user"); +//// System.out.println(string); +//// } +//} diff --git a/frameworks/Java/tio-server/src/main/resources/ehcache.xml b/frameworks/Java/tio-server/src/main/resources/ehcache.xml new file mode 100644 index 00000000000..79b79e49479 --- /dev/null +++ b/frameworks/Java/tio-server/src/main/resources/ehcache.xml @@ -0,0 +1,9 @@ + + + + + + + From f0da2f51b55e003e757c595ab78beecbb83f987f Mon Sep 17 00:00:00 2001 From: litongjava Date: Wed, 27 Dec 2023 10:19:57 -1000 Subject: [PATCH 23/39] failed to test native --- frameworks/Java/tio-server/pom.xml | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/frameworks/Java/tio-server/pom.xml b/frameworks/Java/tio-server/pom.xml index 2be7ddbdc70..c639ee47789 100644 --- a/frameworks/Java/tio-server/pom.xml +++ b/frameworks/Java/tio-server/pom.xml @@ -1,4 +1,5 @@ - + 4.0.0 com.litongjava tio-server-benchmark @@ -9,6 +10,8 @@ 1.8 ${java.version} ${java.version} + + 23.1.1 com.litongjava.tio.http.server.MainApp @@ -54,11 +57,6 @@ true - - org.slf4j - slf4j-api - 1.7.25 - ch.qos.logback logback-classic @@ -162,7 +160,7 @@ - ${project.build.finalName}-native + ${final.name} org.graalvm.nativeimage @@ -178,7 +176,7 @@ false - ${project.build.finalName}-native + ${project.build.finalName} ${main.class} -H:+RemoveSaturatedTypeFlows From d63b9387e232eefb33be93774d8b4b3ec39225af Mon Sep 17 00:00:00 2001 From: litongjava Date: Wed, 27 Dec 2023 10:27:30 -1000 Subject: [PATCH 24/39] change to cached_query_url --- frameworks/Java/tio-server/benchmark_config.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frameworks/Java/tio-server/benchmark_config.json b/frameworks/Java/tio-server/benchmark_config.json index 7958f115c87..5cd4c92b275 100644 --- a/frameworks/Java/tio-server/benchmark_config.json +++ b/frameworks/Java/tio-server/benchmark_config.json @@ -8,7 +8,7 @@ "query_url": "/queries?queries=", "fortune_url": "/fortunes", "update_url": "/updates?queries=", - "cached_query" : "/cachedQuery?queries=", + "cached_query_url" : "/cachedQuery?queries=", "port": 8080, "approach": "Realistic", "classification": "Micro", From db955280ab4c82c79c4a8e4029637ba7eeb84038 Mon Sep 17 00:00:00 2001 From: litongjava Date: Wed, 27 Dec 2023 10:32:18 -1000 Subject: [PATCH 25/39] add native arg --- .../com/litongjava/tio/http/server/MainApp.java | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/frameworks/Java/tio-server/src/main/java/com/litongjava/tio/http/server/MainApp.java b/frameworks/Java/tio-server/src/main/java/com/litongjava/tio/http/server/MainApp.java index ab9d909586f..235fe8d1f9e 100644 --- a/frameworks/Java/tio-server/src/main/java/com/litongjava/tio/http/server/MainApp.java +++ b/frameworks/Java/tio-server/src/main/java/com/litongjava/tio/http/server/MainApp.java @@ -13,10 +13,13 @@ import com.litongjava.tio.http.server.handler.SimpleHttpRoutes; import com.litongjava.tio.server.ServerTioConfig; import com.litongjava.tio.utils.environment.EnvironmentUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; public class MainApp { public static void main(String[] args) { + Logger log = LoggerFactory.getLogger(MainApp.class); long start = System.currentTimeMillis(); EnvironmentUtils.buildCmdArgsMap(args); // add route @@ -51,9 +54,13 @@ public static void main(String[] args) { // start server try { httpServerStarter.start(); - new MysqlDbConfig().init(); - new EnjoyEngineConfig().engine(); - new EhCachePluginConfig().ehCachePlugin(); + if (!EnvironmentUtils.getBoolean("native")) { + new MysqlDbConfig().init(); + new EnjoyEngineConfig().engine(); + new EhCachePluginConfig().ehCachePlugin(); + } else { + log.info("native mode,only start server"); + } long end = System.currentTimeMillis(); System.out.println((end - start) + "ms"); } catch (Exception e) { From 1066f4d359a8bc8f7340b46b4fc0535475699237 Mon Sep 17 00:00:00 2001 From: litongjava Date: Sat, 25 May 2024 09:59:14 -1000 Subject: [PATCH 26/39] remove unused file for tio-http-server --- .../.gitignore | 0 .../{tio-server => tio-http-server}/README.md | 0 .../api/tio-server-benchmark.md | 0 .../benchmark_config.json | 0 .../config.toml | 0 .../{tio-server => tio-http-server}/pom.xml | 8 +- .../litongjava/tio/http/server/MainApp.java | 0 .../server/config/EhCachePluginConfig.java | 0 .../http/server/config/EnjoyEngineConfig.java | 0 .../tio/http/server/config/MysqlDbConfig.java | 0 .../server/controller/CacheController.java | 0 .../http/server/controller/DbController.java | 0 .../server/controller/IndexController.java | 0 .../tio/http/server/model/Fortune.java | 0 .../tio/http/server/model/Message.java | 0 .../tio/http/server/model/World.java | 0 .../tio/http/server/services/CacheName.java | 0 .../server/services/CacheNameService.java | 0 .../http/server/utils/BeanConverterUtils.java | 0 .../http/server/utils/EnviormentUtils.java | 0 .../tio/http/server/utils/RandomUtils.java | 0 .../src/main/resources/ehcache.xml | 0 .../src/main/resources/logback.xml | 0 .../main/resources/templates/fortunes.html | 0 .../tio-server-native.dockerfile | 9 + .../tio-server.dockerfile | 2 +- ...\200\345\205\250\347\232\204.dockerignore" | 19 +++ ...204.gitignore\346\226\207\344\273\266.txt" | 155 ++++++++++++++++++ .../Java/tio-server/sql/hello_world.sql | 76 --------- ...0\346\234\254\346\226\207\346\241\243.jnt" | Bin 4544 -> 0 bytes 30 files changed, 187 insertions(+), 82 deletions(-) rename frameworks/Java/{tio-server => tio-http-server}/.gitignore (100%) rename frameworks/Java/{tio-server => tio-http-server}/README.md (100%) rename frameworks/Java/{tio-server => tio-http-server}/api/tio-server-benchmark.md (100%) rename frameworks/Java/{tio-server => tio-http-server}/benchmark_config.json (100%) rename frameworks/Java/{tio-server => tio-http-server}/config.toml (100%) rename frameworks/Java/{tio-server => tio-http-server}/pom.xml (97%) rename frameworks/Java/{tio-server => tio-http-server}/src/main/java/com/litongjava/tio/http/server/MainApp.java (100%) rename frameworks/Java/{tio-server => tio-http-server}/src/main/java/com/litongjava/tio/http/server/config/EhCachePluginConfig.java (100%) rename frameworks/Java/{tio-server => tio-http-server}/src/main/java/com/litongjava/tio/http/server/config/EnjoyEngineConfig.java (100%) rename frameworks/Java/{tio-server => tio-http-server}/src/main/java/com/litongjava/tio/http/server/config/MysqlDbConfig.java (100%) rename frameworks/Java/{tio-server => tio-http-server}/src/main/java/com/litongjava/tio/http/server/controller/CacheController.java (100%) rename frameworks/Java/{tio-server => tio-http-server}/src/main/java/com/litongjava/tio/http/server/controller/DbController.java (100%) rename frameworks/Java/{tio-server => tio-http-server}/src/main/java/com/litongjava/tio/http/server/controller/IndexController.java (100%) rename frameworks/Java/{tio-server => tio-http-server}/src/main/java/com/litongjava/tio/http/server/model/Fortune.java (100%) rename frameworks/Java/{tio-server => tio-http-server}/src/main/java/com/litongjava/tio/http/server/model/Message.java (100%) rename frameworks/Java/{tio-server => tio-http-server}/src/main/java/com/litongjava/tio/http/server/model/World.java (100%) rename frameworks/Java/{tio-server => tio-http-server}/src/main/java/com/litongjava/tio/http/server/services/CacheName.java (100%) rename frameworks/Java/{tio-server => tio-http-server}/src/main/java/com/litongjava/tio/http/server/services/CacheNameService.java (100%) rename frameworks/Java/{tio-server => tio-http-server}/src/main/java/com/litongjava/tio/http/server/utils/BeanConverterUtils.java (100%) rename frameworks/Java/{tio-server => tio-http-server}/src/main/java/com/litongjava/tio/http/server/utils/EnviormentUtils.java (100%) rename frameworks/Java/{tio-server => tio-http-server}/src/main/java/com/litongjava/tio/http/server/utils/RandomUtils.java (100%) rename frameworks/Java/{tio-server => tio-http-server}/src/main/resources/ehcache.xml (100%) rename frameworks/Java/{tio-server => tio-http-server}/src/main/resources/logback.xml (100%) rename frameworks/Java/{tio-server => tio-http-server}/src/main/resources/templates/fortunes.html (100%) create mode 100644 frameworks/Java/tio-http-server/tio-server-native.dockerfile rename frameworks/Java/{tio-server => tio-http-server}/tio-server.dockerfile (95%) create mode 100644 "frameworks/Java/tio-http-server/\346\234\200\345\205\250\347\232\204.dockerignore" create mode 100644 "frameworks/Java/tio-http-server/\346\234\200\345\205\250\347\232\204.gitignore\346\226\207\344\273\266.txt" delete mode 100644 frameworks/Java/tio-server/sql/hello_world.sql delete mode 100644 "frameworks/Java/tio-server/src/test/java/\346\226\260\345\273\272\346\227\245\350\256\260\346\234\254\346\226\207\346\241\243.jnt" diff --git a/frameworks/Java/tio-server/.gitignore b/frameworks/Java/tio-http-server/.gitignore similarity index 100% rename from frameworks/Java/tio-server/.gitignore rename to frameworks/Java/tio-http-server/.gitignore diff --git a/frameworks/Java/tio-server/README.md b/frameworks/Java/tio-http-server/README.md similarity index 100% rename from frameworks/Java/tio-server/README.md rename to frameworks/Java/tio-http-server/README.md diff --git a/frameworks/Java/tio-server/api/tio-server-benchmark.md b/frameworks/Java/tio-http-server/api/tio-server-benchmark.md similarity index 100% rename from frameworks/Java/tio-server/api/tio-server-benchmark.md rename to frameworks/Java/tio-http-server/api/tio-server-benchmark.md diff --git a/frameworks/Java/tio-server/benchmark_config.json b/frameworks/Java/tio-http-server/benchmark_config.json similarity index 100% rename from frameworks/Java/tio-server/benchmark_config.json rename to frameworks/Java/tio-http-server/benchmark_config.json diff --git a/frameworks/Java/tio-server/config.toml b/frameworks/Java/tio-http-server/config.toml similarity index 100% rename from frameworks/Java/tio-server/config.toml rename to frameworks/Java/tio-http-server/config.toml diff --git a/frameworks/Java/tio-server/pom.xml b/frameworks/Java/tio-http-server/pom.xml similarity index 97% rename from frameworks/Java/tio-server/pom.xml rename to frameworks/Java/tio-http-server/pom.xml index c639ee47789..b92bc8c1602 100644 --- a/frameworks/Java/tio-server/pom.xml +++ b/frameworks/Java/tio-http-server/pom.xml @@ -2,7 +2,7 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 com.litongjava - tio-server-benchmark + tio-http-server-benchmark 1.0 ${project.artifactId} @@ -21,7 +21,6 @@ 3.7.3.v20231224-RELEASE - com.jfinal @@ -35,7 +34,6 @@ 2.6.11 - mysql mysql-connector-java @@ -160,7 +158,7 @@ - ${final.name} + ${project.artifactId} org.graalvm.nativeimage @@ -176,7 +174,7 @@ false - ${project.build.finalName} + ${project.artifactId} ${main.class} -H:+RemoveSaturatedTypeFlows diff --git a/frameworks/Java/tio-server/src/main/java/com/litongjava/tio/http/server/MainApp.java b/frameworks/Java/tio-http-server/src/main/java/com/litongjava/tio/http/server/MainApp.java similarity index 100% rename from frameworks/Java/tio-server/src/main/java/com/litongjava/tio/http/server/MainApp.java rename to frameworks/Java/tio-http-server/src/main/java/com/litongjava/tio/http/server/MainApp.java diff --git a/frameworks/Java/tio-server/src/main/java/com/litongjava/tio/http/server/config/EhCachePluginConfig.java b/frameworks/Java/tio-http-server/src/main/java/com/litongjava/tio/http/server/config/EhCachePluginConfig.java similarity index 100% rename from frameworks/Java/tio-server/src/main/java/com/litongjava/tio/http/server/config/EhCachePluginConfig.java rename to frameworks/Java/tio-http-server/src/main/java/com/litongjava/tio/http/server/config/EhCachePluginConfig.java diff --git a/frameworks/Java/tio-server/src/main/java/com/litongjava/tio/http/server/config/EnjoyEngineConfig.java b/frameworks/Java/tio-http-server/src/main/java/com/litongjava/tio/http/server/config/EnjoyEngineConfig.java similarity index 100% rename from frameworks/Java/tio-server/src/main/java/com/litongjava/tio/http/server/config/EnjoyEngineConfig.java rename to frameworks/Java/tio-http-server/src/main/java/com/litongjava/tio/http/server/config/EnjoyEngineConfig.java diff --git a/frameworks/Java/tio-server/src/main/java/com/litongjava/tio/http/server/config/MysqlDbConfig.java b/frameworks/Java/tio-http-server/src/main/java/com/litongjava/tio/http/server/config/MysqlDbConfig.java similarity index 100% rename from frameworks/Java/tio-server/src/main/java/com/litongjava/tio/http/server/config/MysqlDbConfig.java rename to frameworks/Java/tio-http-server/src/main/java/com/litongjava/tio/http/server/config/MysqlDbConfig.java diff --git a/frameworks/Java/tio-server/src/main/java/com/litongjava/tio/http/server/controller/CacheController.java b/frameworks/Java/tio-http-server/src/main/java/com/litongjava/tio/http/server/controller/CacheController.java similarity index 100% rename from frameworks/Java/tio-server/src/main/java/com/litongjava/tio/http/server/controller/CacheController.java rename to frameworks/Java/tio-http-server/src/main/java/com/litongjava/tio/http/server/controller/CacheController.java diff --git a/frameworks/Java/tio-server/src/main/java/com/litongjava/tio/http/server/controller/DbController.java b/frameworks/Java/tio-http-server/src/main/java/com/litongjava/tio/http/server/controller/DbController.java similarity index 100% rename from frameworks/Java/tio-server/src/main/java/com/litongjava/tio/http/server/controller/DbController.java rename to frameworks/Java/tio-http-server/src/main/java/com/litongjava/tio/http/server/controller/DbController.java diff --git a/frameworks/Java/tio-server/src/main/java/com/litongjava/tio/http/server/controller/IndexController.java b/frameworks/Java/tio-http-server/src/main/java/com/litongjava/tio/http/server/controller/IndexController.java similarity index 100% rename from frameworks/Java/tio-server/src/main/java/com/litongjava/tio/http/server/controller/IndexController.java rename to frameworks/Java/tio-http-server/src/main/java/com/litongjava/tio/http/server/controller/IndexController.java diff --git a/frameworks/Java/tio-server/src/main/java/com/litongjava/tio/http/server/model/Fortune.java b/frameworks/Java/tio-http-server/src/main/java/com/litongjava/tio/http/server/model/Fortune.java similarity index 100% rename from frameworks/Java/tio-server/src/main/java/com/litongjava/tio/http/server/model/Fortune.java rename to frameworks/Java/tio-http-server/src/main/java/com/litongjava/tio/http/server/model/Fortune.java diff --git a/frameworks/Java/tio-server/src/main/java/com/litongjava/tio/http/server/model/Message.java b/frameworks/Java/tio-http-server/src/main/java/com/litongjava/tio/http/server/model/Message.java similarity index 100% rename from frameworks/Java/tio-server/src/main/java/com/litongjava/tio/http/server/model/Message.java rename to frameworks/Java/tio-http-server/src/main/java/com/litongjava/tio/http/server/model/Message.java diff --git a/frameworks/Java/tio-server/src/main/java/com/litongjava/tio/http/server/model/World.java b/frameworks/Java/tio-http-server/src/main/java/com/litongjava/tio/http/server/model/World.java similarity index 100% rename from frameworks/Java/tio-server/src/main/java/com/litongjava/tio/http/server/model/World.java rename to frameworks/Java/tio-http-server/src/main/java/com/litongjava/tio/http/server/model/World.java diff --git a/frameworks/Java/tio-server/src/main/java/com/litongjava/tio/http/server/services/CacheName.java b/frameworks/Java/tio-http-server/src/main/java/com/litongjava/tio/http/server/services/CacheName.java similarity index 100% rename from frameworks/Java/tio-server/src/main/java/com/litongjava/tio/http/server/services/CacheName.java rename to frameworks/Java/tio-http-server/src/main/java/com/litongjava/tio/http/server/services/CacheName.java diff --git a/frameworks/Java/tio-server/src/main/java/com/litongjava/tio/http/server/services/CacheNameService.java b/frameworks/Java/tio-http-server/src/main/java/com/litongjava/tio/http/server/services/CacheNameService.java similarity index 100% rename from frameworks/Java/tio-server/src/main/java/com/litongjava/tio/http/server/services/CacheNameService.java rename to frameworks/Java/tio-http-server/src/main/java/com/litongjava/tio/http/server/services/CacheNameService.java diff --git a/frameworks/Java/tio-server/src/main/java/com/litongjava/tio/http/server/utils/BeanConverterUtils.java b/frameworks/Java/tio-http-server/src/main/java/com/litongjava/tio/http/server/utils/BeanConverterUtils.java similarity index 100% rename from frameworks/Java/tio-server/src/main/java/com/litongjava/tio/http/server/utils/BeanConverterUtils.java rename to frameworks/Java/tio-http-server/src/main/java/com/litongjava/tio/http/server/utils/BeanConverterUtils.java diff --git a/frameworks/Java/tio-server/src/main/java/com/litongjava/tio/http/server/utils/EnviormentUtils.java b/frameworks/Java/tio-http-server/src/main/java/com/litongjava/tio/http/server/utils/EnviormentUtils.java similarity index 100% rename from frameworks/Java/tio-server/src/main/java/com/litongjava/tio/http/server/utils/EnviormentUtils.java rename to frameworks/Java/tio-http-server/src/main/java/com/litongjava/tio/http/server/utils/EnviormentUtils.java diff --git a/frameworks/Java/tio-server/src/main/java/com/litongjava/tio/http/server/utils/RandomUtils.java b/frameworks/Java/tio-http-server/src/main/java/com/litongjava/tio/http/server/utils/RandomUtils.java similarity index 100% rename from frameworks/Java/tio-server/src/main/java/com/litongjava/tio/http/server/utils/RandomUtils.java rename to frameworks/Java/tio-http-server/src/main/java/com/litongjava/tio/http/server/utils/RandomUtils.java diff --git a/frameworks/Java/tio-server/src/main/resources/ehcache.xml b/frameworks/Java/tio-http-server/src/main/resources/ehcache.xml similarity index 100% rename from frameworks/Java/tio-server/src/main/resources/ehcache.xml rename to frameworks/Java/tio-http-server/src/main/resources/ehcache.xml diff --git a/frameworks/Java/tio-server/src/main/resources/logback.xml b/frameworks/Java/tio-http-server/src/main/resources/logback.xml similarity index 100% rename from frameworks/Java/tio-server/src/main/resources/logback.xml rename to frameworks/Java/tio-http-server/src/main/resources/logback.xml diff --git a/frameworks/Java/tio-server/src/main/resources/templates/fortunes.html b/frameworks/Java/tio-http-server/src/main/resources/templates/fortunes.html similarity index 100% rename from frameworks/Java/tio-server/src/main/resources/templates/fortunes.html rename to frameworks/Java/tio-http-server/src/main/resources/templates/fortunes.html diff --git a/frameworks/Java/tio-http-server/tio-server-native.dockerfile b/frameworks/Java/tio-http-server/tio-server-native.dockerfile new file mode 100644 index 00000000000..55eba71670a --- /dev/null +++ b/frameworks/Java/tio-http-server/tio-server-native.dockerfile @@ -0,0 +1,9 @@ +FROM litongjava/maven:3.8.8-graalvm-jdk-21-slim +WORKDIR /t-io +COPY pom.xml pom.xml +COPY src src +RUN mvn package -Pnative -q + +EXPOSE 8080 + +CMD ["/t-io/target/tio-server-benchmark", " --native=true"] diff --git a/frameworks/Java/tio-server/tio-server.dockerfile b/frameworks/Java/tio-http-server/tio-server.dockerfile similarity index 95% rename from frameworks/Java/tio-server/tio-server.dockerfile rename to frameworks/Java/tio-http-server/tio-server.dockerfile index 15fddd6db5a..619ffcb40cf 100644 --- a/frameworks/Java/tio-server/tio-server.dockerfile +++ b/frameworks/Java/tio-http-server/tio-server.dockerfile @@ -9,4 +9,4 @@ WORKDIR /t-io/target/tio-server-benchmark EXPOSE 8080 -CMD ["java", "-server", "-Xms1G", "-Xmx1G", "-XX:+UseNUMA", "-XX:+UseParallelGC", "-Dpacket.handler.mode=queue1", "-jar", "/t-io/target/tio-server-benchmark-1.0.jar","--JDBC_URL=jdbc:mysql://tfb-database/hello_world","--JDBC_USER=benchmarkdbuser" ,"--JDBC_PSWD=benchmarkdbpass"] +CMD ["java", "-server", "-Xms1G", "-Xmx1G", "-XX:+UseNUMA", "-XX:+UseParallelGC", "-Dpacket.handler.mode=queue1", "-jar", "/t-io/target/tio-server-benchmark-1.0.jar","--JDBC_URL=jdbc:mysql://tfb-database/hello_world","--JDBC_USER=benchmarkdbuser" ,"--JDBC_PSWD=benchmarkdbpass"] \ No newline at end of file diff --git "a/frameworks/Java/tio-http-server/\346\234\200\345\205\250\347\232\204.dockerignore" "b/frameworks/Java/tio-http-server/\346\234\200\345\205\250\347\232\204.dockerignore" new file mode 100644 index 00000000000..cba5dfe3c3b --- /dev/null +++ "b/frameworks/Java/tio-http-server/\346\234\200\345\205\250\347\232\204.dockerignore" @@ -0,0 +1,19 @@ +.github +.git +.DS_Store +docs +kubernetes +node_modules +/.svelte-kit +/package +.env +.env.* +vite.config.js.timestamp-* +vite.config.ts.timestamp-* +__pycache__ +.env +_old +uploads +.ipynb_checkpoints +**/*.db +_test \ No newline at end of file diff --git "a/frameworks/Java/tio-http-server/\346\234\200\345\205\250\347\232\204.gitignore\346\226\207\344\273\266.txt" "b/frameworks/Java/tio-http-server/\346\234\200\345\205\250\347\232\204.gitignore\346\226\207\344\273\266.txt" new file mode 100644 index 00000000000..e318edc2a0d --- /dev/null +++ "b/frameworks/Java/tio-http-server/\346\234\200\345\205\250\347\232\204.gitignore\346\226\207\344\273\266.txt" @@ -0,0 +1,155 @@ +### Eclipse template +*.pydevproject +.metadata +.gradle* +classes/ +bin/ +tmp/ +*.tmp +*.bak +*.swp +*~.nib +local.properties +.settings/ +.loadpath +rebel.xml + +# Eclipse Core +.project + +generatedsources + +# External tool builders +.externalToolBuilders/ + +# Locally stored "Eclipse launch configurations" +*.launch + +# CDT-specific +.cproject + +# JDT-specific (Eclipse Java Development Tools) +.classpath + +# PDT-specific +.buildpath + +# sbteclipse plugin +.target + +# TeXlipse plugin +.texlipse + + + +### JetBrains template +# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm + +*.iml +.flattened-pom.xml +## Directory-based project format: +.idea/ +# if you remove the above rule, at least ignore the following: + +# User-specific stuff: +# .idea/workspace.xml +# .idea/tasks.xml +# .idea/dictionaries + +# Sensitive or high-churn files: +# .idea/dataSources.ids +# .idea/dataSources.xml +# .idea/sqlDataSources.xml +# .idea/dynamic.xml +# .idea/uiDesigner.xml + +# Gradle: +# .idea/gradle.xml +# .idea/libraries + +# Mongo Explorer plugin: +# .idea/mongoSettings.xml + +## File-based project format: +*.ipr +*.iws + +## Plugin-specific files: + +# IntelliJ +/out/ + +# mpeltonen/sbt-idea plugin +.idea_modules/ + +# JIRA plugin +atlassian-ide-plugin.xml + +# Crashlytics plugin (for Android Studio and IntelliJ) +com_crashlytics_export_strings.xml +crashlytics.properties +crashlytics-build.properties + +build/ + +# Ignore Gradle GUI config +gradle-app.setting + +# Avoid ignoring Gradle wrapper jar file (.jar files are usually ignored) +!gradle-wrapper.jar + +db + +### Java template +*.class + +# Mobile Tools for Java (J2ME) +.mtj.tmp/ + +# Package Files # +#*.jar + +# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml +hs_err_pid* + + +### Leiningen template +classes/ +target/ +logs/ +checkouts/ +.lein-deps-sum +.lein-repl-history +.lein-plugins/ +.lein-failures +.nrepl-port + +querydsl/ + +.DS_Store + +*.exe +*.out + +*.log +node_modules/ +dist/ +dist.zip +package-lock.json +*.lock +local.properties +.cxx +.externalNativeBuild +/captures +/build +__pycache__/ +*.pyc + + +cmake-build-debug/ +cmake-build-debug-mingw/ +venv/ +.vs/ +Debug/ +vcpkg_installed/ +.env \ No newline at end of file diff --git a/frameworks/Java/tio-server/sql/hello_world.sql b/frameworks/Java/tio-server/sql/hello_world.sql deleted file mode 100644 index 2e3f99ad304..00000000000 --- a/frameworks/Java/tio-server/sql/hello_world.sql +++ /dev/null @@ -1,76 +0,0 @@ -/* - Source Schema : hello_world -*/ - -SET NAMES utf8mb4; -SET FOREIGN_KEY_CHECKS = 0; - --- ---------------------------- --- Table structure for fortune --- ---------------------------- -DROP TABLE IF EXISTS `fortune`; -CREATE TABLE `fortune` ( - `id` int(11) NOT NULL AUTO_INCREMENT, - `message` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, - PRIMARY KEY (`id`) USING BTREE -) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic; - --- ---------------------------- --- Records of fortune --- ---------------------------- - -INSERT INTO `fortune` (`message`) VALUES ('Fortune 1'); -INSERT INTO `fortune` (`message`) VALUES ('Fortune 2'); -INSERT INTO `fortune` (`message`) VALUES ('Fortune 3'); -INSERT INTO `fortune` (`message`) VALUES ('Fortune 4'); -INSERT INTO `fortune` (`message`) VALUES ('Fortune 5'); -INSERT INTO `fortune` (`message`) VALUES ('Fortune 6'); -INSERT INTO `fortune` (`message`) VALUES ('Fortune 7'); -INSERT INTO `fortune` (`message`) VALUES ('Fortune 8'); -INSERT INTO `fortune` (`message`) VALUES ('Fortune 9'); -INSERT INTO `fortune` (`message`) VALUES ('Fortune 10'); --- ---------------------------- --- Table structure for world --- ---------------------------- -DROP TABLE IF EXISTS `world`; -CREATE TABLE `world` ( - `id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT, - `randomNumber` int(11) NOT NULL, - PRIMARY KEY (`id`) USING BTREE -) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic; - --- ---------------------------- --- Records of world --- ---------------------------- -INSERT INTO world (randomNumber) VALUES (FLOOR(1 + RAND() * 10001)); -INSERT INTO world (randomNumber) VALUES (FLOOR(1 + RAND() * 10001)); -INSERT INTO world (randomNumber) VALUES (FLOOR(1 + RAND() * 10001)); -INSERT INTO world (randomNumber) VALUES (FLOOR(1 + RAND() * 10001)); -INSERT INTO world (randomNumber) VALUES (FLOOR(1 + RAND() * 10001)); -INSERT INTO world (randomNumber) VALUES (FLOOR(1 + RAND() * 10001)); -INSERT INTO world (randomNumber) VALUES (FLOOR(1 + RAND() * 10001)); -INSERT INTO world (randomNumber) VALUES (FLOOR(1 + RAND() * 10001)); -INSERT INTO world (randomNumber) VALUES (FLOOR(1 + RAND() * 10001)); -INSERT INTO world (randomNumber) VALUES (FLOOR(1 + RAND() * 10001)); -INSERT INTO world (randomNumber) VALUES (FLOOR(1 + RAND() * 10001)); -INSERT INTO world (randomNumber) VALUES (FLOOR(1 + RAND() * 10001)); -INSERT INTO world (randomNumber) VALUES (FLOOR(1 + RAND() * 10001)); -INSERT INTO world (randomNumber) VALUES (FLOOR(1 + RAND() * 10001)); -INSERT INTO world (randomNumber) VALUES (FLOOR(1 + RAND() * 10001)); -INSERT INTO world (randomNumber) VALUES (FLOOR(1 + RAND() * 10001)); -INSERT INTO world (randomNumber) VALUES (FLOOR(1 + RAND() * 10001)); -INSERT INTO world (randomNumber) VALUES (FLOOR(1 + RAND() * 10001)); -INSERT INTO world (randomNumber) VALUES (FLOOR(1 + RAND() * 10001)); -INSERT INTO world (randomNumber) VALUES (FLOOR(1 + RAND() * 10001)); -INSERT INTO world (randomNumber) VALUES (FLOOR(1 + RAND() * 10001)); -INSERT INTO world (randomNumber) VALUES (FLOOR(1 + RAND() * 10001)); -INSERT INTO world (randomNumber) VALUES (FLOOR(1 + RAND() * 10001)); -INSERT INTO world (randomNumber) VALUES (FLOOR(1 + RAND() * 10001)); -INSERT INTO world (randomNumber) VALUES (FLOOR(1 + RAND() * 10001)); -INSERT INTO world (randomNumber) VALUES (FLOOR(1 + RAND() * 10001)); -INSERT INTO world (randomNumber) VALUES (FLOOR(1 + RAND() * 10001)); -INSERT INTO world (randomNumber) VALUES (FLOOR(1 + RAND() * 10001)); -INSERT INTO world (randomNumber) VALUES (FLOOR(1 + RAND() * 10001)); -INSERT INTO world (randomNumber) VALUES (FLOOR(1 + RAND() * 10001)); - -SET FOREIGN_KEY_CHECKS = 1; diff --git "a/frameworks/Java/tio-server/src/test/java/\346\226\260\345\273\272\346\227\245\350\256\260\346\234\254\346\226\207\346\241\243.jnt" "b/frameworks/Java/tio-server/src/test/java/\346\226\260\345\273\272\346\227\245\350\256\260\346\234\254\346\226\207\346\241\243.jnt" deleted file mode 100644 index e63c25323a2203faf5bc11b08eaca2f75fb6013b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4544 zcmeHJZ)j6j6hE(Nw3WIg?QD};ZNiiW>xbAsq9Pg-1x09TEkjsU>e{Z3cFk(j>GtJS z9dkNC*^mxI*@v;QQRom6r_;1$U_nsyg9vkUMf|oYaSS$RvfuCZ-udWi7P^5<`U^Mb z+;i`{=bm%#`<+)8ULwDXNWCGh97vfXVnCz;cJ~?=VmlrT4IgcI(RyPyrSIV4`KyE7M&YZ(*JqyEi25;=jHW|L2u5W!m!u@u8ZCrL42Pw2wqetAY`R0~xtKFc=?>^_ zV`7~==<{szilNDfF?VtB}Drmo2+UGF*$E4mcQ*Q zlYjG-eMSAzo9+{LBoS>tl%}70H2eAKb70P=1MrW<=iIN(-9N2E|I9Vvly%_vUNHV% z@L)44K@B)Q2##+>C8|Mf2xF`RwpxreV`e>S!xNDI@pWtEle{$*H1BI^pYtE^|6lbd z+xS^0V`>wOKaQyOApSQHUk~C7!qQ?@!M9}@#+j8`5kJq%RGV<3=EhOiI}s(nJvQMhq|N#gprr?uzYCV9BY=}<>;&u7RM2s2X`k~f z;^%p7vv1;G>J!mV{7+*ki@)dN!4O&*+D0^u$vi|Jr;U=x#6M&2olgE1ZFhZjJWnbs h&fF&dkn{LF`A>0x=~Fg)oyeAdXXa&BC!dz5KLOxACUgJ* From 1059e3ab6e62b234c4e6fed1a5ccfe678ceaa71b Mon Sep 17 00:00:00 2001 From: litongjava Date: Sat, 25 May 2024 10:16:26 -1000 Subject: [PATCH 27/39] add dockerignore --- .../Java/tio-http-server/.dockerignore | 0 frameworks/Java/tio-http-server/.gitignore | 2 + ...204.gitignore\346\226\207\344\273\266.txt" | 155 ------------------ 3 files changed, 2 insertions(+), 155 deletions(-) rename "frameworks/Java/tio-http-server/\346\234\200\345\205\250\347\232\204.dockerignore" => frameworks/Java/tio-http-server/.dockerignore (100%) delete mode 100644 "frameworks/Java/tio-http-server/\346\234\200\345\205\250\347\232\204.gitignore\346\226\207\344\273\266.txt" diff --git "a/frameworks/Java/tio-http-server/\346\234\200\345\205\250\347\232\204.dockerignore" b/frameworks/Java/tio-http-server/.dockerignore similarity index 100% rename from "frameworks/Java/tio-http-server/\346\234\200\345\205\250\347\232\204.dockerignore" rename to frameworks/Java/tio-http-server/.dockerignore diff --git a/frameworks/Java/tio-http-server/.gitignore b/frameworks/Java/tio-http-server/.gitignore index b83d22266ac..2f089945614 100644 --- a/frameworks/Java/tio-http-server/.gitignore +++ b/frameworks/Java/tio-http-server/.gitignore @@ -1 +1,3 @@ /target/ +logs +.settings \ No newline at end of file diff --git "a/frameworks/Java/tio-http-server/\346\234\200\345\205\250\347\232\204.gitignore\346\226\207\344\273\266.txt" "b/frameworks/Java/tio-http-server/\346\234\200\345\205\250\347\232\204.gitignore\346\226\207\344\273\266.txt" deleted file mode 100644 index e318edc2a0d..00000000000 --- "a/frameworks/Java/tio-http-server/\346\234\200\345\205\250\347\232\204.gitignore\346\226\207\344\273\266.txt" +++ /dev/null @@ -1,155 +0,0 @@ -### Eclipse template -*.pydevproject -.metadata -.gradle* -classes/ -bin/ -tmp/ -*.tmp -*.bak -*.swp -*~.nib -local.properties -.settings/ -.loadpath -rebel.xml - -# Eclipse Core -.project - -generatedsources - -# External tool builders -.externalToolBuilders/ - -# Locally stored "Eclipse launch configurations" -*.launch - -# CDT-specific -.cproject - -# JDT-specific (Eclipse Java Development Tools) -.classpath - -# PDT-specific -.buildpath - -# sbteclipse plugin -.target - -# TeXlipse plugin -.texlipse - - - -### JetBrains template -# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm - -*.iml -.flattened-pom.xml -## Directory-based project format: -.idea/ -# if you remove the above rule, at least ignore the following: - -# User-specific stuff: -# .idea/workspace.xml -# .idea/tasks.xml -# .idea/dictionaries - -# Sensitive or high-churn files: -# .idea/dataSources.ids -# .idea/dataSources.xml -# .idea/sqlDataSources.xml -# .idea/dynamic.xml -# .idea/uiDesigner.xml - -# Gradle: -# .idea/gradle.xml -# .idea/libraries - -# Mongo Explorer plugin: -# .idea/mongoSettings.xml - -## File-based project format: -*.ipr -*.iws - -## Plugin-specific files: - -# IntelliJ -/out/ - -# mpeltonen/sbt-idea plugin -.idea_modules/ - -# JIRA plugin -atlassian-ide-plugin.xml - -# Crashlytics plugin (for Android Studio and IntelliJ) -com_crashlytics_export_strings.xml -crashlytics.properties -crashlytics-build.properties - -build/ - -# Ignore Gradle GUI config -gradle-app.setting - -# Avoid ignoring Gradle wrapper jar file (.jar files are usually ignored) -!gradle-wrapper.jar - -db - -### Java template -*.class - -# Mobile Tools for Java (J2ME) -.mtj.tmp/ - -# Package Files # -#*.jar - -# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml -hs_err_pid* - - -### Leiningen template -classes/ -target/ -logs/ -checkouts/ -.lein-deps-sum -.lein-repl-history -.lein-plugins/ -.lein-failures -.nrepl-port - -querydsl/ - -.DS_Store - -*.exe -*.out - -*.log -node_modules/ -dist/ -dist.zip -package-lock.json -*.lock -local.properties -.cxx -.externalNativeBuild -/captures -/build -__pycache__/ -*.pyc - - -cmake-build-debug/ -cmake-build-debug-mingw/ -venv/ -.vs/ -Debug/ -vcpkg_installed/ -.env \ No newline at end of file From 8e5983ee732a280fb44542a211d1435845912eb0 Mon Sep 17 00:00:00 2001 From: litongjava Date: Fri, 14 Jun 2024 16:08:13 -1000 Subject: [PATCH 28/39] update jar name to tio-http-server-benchmark --- frameworks/Java/tio-http-server/tio-server-native.dockerfile | 2 +- frameworks/Java/tio-http-server/tio-server.dockerfile | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/frameworks/Java/tio-http-server/tio-server-native.dockerfile b/frameworks/Java/tio-http-server/tio-server-native.dockerfile index 55eba71670a..8dd0f012ea0 100644 --- a/frameworks/Java/tio-http-server/tio-server-native.dockerfile +++ b/frameworks/Java/tio-http-server/tio-server-native.dockerfile @@ -6,4 +6,4 @@ RUN mvn package -Pnative -q EXPOSE 8080 -CMD ["/t-io/target/tio-server-benchmark", " --native=true"] +CMD ["/t-io/target/tio-http-server-benchmark", " --native=true"] diff --git a/frameworks/Java/tio-http-server/tio-server.dockerfile b/frameworks/Java/tio-http-server/tio-server.dockerfile index 619ffcb40cf..4f8d670e6b6 100644 --- a/frameworks/Java/tio-http-server/tio-server.dockerfile +++ b/frameworks/Java/tio-http-server/tio-server.dockerfile @@ -9,4 +9,4 @@ WORKDIR /t-io/target/tio-server-benchmark EXPOSE 8080 -CMD ["java", "-server", "-Xms1G", "-Xmx1G", "-XX:+UseNUMA", "-XX:+UseParallelGC", "-Dpacket.handler.mode=queue1", "-jar", "/t-io/target/tio-server-benchmark-1.0.jar","--JDBC_URL=jdbc:mysql://tfb-database/hello_world","--JDBC_USER=benchmarkdbuser" ,"--JDBC_PSWD=benchmarkdbpass"] \ No newline at end of file +CMD ["java", "-server", "-Xms1G", "-Xmx1G", "-XX:+UseNUMA", "-XX:+UseParallelGC", "-Dpacket.handler.mode=queue1", "-jar", "/t-io/target/tio-http-server-benchmark-1.0.jar","--JDBC_URL=jdbc:mysql://tfb-database/hello_world","--JDBC_USER=benchmarkdbuser" ,"--JDBC_PSWD=benchmarkdbpass"] \ No newline at end of file From 5cf69590c20b1471de7fd5b05dd6feec96f80c0c Mon Sep 17 00:00:00 2001 From: litongjava Date: Sun, 21 Jul 2024 11:45:39 +0900 Subject: [PATCH 29/39] update version --- frameworks/Java/tio-http-server/README.md | 2 +- frameworks/Java/tio-http-server/pom.xml | 11 ++- .../litongjava/tio/http/server/MainApp.java | 18 ++-- .../tio/http/server/config/MysqlDbConfig.java | 8 +- .../server/controller/CacheController.java | 19 ++-- .../http/server/controller/DbController.java | 2 - .../http/server/utils/EnviormentUtils.java | 98 ------------------- 7 files changed, 30 insertions(+), 128 deletions(-) delete mode 100644 frameworks/Java/tio-http-server/src/main/java/com/litongjava/tio/http/server/utils/EnviormentUtils.java diff --git a/frameworks/Java/tio-http-server/README.md b/frameworks/Java/tio-http-server/README.md index 99964299c8a..bb1539e7db1 100644 --- a/frameworks/Java/tio-http-server/README.md +++ b/frameworks/Java/tio-http-server/README.md @@ -100,7 +100,7 @@ tio-server-benchmark -windows ``` -D:\java\jdk1.8.0_121\bin\java -jar target\tio-server-benchmark-1.0.jar --JDBC_URL=jdbc:mysql://192.168.3.9/hello_world --JDBC_USER=root --JDBC_PSWD=robot_123456# +D:\java\jdk1.8.0_121\bin\java -jar target\tio-server-benchmark-1.0.jar --JDBC_URL=jdbc:mysql://192.168.3.9/hello_world?useSSL=false --JDBC_USER=root --JDBC_PSWD=robot_123456# ``` or ``` diff --git a/frameworks/Java/tio-http-server/pom.xml b/frameworks/Java/tio-http-server/pom.xml index b92bc8c1602..c58e0f669ad 100644 --- a/frameworks/Java/tio-http-server/pom.xml +++ b/frameworks/Java/tio-http-server/pom.xml @@ -1,5 +1,4 @@ - + 4.0.0 com.litongjava tio-http-server-benchmark @@ -18,7 +17,7 @@ com.litongjava tio-http-server - 3.7.3.v20231224-RELEASE + 3.7.3.v20240701-RELEASE @@ -28,6 +27,12 @@ 5.1.2 + + com.alibaba.fastjson2 + fastjson2 + 2.0.52 + + net.sf.ehcache ehcache-core diff --git a/frameworks/Java/tio-http-server/src/main/java/com/litongjava/tio/http/server/MainApp.java b/frameworks/Java/tio-http-server/src/main/java/com/litongjava/tio/http/server/MainApp.java index 235fe8d1f9e..c14a1b8c62e 100644 --- a/frameworks/Java/tio-http-server/src/main/java/com/litongjava/tio/http/server/MainApp.java +++ b/frameworks/Java/tio-http-server/src/main/java/com/litongjava/tio/http/server/MainApp.java @@ -1,5 +1,8 @@ package com.litongjava.tio.http.server; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + import com.litongjava.tio.http.common.HttpConfig; import com.litongjava.tio.http.common.handler.HttpRequestHandler; import com.litongjava.tio.http.server.config.EhCachePluginConfig; @@ -8,23 +11,22 @@ import com.litongjava.tio.http.server.controller.CacheController; import com.litongjava.tio.http.server.controller.DbController; import com.litongjava.tio.http.server.controller.IndexController; -import com.litongjava.tio.http.server.handler.HttpRoutes; import com.litongjava.tio.http.server.handler.SimpleHttpDispatcherHandler; -import com.litongjava.tio.http.server.handler.SimpleHttpRoutes; +import com.litongjava.tio.http.server.router.DefaultHttpReqeustSimpleHandlerRoute; +import com.litongjava.tio.http.server.router.HttpReqeustSimpleHandlerRoute; import com.litongjava.tio.server.ServerTioConfig; -import com.litongjava.tio.utils.environment.EnvironmentUtils; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import com.litongjava.tio.utils.environment.EnvUtils; public class MainApp { public static void main(String[] args) { Logger log = LoggerFactory.getLogger(MainApp.class); long start = System.currentTimeMillis(); - EnvironmentUtils.buildCmdArgsMap(args); + EnvUtils.buildCmdArgsMap(args); // add route IndexController controller = new IndexController(); - HttpRoutes simpleHttpRoutes = new SimpleHttpRoutes(); + + HttpReqeustSimpleHandlerRoute simpleHttpRoutes = new DefaultHttpReqeustSimpleHandlerRoute(); simpleHttpRoutes.add("/", controller::index); simpleHttpRoutes.add("/plaintext", controller::plaintext); simpleHttpRoutes.add("/json", controller::json); @@ -54,7 +56,7 @@ public static void main(String[] args) { // start server try { httpServerStarter.start(); - if (!EnvironmentUtils.getBoolean("native")) { + if (!EnvUtils.getBoolean("native")) { new MysqlDbConfig().init(); new EnjoyEngineConfig().engine(); new EhCachePluginConfig().ehCachePlugin(); diff --git a/frameworks/Java/tio-http-server/src/main/java/com/litongjava/tio/http/server/config/MysqlDbConfig.java b/frameworks/Java/tio-http-server/src/main/java/com/litongjava/tio/http/server/config/MysqlDbConfig.java index e5f41fd14b3..44bbf701d7d 100644 --- a/frameworks/Java/tio-http-server/src/main/java/com/litongjava/tio/http/server/config/MysqlDbConfig.java +++ b/frameworks/Java/tio-http-server/src/main/java/com/litongjava/tio/http/server/config/MysqlDbConfig.java @@ -3,20 +3,20 @@ import com.jfinal.plugin.activerecord.ActiveRecordPlugin; import com.jfinal.plugin.activerecord.OrderedFieldContainerFactory; import com.jfinal.plugin.hikaricp.HikariCpPlugin; -import com.litongjava.tio.utils.environment.EnvironmentUtils; +import com.litongjava.tio.utils.environment.EnvUtils; public class MysqlDbConfig { public void init() { // start active recored - String jdbcUrl = EnvironmentUtils.get("JDBC_URL"); + String jdbcUrl = EnvUtils.get("JDBC_URL"); // String jdbcUrl = "jdbc:mysql://192.168.3.9/hello_world"; - String jdbcUser = EnvironmentUtils.get("JDBC_USER"); + String jdbcUser = EnvUtils.get("JDBC_USER"); // String jdbcUser = "root"; - String jdbcPswd = EnvironmentUtils.get("JDBC_PSWD"); + String jdbcPswd = EnvUtils.get("JDBC_PSWD"); // String jdbcPswd = "robot_123456#"; HikariCpPlugin hikariCpPlugin = new HikariCpPlugin(jdbcUrl, jdbcUser, jdbcPswd); diff --git a/frameworks/Java/tio-http-server/src/main/java/com/litongjava/tio/http/server/controller/CacheController.java b/frameworks/Java/tio-http-server/src/main/java/com/litongjava/tio/http/server/controller/CacheController.java index ef2664639ea..981dd07b88e 100644 --- a/frameworks/Java/tio-http-server/src/main/java/com/litongjava/tio/http/server/controller/CacheController.java +++ b/frameworks/Java/tio-http-server/src/main/java/com/litongjava/tio/http/server/controller/CacheController.java @@ -1,6 +1,5 @@ package com.litongjava.tio.http.server.controller; -import java.util.Collection; import java.util.List; import java.util.Map; import java.util.Objects; @@ -14,10 +13,6 @@ import com.litongjava.tio.http.common.HttpRequest; import com.litongjava.tio.http.common.HttpResponse; import com.litongjava.tio.http.server.utils.RandomUtils; -import com.litongjava.tio.utils.cache.CacheUtils; -import com.litongjava.tio.utils.cache.FirsthandCreater; -import com.litongjava.tio.utils.cache.ICache; -import com.litongjava.tio.utils.cache.caffeine.CaffeineCache; public class CacheController { // private Logger log = LoggerFactory.getLogger(this.getClass()); @@ -25,16 +20,16 @@ public class CacheController { public HttpResponse cacheQuery(HttpRequest request) { String queries = request.getParam("queries"); List> recordMaps = RandomUtils.randomWorldNumbers() - // limit - .limit(RandomUtils.parseQueryCount(queries)) // 限制查询数量 - .mapToObj(id -> findByIdWithCache("world", id)) // 使用 mapToObj 将 int 映射为对象 - .filter(Objects::nonNull) // 过滤掉 null 值 - .map(Record::toMap) // 将每个 Record 对象转换为 Map - .collect(Collectors.toList()); // 收集到 List + // limit + .limit(RandomUtils.parseQueryCount(queries)) // 限制查询数量 + .mapToObj(id -> findByIdWithCache("world", id)) // 使用 mapToObj 将 int 映射为对象 + .filter(Objects::nonNull) // 过滤掉 null 值 + .map(Record::toMap) // 将每个 Record 对象转换为 Map + .collect(Collectors.toList()); // 收集到 List HttpResponse httpResponse = new HttpResponse(request); httpResponse.addHeader(HeaderName.Content_Type, HeaderValue.Content_Type.TEXT_PLAIN_JSON); - httpResponse.setBody(JSON.toJSONString(recordMaps).getBytes()); + httpResponse.setBody(JSON.toJSONBytes(recordMaps)); return httpResponse; } diff --git a/frameworks/Java/tio-http-server/src/main/java/com/litongjava/tio/http/server/controller/DbController.java b/frameworks/Java/tio-http-server/src/main/java/com/litongjava/tio/http/server/controller/DbController.java index d3461ff5cb5..258769c663f 100644 --- a/frameworks/Java/tio-http-server/src/main/java/com/litongjava/tio/http/server/controller/DbController.java +++ b/frameworks/Java/tio-http-server/src/main/java/com/litongjava/tio/http/server/controller/DbController.java @@ -22,8 +22,6 @@ import com.litongjava.tio.http.server.util.Resps; import com.litongjava.tio.http.server.utils.BeanConverterUtils; import com.litongjava.tio.http.server.utils.RandomUtils; -import com.litongjava.tio.utils.cache.ICache; -import com.litongjava.tio.utils.cache.caffeine.CaffeineCache; public class DbController { diff --git a/frameworks/Java/tio-http-server/src/main/java/com/litongjava/tio/http/server/utils/EnviormentUtils.java b/frameworks/Java/tio-http-server/src/main/java/com/litongjava/tio/http/server/utils/EnviormentUtils.java deleted file mode 100644 index 39a1b5e8786..00000000000 --- a/frameworks/Java/tio-http-server/src/main/java/com/litongjava/tio/http/server/utils/EnviormentUtils.java +++ /dev/null @@ -1,98 +0,0 @@ -//package com.litongjava.tio.http.server.utils; -// -//import java.util.HashMap; -//import java.util.Map; -// -//public class EnviormentUtils { -// private static String[] args; -// private static Map cmdArgsMap = new HashMap<>(); -// -// public static String[] getArgs() { -// return args; -// } -// -// public Map getCmdArgsMap() { -// return cmdArgsMap; -// } -// -// public static Map buildCmdArgsMap(String[] args) { -// EnviormentUtils.args = args; -// Map result = new HashMap<>(); -// for (String arg : args) { -// if (arg.startsWith("--")) { -// String[] parts = arg.substring(2).split("=", 2); -// if (parts.length == 2) { -// result.put(parts[0], parts[1]); -// } -// } -// } -// cmdArgsMap = result; -// return result; -// } -// -// public static String getStr(String key) { -// // comamdn line -// String value = cmdArgsMap.get(key); -// // enviorment -// if (value == null) { -// value = System.getProperty(key); -// } -// -// // config file -// if (value == null) { -// value = System.getenv(key); -// -// } -// -// return value; -// } -// -// public static String get(String key) { -// return getStr(key); -// } -// -// public static Integer getInt(String key) { -// String value = getStr(key); -// if (value != null) { -// return Integer.valueOf(value); -// } else { -// return null; -// } -// -// } -// -// public static int getInt(String key, int defaultValue) { -// String value = get(key); -// if (value != null) { -// return Integer.parseInt(value); -// } else { -// return defaultValue; -// } -// } -// -// public static String get(String key, String defaultValue) { -// String value = get(key); -// if (value != null) { -// return value; -// } else { -// return defaultValue; -// } -// } -// -// public static boolean getBoolean(String key) { -// return Boolean.parseBoolean(get(key)); -// } -// -// public static boolean getBoolean(String key, boolean defaultValue) { -// String value = get(key); -// if (value != null) { -// return Boolean.parseBoolean(value); -// } else { -// return defaultValue; -// } -// } -//// public static void main(String[] args) { -//// String string = EnviormentUtils.get("jdbc.user"); -//// System.out.println(string); -//// } -//} From 8935c2ec691b0d88c534874ecc4b93156ed32aef Mon Sep 17 00:00:00 2001 From: litongjava Date: Sun, 21 Jul 2024 20:53:59 +0900 Subject: [PATCH 30/39] fix all query --- frameworks/Java/tio-http-server/pom.xml | 4 +++- .../com/litongjava/tio/http/server/MainApp.java | 6 +++--- .../http/server/config/EhCachePluginConfig.java | 3 +-- .../tio/http/server/config/MysqlDbConfig.java | 16 ++++++---------- .../http/server/controller/CacheController.java | 2 +- .../tio/http/server/controller/DbController.java | 14 ++++++-------- .../tio/http/server/utils/RandomUtils.java | 1 + .../src/main/resources/app.properties | 9 +++++++++ .../Java/tio-http-server/tio-server.dockerfile | 15 ++++++++------- 9 files changed, 38 insertions(+), 32 deletions(-) create mode 100644 frameworks/Java/tio-http-server/src/main/resources/app.properties diff --git a/frameworks/Java/tio-http-server/pom.xml b/frameworks/Java/tio-http-server/pom.xml index c58e0f669ad..50c51a33ef5 100644 --- a/frameworks/Java/tio-http-server/pom.xml +++ b/frameworks/Java/tio-http-server/pom.xml @@ -9,6 +9,7 @@ 1.8 ${java.version} ${java.version} + 1.1.2 23.1.1 com.litongjava.tio.http.server.MainApp @@ -24,9 +25,10 @@ com.jfinal activerecord - 5.1.2 + 5.1.6 + com.alibaba.fastjson2 fastjson2 diff --git a/frameworks/Java/tio-http-server/src/main/java/com/litongjava/tio/http/server/MainApp.java b/frameworks/Java/tio-http-server/src/main/java/com/litongjava/tio/http/server/MainApp.java index c14a1b8c62e..d4dca4b13ed 100644 --- a/frameworks/Java/tio-http-server/src/main/java/com/litongjava/tio/http/server/MainApp.java +++ b/frameworks/Java/tio-http-server/src/main/java/com/litongjava/tio/http/server/MainApp.java @@ -22,10 +22,10 @@ public class MainApp { public static void main(String[] args) { Logger log = LoggerFactory.getLogger(MainApp.class); long start = System.currentTimeMillis(); - EnvUtils.buildCmdArgsMap(args); + EnvUtils.load(); // add route IndexController controller = new IndexController(); - + HttpReqeustSimpleHandlerRoute simpleHttpRoutes = new DefaultHttpReqeustSimpleHandlerRoute(); simpleHttpRoutes.add("/", controller::index); simpleHttpRoutes.add("/plaintext", controller::plaintext); @@ -38,7 +38,7 @@ public static void main(String[] args) { simpleHttpRoutes.add("/fortunes", dbQueryController::fortunes); CacheController cacheController = new CacheController(); - simpleHttpRoutes.add("/cacheQuery", cacheController::cacheQuery); + simpleHttpRoutes.add("/cachedQuery", cacheController::cachedQuery); // config server HttpConfig httpConfig = new HttpConfig(8080, null, null, null); diff --git a/frameworks/Java/tio-http-server/src/main/java/com/litongjava/tio/http/server/config/EhCachePluginConfig.java b/frameworks/Java/tio-http-server/src/main/java/com/litongjava/tio/http/server/config/EhCachePluginConfig.java index c101589e888..9de09fdc7dc 100644 --- a/frameworks/Java/tio-http-server/src/main/java/com/litongjava/tio/http/server/config/EhCachePluginConfig.java +++ b/frameworks/Java/tio-http-server/src/main/java/com/litongjava/tio/http/server/config/EhCachePluginConfig.java @@ -1,5 +1,4 @@ -package com.litongjava.tio.http.server.config; - + package com.litongjava.tio.http.server.config; import com.jfinal.plugin.ehcache.EhCachePlugin; diff --git a/frameworks/Java/tio-http-server/src/main/java/com/litongjava/tio/http/server/config/MysqlDbConfig.java b/frameworks/Java/tio-http-server/src/main/java/com/litongjava/tio/http/server/config/MysqlDbConfig.java index 44bbf701d7d..9f1b646300d 100644 --- a/frameworks/Java/tio-http-server/src/main/java/com/litongjava/tio/http/server/config/MysqlDbConfig.java +++ b/frameworks/Java/tio-http-server/src/main/java/com/litongjava/tio/http/server/config/MysqlDbConfig.java @@ -9,27 +9,23 @@ public class MysqlDbConfig { public void init() { // start active recored - String jdbcUrl = EnvUtils.get("JDBC_URL"); // String jdbcUrl = "jdbc:mysql://192.168.3.9/hello_world"; String jdbcUser = EnvUtils.get("JDBC_USER"); -// String jdbcUser = "root"; + // String jdbcUser = "root"; String jdbcPswd = EnvUtils.get("JDBC_PSWD"); -// String jdbcPswd = "robot_123456#"; + // String jdbcPswd = "robot_123456#"; HikariCpPlugin hikariCpPlugin = new HikariCpPlugin(jdbcUrl, jdbcUser, jdbcPswd); ActiveRecordPlugin arp = new ActiveRecordPlugin(hikariCpPlugin); arp.setContainerFactory(new OrderedFieldContainerFactory()); -// Engine engine = arp.getEngine(); -// engine.setSourceFactory(new ClassPathSourceFactory()); -// engine.setCompressorOn(' '); -// engine.setCompressorOn('\n'); - // arp.addSqlTemplate("/sql/all_sqls.sql"); -// arp.start(); + // arp.setShowSql(true); + hikariCpPlugin.start(); - arp.start(); + boolean start = arp.start(); + System.out.println("db started:" + start); } } diff --git a/frameworks/Java/tio-http-server/src/main/java/com/litongjava/tio/http/server/controller/CacheController.java b/frameworks/Java/tio-http-server/src/main/java/com/litongjava/tio/http/server/controller/CacheController.java index 981dd07b88e..17a9e4523e5 100644 --- a/frameworks/Java/tio-http-server/src/main/java/com/litongjava/tio/http/server/controller/CacheController.java +++ b/frameworks/Java/tio-http-server/src/main/java/com/litongjava/tio/http/server/controller/CacheController.java @@ -17,7 +17,7 @@ public class CacheController { // private Logger log = LoggerFactory.getLogger(this.getClass()); - public HttpResponse cacheQuery(HttpRequest request) { + public HttpResponse cachedQuery(HttpRequest request) { String queries = request.getParam("queries"); List> recordMaps = RandomUtils.randomWorldNumbers() // limit diff --git a/frameworks/Java/tio-http-server/src/main/java/com/litongjava/tio/http/server/controller/DbController.java b/frameworks/Java/tio-http-server/src/main/java/com/litongjava/tio/http/server/controller/DbController.java index 258769c663f..2884a859428 100644 --- a/frameworks/Java/tio-http-server/src/main/java/com/litongjava/tio/http/server/controller/DbController.java +++ b/frameworks/Java/tio-http-server/src/main/java/com/litongjava/tio/http/server/controller/DbController.java @@ -25,13 +25,13 @@ public class DbController { - // @GetMapping("/db") public HttpResponse db(HttpRequest request) { Integer id = request.getInt("id"); if (id == null) { id = RandomUtils.randomWorldNumber(); } + System.out.println("id:" + id); HttpResponse httpResponse = new HttpResponse(request); // int id = 11; @@ -39,7 +39,7 @@ public HttpResponse db(HttpRequest request) { Record recored = Db.findById("world", id); if (recored != null) { - httpResponse.setBody(JSON.toJSONString(recored.toMap()).getBytes()); + httpResponse.setBody(JSON.toJSONBytes(recored.toMap())); } else { httpResponse.setBody("{}".getBytes()); } @@ -62,7 +62,7 @@ public HttpResponse queries(HttpRequest request) { HttpResponse httpResponse = new HttpResponse(request); httpResponse.addHeader(HeaderName.Content_Type, HeaderValue.Content_Type.TEXT_PLAIN_JSON); - httpResponse.setBody(JSON.toJSONString(recordMaps).getBytes()); + httpResponse.setBody(JSON.toJSONBytes(recordMaps)); return httpResponse; } @@ -71,7 +71,7 @@ public HttpResponse updates(HttpRequest request) { String queries = request.getParam("queries"); CacheKit.removeAll("world"); - + List> updatedRecords = RandomUtils.randomWorldNumbers()// random numbers // limit .limit(RandomUtils.parseQueryCount(queries)) @@ -96,17 +96,15 @@ public HttpResponse updates(HttpRequest request) { HttpResponse httpResponse = new HttpResponse(request); httpResponse.addHeader(HeaderName.Content_Type, HeaderValue.Content_Type.TEXT_PLAIN_JSON); - httpResponse.setBody(JSON.toJSONString(updatedRecords).getBytes()); + httpResponse.setBody(JSON.toJSONBytes(updatedRecords)); return httpResponse; } -//@GetMapping("/fortunes") public HttpResponse fortunes(HttpRequest request) throws IllegalAccessException, InstantiationException { - List records = Db.find("SELECT * FROM fortune"); // 假设表名为 "fortune" + List records = Db.find("SELECT * FROM fortune"); List fortunes = new ArrayList<>(records.size()); for (Record record : records) { - fortunes.add(BeanConverterUtils.toBean(record.toMap(), Fortune.class)); } // 添加额外的 Fortune diff --git a/frameworks/Java/tio-http-server/src/main/java/com/litongjava/tio/http/server/utils/RandomUtils.java b/frameworks/Java/tio-http-server/src/main/java/com/litongjava/tio/http/server/utils/RandomUtils.java index 850bc16f28c..e18e98ef880 100644 --- a/frameworks/Java/tio-http-server/src/main/java/com/litongjava/tio/http/server/utils/RandomUtils.java +++ b/frameworks/Java/tio-http-server/src/main/java/com/litongjava/tio/http/server/utils/RandomUtils.java @@ -7,6 +7,7 @@ public class RandomUtils { private static final int MIN_WORLD_NUMBER = 1; private static final int MAX_WORLD_NUMBER_PLUS_ONE = 10_001; +// private static final int MAX_WORLD_NUMBER_PLUS_ONE = 30; public static int randomWorldNumber() { return ThreadLocalRandom.current().nextInt(MIN_WORLD_NUMBER, MAX_WORLD_NUMBER_PLUS_ONE); diff --git a/frameworks/Java/tio-http-server/src/main/resources/app.properties b/frameworks/Java/tio-http-server/src/main/resources/app.properties new file mode 100644 index 00000000000..614fbd518ad --- /dev/null +++ b/frameworks/Java/tio-http-server/src/main/resources/app.properties @@ -0,0 +1,9 @@ +http.response.addServerHead=true + +#JDBC_URL=jdbc:mysql://192.168.1.2/hello_world?useSSL=false&allowPublicKeyRetrieval=true +#JDBC_USER=root +#JDBC_PSWD=robot_123456# + +JDBC_URL=jdbc:mysql://tfb-database/hello_world +JDBC_USER=benchmarkdbuser +JDBC_PSWD=benchmarkdbpass \ No newline at end of file diff --git a/frameworks/Java/tio-http-server/tio-server.dockerfile b/frameworks/Java/tio-http-server/tio-server.dockerfile index 4f8d670e6b6..eee5fa62ecb 100644 --- a/frameworks/Java/tio-http-server/tio-server.dockerfile +++ b/frameworks/Java/tio-http-server/tio-server.dockerfile @@ -1,12 +1,13 @@ FROM maven:3.6.1-jdk-8-slim as maven -WORKDIR /t-io -COPY pom.xml pom.xml -COPY src src -RUN mvn package -Passembly -q +#WORKDIR /t-io +#COPY pom.xml pom.xml +#RUN mvn dependency:go-offline +#COPY src src +#RUN mvn package -Passembly -q #TODO use separate JDK/JRE for the RUN (as the other builds) -WORKDIR /t-io/target/tio-server-benchmark - +WORKDIR /app +COPY target/tio-http-server-benchmark-1.0.jar tio-http-server-benchmark-1.0.jar EXPOSE 8080 -CMD ["java", "-server", "-Xms1G", "-Xmx1G", "-XX:+UseNUMA", "-XX:+UseParallelGC", "-Dpacket.handler.mode=queue1", "-jar", "/t-io/target/tio-http-server-benchmark-1.0.jar","--JDBC_URL=jdbc:mysql://tfb-database/hello_world","--JDBC_USER=benchmarkdbuser" ,"--JDBC_PSWD=benchmarkdbpass"] \ No newline at end of file +CMD ["java", "-server", "-Xms1G", "-Xmx1G", "-XX:+UseNUMA", "-XX:+UseParallelGC", "-Dpacket.handler.mode=queue1", "-jar", "/app/tio-http-server-benchmark-1.0.jar"] \ No newline at end of file From f1102c1ff2ce6e6e693e29d024987fdd6baef006 Mon Sep 17 00:00:00 2001 From: litongjava Date: Sun, 21 Jul 2024 21:01:08 +0900 Subject: [PATCH 31/39] update docker file --- .../http/server/controller/DbController.java | 2 +- .../tio-http-server/tio-server.dockerfile | 20 +++++++++++-------- 2 files changed, 13 insertions(+), 9 deletions(-) diff --git a/frameworks/Java/tio-http-server/src/main/java/com/litongjava/tio/http/server/controller/DbController.java b/frameworks/Java/tio-http-server/src/main/java/com/litongjava/tio/http/server/controller/DbController.java index 2884a859428..199877cefa8 100644 --- a/frameworks/Java/tio-http-server/src/main/java/com/litongjava/tio/http/server/controller/DbController.java +++ b/frameworks/Java/tio-http-server/src/main/java/com/litongjava/tio/http/server/controller/DbController.java @@ -31,7 +31,7 @@ public HttpResponse db(HttpRequest request) { id = RandomUtils.randomWorldNumber(); } - System.out.println("id:" + id); + //System.out.println("id:" + id); HttpResponse httpResponse = new HttpResponse(request); // int id = 11; diff --git a/frameworks/Java/tio-http-server/tio-server.dockerfile b/frameworks/Java/tio-http-server/tio-server.dockerfile index eee5fa62ecb..d4977ff185f 100644 --- a/frameworks/Java/tio-http-server/tio-server.dockerfile +++ b/frameworks/Java/tio-http-server/tio-server.dockerfile @@ -1,13 +1,17 @@ FROM maven:3.6.1-jdk-8-slim as maven -#WORKDIR /t-io -#COPY pom.xml pom.xml -#RUN mvn dependency:go-offline -#COPY src src -#RUN mvn package -Passembly -q +WORKDIR /app + +COPY pom.xml pom.xml +RUN mvn dependency:go-offline + +COPY src src +RUN mvn package -Passembly -q #TODO use separate JDK/JRE for the RUN (as the other builds) -WORKDIR /app -COPY target/tio-http-server-benchmark-1.0.jar tio-http-server-benchmark-1.0.jar + +#WORKDIR /app +#COPY target/tio-http-server-benchmark-1.0.jar tio-http-server-benchmark-1.0.jar + EXPOSE 8080 -CMD ["java", "-server", "-Xms1G", "-Xmx1G", "-XX:+UseNUMA", "-XX:+UseParallelGC", "-Dpacket.handler.mode=queue1", "-jar", "/app/tio-http-server-benchmark-1.0.jar"] \ No newline at end of file +CMD ["java", "-server", "-Xms1G", "-Xmx1G", "-XX:+UseNUMA", "-XX:+UseParallelGC", "-Dpacket.handler.mode=queue1", "-jar", "/app/target/tio-http-server-benchmark-1.0.jar"] \ No newline at end of file From 40d69e2366849c543fb9a81588036b46f6709d90 Mon Sep 17 00:00:00 2001 From: litongjava Date: Sun, 21 Jul 2024 21:57:48 +0900 Subject: [PATCH 32/39] update docker file and plugin --- frameworks/Java/tio-http-server/pom.xml | 8 ++++++++ .../tio/http/server/config/EhCachePluginConfig.java | 2 +- .../litongjava/tio/http/server/config/MysqlDbConfig.java | 6 +++--- .../tio/http/server/controller/CacheController.java | 4 ++-- .../tio/http/server/controller/DbController.java | 6 +++--- frameworks/Java/tio-http-server/tio-server.dockerfile | 9 +++++---- 6 files changed, 22 insertions(+), 13 deletions(-) diff --git a/frameworks/Java/tio-http-server/pom.xml b/frameworks/Java/tio-http-server/pom.xml index 50c51a33ef5..d4089b4e7e2 100644 --- a/frameworks/Java/tio-http-server/pom.xml +++ b/frameworks/Java/tio-http-server/pom.xml @@ -21,12 +21,20 @@ 3.7.3.v20240701-RELEASE + + com.litongjava + jfinal-plugins + ${jfinal-plugins.version} + + + diff --git a/frameworks/Java/tio-http-server/src/main/java/com/litongjava/tio/http/server/config/EhCachePluginConfig.java b/frameworks/Java/tio-http-server/src/main/java/com/litongjava/tio/http/server/config/EhCachePluginConfig.java index 9de09fdc7dc..61dc9269110 100644 --- a/frameworks/Java/tio-http-server/src/main/java/com/litongjava/tio/http/server/config/EhCachePluginConfig.java +++ b/frameworks/Java/tio-http-server/src/main/java/com/litongjava/tio/http/server/config/EhCachePluginConfig.java @@ -1,6 +1,6 @@ package com.litongjava.tio.http.server.config; -import com.jfinal.plugin.ehcache.EhCachePlugin; +import com.litongjava.jfinal.plugin.ehcache.EhCachePlugin; public class EhCachePluginConfig { diff --git a/frameworks/Java/tio-http-server/src/main/java/com/litongjava/tio/http/server/config/MysqlDbConfig.java b/frameworks/Java/tio-http-server/src/main/java/com/litongjava/tio/http/server/config/MysqlDbConfig.java index 9f1b646300d..85fefe8b8f5 100644 --- a/frameworks/Java/tio-http-server/src/main/java/com/litongjava/tio/http/server/config/MysqlDbConfig.java +++ b/frameworks/Java/tio-http-server/src/main/java/com/litongjava/tio/http/server/config/MysqlDbConfig.java @@ -1,8 +1,8 @@ package com.litongjava.tio.http.server.config; -import com.jfinal.plugin.activerecord.ActiveRecordPlugin; -import com.jfinal.plugin.activerecord.OrderedFieldContainerFactory; -import com.jfinal.plugin.hikaricp.HikariCpPlugin; +import com.litongjava.jfinal.plugin.activerecord.ActiveRecordPlugin; +import com.litongjava.jfinal.plugin.activerecord.OrderedFieldContainerFactory; +import com.litongjava.jfinal.plugin.hikaricp.HikariCpPlugin; import com.litongjava.tio.utils.environment.EnvUtils; public class MysqlDbConfig { diff --git a/frameworks/Java/tio-http-server/src/main/java/com/litongjava/tio/http/server/controller/CacheController.java b/frameworks/Java/tio-http-server/src/main/java/com/litongjava/tio/http/server/controller/CacheController.java index 17a9e4523e5..cf87841b0ec 100644 --- a/frameworks/Java/tio-http-server/src/main/java/com/litongjava/tio/http/server/controller/CacheController.java +++ b/frameworks/Java/tio-http-server/src/main/java/com/litongjava/tio/http/server/controller/CacheController.java @@ -6,8 +6,8 @@ import java.util.stream.Collectors; import com.alibaba.fastjson2.JSON; -import com.jfinal.plugin.activerecord.Db; -import com.jfinal.plugin.activerecord.Record; +import com.litongjava.jfinal.plugin.activerecord.Db; +import com.litongjava.jfinal.plugin.activerecord.Record; import com.litongjava.tio.http.common.HeaderName; import com.litongjava.tio.http.common.HeaderValue; import com.litongjava.tio.http.common.HttpRequest; diff --git a/frameworks/Java/tio-http-server/src/main/java/com/litongjava/tio/http/server/controller/DbController.java b/frameworks/Java/tio-http-server/src/main/java/com/litongjava/tio/http/server/controller/DbController.java index 199877cefa8..dba9725b654 100644 --- a/frameworks/Java/tio-http-server/src/main/java/com/litongjava/tio/http/server/controller/DbController.java +++ b/frameworks/Java/tio-http-server/src/main/java/com/litongjava/tio/http/server/controller/DbController.java @@ -9,11 +9,11 @@ import java.util.stream.Collectors; import com.alibaba.fastjson2.JSON; -import com.jfinal.plugin.activerecord.Db; -import com.jfinal.plugin.activerecord.Record; -import com.jfinal.plugin.ehcache.CacheKit; import com.jfinal.template.Engine; import com.jfinal.template.Template; +import com.litongjava.jfinal.plugin.activerecord.Db; +import com.litongjava.jfinal.plugin.activerecord.Record; +import com.litongjava.jfinal.plugin.ehcache.CacheKit; import com.litongjava.tio.http.common.HeaderName; import com.litongjava.tio.http.common.HeaderValue; import com.litongjava.tio.http.common.HttpRequest; diff --git a/frameworks/Java/tio-http-server/tio-server.dockerfile b/frameworks/Java/tio-http-server/tio-server.dockerfile index d4977ff185f..080c43e52ad 100644 --- a/frameworks/Java/tio-http-server/tio-server.dockerfile +++ b/frameworks/Java/tio-http-server/tio-server.dockerfile @@ -1,4 +1,4 @@ -FROM maven:3.6.1-jdk-8-slim as maven +FROM litongjava/maven:3.8.8-jdk8u391 AS builder WORKDIR /app COPY pom.xml pom.xml @@ -7,10 +7,11 @@ RUN mvn dependency:go-offline COPY src src RUN mvn package -Passembly -q -#TODO use separate JDK/JRE for the RUN (as the other builds) +FROM litongjava/jre:8u391-stable-slim -#WORKDIR /app -#COPY target/tio-http-server-benchmark-1.0.jar tio-http-server-benchmark-1.0.jar +WORKDIR /app + +COPY --from=builder /src/target/tio-http-server-benchmark-1.0.jar /app/target EXPOSE 8080 From f1474d648b70aecdd564ac010ce1ac2f70295e38 Mon Sep 17 00:00:00 2001 From: litongjava Date: Sun, 21 Jul 2024 22:05:57 +0900 Subject: [PATCH 33/39] update docker file --- frameworks/Java/tio-http-server/tio-server.dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frameworks/Java/tio-http-server/tio-server.dockerfile b/frameworks/Java/tio-http-server/tio-server.dockerfile index 080c43e52ad..41f52e2f979 100644 --- a/frameworks/Java/tio-http-server/tio-server.dockerfile +++ b/frameworks/Java/tio-http-server/tio-server.dockerfile @@ -11,7 +11,7 @@ FROM litongjava/jre:8u391-stable-slim WORKDIR /app -COPY --from=builder /src/target/tio-http-server-benchmark-1.0.jar /app/target +COPY --from=builder /src/target/tio-http-server-benchmark-1.0.jar /app/target/tio-http-server-benchmark-1.0.jar EXPOSE 8080 From 4b784223ac2fb79fcfe1cd5f3aabb1338abe4a09 Mon Sep 17 00:00:00 2001 From: litongjava Date: Sun, 21 Jul 2024 22:09:46 +0900 Subject: [PATCH 34/39] update dockerfile --- frameworks/Java/tio-http-server/tio-server.dockerfile | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/frameworks/Java/tio-http-server/tio-server.dockerfile b/frameworks/Java/tio-http-server/tio-server.dockerfile index 41f52e2f979..81461681c2c 100644 --- a/frameworks/Java/tio-http-server/tio-server.dockerfile +++ b/frameworks/Java/tio-http-server/tio-server.dockerfile @@ -6,12 +6,13 @@ RUN mvn dependency:go-offline COPY src src RUN mvn package -Passembly -q +RUN ls -l && ls -l target FROM litongjava/jre:8u391-stable-slim WORKDIR /app -COPY --from=builder /src/target/tio-http-server-benchmark-1.0.jar /app/target/tio-http-server-benchmark-1.0.jar +COPY --from=builder /app/target/tio-http-server-benchmark-1.0.jar /app/target/tio-http-server-benchmark-1.0.jar EXPOSE 8080 From 0f580799da9093e0f20c00b57692fb4e2a3884c2 Mon Sep 17 00:00:00 2001 From: litongjava Date: Sat, 14 Sep 2024 01:25:59 -1000 Subject: [PATCH 35/39] update tio-http-server version --- frameworks/Java/tio-http-server/pom.xml | 2 +- .../com/litongjava/tio/http/server/MainApp.java | 14 +++++++------- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/frameworks/Java/tio-http-server/pom.xml b/frameworks/Java/tio-http-server/pom.xml index d4089b4e7e2..14446473787 100644 --- a/frameworks/Java/tio-http-server/pom.xml +++ b/frameworks/Java/tio-http-server/pom.xml @@ -18,7 +18,7 @@ com.litongjava tio-http-server - 3.7.3.v20240701-RELEASE + 3.7.3.v20240915-RELEASE diff --git a/frameworks/Java/tio-http-server/src/main/java/com/litongjava/tio/http/server/MainApp.java b/frameworks/Java/tio-http-server/src/main/java/com/litongjava/tio/http/server/MainApp.java index d4dca4b13ed..a723950ed4f 100644 --- a/frameworks/Java/tio-http-server/src/main/java/com/litongjava/tio/http/server/MainApp.java +++ b/frameworks/Java/tio-http-server/src/main/java/com/litongjava/tio/http/server/MainApp.java @@ -4,16 +4,16 @@ import org.slf4j.LoggerFactory; import com.litongjava.tio.http.common.HttpConfig; -import com.litongjava.tio.http.common.handler.HttpRequestHandler; +import com.litongjava.tio.http.common.handler.ITioHttpRequestHandler; import com.litongjava.tio.http.server.config.EhCachePluginConfig; import com.litongjava.tio.http.server.config.EnjoyEngineConfig; import com.litongjava.tio.http.server.config.MysqlDbConfig; import com.litongjava.tio.http.server.controller.CacheController; import com.litongjava.tio.http.server.controller.DbController; import com.litongjava.tio.http.server.controller.IndexController; -import com.litongjava.tio.http.server.handler.SimpleHttpDispatcherHandler; -import com.litongjava.tio.http.server.router.DefaultHttpReqeustSimpleHandlerRoute; -import com.litongjava.tio.http.server.router.HttpReqeustSimpleHandlerRoute; +import com.litongjava.tio.http.server.handler.DefaultHttpRequestDispatcher; +import com.litongjava.tio.http.server.router.DefaultHttpReqeustRouter; +import com.litongjava.tio.http.server.router.HttpRequestRouter; import com.litongjava.tio.server.ServerTioConfig; import com.litongjava.tio.utils.environment.EnvUtils; @@ -26,7 +26,7 @@ public static void main(String[] args) { // add route IndexController controller = new IndexController(); - HttpReqeustSimpleHandlerRoute simpleHttpRoutes = new DefaultHttpReqeustSimpleHandlerRoute(); + HttpRequestRouter simpleHttpRoutes = new DefaultHttpReqeustRouter(); simpleHttpRoutes.add("/", controller::index); simpleHttpRoutes.add("/plaintext", controller::plaintext); simpleHttpRoutes.add("/json", controller::json); @@ -47,7 +47,7 @@ public static void main(String[] args) { httpConfig.setCheckHost(false); httpConfig.setCompatible1_0(false); - HttpRequestHandler requestHandler = new SimpleHttpDispatcherHandler(httpConfig, simpleHttpRoutes); + ITioHttpRequestHandler requestHandler = new DefaultHttpRequestDispatcher(httpConfig, simpleHttpRoutes); HttpServerStarter httpServerStarter = new HttpServerStarter(httpConfig, requestHandler); ServerTioConfig serverTioConfig = httpServerStarter.getServerTioConfig(); // close Heartbeat @@ -56,7 +56,7 @@ public static void main(String[] args) { // start server try { httpServerStarter.start(); - if (!EnvUtils.getBoolean("native")) { + if (EnvUtils.getBoolean("native", false)) { new MysqlDbConfig().init(); new EnjoyEngineConfig().engine(); new EhCachePluginConfig().ehCachePlugin(); From 6d8d882500d4c7f66fa3b9fd454281e968c0aaba Mon Sep 17 00:00:00 2001 From: litongjava Date: Fri, 20 Sep 2024 02:12:57 -1000 Subject: [PATCH 36/39] remove native support --- frameworks/Java/tio-http-server/pom.xml | 8 ++++++++ .../com/litongjava/tio/http/server/MainApp.java | 14 +++----------- .../src/main/resources/app.properties | 1 + .../litongjava/tio/http/server/MainAppTest.java | 15 +++++++++++++++ 4 files changed, 27 insertions(+), 11 deletions(-) create mode 100644 frameworks/Java/tio-http-server/src/test/java/com/litongjava/tio/http/server/MainAppTest.java diff --git a/frameworks/Java/tio-http-server/pom.xml b/frameworks/Java/tio-http-server/pom.xml index 14446473787..b20fdda05bf 100644 --- a/frameworks/Java/tio-http-server/pom.xml +++ b/frameworks/Java/tio-http-server/pom.xml @@ -27,6 +27,14 @@ ${jfinal-plugins.version} + + junit + junit + 4.12 + test + + +