Browse Source

update to tio-http-server 3.7.3.v20250301-RELEASE (#9608)

* update tio-http-server version

* update dockerfile

---------

Co-authored-by: litongjava <[email protected]>
Tong Li 5 months ago
parent
commit
cb99cc772f

+ 64 - 151
frameworks/Java/tio-http-server/pom.xml

@@ -16,12 +16,12 @@
     <dependency>
     <dependency>
       <groupId>com.litongjava</groupId>
       <groupId>com.litongjava</groupId>
       <artifactId>tio-http-server</artifactId>
       <artifactId>tio-http-server</artifactId>
-      <version>3.7.3.v20240919-RELEASE</version>
+      <version>3.7.3.v20250301-RELEASE</version>
     </dependency>
     </dependency>
     <dependency>
     <dependency>
       <groupId>com.litongjava</groupId>
       <groupId>com.litongjava</groupId>
       <artifactId>java-db</artifactId>
       <artifactId>java-db</artifactId>
-      <version>1.2.6</version>
+      <version>1.4.9</version>
     </dependency>
     </dependency>
     <dependency>
     <dependency>
       <groupId>junit</groupId>
       <groupId>junit</groupId>
@@ -31,16 +31,6 @@
     </dependency>
     </dependency>
 
 
 
 
-    <!-- https://mvnrepository.com/artifact/com.jfinal/activerecord -->
-    <!--
-    <dependency>
-      <groupId>com.jfinal</groupId>
-      <artifactId>activerecord</artifactId>
-      <version>5.1.6</version>
-    </dependency>
-    -->
-
-
     <dependency>
     <dependency>
       <groupId>com.alibaba.fastjson2</groupId>
       <groupId>com.alibaba.fastjson2</groupId>
       <artifactId>fastjson2</artifactId>
       <artifactId>fastjson2</artifactId>
@@ -66,144 +56,67 @@
     </dependency>
     </dependency>
 
 
   </dependencies>
   </dependencies>
-  <profiles>
-    <!-- 开发环境 -->
-    <profile>
-      <id>development</id>
-      <activation>
-        <activeByDefault>true</activeByDefault>
-      </activation>
-      <dependencies>
-        <dependency>
-          <groupId>ch.qos.logback</groupId>
-          <artifactId>logback-classic</artifactId>
-          <version>1.2.13</version>
-        </dependency>
-      </dependencies>
-    </profile>
+  <repositories>
+    <repository>
+      <id>central</id>
+      <name>Central Repository</name>
+      <url>https://repo.maven.apache.org/maven2</url>
+    </repository>
+    <repository>
+      <id>sonatype-nexus-snapshots</id>
+      <name>Sonatype Nexus Snapshots</name>
+      <url>https://oss.sonatype.org/content/repositories/snapshots</url>
+    </repository>
+  </repositories>
+  <pluginRepositories>
+    <pluginRepository>
+      <id>central</id>
+      <name>Central Repository</name>
+      <url>https://repo.maven.apache.org/maven2</url>
+    </pluginRepository>
+    <pluginRepository>
+      <id>sonatype-nexus-snapshots</id>
+      <name>Sonatype Nexus Snapshots</name>
+      <url>https://oss.sonatype.org/content/repositories/snapshots</url>
+      <releases>
+        <enabled>false</enabled>
+      </releases>
+      <snapshots>
+        <enabled>true</enabled>
+      </snapshots>
+    </pluginRepository>
+  </pluginRepositories>
+  <build>
+    <plugins>
+
+      <plugin>
+        <inherited>true</inherited>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-compiler-plugin</artifactId>
+        <version>3.8.0</version>
+        <configuration>
+          <debug>false</debug>
+        </configuration>
+      </plugin>
 
 
-    <!-- 生产环境 -->
-    <profile>
-      <id>production</id>
-      <dependencies>
-        <dependency>
-          <groupId>ch.qos.logback</groupId>
-          <artifactId>logback-classic</artifactId>
-          <version>1.2.13</version>
-        </dependency>
-      </dependencies>
-      <build>
-        <plugins>
-          <plugin>
-            <groupId>org.springframework.boot</groupId>
-            <artifactId>spring-boot-maven-plugin</artifactId>
-            <version>2.7.4</version>
-            <configuration>
-              <mainClass>${main.class}</mainClass>
-              <excludeGroupIds>org.projectlombok</excludeGroupIds>
-            </configuration>
-            <!-- 设置执行目标 -->
-            <executions>
-              <execution>
-                <goals>
-                  <goal>repackage</goal>
-                </goals>
-              </execution>
-            </executions>
-          </plugin>
-        </plugins>
-      </build>
-    </profile>
-    <!-- assembly -->
-    <profile>
-      <id>assembly</id>
-      <dependencies>
-        <dependency>
-          <groupId>ch.qos.logback</groupId>
-          <artifactId>logback-classic</artifactId>
-          <version>1.2.13</version>
-        </dependency>
-      </dependencies>
-      <build>
-        <plugins>
-          <plugin>
-            <groupId>org.apache.maven.plugins</groupId>
-            <artifactId>maven-jar-plugin</artifactId>
-            <version>3.2.0</version>
-          </plugin>
-          <plugin>
-            <groupId>org.apache.maven.plugins</groupId>
-            <artifactId>maven-assembly-plugin</artifactId>
-            <version>3.1.1</version>
-            <configuration>
-              <archive>
-                <manifest>
-                  <mainClass>${main.class}</mainClass>
-                </manifest>
-              </archive>
-              <descriptorRefs>
-                <descriptorRef>jar-with-dependencies</descriptorRef>
-              </descriptorRefs>
-              <appendAssemblyId>false</appendAssemblyId>
-            </configuration>
-            <executions>
-              <execution>
-                <id>make-assembly</id>
-                <phase>package</phase>
-                <goals>
-                  <goal>single</goal>
-                </goals>
-              </execution>
-            </executions>
-          </plugin>
-        </plugins>
-      </build>
-    </profile>
-    <profile>
-      <id>native</id>
-      <dependencies>
-        <!-- GraalVM 环境使用 jdk log -->
-        <dependency>
-          <groupId>org.slf4j</groupId>
-          <artifactId>slf4j-jdk14</artifactId>
-          <version>1.7.31</version>
-        </dependency>
-        <!-- GraalVM -->
-        <dependency>
-          <groupId>org.graalvm.sdk</groupId>
-          <artifactId>graal-sdk</artifactId>
-          <version>${graalvm.version}</version>
-          <scope>provided</scope>
-        </dependency>
-      </dependencies>
-      <build>
-        <finalName>${project.artifactId}</finalName>
-        <plugins>
-          <plugin>
-            <groupId>org.graalvm.nativeimage</groupId>
-            <artifactId>native-image-maven-plugin</artifactId>
-            <version>21.2.0</version>
-            <executions>
-              <execution>
-                <goals>
-                  <goal>native-image</goal>
-                </goals>
-                <phase>package</phase>
-              </execution>
-            </executions>
-            <configuration>
-              <skip>false</skip>
-              <imageName>${project.artifactId}</imageName>
-              <mainClass>${main.class}</mainClass>
-              <buildArgs>
-                -H:+RemoveSaturatedTypeFlows
-                --allow-incomplete-classpath
-                --no-fallback
-              </buildArgs>
-            </configuration>
-          </plugin>
-        </plugins>
-      </build>
-    </profile>
-  </profiles>
+      <plugin>
+        <artifactId>maven-assembly-plugin</artifactId>
+        <version>3.1.0</version>
+        <configuration>
+          <descriptorRefs>
+            <descriptorRef>jar-with-dependencies</descriptorRef>
+          </descriptorRefs>
+        </configuration>
+        <executions>
+          <execution>
+            <id>make-assembly</id>
+            <phase>package</phase>
+            <goals>
+              <goal>single</goal>
+            </goals>
+          </execution>
+        </executions>
+      </plugin>
+    </plugins>
+  </build>
 </project>
 </project>

+ 11 - 3
frameworks/Java/tio-http-server/src/main/java/com/litongjava/tio/http/server/MainApp.java

@@ -9,7 +9,7 @@ import com.litongjava.tio.http.server.controller.CacheController;
 import com.litongjava.tio.http.server.controller.DbController;
 import com.litongjava.tio.http.server.controller.DbController;
 import com.litongjava.tio.http.server.controller.IndexController;
 import com.litongjava.tio.http.server.controller.IndexController;
 import com.litongjava.tio.http.server.handler.DefaultHttpRequestDispatcher;
 import com.litongjava.tio.http.server.handler.DefaultHttpRequestDispatcher;
-import com.litongjava.tio.http.server.router.DefaultHttpReqeustRouter;
+import com.litongjava.tio.http.server.router.DefaultHttpRequestRouter;
 import com.litongjava.tio.http.server.router.HttpRequestRouter;
 import com.litongjava.tio.http.server.router.HttpRequestRouter;
 import com.litongjava.tio.server.ServerTioConfig;
 import com.litongjava.tio.server.ServerTioConfig;
 import com.litongjava.tio.utils.environment.EnvUtils;
 import com.litongjava.tio.utils.environment.EnvUtils;
@@ -18,11 +18,12 @@ public class MainApp {
 
 
   public static void main(String[] args) {
   public static void main(String[] args) {
     long start = System.currentTimeMillis();
     long start = System.currentTimeMillis();
+    EnvUtils.buildCmdArgsMap(args);
     EnvUtils.load();
     EnvUtils.load();
     // add route
     // add route
     IndexController controller = new IndexController();
     IndexController controller = new IndexController();
 
 
-    HttpRequestRouter simpleHttpRoutes = new DefaultHttpReqeustRouter();
+    HttpRequestRouter simpleHttpRoutes = new DefaultHttpRequestRouter();
     simpleHttpRoutes.add("/", controller::index);
     simpleHttpRoutes.add("/", controller::index);
     simpleHttpRoutes.add("/plaintext", controller::plaintext);
     simpleHttpRoutes.add("/plaintext", controller::plaintext);
     simpleHttpRoutes.add("/json", controller::json);
     simpleHttpRoutes.add("/json", controller::json);
@@ -49,9 +50,16 @@ public class MainApp {
     // close Heartbeat
     // close Heartbeat
     serverTioConfig.setHeartbeatTimeout(0);
     serverTioConfig.setHeartbeatTimeout(0);
     serverTioConfig.statOn = false;
     serverTioConfig.statOn = false;
+    boolean db = EnvUtils.getBoolean("db", true);
+    if (db) {
+      try {
+        new MysqlDbConfig().init();
+      } catch (Exception e) {
+        e.printStackTrace();
+      }
+    }
     // start server
     // start server
     try {
     try {
-      new MysqlDbConfig().init();
       new EnjoyEngineConfig().engine();
       new EnjoyEngineConfig().engine();
       new EhCachePluginConfig().ehCachePlugin();
       new EhCachePluginConfig().ehCachePlugin();
       httpServerStarter.start();
       httpServerStarter.start();

+ 3 - 3
frameworks/Java/tio-http-server/src/main/java/com/litongjava/tio/http/server/controller/CacheController.java

@@ -7,7 +7,7 @@ import java.util.stream.Collectors;
 
 
 import com.alibaba.fastjson2.JSON;
 import com.alibaba.fastjson2.JSON;
 import com.litongjava.db.activerecord.Db;
 import com.litongjava.db.activerecord.Db;
-import com.litongjava.db.activerecord.Record;
+import com.litongjava.db.activerecord.Row;
 import com.litongjava.tio.http.common.HeaderName;
 import com.litongjava.tio.http.common.HeaderName;
 import com.litongjava.tio.http.common.HeaderValue;
 import com.litongjava.tio.http.common.HeaderValue;
 import com.litongjava.tio.http.common.HttpRequest;
 import com.litongjava.tio.http.common.HttpRequest;
@@ -24,7 +24,7 @@ public class CacheController {
         .limit(RandomUtils.parseQueryCount(queries)) // 限制查询数量
         .limit(RandomUtils.parseQueryCount(queries)) // 限制查询数量
         .mapToObj(id -> findByIdWithCache("world", id)) // 使用 mapToObj 将 int 映射为对象
         .mapToObj(id -> findByIdWithCache("world", id)) // 使用 mapToObj 将 int 映射为对象
         .filter(Objects::nonNull) // 过滤掉 null 值
         .filter(Objects::nonNull) // 过滤掉 null 值
-        .map(Record::toMap) // 将每个 Record 对象转换为 Map
+        .map(Row::toMap) // 将每个 Record 对象转换为 Map
         .collect(Collectors.toList()); // 收集到 List
         .collect(Collectors.toList()); // 收集到 List
 
 
     HttpResponse httpResponse = new HttpResponse(request);
     HttpResponse httpResponse = new HttpResponse(request);
@@ -34,7 +34,7 @@ public class CacheController {
 
 
   }
   }
 
 
-  private Record findByIdWithCache(String tableName, int id) {
+  private Row findByIdWithCache(String tableName, int id) {
     String sql = "SELECT id, randomNumber FROM world WHERE id = ?";
     String sql = "SELECT id, randomNumber FROM world WHERE id = ?";
     return Db.findFirstByCache(tableName, id, sql, id);
     return Db.findFirstByCache(tableName, id, sql, id);
   }
   }

+ 10 - 11
frameworks/Java/tio-http-server/src/main/java/com/litongjava/tio/http/server/controller/DbController.java

@@ -12,15 +12,14 @@ import com.alibaba.fastjson2.JSON;
 import com.jfinal.template.Engine;
 import com.jfinal.template.Engine;
 import com.jfinal.template.Template;
 import com.jfinal.template.Template;
 import com.litongjava.db.activerecord.Db;
 import com.litongjava.db.activerecord.Db;
-import com.litongjava.db.activerecord.Record;
-import com.litongjava.ehcache.EhCache;
+import com.litongjava.db.activerecord.Row;
+import com.litongjava.ehcache.EhCacheKit;
 import com.litongjava.tio.http.common.HeaderName;
 import com.litongjava.tio.http.common.HeaderName;
 import com.litongjava.tio.http.common.HeaderValue;
 import com.litongjava.tio.http.common.HeaderValue;
 import com.litongjava.tio.http.common.HttpRequest;
 import com.litongjava.tio.http.common.HttpRequest;
 import com.litongjava.tio.http.common.HttpResponse;
 import com.litongjava.tio.http.common.HttpResponse;
 import com.litongjava.tio.http.server.model.Fortune;
 import com.litongjava.tio.http.server.model.Fortune;
 import com.litongjava.tio.http.server.util.Resps;
 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.http.server.utils.RandomUtils;
 
 
 public class DbController {
 public class DbController {
@@ -37,7 +36,7 @@ public class DbController {
     // int id = 11;
     // int id = 11;
     // String sql="SELECT id, randomNumber FROM world WHERE id = ?";
     // String sql="SELECT id, randomNumber FROM world WHERE id = ?";
 
 
-    Record recored = Db.findById("world", id);
+    Row recored = Db.findById("world", id);
     if (recored != null) {
     if (recored != null) {
       httpResponse.setBody(JSON.toJSONBytes(recored.toMap()));
       httpResponse.setBody(JSON.toJSONBytes(recored.toMap()));
     } else {
     } else {
@@ -57,7 +56,7 @@ public class DbController {
         .limit(RandomUtils.parseQueryCount(queries)) // 限制查询数量
         .limit(RandomUtils.parseQueryCount(queries)) // 限制查询数量
         .mapToObj(id -> Db.findById("world", id)) // 使用 mapToObj 将 int 映射为对象
         .mapToObj(id -> Db.findById("world", id)) // 使用 mapToObj 将 int 映射为对象
         .filter(Objects::nonNull) // 过滤掉 null 值
         .filter(Objects::nonNull) // 过滤掉 null 值
-        .map(Record::toMap) // 将每个 Record 对象转换为 Map
+        .map(Row::toMap) // 将每个 Record 对象转换为 Map
         .collect(Collectors.toList()); // 收集到 List
         .collect(Collectors.toList()); // 收集到 List
 
 
     HttpResponse httpResponse = new HttpResponse(request);
     HttpResponse httpResponse = new HttpResponse(request);
@@ -66,11 +65,11 @@ public class DbController {
     return httpResponse;
     return httpResponse;
   }
   }
 
 
-//@GetMapping("/updates")
+  //@GetMapping("/updates")
   public HttpResponse updates(HttpRequest request) {
   public HttpResponse updates(HttpRequest request) {
     String queries = request.getParam("queries");
     String queries = request.getParam("queries");
 
 
-    EhCache.removeAll("world");
+    EhCacheKit.removeAll("world");
 
 
     List<Map<String, Object>> updatedRecords = RandomUtils.randomWorldNumbers()// random numbers
     List<Map<String, Object>> updatedRecords = RandomUtils.randomWorldNumbers()// random numbers
         // limit
         // limit
@@ -90,7 +89,7 @@ public class DbController {
           return record;
           return record;
         })
         })
         // tomap
         // tomap
-        .map(Record::toMap)
+        .map(Row::toMap)
         // to List
         // to List
         .collect(Collectors.toList());
         .collect(Collectors.toList());
 
 
@@ -101,11 +100,11 @@ public class DbController {
   }
   }
 
 
   public HttpResponse fortunes(HttpRequest request) throws IllegalAccessException, InstantiationException {
   public HttpResponse fortunes(HttpRequest request) throws IllegalAccessException, InstantiationException {
-    List<Record> records = Db.find("SELECT * FROM fortune"); 
+    List<Row> records = Db.find("SELECT * FROM fortune");
 
 
     List<Fortune> fortunes = new ArrayList<>(records.size());
     List<Fortune> fortunes = new ArrayList<>(records.size());
-    for (Record record : records) {
-      fortunes.add(BeanConverterUtils.toBean(record.toMap(), Fortune.class));
+    for (Row record : records) {
+      fortunes.add(record.toBean(Fortune.class));
     }
     }
     // 添加额外的 Fortune
     // 添加额外的 Fortune
     fortunes.add(new Fortune(0L, "Additional fortune added at request time."));
     fortunes.add(new Fortune(0L, "Additional fortune added at request time."));

+ 0 - 31
frameworks/Java/tio-http-server/src/main/java/com/litongjava/tio/http/server/utils/BeanConverterUtils.java

@@ -1,31 +0,0 @@
-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> T toBean(Map<String, Object> map, Class<T> 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;
-  }
-}

+ 3 - 2
frameworks/Java/tio-http-server/tio-server.dockerfile

@@ -12,8 +12,9 @@ FROM litongjava/jre:8u391-stable-slim
 
 
 WORKDIR /app
 WORKDIR /app
 
 
-COPY --from=builder /app/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-with-dependencies.jar /app/tio-http-server-benchmark-1.0.jar
 
 
 EXPOSE 8080
 EXPOSE 8080
 
 
-CMD ["java","-jar", "/app/target/tio-http-server-benchmark-1.0.jar"]
+# java --server -XX:+UseNUMA XX:+UseParallelGC -cp target/tio-http-server-benchmark-1.0-jar-with-dependencies.jar com.litongjava.tio.http.server.MainApp
+CMD ["java", "-server", "-XX:+UseNUMA", "-XX:+UseParallelGC","-cp", "/app/tio-http-server-benchmark-1.0.jar","com.litongjava.tio.http.server.MainApp"]