diff --git a/frameworks/Java/tio-boot/pom.xml b/frameworks/Java/tio-boot/pom.xml index d72bc47bb04..73443cb3c08 100644 --- a/frameworks/Java/tio-boot/pom.xml +++ b/frameworks/Java/tio-boot/pom.xml @@ -27,8 +27,14 @@ com.litongjava java-db 1.5.0 + + + ch.qos.logback + logback-classic + 1.2.3 + junit junit @@ -36,7 +42,6 @@ test - com.alibaba.fastjson2 fastjson2 diff --git a/frameworks/Java/tio-boot/src/main/java/com/litongjava/tio/http/server/MainAppConfig.java b/frameworks/Java/tio-boot/src/main/java/com/litongjava/tio/http/server/MainAppConfig.java index 8f9472597c1..2852e830fe4 100644 --- a/frameworks/Java/tio-boot/src/main/java/com/litongjava/tio/http/server/MainAppConfig.java +++ b/frameworks/Java/tio-boot/src/main/java/com/litongjava/tio/http/server/MainAppConfig.java @@ -15,24 +15,6 @@ public class MainAppConfig implements BootConfiguration { @Override public void config() throws Exception { - // add route - IndexHandler controller = new IndexHandler(); - - TioBootServer server = TioBootServer.me(); - HttpRequestRouter requestRouter = server.getRequestRouter(); - - requestRouter.add("/", controller::index); - requestRouter.add("/plaintext", controller::plaintext); - requestRouter.add("/json", controller::json); - - DbHandler dbQueryController = new DbHandler(); - requestRouter.add("/db", dbQueryController::db); - requestRouter.add("/queries", dbQueryController::queries); - requestRouter.add("/updates", dbQueryController::updates); - requestRouter.add("/fortunes", dbQueryController::fortunes); - - CacheHandler cacheController = new CacheHandler(); - requestRouter.add("/cachedQuery", cacheController::cachedQuery); boolean db = EnvUtils.getBoolean("db", true); if (db) { @@ -49,6 +31,25 @@ public void config() throws Exception { } catch (Exception e) { e.printStackTrace(); } - } + // add route + IndexHandler controller = new IndexHandler(); + + TioBootServer server = TioBootServer.me(); + HttpRequestRouter requestRouter = server.getRequestRouter(); + if (requestRouter != null) { + requestRouter.add("/", controller::index); + requestRouter.add("/plaintext", controller::plaintext); + requestRouter.add("/json", controller::json); + + DbHandler dbQueryController = new DbHandler(); + requestRouter.add("/db", dbQueryController::db); + requestRouter.add("/queries", dbQueryController::queries); + requestRouter.add("/updates", dbQueryController::updates); + requestRouter.add("/fortunes", dbQueryController::fortunes); + + CacheHandler cacheController = new CacheHandler(); + requestRouter.add("/cachedQuery", cacheController::cachedQuery); + } + } } diff --git a/frameworks/Java/tio-boot/src/main/java/com/litongjava/tio/http/server/controller/CacheHandler.java b/frameworks/Java/tio-boot/src/main/java/com/litongjava/tio/http/server/controller/CacheHandler.java index d3546c09111..c0d1f9c3066 100644 --- a/frameworks/Java/tio-boot/src/main/java/com/litongjava/tio/http/server/controller/CacheHandler.java +++ b/frameworks/Java/tio-boot/src/main/java/com/litongjava/tio/http/server/controller/CacheHandler.java @@ -1,13 +1,13 @@ package com.litongjava.tio.http.server.controller; +import java.util.ArrayList; import java.util.List; import java.util.Map; -import java.util.Objects; -import java.util.stream.Collectors; import com.alibaba.fastjson2.JSON; import com.litongjava.db.activerecord.Db; import com.litongjava.db.activerecord.Row; +import com.litongjava.tio.boot.http.TioRequestContext; import com.litongjava.tio.http.common.HeaderName; import com.litongjava.tio.http.common.HeaderValue; import com.litongjava.tio.http.common.HttpRequest; @@ -16,26 +16,26 @@ public class CacheHandler { // private Logger log = LoggerFactory.getLogger(this.getClass()); + String sql = "SELECT id, randomNumber FROM world WHERE id = ?"; public HttpResponse cachedQuery(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(Row::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.toJSONBytes(recordMaps)); - return httpResponse; - } + int queryCount = RandomUtils.parseQueryCount(queries); + + List> recordMaps = new ArrayList<>(); + + int[] randomNumbers = RandomUtils.randomWorldNumbers().limit(queryCount).toArray(); + for (int id : randomNumbers) { + Row row = Db.findFirstByCache("world", id, sql, id); + if (row != null) { + recordMaps.add(row.toMap()); + } + } - private Row findByIdWithCache(String tableName, int id) { - String sql = "SELECT id, randomNumber FROM world WHERE id = ?"; - return Db.findFirstByCache(tableName, id, sql, id); + HttpResponse response = TioRequestContext.getResponse(); + response.addHeader(HeaderName.Content_Type, HeaderValue.Content_Type.TEXT_PLAIN_JSON); + response.setBody(JSON.toJSONBytes(recordMaps)); + return response; } } diff --git a/frameworks/Java/tio-boot/src/main/java/com/litongjava/tio/http/server/controller/DbHandler.java b/frameworks/Java/tio-boot/src/main/java/com/litongjava/tio/http/server/controller/DbHandler.java index a7a127795ec..3ab48edeba2 100644 --- a/frameworks/Java/tio-boot/src/main/java/com/litongjava/tio/http/server/controller/DbHandler.java +++ b/frameworks/Java/tio-boot/src/main/java/com/litongjava/tio/http/server/controller/DbHandler.java @@ -5,8 +5,6 @@ import java.util.HashMap; 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.template.Engine; @@ -14,6 +12,7 @@ import com.litongjava.db.activerecord.Db; import com.litongjava.db.activerecord.Row; import com.litongjava.ehcache.EhCacheKit; +import com.litongjava.tio.boot.http.TioRequestContext; import com.litongjava.tio.http.common.HeaderName; import com.litongjava.tio.http.common.HeaderValue; import com.litongjava.tio.http.common.HttpRequest; @@ -23,6 +22,10 @@ import com.litongjava.tio.http.server.utils.RandomUtils; public class DbHandler { + private Engine engine = Engine.use(); + private String filename = "fortunes.html"; + private Template template = engine.getTemplate(filename); + private static final byte[] bytes = "{}".getBytes(); public HttpResponse db(HttpRequest request) { Integer id = request.getInt("id"); @@ -31,7 +34,7 @@ public HttpResponse db(HttpRequest request) { } //System.out.println("id:" + id); - HttpResponse httpResponse = new HttpResponse(request); + HttpResponse httpResponse = TioRequestContext.getResponse(); // int id = 11; // String sql="SELECT id, randomNumber FROM world WHERE id = ?"; @@ -40,7 +43,7 @@ public HttpResponse db(HttpRequest request) { if (recored != null) { httpResponse.setBody(JSON.toJSONBytes(recored.toMap())); } else { - httpResponse.setBody("{}".getBytes()); + httpResponse.setBody(bytes); } httpResponse.addHeader(HeaderName.Content_Type, HeaderValue.Content_Type.TEXT_PLAIN_JSON); @@ -51,15 +54,19 @@ public HttpResponse db(HttpRequest request) { // @GetMapping("/queries") public HttpResponse queries(HttpRequest request) { String queries = request.getParam("queries"); - List> recordMaps = RandomUtils.randomWorldNumbers() - // limit - .limit(RandomUtils.parseQueryCount(queries)) // 限制查询数量 - .mapToObj(id -> Db.findById("world", id)) // 使用 mapToObj 将 int 映射为对象 - .filter(Objects::nonNull) // 过滤掉 null 值 - .map(Row::toMap) // 将每个 Record 对象转换为 Map - .collect(Collectors.toList()); // 收集到 List + int queryCount = RandomUtils.parseQueryCount(queries); + int[] randomNumbers = RandomUtils.randomWorldNumbers().limit(queryCount).toArray(); - HttpResponse httpResponse = new HttpResponse(request); + List> recordMaps = new ArrayList<>(); + + for (int id : randomNumbers) { + Row row = Db.findById("world", id); + if (row != null) { + recordMaps.add(row.toMap()); + } + } + + HttpResponse httpResponse = TioRequestContext.getResponse(); httpResponse.addHeader(HeaderName.Content_Type, HeaderValue.Content_Type.TEXT_PLAIN_JSON); httpResponse.setBody(JSON.toJSONBytes(recordMaps)); return httpResponse; @@ -71,27 +78,24 @@ public HttpResponse updates(HttpRequest request) { EhCacheKit.removeAll("world"); - List> updatedRecords = RandomUtils.randomWorldNumbers()// random numbers - // limit - .limit(RandomUtils.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 = RandomUtils.randomWorldNumber(); - } while (newRandomNumber == currentRandomNumber); - - record.set("randomnumber", newRandomNumber); - Db.update("world", "id", record); // update - return record; - }) - // tomap - .map(Row::toMap) - // to List - .collect(Collectors.toList()); + int queryCount = RandomUtils.parseQueryCount(queries); + int[] randomNumbers = RandomUtils.randomWorldNumbers().limit(queryCount).toArray(); + List> updatedRecords = new ArrayList<>(); + + for (int id : randomNumbers) { + Row row = Db.findById("world", id); + if (row != null) { + int currentRandomNumber = row.getInt("randomNumber"); // "randomnumber" + int newRandomNumber; + do { + newRandomNumber = RandomUtils.randomWorldNumber(); + } while (newRandomNumber == currentRandomNumber); + + row.set("randomnumber", newRandomNumber); + Db.update("world", "id", row); // update + updatedRecords.add(row.toMap()); + } + } HttpResponse httpResponse = new HttpResponse(request); httpResponse.addHeader(HeaderName.Content_Type, HeaderValue.Content_Type.TEXT_PLAIN_JSON); @@ -116,11 +120,8 @@ public HttpResponse fortunes(HttpRequest request) throws IllegalAccessException, 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); + HttpResponse httpResponse = TioRequestContext.getResponse(); + return Resps.html(httpResponse, html); } } diff --git a/frameworks/Java/tio-boot/src/main/java/com/litongjava/tio/http/server/controller/IndexHandler.java b/frameworks/Java/tio-boot/src/main/java/com/litongjava/tio/http/server/controller/IndexHandler.java index 2b2bc4c5535..3dd0ba384b9 100644 --- a/frameworks/Java/tio-boot/src/main/java/com/litongjava/tio/http/server/controller/IndexHandler.java +++ b/frameworks/Java/tio-boot/src/main/java/com/litongjava/tio/http/server/controller/IndexHandler.java @@ -1,6 +1,7 @@ package com.litongjava.tio.http.server.controller; import com.alibaba.fastjson2.JSON; +import com.litongjava.tio.boot.http.TioRequestContext; import com.litongjava.tio.http.common.HeaderName; import com.litongjava.tio.http.common.HeaderValue; import com.litongjava.tio.http.common.HttpRequest; @@ -22,19 +23,16 @@ public HttpResponse index(HttpRequest request) { } 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; + HttpResponse response = TioRequestContext.getResponse(); + response.setBody(HELLO_WORLD_BYTES); + response.addHeader(HeaderName.Content_Type, HeaderValue.Content_Type.TEXT_PLAIN_TXT); + return response; } - // 在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; + HttpResponse response = TioRequestContext.getResponse(); + response.setBody(JSON.toJSONBytes(new Message(HELLO_WORLD))); + response.addHeader(HeaderName.Content_Type, HeaderValue.Content_Type.TEXT_PLAIN_JSON); + return response; } -} +} \ No newline at end of file diff --git a/frameworks/Java/tio-boot/src/main/resources/logback.xml b/frameworks/Java/tio-boot/src/main/resources/logback.xml index aff0c711191..6065c075e78 100644 --- a/frameworks/Java/tio-boot/src/main/resources/logback.xml +++ b/frameworks/Java/tio-boot/src/main/resources/logback.xml @@ -1,9 +1,13 @@ - - + + + - - + + + @@ -12,41 +16,40 @@ - + ${CONSOLE_LOG_PATTERN} - - - ${LOG_HOME}/project-name-%d{yyyy-MM-dd}.log - + + + ${LOG_HOME}/log.%d{yyyyMMddHH}.%i.log + 180 + + 100MB - - - 10MB - - - + + - + + - + - + - \ No newline at end of file + diff --git a/frameworks/Java/tio-boot/src/test/java/com/litongjava/tio/http/server/MainAppTest.java b/frameworks/Java/tio-boot/src/test/java/com/litongjava/tio/http/server/MainAppTest.java index e469fa256ef..41b724b15c4 100644 --- a/frameworks/Java/tio-boot/src/test/java/com/litongjava/tio/http/server/MainAppTest.java +++ b/frameworks/Java/tio-boot/src/test/java/com/litongjava/tio/http/server/MainAppTest.java @@ -6,10 +6,9 @@ public class MainAppTest { - @Test + // @Test public void test() { boolean boolean1 = EnvUtils.getBoolean("native", false); System.out.println(boolean1); } - }