1994 Commits

Author SHA1 Message Date
redkale
fbc4436c7c Copier重载copy方法 2025-04-08 12:10:18 +08:00
redkale
3d847fb9b7 格式化 2025-03-15 11:51:02 +08:00
redkale
bdcebcb67d 修复cache.updateColumn方法没有识别ColumnXXXNode问题 2025-01-06 19:24:06 +08:00
redkale
e85e8b745f 增加nowDay方法 2025-01-06 18:57:38 +08:00
redkale
be13d9711f RetResult增加cast方法 2025-01-02 18:25:58 +08:00
redkale
76c4a36ec7 Redkale 2.8.1 开始 2025-01-02 18:18:22 +08:00
redkale
e7f64abc21 ThrowFunction 2024-11-19 22:15:33 +08:00
redkale
800da01c72 SslReadCompletionHandler 2024-11-11 08:50:18 +08:00
redkale
6ade0fdb77 AsyncConnection 2024-11-10 01:07:00 +08:00
redkale
08e79dfde2 Response 2024-11-10 00:20:24 +08:00
redkale
fa982b33cc writePending 2024-11-10 00:05:47 +08:00
redkale
84ac030c42 HttpResponse 2024-11-09 23:58:08 +08:00
redkale
bfb0848fa2 HttpResponse 2024-11-09 23:46:30 +08:00
redkale
7a76256317 Response优化 2024-11-09 23:35:35 +08:00
redkale
f700743134 增加MessageProducer.sendDelayMessage接口 2024-11-09 19:02:21 +08:00
redkale
6401c74f10 增加MessageProducer.sendDelayMessage接口 2024-11-09 18:58:06 +08:00
redkale
65b4e66677 移除pipelineWrite 2024-11-09 08:37:51 +08:00
redkale
243bd95b44 write 2024-11-09 07:50:24 +08:00
redkale
b40f167867 移除writeLock 2024-11-09 07:43:19 +08:00
redkale
550f955678 临时调整writeInLock 2024-11-06 21:18:30 +08:00
redkale
39b1ea3e4e CachedEntry 2024-11-05 16:09:59 +08:00
redkale
da25cd531f HttpResponse 2024-11-04 21:59:19 +08:00
redkale
3876f149fd 注释 2024-11-04 20:07:52 +08:00
redkale
151b09ce0b doc 2024-11-04 08:36:17 +08:00
redkale
9d691e50f7 AsyncConnection 2024-10-31 21:33:42 +08:00
redkale
0895c82525 AsyncConnection 2024-10-31 08:47:56 +08:00
redkale
e6d4b26c9d AsyncConnection 2024-10-28 21:47:56 +08:00
redkale
39f743b47d writeInLock 2024-10-28 12:18:08 +08:00
redkale
f33ac5f88a pipelineWrite 2024-10-28 10:41:55 +08:00
redkale
edfc7b9190 writeLock 2024-10-28 09:22:18 +08:00
redkale
c43d151d4d AsyncNioConnection 2024-10-27 17:28:27 +08:00
redkale
f3f84bd5b3 pipelineWrite 2024-10-27 11:38:17 +08:00
redkale
8f257761fd 移除WebSocket泛型 2024-10-26 09:32:39 +08:00
redkale
020d9c853d 解决WebSocket注入多Service问题 2024-10-25 17:04:55 +08:00
redkale
da88762f99 defaultConvert 2024-10-25 11:07:30 +08:00
redkale
60a47d33c4 json 2024-10-24 20:59:54 +08:00
redkale
ec17eea1e0 sonar 2024-10-24 16:00:12 +08:00
redkale
29ea1eb76b sonar 2024-10-24 09:17:01 +08:00
redkale
9c7ece9282 JsonDynEncoder 2024-10-24 08:37:48 +08:00
redkale
2c0dbeaa15 json 2024-10-23 15:31:21 +08:00
redkale
377799f19a json 2024-10-23 12:24:13 +08:00
redkale
7e85fc134b test 2024-10-23 12:05:09 +08:00
redkale
95e207fd34 json 2024-10-23 09:43:03 +08:00
redkale
3a7a462f65 json 2024-10-23 08:32:56 +08:00
redkale
f8b8429044 JsonByteBufferReader 2024-10-22 14:16:42 +08:00
redkale
f9744b8480 ProtobufAnyDecoder 2024-10-22 09:58:10 +08:00
redkale
4695d787c5 JsonAnyDecoder 2024-10-22 09:45:02 +08:00
redkale
1d9f385da9 sendToChannel0 2024-10-21 20:41:57 +08:00
redkale
72fe0dc2ba abort 2024-10-21 20:26:08 +08:00
redkale
5fbe56bfc1 WebSocket优化 2024-10-21 17:10:52 +08:00
redkale
e2a3560661 pipelineWrite 2024-10-21 14:29:27 +08:00
redkale
c524e15267 conn 2024-10-21 14:22:35 +08:00
redkale
5da88a7916 PipelinePacket 2024-10-21 12:41:17 +08:00
redkale
7c9c3822e0 AnyValue 2024-10-20 14:15:45 +08:00
redkale
1d6b1a3a30 json 2024-10-20 14:12:23 +08:00
redkale
aec47a7a9a loadEncoder 2024-10-20 14:09:19 +08:00
redkale
754c9f0c2b pb 2024-10-20 08:39:19 +08:00
redkale
7405ce4dab pb 2024-10-20 02:12:30 +08:00
redkale
59b9c695ec pb 2024-10-20 01:49:10 +08:00
redkale
c2a923619e pb 2024-10-20 01:00:41 +08:00
redkale
a19b083478 pb 2024-10-19 23:10:49 +08:00
redkale
9cf402f18c pb 2024-10-19 19:42:40 +08:00
redkale
9a085536fb pb 2024-10-19 19:31:48 +08:00
redkale
e82f7e39b0 anyvalue 2024-10-19 17:50:11 +08:00
redkale
fa8ca1fb38 response 2024-10-19 09:28:32 +08:00
redkale
fd5225ab37 doc 2024-10-18 14:46:21 +08:00
redkale
c0960b21f1 pipelineWrite 2024-10-18 14:41:48 +08:00
redkale
062f9a09db source 2024-10-18 09:59:25 +08:00
redkale
264cc3995b convert 2024-10-17 20:24:19 +08:00
redkale
173a5c8a24 json 2024-10-17 20:09:31 +08:00
redkale
1491f6be70 json 2024-10-17 19:55:40 +08:00
redkale
cc760ff327 json 2024-10-17 19:49:40 +08:00
redkale
2c47e5db30 json 2024-10-17 12:33:00 +08:00
redkale
4f6ca16ca6 json 2024-10-17 12:30:11 +08:00
redkale
57686cf221 json 2024-10-17 12:10:54 +08:00
redkale
7586577521 json 2024-10-17 09:05:09 +08:00
redkale
f1ae2bd165 json 2024-10-16 23:40:52 +08:00
redkale
048c718ba2 json 2024-10-16 22:50:23 +08:00
redkale
6429cc93f8 json 2024-10-16 20:50:59 +08:00
redkale
e4bf7432f4 json 2024-10-16 18:16:41 +08:00
redkale
a989f1af9f test 2024-10-16 17:07:54 +08:00
redkale
687606282a json 2024-10-16 16:54:02 +08:00
redkale
ae7bae1b05 pom 2024-10-15 18:02:05 +08:00
redkale
bea6f6fd5a test 2024-10-15 17:07:31 +08:00
redkale
50994c3f78 json优化 2024-10-15 15:28:48 +08:00
redkale
0d45e6c43b readRegister 2024-10-15 00:26:05 +08:00
redkale
3e06534b63 finishJson 2024-10-14 23:31:18 +08:00
redkale
2ec628cc7d doc 2024-10-14 18:12:16 +08:00
redkale
4d17fe7e3f BoolRef 2024-10-14 08:50:17 +08:00
redkale
4e2ba22fc3 test 2024-10-13 21:27:46 +08:00
redkale
85ac8f743d cache 2024-10-13 19:07:56 +08:00
redkale
f65c02677f dyn 2024-10-13 14:20:13 +08:00
redkale
399df22672 dyn 2024-10-13 13:12:12 +08:00
redkale
1cc659276b visitLocalVariable 2024-10-13 10:45:10 +08:00
redkale
909b813573 finishJson优化 2024-10-13 09:29:23 +08:00
redkale
38ec269df2 getPathLastParam废弃 2024-10-12 12:43:02 +08:00
redkale
dbee6c15b0 isCacheClassLoader 2024-10-12 08:39:41 +08:00
redkale
3a532617a1 createCacheClassLoader 2024-10-12 08:33:14 +08:00
redkale
b6accc97f6 currentClassLoader 2024-10-12 08:25:46 +08:00
redkale
a1c4fafa47 test 2024-10-11 22:37:07 +08:00
redkale
bb611413a5 dynclass 2024-10-11 22:02:58 +08:00
redkale
3f172824b6 sncp 2024-10-11 20:24:30 +08:00
redkale
acf8eb1ce0 inNativeImage 2024-10-11 20:05:10 +08:00
redkale
45b0e7098b 优化classloader 2024-10-11 18:57:16 +08:00
redkale
5a7181428f collection 2024-10-11 14:51:49 +08:00
redkale
d5908815d9 client 2024-10-11 14:29:29 +08:00
redkale
f86f82db8d 调整生成动态字节码时的ClassLoader 2024-10-11 12:26:13 +08:00
redkale
1dc07638e5 sncp 2024-10-11 01:04:57 +08:00
redkale
335933a0f4 sncp 2024-10-11 00:46:23 +08:00
redkale
8ea63c5171 creator 2024-10-10 22:29:39 +08:00
redkale
ed2d9527bf sncp 2024-10-10 20:10:08 +08:00
redkale
dc3396daf5 sncp 2024-10-10 14:28:03 +08:00
redkale
72d9427426 WebSocketNode 2024-10-10 01:53:11 +08:00
redkale
35754cb8f5 ws 2024-10-10 01:15:05 +08:00
redkale
6769389f3a WebSocket 2024-10-09 23:45:56 +08:00
redkale
1bcc35cbcf json 2024-10-09 23:18:31 +08:00
redkale
227e94b546 readpending 2024-10-09 22:46:32 +08:00
redkale
0d84ef0541 AnonymousVirtuals 2024-10-09 21:32:46 +08:00
redkale
21c00b3419 sncp 2024-10-09 21:29:04 +08:00
redkale
62eb06f272 移除ConvertEntity 2024-10-09 19:37:16 +08:00
redkale
e5acbdcdee 移除BSON功能 2024-10-09 19:28:47 +08:00
redkale
71cec55f1c 修复WebSocket.readPending问题 2024-10-09 18:07:55 +08:00
redkale
76623e9c6b json 2024-10-08 20:28:55 +08:00
redkale
59ad1d8617 readRegisterInIOThread 2024-10-08 16:01:11 +08:00
redkale
a542c03e8b 移除fastWrite 2024-10-08 15:54:51 +08:00
redkale
845a1e97ff fastWrite 2024-10-08 09:14:01 +08:00
redkale
3d8c2f1fc5 fastWrite优化 2024-10-07 22:22:25 +08:00
redkale
77a8b8fa7f 注释 2024-10-07 21:51:53 +08:00
redkale
0427a76b55 AsyncConnection新增fastWrite功能 2024-10-07 20:17:21 +08:00
redkale
ba7bbed7b1 json 2024-10-07 12:27:08 +08:00
redkale
0138e46ee5 getDeclaredConstructor 2024-10-07 11:04:41 +08:00
redkale
8ca483c63e Utility 2024-10-07 10:18:28 +08:00
redkale
2b06bc26bf Utility 2024-10-07 10:14:32 +08:00
redkale
1db55185d7 Unsafe优化 2024-10-07 09:38:03 +08:00
redkale
d6a90f23a5 Utility 2024-10-07 00:06:52 +08:00
redkale
c8cd1e23ef Utility 2024-10-06 23:30:51 +08:00
redkale
34fef28ed6 un 2024-10-06 22:38:26 +08:00
redkale
d20d20f46a unsafe 2024-10-06 22:36:29 +08:00
redkale
acdd626d4f Utility 2024-10-06 21:39:59 +08:00
redkale
f3a0e7a1a8 findStaticVarHandle 2024-10-06 21:34:27 +08:00
redkale
545a0c5473 临时代码 2024-10-06 21:19:50 +08:00
redkale
4eb34ba7d9 ProtocolCodec.readRegister优化 2024-10-05 22:22:40 +08:00
redkale
7bab2742a5 ProtocolCodec.readRegister 优化 2024-10-05 22:19:52 +08:00
redkale
154fd08183 Jdk21Inners 2024-10-05 21:39:47 +08:00
redkale
07eb1386de module-info 2024-10-05 19:31:39 +08:00
redkale
162401ee19 HttpRequest 2024-10-05 19:27:09 +08:00
redkale
a0a12bc709 ByteTreeNode 2024-10-05 19:04:50 +08:00
redkale
d2b8ef4471 readMethodUriLine优化 2024-10-05 17:53:49 +08:00
redkale
a2ac9ff896 ByteTreeNode 2024-10-05 16:04:08 +08:00
redkale
04e539ab0f ByteTreeNode 2024-10-05 15:30:16 +08:00
redkale
2f5f96290f Jdk21Inners 2024-10-05 10:17:19 +08:00
redkale
198a3575f8 pb 2024-10-04 20:22:44 +08:00
redkale
69fa2c9156 pb 2024-10-04 20:02:37 +08:00
redkale
37cc5dd080 pb 2024-10-04 19:37:02 +08:00
redkale
a3cbc19de9 pb 2024-10-04 18:13:12 +08:00
redkale
b56feefd8a pb 2024-10-04 17:04:45 +08:00
redkale
96ac0d8715 pb 2024-10-04 16:58:44 +08:00
redkale
b5c381d992 pb 2024-10-04 13:17:42 +08:00
redkale
aaa719214d pb 2024-10-04 11:21:36 +08:00
redkale
5c5bce467f pb 2024-10-04 11:01:49 +08:00
redkale
b7a604ebee ProtobufBytesWriter 2024-10-03 10:03:35 +08:00
redkale
88417f35a4 pb 2024-10-03 01:06:07 +08:00
redkale
8e981e1b7e pb 2024-10-03 01:05:12 +08:00
redkale
67aa3c0609 pb 2024-10-02 09:29:04 +08:00
redkale
4e71f8009a protobuf 2024-10-02 00:50:40 +08:00
redkale
692f0fa8b1 protobuf 2024-10-02 00:41:08 +08:00
redkale
cd15a1a586 protobuf 2024-10-01 19:55:40 +08:00
redkale
e8a53d6b24 pb 2024-10-01 08:56:17 +08:00
redkale
00c22d4a72 pb 2024-09-30 19:56:51 +08:00
redkale
bb92e4541a pb 2024-09-30 19:40:16 +08:00
redkale
e7f05c31e0 Protobuf 2024-09-30 18:38:50 +08:00
redkale
306dbabc7d PatternSimpledCoder 2024-09-30 15:02:04 +08:00
redkale
f18ffb7940 readField 2024-09-30 12:45:31 +08:00
redkale
850ff211ca convert 2024-09-30 11:50:50 +08:00
redkale
40000ae026 protobuf 2024-09-30 10:11:40 +08:00
redkale
dad7d38202 convert 2024-09-30 09:45:30 +08:00
redkale
8cf8a2c037 bson 2024-09-30 08:59:17 +08:00
redkale
c847b349a2 Request 2024-09-30 08:28:10 +08:00
redkale
4070945270 request 2024-09-30 08:14:32 +08:00
redkale
b40f975c14 decodeable 2024-09-29 23:02:53 +08:00
redkale
fbe2a01519 loadHeaderBytes优化 2024-09-29 22:47:28 +08:00
redkale
0b10009d5e EnumSimpledCoder 2024-09-29 14:46:51 +08:00
redkale
b724ce1a0c ConvertStandardString 2024-09-29 14:27:52 +08:00
redkale
ab2773ba86 convert 2024-09-29 12:18:31 +08:00
redkale
bc4b3ab17f convert 2024-09-29 12:15:23 +08:00
redkale
f42ff13824 convert 2024-09-29 12:12:21 +08:00
redkale
b736cbafc6 json 2024-09-29 09:59:50 +08:00
redkale
090bfb5629 convert 2024-09-29 09:34:33 +08:00
redkale
73eb306eb2 protobuf 2024-09-29 00:23:01 +08:00
redkale
71cfd9e1cd test 2024-09-29 00:09:25 +08:00
redkale
1dec372d18 protobuf 2024-09-29 00:07:13 +08:00
redkale
7536744d93 protobuf 2024-09-28 19:39:45 +08:00
redkale
b50a28132b protobuf 2024-09-28 18:58:30 +08:00
redkale
c804cb8c1c writer 2024-09-28 17:52:27 +08:00
redkale
fd5b63f58c convert 2024-09-28 17:23:33 +08:00
redkale
7229fb90de protobuf 2024-09-28 15:20:38 +08:00
redkale
81c7c162bb protobuf 2024-09-28 12:41:53 +08:00
redkale
20b4080f40 test 2024-09-28 12:29:38 +08:00
redkale
4f9805b254 protobuf 2024-09-28 09:21:01 +08:00
redkale
d245f134b7 protobuf 2024-09-28 08:58:21 +08:00
redkale
84177f43f4 convert优化 2024-09-27 18:07:16 +08:00
redkale
438ce904ab convert 2024-09-27 12:49:19 +08:00
redkale
de5114a480 convert 2024-09-27 10:27:31 +08:00
redkale
a0472438c8 减少unsafe使用 2024-09-26 22:00:31 +08:00
redkale
a3e660ff63 protobuf 2024-09-26 18:13:08 +08:00
redkale
271f6d1e03 protobuf 2024-09-26 16:03:20 +08:00
redkale
2ad4dce50e protobuf 2024-09-26 10:32:47 +08:00
redkale
78ba874dbf EntityFullFunc 2024-09-26 08:32:52 +08:00
redkale
4028c9a465 protobuf 2024-09-25 23:27:33 +08:00
redkale
1d4a1d4b66 protobuf 2024-09-25 18:55:18 +08:00
redkale
23eaff080b dyn 2024-09-25 18:39:16 +08:00
redkale
bc55d24e08 TagDecodeable 2024-09-25 18:28:28 +08:00
redkale
c50cb855d1 utf8 2024-09-25 15:40:57 +08:00
redkale
cf638997f6 protobuf 2024-09-25 15:30:27 +08:00
redkale
a42e3cd63c ProtobufDynEncoder 2024-09-25 15:21:24 +08:00
redkale
b58b630be0 JsonDynEncoder 2024-09-25 15:11:36 +08:00
redkale
aa4c592d9e javadoc 2024-09-25 15:01:53 +08:00
redkale
133c280dc2 protobuf 2024-09-25 14:53:52 +08:00
redkale
3e23c9143a protobuf 2024-09-25 13:58:21 +08:00
redkale
3ce56c08df 格式化 2024-09-25 08:54:48 +08:00
redkale
ee29eb98a0 ProtobufWriter 2024-09-25 00:43:54 +08:00
redkale
1d453b7883 ProtobufWriter 2024-09-25 00:33:12 +08:00
redkale
f0fae107ba protobuf 2024-09-24 16:03:30 +08:00
redkale
242f668aa6 protobuf 2024-09-24 12:31:12 +08:00
redkale
97e732e9e3 pbtest 2024-09-24 00:00:47 +08:00
redkale
5f6a8c5a12 EntityFullFunc 2024-09-23 23:08:10 +08:00
redkale
6aa4e87b35 getBigDecimal 2024-09-23 22:56:53 +08:00
redkale
c098674ab8 JsonCharsWriter 2024-09-23 17:49:48 +08:00
redkale
7b03a9fffe AbstractCacheSource 2024-09-23 12:31:10 +08:00
redkale
9235cd035a Asms 2024-09-23 11:23:40 +08:00
redkale
6162e71d29 EntityFullFunc 2024-09-23 11:11:59 +08:00
redkale
a060075d08 EntityFullFunc 2024-09-22 23:38:39 +08:00
redkale
5474cd846d EntityFullFunc 2024-09-22 22:03:38 +08:00
redkale
f207999117 DataJdbcResultSet 2024-09-22 18:53:12 +08:00
redkale
f51a52e895 source 2024-09-21 22:30:56 +08:00
redkale
82d375b517 Request 2024-09-20 20:43:49 +08:00
redkale
8ad28e8932 protobuf 2024-09-19 17:04:43 +08:00
redkale
5f2abc725b protobuf 2024-09-19 16:20:34 +08:00
redkale
f4c4bfda70 protobuf 2024-09-19 12:45:21 +08:00
redkale
2cf74bedca protobuf 2024-09-19 10:25:13 +08:00
redkale
3646e0ab15 protobuf 2024-09-19 08:59:58 +08:00
redkale
a79c4303aa protobuf 2024-09-18 22:15:10 +08:00
redkale
79e63fa7ad json 2024-09-17 17:33:09 +08:00
redkale
10842830dc json 2024-09-17 17:01:22 +08:00
redkale
016ee632c1 json 2024-09-17 16:33:03 +08:00
redkale
5015834d69 json 2024-09-17 15:31:28 +08:00
redkale
58d3f5101c JsonByteBufferReader 2024-09-17 13:24:20 +08:00
redkale
f2992a76fa convertListFrom 2024-09-17 12:16:46 +08:00
redkale
8cc83af502 JsonReader 2024-09-17 11:40:41 +08:00
redkale
64f6ac55e7 DeMemberInfo 2024-09-17 11:12:14 +08:00
redkale
a7cddab9fb CharArray 2024-09-17 10:34:35 +08:00
redkale
1cfc17766a DeMemberNode 2024-09-17 08:57:39 +08:00
redkale
c8ba21dac2 JsonCharsWriter 2024-09-16 22:30:25 +08:00
redkale
fe293c6f25 BYTE_DQUOTE 2024-09-16 21:03:15 +08:00
redkale
6dca528381 json 2024-09-16 17:21:13 +08:00
redkale
fcff5ccf7e json 2024-09-16 11:53:36 +08:00
redkale
a65f4318f5 格式化 2024-09-15 09:40:54 +08:00
redkale
cc5a3106aa 格式化 2024-09-14 23:21:23 +08:00
redkale
c4a02e05e1 Client 2024-09-14 08:55:54 +08:00
redkale
67312e3a7e 格式化 2024-09-13 23:09:20 +08:00
redkale
767f689351 移除shareAsyncGroup 2024-09-13 22:47:27 +08:00
redkale
334c4920d9 HttpRequest 2024-09-13 12:33:15 +08:00
redkale
0c1f605dbb 还原 2024-09-13 08:39:37 +08:00
redkale
c0ea28cf9c 临时 2024-09-13 08:36:29 +08:00
redkale
28aa2285f5 HttpRequest 2024-09-13 08:34:58 +08:00
redkale
a757504877 Response 2024-09-13 07:47:26 +08:00
redkale
aa3a00a40f HttpRequest 2024-09-12 18:36:48 +08:00
redkale
1035052f02 Request.pipelineHeaderLength 2024-09-12 16:35:16 +08:00
redkale
c370c885e6 Response 2024-09-12 08:44:38 +08:00
redkale
2c39167025 Client 2024-09-11 22:15:52 +08:00
redkale
ff1d392196 CachedManager 2024-09-11 17:43:06 +08:00
redkale
20518259aa Cached.checkName 2024-09-11 17:23:32 +08:00
redkale
5aa3e61686 CachedAction 2024-09-11 17:07:46 +08:00
redkale
12a39ac405 CachedLocalSource 2024-09-11 16:51:33 +08:00
redkale
2a8bda69e5 增加Cached.localLimit属性 2024-09-11 16:43:22 +08:00
redkale
ebf498edf8 CachedManagerService 2024-09-11 13:47:34 +08:00
redkale
357d8b3d11 CachedLocalSource 2024-09-11 13:45:30 +08:00
redkale
91eee09e2f CachedAction 2024-09-11 11:30:48 +08:00
redkale
2b18310050 增加Cached.name属性 2024-09-11 11:17:39 +08:00
redkale
61586beb45 格式化 2024-09-11 10:12:24 +08:00
redkale
eced5e522e 格式化 2024-09-11 09:56:01 +08:00
redkale
352dc9038f CachedManager 2024-09-10 14:53:38 +08:00
redkale
9c4aeda85c readHeader 2024-09-10 08:17:39 +08:00
redkale
ac8d146c98 CacheSource.lock 2024-09-09 20:03:21 +08:00
redkale
98021cb87f 格式化 2024-09-09 17:55:22 +08:00
redkale
588e1eca90 SncpRequest 2024-09-09 12:38:13 +08:00
redkale
d5c3841198 HttpRequest 2024-09-08 18:16:08 +08:00
redkale
da8ee3a6d7 Request.subobject 2024-09-08 18:15:07 +08:00
redkale
672b5a7cf5 EntityInfo 2024-09-08 02:06:14 +08:00
redkale
3ca986e5a5 EntityCache 2024-09-08 01:13:28 +08:00
redkale
8c448da19a EntityInfo 2024-09-08 00:46:43 +08:00
redkale
2f37dd9c03 Application.shareAsyncGroup 2024-09-08 00:17:45 +08:00
redkale
9da964657d Context.maxHeader 2024-09-07 23:33:10 +08:00
redkale
50c10f31fa ByteBufferPool 2024-09-07 23:01:26 +08:00
redkale
9cb4889a9c Client 2024-09-07 19:55:51 +08:00
redkale
426e8e463a 格式化 2024-09-07 12:48:11 +08:00
redkale
2c25cc9f27 DataSource增加nonBlocking配置 2024-09-07 12:33:57 +08:00
redkale
ea01415b5f 格式化 2024-09-07 09:29:11 +08:00
redkale
21b9239c8d 还原 2024-09-05 15:24:43 +08:00
redkale
aab8a631f0 临时屏蔽 2024-09-05 15:00:42 +08:00
redkale
2506405d8c HttpContext.lazyHeader 2024-09-05 12:25:55 +08:00
redkale
3cda0c4dd9 Client.authenticate 2024-09-05 12:11:34 +08:00
redkale
8ca6f46c4a 优化 2024-09-05 08:46:05 +08:00
redkale
ec7f54809f 优化 2024-09-04 22:54:18 +08:00
redkale
cfcb11ae61 增加SourceType 2024-09-04 17:57:32 +08:00
redkale
01c8aca36a Request增加Annotation[]属性 2024-09-04 17:09:39 +08:00
redkale
4c6403a4ca youhua 2024-08-27 11:42:05 +08:00
redkale
1d3049b743 Utility.inNativeImage 2024-08-26 23:36:24 +08:00
redkale
932bf729b0 hasLimit 2024-08-26 14:23:58 +08:00
redkale
48007b141b Client优化 2024-08-25 09:43:51 +08:00
redkale
5ddf730c7d Filter文档 2024-08-24 11:36:12 +08:00
redkale
6fb70c3945 RetException优化 2024-08-23 10:20:52 +08:00
redkale
cce667e019 增加Messaged.regexTopic 2024-08-22 20:00:16 +08:00
redkale
6a72fecbb1 完善文档 2024-08-21 16:25:34 +08:00
redkale
4328eb7770 修复RestConvertCoder不生效的bug 2024-08-21 11:51:58 +08:00
redkale
a33f5dcd6f AsyncConnection 2024-08-20 22:43:50 +08:00
redkale
21cb0e191e 代码优化 2024-08-20 18:49:03 +08:00
redkale
f6d20a6324 AnyValue.toJsonObject 2024-08-20 18:16:12 +08:00
redkale
254ab9a25a ByteTuple 2024-08-19 19:47:38 +08:00
redkale
b48182f7cc HttpResponse.sendHandler 2024-08-19 16:20:25 +08:00
redkale
4adf23e57c HttpResponse优化 2024-08-19 15:57:49 +08:00
redkale
95fff255cf 文档完善 2024-08-19 11:44:10 +08:00
redkale
05d2a5aa8c 完善文档 2024-08-19 11:36:22 +08:00
redkale
ff70491e55 完善文档 2024-08-19 11:31:04 +08:00
redkale
43d739638d 完善文档 2024-08-19 11:28:34 +08:00
redkale
2c65bb5996 javadoc 2024-08-18 11:06:11 +08:00
redkale
74823fe2fe MessageEvent 2024-08-18 01:44:09 +08:00
redkale
9137aed8db WebClient优化 2024-08-17 16:13:14 +08:00
redkale
6f9d851965 注释 2024-08-17 12:29:11 +08:00
redkale
cd415699b7 ClientWriteThread 2024-08-17 11:32:27 +08:00
redkale
9402db9fd5 Client 2024-08-17 11:11:20 +08:00
redkale
96e9d897ec Client优化 2024-08-16 22:18:42 +08:00
redkale
5384e9ab96 Client优化 2024-08-16 19:31:31 +08:00
redkale
cf65c780c8 ClientFuture 2024-08-16 17:23:48 +08:00
redkale
e1a88ef5d9 ClientConnection 2024-08-16 16:45:55 +08:00
redkale
86ea5f8cb9 完善文档 2024-08-16 15:52:10 +08:00
redkale
db0b81b4a0 readChunkedBody 2024-08-16 12:00:19 +08:00
redkale
e7ed4ae9bc lazyHeader 2024-08-16 09:37:50 +08:00
redkale
60b4425a47 chunked 2024-08-15 23:06:14 +08:00
redkale
742a0fde42 实现Content-Encoding 2024-08-15 19:53:00 +08:00
redkale
b1d87f4d66 移除chunked 2024-08-15 18:14:09 +08:00
redkale
5a2dbc4e67 增加chunked信息 2024-08-15 18:08:06 +08:00
redkale
6edf8b58fc keep-alive必须要有content-length 2024-08-15 17:52:45 +08:00
redkale
dd0debd51e Flipper.sort兼容多余的空格 2024-08-15 17:07:27 +08:00
redkale
c520910d5c AppConfig 2024-08-15 12:06:07 +08:00
redkale
8c0b9a0f6a 增加source.yml配置 2024-08-15 12:02:32 +08:00
redkale
4876191e7a YamlProvider 2024-08-14 23:34:52 +08:00
redkale
5168dd59ce YamlLoader 2024-08-14 23:29:30 +08:00
redkale
09d710b928 YamlReader 2024-08-14 23:01:35 +08:00
redkale
d3580668b6 AnyValue增加toProperties方法 2024-08-14 22:11:30 +08:00
redkale
0c9576603d 格式化 2024-08-14 20:07:35 +08:00
redkale
f10ade8795 AbstractDataSource 2024-08-14 20:04:56 +08:00
redkale
483244bda2 YmlProvider 2024-08-14 17:02:59 +08:00
redkale
d69412b1f8 YmlProvider 2024-08-14 15:32:00 +08:00
redkale
66806d60a5 MessagedInstanceTest 2024-08-13 23:03:55 +08:00
redkale
9d169c568b protobuf更换包名 2024-08-13 19:57:06 +08:00
redkale
3acf6a40ad readme 2024-08-13 19:16:32 +08:00
redkale
3158f9265f 文档完善 2024-08-13 19:09:27 +08:00
redkale
df8fd31e75 注释 2024-08-13 15:39:02 +08:00
redkale
44bb9ac086 MessageAsmMethodBoost优化 2024-08-13 15:27:54 +08:00
redkale
cb9b57a04c MessageAsmMethodBoost优化 2024-08-13 11:25:14 +08:00
redkale
f694b617cf MessageAsmMethodBoost优化 2024-08-13 02:34:25 +08:00
redkale
f19e2a916e AsmMethodBoost优化 2024-08-13 01:52:33 +08:00
redkale
a51141d497 MessageAsmMethodBoost优化 2024-08-13 01:36:28 +08:00
redkale
aee5745172 MessageAsmMethodBoost优化 2024-08-12 23:49:25 +08:00
redkale
cebd463d58 MessageAgent优化 2024-08-12 20:25:55 +08:00
redkale
45548f2de9 MessageAsmMethodBoost优化 2024-08-12 20:05:59 +08:00
redkale
6ad3ba192b MessageAgent优化 2024-08-12 17:15:33 +08:00
redkale
f8fbabaef9 完善注释 2024-08-09 15:03:40 +08:00
redkale
328d2c432e ClassFilter过滤优化 2024-08-09 00:11:20 +08:00
redkale
f871c36080 ResourceTypeLoader优化 2024-08-08 23:52:37 +08:00
redkale
33c579f14f 注释优化 2024-08-08 23:08:35 +08:00
redkale
aa47820ee7 优化Configuration 2024-08-08 17:19:44 +08:00
redkale
b6659ea15e 优化Configuration 2024-08-08 16:49:29 +08:00
redkale
cca73a5045 增加Configuration功能 2024-08-08 16:22:35 +08:00
redkale
c6fa2a688c isEmpty 2024-08-07 21:16:52 +08:00
redkale
2733cbcc62 @Serial 2024-08-05 16:15:18 +08:00
redkale
f1f8f653e4 ScheduledManager增加execute方法 2024-08-01 08:03:10 +08:00
redkale
d6cd97c798 addURI 2024-07-25 15:25:14 +08:00
redkale
61a9e88cd0 CacheClusterAgent 2024-07-24 22:50:16 +08:00
redkale
c357373310 ClassFilter.toPattern优化 2024-07-24 22:32:28 +08:00
redkale
15cd481713 增加HttpRequest.remoteAddrHeaders属性 2024-07-05 10:21:02 +08:00
redkale
7bbf05af21 MessageAgent优化 2024-07-03 16:12:27 +08:00
redkale
20d400178b MessageManager接口异步化 2024-07-03 15:04:36 +08:00
redkale
8fde50fabf 格式化 2024-07-02 11:21:14 +08:00
redkale
69c2baae51 ClusterAgent 2024-07-01 13:10:25 +08:00
redkale
9b48e85b26 ClusterAgent优化 2024-07-01 11:38:06 +08:00
redkale
913a055e7e CachedManager增加node属性 2024-06-29 23:48:57 +08:00
redkale
ff76c698f4 SQL模板支持默认值 2024-06-29 19:18:45 +08:00
redkale
8136345484 修正regx为regex 2024-06-29 16:32:03 +08:00
redkale
def85ca1ac 注释 2024-06-29 12:16:50 +08:00
redkale
f9d762534d 优化RowBound 2024-06-29 11:24:50 +08:00
redkale
68af3c7495 Entity增加camelCase属性 2024-06-27 21:24:37 +08:00
redkale
da17758614 增加RetException 2024-06-27 12:32:18 +08:00
redkale
76761acb9b 完善文档 2024-06-25 22:21:32 +08:00
redkale
c05be6d4f8 优化ScheduleManagerService 2024-06-25 15:07:39 +08:00
redkale
978afdd829 MultiHashKey支持字段名同名的getter方法 2024-06-25 12:24:35 +08:00
redkale
38e8da994e 多个正则支持逗号分隔 2024-06-21 11:04:33 +08:00
redkale
c99cf9d0d9 注释 2024-06-21 10:54:26 +08:00
redkale
52cf34ba29 增加formatPackageRegx 2024-06-21 10:50:23 +08:00
redkale
ca06085dfb 优化PatternSimpledCoder 2024-06-20 12:18:22 +08:00
redkale
9ddd8472b1 CachedManager 2024-06-13 15:34:34 +08:00
redkale
4411a32522 CachedActionFunc 2024-06-13 15:23:12 +08:00
redkale
892e09cb53 Merge branch 'main' of https://github.com/redkale/redkale 2024-06-12 22:41:21 +08:00
redkale
01439d0779 doc 2024-06-12 22:40:49 +08:00
Redkale
f1fe2ac81b Update README.md 2024-06-12 22:31:19 +08:00
Redkale
c5de588fd3 Update README.md 2024-06-12 22:30:40 +08:00
Redkale
1e5442a1b9 Update README.md 2024-06-12 22:30:05 +08:00
redkale
0ccddc04c0 增加RestGetMapping/RestPostMapping 2024-06-12 20:42:01 +08:00
redkale
fd4aa227d3 RetCodes 2024-06-12 19:29:43 +08:00
redkale
7d841e938c RetCodes 2024-06-12 19:21:53 +08:00
redkale
a47f73cf10 RetCodes 2024-06-12 19:09:18 +08:00
redkale
9acb7a5290 RetLabel 2024-06-12 16:32:52 +08:00
redkale
15a501b2cd 增加RetCodes错误码加载器 2024-06-12 16:18:57 +08:00
redkale
0f110fca33 ConvertType 2024-06-12 15:40:34 +08:00
redkale
3060b99a89 pom 2024-06-12 15:23:47 +08:00
redkale
53f1d6dded pom 2024-06-12 15:22:18 +08:00
redkale
145dcdf1d3 加强注释 2024-06-12 15:19:25 +08:00
redkale
a676dca6b4 DataResultSetRow 2024-06-12 10:43:29 +08:00
redkale
7c28f2c54d 注释 2024-06-11 15:38:13 +08:00
redkale
a1645e8b46 CachedManagerTest 2024-06-11 15:00:17 +08:00
redkale
52c120e5ac 注释 2024-06-11 14:52:15 +08:00
redkale
5913c515b9 调整ResourceTypeLoader 2024-06-11 12:05:37 +08:00
redkale
b89bc452e6 CACHED_CHANNEL_TOPIC 2024-06-11 00:44:35 +08:00
redkale
ff1bba7679 getChannelTopic 2024-06-11 00:43:30 +08:00
redkale
da6855193b CachedEventMessage 2024-06-11 00:36:41 +08:00
redkale
7d2903b1a8 config 2024-06-11 00:13:21 +08:00
redkale
a6ae2ec816 CachedManager 2024-06-11 00:07:58 +08:00
redkale
c23055a7d3 CachedManager多实例化 2024-06-11 00:00:45 +08:00
redkale
2ee9dcfeb2 AsyncConnection移除超时参数 2024-06-10 13:21:43 +08:00
redkale
4478c521e6 AsyncGroup 2024-06-09 07:35:50 +08:00
redkale
36fb3391cc scheduled 2024-06-08 19:47:53 +08:00
redkale
74b91ac5b0 scheduled优化 2024-06-08 19:00:19 +08:00
redkale
ca7c0d47b0 EventListener 2024-06-08 16:55:24 +08:00
redkale
6bcb1de304 LockedAction 2024-06-08 16:32:52 +08:00
redkale
bbf72bb27b Cached优化 2024-06-08 15:23:58 +08:00
redkale
f62b276033 CachedAsyncLock 2024-06-08 12:25:37 +08:00
redkale
f9339229bc CONFIG_NAME 2024-06-08 11:41:13 +08:00
redkale
c60c96a672 cached包重命名 2024-06-08 11:07:42 +08:00
redkale
0ff3d3133b cache优化 2024-06-07 22:42:59 +08:00
redkale
5e5577e685 CacheManager config 2024-06-07 14:58:42 +08:00
redkale
1a4e2986ad CacheManager优化 2024-06-07 14:51:01 +08:00
redkale
90097909ce NativeParserNode 2024-06-07 09:35:23 +08:00
redkale
ba25120dea 新增RowBound功能 2024-06-07 08:43:52 +08:00
redkale
1c07fcc6fa test 2024-06-06 23:53:52 +08:00
redkale
f0bc867220 Cached优化 2024-06-06 23:35:36 +08:00
redkale
4ee64ed1ef DataSqlMonitor 2024-06-06 18:11:40 +08:00
redkale
02202e3d06 executeQuerySheet 2024-06-06 17:24:08 +08:00
redkale
43012a5399 nativePageSql 2024-06-06 17:00:35 +08:00
redkale
2e8c183c3a mariadb 2024-06-06 16:00:36 +08:00
redkale
9fefe9d19e sqlserver 2024-06-06 15:49:27 +08:00
redkale
f3896483ad createPageCountSql 2024-06-06 14:56:32 +08:00
redkale
a358e5bf01 nativePageSql 2024-06-06 14:55:12 +08:00
redkale
071f1f35b7 createPageCountSql 2024-06-06 11:21:00 +08:00
redkale
07d2ca87b9 nativePageSql 2024-06-06 08:32:52 +08:00
redkale
5a8557bf63 createLimitSQL 2024-06-05 23:14:12 +08:00
redkale
698e6c6ee7 DataSqlMapperBuilder 2024-06-05 22:39:33 +08:00
redkale
f3f5f53535 DataSqlMapperBuilder 2024-06-05 17:39:26 +08:00
redkale
00e0a820c7 FilterOrs 2024-06-05 16:55:19 +08:00
redkale
7d84c0ca1f RestSleepTest 2024-06-05 16:51:33 +08:00
redkale
c1992434d0 pom 2024-06-05 16:38:59 +08:00
redkale
0c61ffbe19 pom 2024-06-05 16:21:06 +08:00
redkale
81c6543650 pom 2024-06-05 16:18:38 +08:00
redkale
31cd2163e5 pom 2024-06-04 19:56:28 +08:00
redkale
9668623b25 pom 2024-06-04 19:53:34 +08:00
redkale
e733980e33 增加FilterOrs功能 2024-06-04 19:46:46 +08:00
redkale
e9645e6b05 ColumnHandler 2024-06-04 17:38:10 +08:00
redkale
19041335b4 ConvertColumnHandler优化 2024-06-04 17:26:15 +08:00
redkale
3819e42593 ConvertColumnTransfer优化 2024-06-04 12:14:37 +08:00
redkale
897eb97d46 ConvertColumnTransfer优化 2024-06-04 11:05:38 +08:00
redkale
9b22fc3f5d pom 2024-06-02 08:32:58 +08:00
redkale
91a353900a pom 2024-06-02 08:25:59 +08:00
redkale
fb82801bda pom 2024-06-02 08:20:32 +08:00
redkale
d8c13c8420 pom 2024-06-02 07:56:21 +08:00
redkale
bea1900fdc pom 2024-06-01 09:41:22 +08:00
redkale
439d702e97 pom 2024-06-01 09:05:38 +08:00
redkale
e67720f066 pom 2024-06-01 08:55:42 +08:00
redkale
90dab3a4c6 pom 2024-06-01 08:49:13 +08:00
redkale
a49e340622 pom 2024-06-01 08:44:20 +08:00
redkale
d7ca6bdc6e pom 2024-06-01 08:23:07 +08:00
redkale
2355bb2796 pom 2024-06-01 03:40:07 +08:00
redkale
02013be08a pom 2024-06-01 03:22:41 +08:00
redkale
7f7c4c857e pom 2024-06-01 03:16:14 +08:00
redkale
09e00c02b9 pom 2024-06-01 03:11:47 +08:00
redkale
1b41b6e568 pom 2024-06-01 03:05:45 +08:00
redkale
2665ebf52b pom 2024-06-01 02:50:57 +08:00
redkale
da807e5b8e pom 2024-06-01 02:49:12 +08:00
redkale
4d3a94ca17 pom 2024-06-01 02:47:15 +08:00
redkale
b37cdc2c6d pom 2024-06-01 02:14:06 +08:00
redkale
41c293ed1f pom 2024-06-01 02:08:27 +08:00
redkale
5cdde0eeaa pom 2024-06-01 02:06:58 +08:00
redkale
3e0bfc581c pom 2024-06-01 02:04:24 +08:00
redkale
9463887112 pom 2024-06-01 01:59:30 +08:00
redkale
7e77183dad pom 2024-06-01 01:49:08 +08:00
redkale
9fe7069eed pom 2024-06-01 01:45:45 +08:00
redkale
ffd0ccdf21 pom 2024-06-01 01:36:48 +08:00
redkale
30df2c5b07 pom 2024-06-01 01:34:15 +08:00
redkale
db40973bea pom 2024-06-01 01:30:37 +08:00
redkale
a641485921 pom 2024-06-01 01:26:30 +08:00
redkale
7b571f630c pom 2024-06-01 01:19:52 +08:00
redkale
931b3f57a1 MAVEN_GPG_PASSPHRASE 2024-06-01 00:48:23 +08:00
redkale
080b3a77f3 pom 2024-06-01 00:36:25 +08:00
redkale
d56b9b7ac9 --pinentry-mode 2024-06-01 00:26:04 +08:00
redkale
244909db85 pom 2024-06-01 00:17:59 +08:00
redkale
98571c3779 pom 2024-06-01 00:17:13 +08:00
redkale
32234cd1dd pom 2024-06-01 00:13:50 +08:00
redkale
4608c34dc8 pom 2024-06-01 00:08:20 +08:00
redkale
fb4bbb1ce5 pom 2024-06-01 00:01:27 +08:00
redkale
5fe760c40b pom 2024-05-31 23:46:34 +08:00
redkale
80b0feb611 pom 2024-05-31 17:01:07 +08:00
redkale
825fad4109 pom 2024-05-31 16:45:17 +08:00
redkale
1226f0bd21 pom 2024-05-31 16:30:09 +08:00
redkale
3a837e4cf3 pom 2024-05-31 16:20:45 +08:00
redkale
8ea2415586 pom 2024-05-31 16:02:08 +08:00
redkale
14f4c81e75 pom 2024-05-31 15:27:46 +08:00
redkale
20f9ad40d3 pom 2024-05-31 09:00:58 +08:00
redkale
1cd58f4a01 pom 2024-05-31 08:58:05 +08:00
Redkale
e98cdd4028 Update maven_snapshot.yml 2024-05-31 08:34:35 +08:00
redkale
26308abc70 Merge branch 'main' of https://github.com/redkale/redkale 2024-05-31 08:23:36 +08:00
redkale
635e7111cf test 2024-05-31 08:23:23 +08:00
Redkale
54a8822bf8 Create maven_snapshot.yml 2024-05-31 08:17:52 +08:00
Redkale
b3514773ad Rename maven.yml to maven_check.yml 2024-05-31 08:16:31 +08:00
Redkale
c85188b026 Update maven.yml 2024-05-31 08:16:10 +08:00
redkale
220dff2802 Format 2024-05-30 20:37:31 +08:00
redkale
8cab0c78df Format 2024-05-30 20:35:40 +08:00
redkale
30236f9bbc CacheKeyGenerator 2024-05-30 20:24:44 +08:00
redkale
641efad649 优化CacheKeyGenerator 2024-05-30 15:39:33 +08:00
redkale
b5b8e5b59b CacheKeyGenerator 2024-05-30 15:37:50 +08:00
redkale
f556d9fe29 format 2024-05-30 15:31:16 +08:00
redkale
c94be39f02 增加CacheKeyGenerator功能 2024-05-30 15:21:01 +08:00
redkale
ec9a0bbaf0 @Cached.key与方法参数数的校验 2024-05-29 09:44:46 +08:00
redkale
bf6213aca1 BiFunctionConvertTest 2024-05-28 20:02:45 +08:00
redkale
249468c601 BiFunctionConvertTest 2024-05-28 19:58:59 +08:00
redkale
5f0b738264 BiFunctionConvertTest 2024-05-28 19:57:09 +08:00
redkale
5f9a06c1e4 BiFunctionConvertTest 2024-05-28 19:54:46 +08:00
redkale
5f5f246c2e BiFunctionConvertTest 2024-05-28 19:52:57 +08:00
redkale
c21801767f BiFunctionConvertTest 2024-05-28 19:50:35 +08:00
redkale
e5b7921860 FunctionConvertTest 2024-05-28 19:47:28 +08:00
redkale
54487a73c0 FunctionConvertTest 2024-05-28 19:41:05 +08:00
redkale
698591fe28 BiFuncConvertTest 2024-05-28 19:38:12 +08:00
Redkale
53e50bbd95 Update BiFunctionConvertTest.java 2024-05-28 19:05:08 +08:00
redkale
d665c89799 BiFunctionConvertTest 2024-05-28 19:01:14 +08:00
redkale
717fd0376b BiFunctionConvertTest 2024-05-28 18:50:52 +08:00
redkale
17889c2b33 BiFunctionConvertTest 2024-05-28 09:04:43 +08:00
redkale
284785841a BiFunctionConvertTest 2024-05-28 08:58:47 +08:00
redkale
54e8ab3b7e BiFunctionConvertTest 2024-05-28 08:34:44 +08:00
Redkale
09304c198c Update BiFunctionConvertTest.java 2024-05-28 08:27:52 +08:00
redkale
2209d6147e BiFunctionConvertTest 2024-05-28 08:24:01 +08:00
redkale
faea36a92b BiFunctionConvertTest 2024-05-28 08:19:45 +08:00
redkale
e9005637af BiFunctionConvertTest 2024-05-28 08:14:37 +08:00
redkale
65413baccd BiFunctionConvertTest 2024-05-28 08:05:58 +08:00
redkale
0ce73064f5 BiFunctionConvertTest 2024-05-27 21:06:08 +08:00
Redkale
6632846f10 Create maven.yml 2024-05-27 15:21:34 +08:00
Redkale
3cff00b5b8 Delete src/test/java/org/redkale/test/convert/BiFunctionConvertTest.java 2024-05-27 15:07:10 +08:00
redkale
f5479e13db Merge branch 'main' of http://github.com/redkale/redkale
# Conflicts:
#	src/test/java/org/redkale/test/convert/BiFunctionConvertTest.java
2024-05-27 15:05:58 +08:00
redkale
6cc6056e37 format 2024-05-27 15:04:23 +08:00
Redkale
a70cc585a9 Update BiFunctionConvertTest.java 2024-05-27 15:02:52 +08:00
redkale
626c2452d8 Merge branch 'main' of http://github.com/redkale/redkale 2024-05-27 14:59:18 +08:00
redkale
d27657b113 format 2024-05-27 14:58:44 +08:00
Redkale
36fd26264e Update pom.xml 2024-05-27 14:50:43 +08:00
Redkale
51656cbaa1 Update pom.xml 2024-05-27 14:47:59 +08:00
redkale
dc8ec75ada format 2024-05-27 14:47:25 +08:00
redkale
58685dacb2 format 2024-05-27 14:26:48 +08:00
redkale
10f9f57218 remove workflows 2024-05-27 14:17:38 +08:00
redkale
bb14060517 format 2024-05-27 14:05:27 +08:00
redkale
a77180a0ba Merge branch 'main' of http://github.com/redkale/redkale 2024-05-27 13:54:13 +08:00
redkale
d47ecacf1f format 2024-05-27 13:53:59 +08:00
redkale
5813e99f0c format 2024-05-27 13:39:32 +08:00
redkale
38b3bec2a8 pom 2024-05-27 13:10:54 +08:00
redkale
27bfda94a0 format 2024-05-27 13:02:25 +08:00
redkale
cbb224046c Merge branch 'main' of http://github.com/redkale/redkale 2024-05-27 12:53:07 +08:00
redkale
053cda1017 pom 2024-05-27 12:52:35 +08:00
redkale
5079560037 format 2024-05-27 12:19:58 +08:00
redkale
4d1eaa9766 check 2024-05-27 12:04:58 +08:00
redkale
41e6b5da7d apply 2024-05-27 12:01:31 +08:00
redkale
bcf74fbe71 format 2024-05-27 11:59:19 +08:00
redkale
f189803bb7 format 2024-05-27 11:54:36 +08:00
redkale
56c460e6c3 Merge branch 'main' of http://github.com/redkale/redkale 2024-05-27 11:52:13 +08:00
redkale
db048652cc format 2024-05-27 11:51:46 +08:00
Redkale
f71e824539 Update LoginBean.java 2024-05-27 11:48:21 +08:00
Redkale
dbc5ff378a Update LoginBean.java
format
2024-05-27 11:45:39 +08:00
redkale
7f05b61ad9 format 2024-05-27 11:43:19 +08:00
redkale
8147001f3f format 2024-05-27 11:40:04 +08:00
redkale
325639a49c lineEndings 2024-05-27 11:30:33 +08:00
redkale
38e31df6d7 pom 2024-05-27 10:56:11 +08:00
redkale
5722b25429 format 2024-05-27 08:57:43 +08:00
redkale
74421024ea format 2024-05-27 08:34:15 +08:00
redkale
6cea220256 Merge branch 'main' of http://github.com/redkale/redkale 2024-05-27 08:28:46 +08:00
redkale
3a4e41c531 format 2024-05-27 08:28:27 +08:00
Redkale
9cbb706302 Create maven.yml 2024-05-27 08:27:20 +08:00
redkale
ecc53303d1 pom check 2024-05-26 09:01:30 +08:00
redkale
aeeb7a3c72 Full Code Format 2024-05-26 08:26:36 +08:00
redkale
7230be701e MissingParamException 2024-05-25 08:03:13 +08:00
redkale
b5e7111e78 简单优化 2024-05-24 19:57:30 +08:00
redkale
05dd539f4f DataSqlMapper优化 2024-05-24 19:35:41 +08:00
redkale
b51259cb91 优化DataNativeSqlParser 2024-05-24 17:21:53 +08:00
redkale
4227a8a080 格式化 2024-05-24 12:33:49 +08:00
redkale
b4ded6f746 优化异常抛出 2024-05-24 12:00:27 +08:00
redkale
4f008796d7 优化注释 2024-05-24 11:21:03 +08:00
redkale
46e5130e08 优化DataNativeSqlParser 2024-05-24 11:15:51 +08:00
redkale
0f0c4eac6e 优化DataNativeJsqlParser 2024-05-24 08:00:27 +08:00
redkale
3331723aea 优化命名 2024-05-22 16:10:27 +08:00
redkale
95836a73cd source.parser优化 2024-05-22 11:37:42 +08:00
redkale
04a8c6f784 扩展PageBean参数接口 2024-04-01 11:38:16 +08:00
redkale
665b295a96 EntityBuilder支持下划线小写字段转化 2024-03-24 21:05:41 +08:00
redkale
07cdf26aaf Flipper优化 2024-03-05 12:24:33 +08:00
redkale
e0aac13710 isTableNotExist优化 2024-02-29 14:58:46 +08:00
redkale
6f21745537 优化isTableNotExist 2024-02-29 14:48:32 +08:00
redkale
49405c509b 优化ResourceTypeLoader 2024-02-29 14:29:08 +08:00
redkale
94bc2a512d ResourceAnnotationProvider改ResourceAnnotationLoader 2024-02-29 10:51:18 +08:00
redkale
2b6e44015b 优化JsonArray 2024-02-20 11:38:42 +08:00
redkale
f5c412c286 ResourceEntry 2024-02-06 10:31:39 +08:00
redkale
9fbce21de9 Messaged 2024-02-05 23:39:40 +08:00
redkale
dc7a481463 loadClassByFilters 2024-02-03 10:38:58 +08:00
redkale
dc57d62f34 优化ClassFilter 2024-02-03 09:50:36 +08:00
redkale
cd059c02a2 ResourceFactory优化 2024-02-01 08:54:58 +08:00
redkale
5ce226edd7 MultiHashKey 2024-01-30 23:15:06 +08:00
redkale
54d629155b Environment 2024-01-30 21:10:13 +08:00
redkale
c83aa7e8a8 MultiHashKey 2024-01-30 20:52:54 +08:00
redkale
f725e491f0 ClassDepends 2024-01-27 08:58:25 +08:00
redkale
3fdea1b1d8 DynClassDepends 2024-01-27 08:36:24 +08:00
redkale
75f645e9cf CacheClusterAgent 2024-01-26 23:49:05 +08:00
redkale
7bf75b69cd ClusterAgent 2024-01-26 23:23:26 +08:00
redkale
c94c34e6a8 doc 2024-01-26 15:56:10 +08:00
redkale
258fa43bba DataJdbcSource 2024-01-26 11:03:12 +08:00
redkale
0ef0ebabd2 WebRequest 2024-01-25 14:46:40 +08:00
redkale
4cd6d85bc1 WebRequest 2024-01-25 10:25:41 +08:00
redkale
16a1e25f42 format 2024-01-24 21:33:26 +08:00
redkale
84e4a24ff5 格式化 2024-01-24 20:23:40 +08:00
redkale
99a217cef6 src 2024-01-24 15:18:09 +08:00
redkale
97d517abd9 Scheduled 2024-01-24 10:24:35 +08:00
redkale
b326e6ea6f app 2024-01-24 08:36:49 +08:00
redkale
ddfdf68c83 threads 2024-01-23 23:42:37 +08:00
redkale
07e9ad4a21 Rest 2024-01-23 23:21:47 +08:00
redkale
2d80646cc4 doc 2024-01-23 23:09:57 +08:00
redkale
cd39b484f5 增加ColumnValues 2024-01-23 23:00:33 +08:00
redkale
1c19b70ae9 createUDPClient 2024-01-22 22:40:11 +08:00
redkale
257b406d73 timeout 2024-01-22 22:37:47 +08:00
redkale
70fe0fde1e format 2024-01-20 23:51:15 +08:00
redkale
470e636e55 doc 2024-01-20 23:07:12 +08:00
redkale
436853dd03 格式化 2024-01-20 22:24:27 +08:00
redkale
f9994b33af CacheSource 2024-01-20 14:25:08 +08:00
redkale
47584f3106 CacheSource增加rateLimit接口 2024-01-20 12:40:26 +08:00
redkale
ef985e2aef HttpResponse 2024-01-19 15:59:31 +08:00
redkale
4f34f1fd2e http 2024-01-18 22:44:41 +08:00
redkale
c633d1c0e8 youhua 2024-01-18 15:08:49 +08:00
redkale
e347a43738 格式化 2024-01-18 11:26:49 +08:00
redkale
636927e4eb 代码格式化 2024-01-17 22:57:23 +08:00
redkale
49f03f9701 youhua 2024-01-17 12:23:08 +08:00
redkale
93d7277bfe 优化非实现类的Service加载 2024-01-15 22:47:00 +08:00
redkale
4b7b140c7b Inherited 2024-01-15 10:00:13 +08:00
redkale
b17716780a Index 2024-01-14 21:53:43 +08:00
redkale
2992250745 CacheSource增加delex方法 2024-01-14 20:47:31 +08:00
redkale
ef802bb1ce EntityBuilder 2024-01-12 14:34:18 +08:00
redkale
076c260793 DataNativeSqlInfo 2024-01-11 21:42:44 +08:00
redkale
7162116ae3 Param 2024-01-11 09:28:30 +08:00
redkale
5ea5869897 DataSqlMapperBuilder 2024-01-10 23:44:34 +08:00
redkale
fb2cf4e5e3 DataSqlMapper 2024-01-10 20:42:28 +08:00
redkale
7d327e7864 DataSqlMapperBuilder 2024-01-09 23:39:06 +08:00
redkale
ce630ee253 sql 2024-01-09 23:22:12 +08:00
redkale
4de3d3f505 DataSqlMapper 2024-01-09 15:06:22 +08:00
redkale
6c331f733b DataSqlMapper 2024-01-09 14:39:27 +08:00
redkale
853f501ffd 定义DataSqlMapper 2024-01-09 13:31:16 +08:00
redkale
6b877e8136 DataResultSet 2024-01-08 22:48:39 +08:00
redkale
8c5b8b0a70 EntityBuilder优化 2024-01-06 21:37:23 +08:00
redkale
a7f1ef2c3b AbstractDataSqlSource 2024-01-06 19:58:16 +08:00
redkale
a34bc80f19 FilterNode优化 2024-01-06 19:10:57 +08:00
redkale
267a17858f FilterNode优化 2024-01-06 18:53:02 +08:00
redkale
81340be2e1 DistributeTableStrategy增加getSource接口,待实现 2024-01-06 12:19:16 +08:00
redkale
87f46d2785 source加载优化 2024-01-05 23:24:57 +08:00
redkale
503c2c6f72 DispatcherServlet 2024-01-04 22:23:16 +08:00
redkale
6348aa884f 可定制DispatcherServlet 2024-01-04 18:34:02 +08:00
redkale
0435cc4e48 ScheduleManagerService 2024-01-04 10:06:52 +08:00
redkale
1e715285fa doc 2024-01-04 09:57:45 +08:00
redkale
f3707a3499 HttpServer 2024-01-04 08:43:36 +08:00
redkale
552d1ac872 ScheduleManager优化 2024-01-04 02:33:32 +08:00
redkale
6078c9a686 优化HttpServer 2024-01-04 02:11:04 +08:00
redkale
564eadec11 Scheduled 2024-01-03 17:19:49 +08:00
redkale
d6b9df4109 AbstractDataSqlSource 2024-01-03 10:12:06 +08:00
redkale
95539580a7 ScheduleManager优化 2024-01-02 16:23:12 +08:00
redkale
34a03b0e26 ScheduleManager优化 2024-01-02 15:48:26 +08:00
redkale
cad219d7e1 doc 2023-12-30 10:52:28 +08:00
redkale
4a383a9dc1 doc 2023-12-30 10:48:09 +08:00
redkale
5ee14bc859 doc 2023-12-30 10:05:05 +08:00
redkale
e6f22a1f18 doc 2023-12-30 08:53:49 +08:00
redkale
fe6a5dd91c doc 2023-12-29 23:19:10 +08:00
redkale
263aa86211 doc 2023-12-29 14:45:39 +08:00
redkale
718dfc6fd1 doc 2023-12-29 14:39:12 +08:00
redkale
372f96b3a9 HttpHeaders优化 2023-12-29 12:54:57 +08:00
redkale
af3079377f HttpHeaders优化 2023-12-29 12:38:29 +08:00
redkale
62042d3aaa doc 2023-12-29 12:05:42 +08:00
redkale
ce94610a72 doc 2023-12-29 12:01:34 +08:00
redkale
7648f0cdc8 doc 2023-12-29 12:00:32 +08:00
redkale
a4f8519bcf doc 2023-12-29 11:52:17 +08:00
redkale
6cade6a1da group增加nodes属性 2023-12-29 11:31:04 +08:00
redkale
fc420221cf doc 2023-12-29 11:19:17 +08:00
redkale
be202cef6a 远程模式依赖注入 2023-12-29 10:54:34 +08:00
redkale
06a1d5d1bb DataSource接口扩展 2023-12-29 10:04:30 +08:00
redkale
79a310181c CacheSource增加pttl等接口 2023-12-29 08:47:30 +08:00
redkale
46d2629fca 修复nodeid溢出问题 2023-12-28 19:41:21 +08:00
redkale
83dd4da4ec CacheManager优化 2023-12-27 14:40:05 +08:00
redkale
fb321c58a7 CacheSource 2023-12-27 11:04:02 +08:00
redkale
0840f04847 CacheSource 2023-12-27 10:21:24 +08:00
redkale
8a19914a07 CacheSource增加setnxpx接口 2023-12-27 09:36:27 +08:00
redkale
dc1dc42bef checkNodeid 2023-12-26 19:14:26 +08:00
redkale
9c64cde003 doc 2023-12-26 18:41:12 +08:00
redkale
1d80041c16 Application.nodeid改为string类型 2023-12-26 18:36:03 +08:00
redkale
fb9bdd22c4 CacheManager 2023-12-26 17:10:10 +08:00
redkale
f552c657b6 doc 2023-12-26 15:07:52 +08:00
redkale
0c10e928fc doc 2023-12-26 15:04:41 +08:00
redkale
58bd2b08a4 CacheManager 2023-12-26 14:45:43 +08:00
redkale
fd3e33d836 spi 2023-12-26 11:04:23 +08:00
redkale
cac8da9b4d 注释 2023-12-26 09:47:07 +08:00
redkale
c57a32143b 增加LoadMode功能 2023-12-26 09:24:58 +08:00
redkale
6db029263c MessageAsmMethodBoost 2023-12-26 00:16:45 +08:00
redkale
498b2ff70f BootModule 2023-12-25 19:09:13 +08:00
redkale
710f8fc632 cluster 2023-12-25 12:37:58 +08:00
redkale
0c18e29aaf CacheSource 2023-12-25 12:25:20 +08:00
redkale
08f679c422 Sncp.remote优化 2023-12-25 12:05:28 +08:00
redkale
0578fa3ca5 Sncp remote支持字段名 2023-12-25 10:44:54 +08:00
redkale
7ef195f49e AsmMethodBoost优化 2023-12-25 08:51:15 +08:00
redkale
a5fc08a821 DynForMessage 2023-12-24 22:42:34 +08:00
redkale
88392fd5dd Messaged 2023-12-24 21:08:57 +08:00
redkale
ae03bdecad DEFAULT_HASH 2023-12-24 09:18:58 +08:00
redkale
240b2b226b messageManager 2023-12-24 08:40:54 +08:00
redkale
b52090d1f2 mq.spi 2023-12-24 08:32:24 +08:00
redkale
7664edb9a1 doc 2023-12-23 22:18:17 +08:00
redkale
5a156467d7 java 2023-12-23 15:36:01 +08:00
redkale
5951b1b9cb logo 2023-12-23 15:32:36 +08:00
redkale
29bf353e40 logo 2023-12-23 15:29:19 +08:00
redkale
69014e83c5 文档更新 2023-12-23 15:23:46 +08:00
redkale
25881ff06a 文档更新 2023-12-23 15:23:22 +08:00
redkale
d6e82eb8c1 文档更新 2023-12-23 15:20:09 +08:00
Redkale
2cc67af409 Update README.md 2023-12-23 11:46:43 +08:00
redkale
88c20f798f CacheSource增加msetnx接口 2023-12-22 14:54:49 +08:00
redkale
ce36250e60 Scheduled 2023-12-22 14:15:00 +08:00
redkale
ec26e3c9f7 CacheAsmMethodBoost 2023-12-22 00:00:31 +08:00
redkale
cfbf4bbe85 ThrowSupplier 2023-12-21 19:52:15 +08:00
redkale
95b08e1db0 AsmMethodParam 2023-12-21 15:30:21 +08:00
redkale
382ad87c5f CacheAction 2023-12-21 14:44:52 +08:00
redkale
bbddb31752 DataSource 2023-12-21 13:48:13 +08:00
redkale
81da17ddd4 修复EntityCache复制反了的bug 2023-12-21 13:25:32 +08:00
redkale
e5a3c4c102 HttpResourceServlet 2023-12-21 12:25:51 +08:00
redkale
63c3326265 CacheManager 2023-12-21 10:32:33 +08:00
redkale
cda78cfc7d MultiHashKey 2023-12-21 10:20:05 +08:00
redkale
f9ec08adea CombinedKey 2023-12-21 07:54:30 +08:00
redkale
50607df3ef CacheAction 2023-12-21 00:10:02 +08:00
redkale
00ead74204 CacheAsmMethodBoost优化 2023-12-20 20:29:16 +08:00
redkale
3fba0a3eeb AsmMethodBoost 2023-12-20 20:22:39 +08:00
redkale
ebaf4ebe16 asm 2023-12-20 18:52:41 +08:00
redkale
ff7ed50e82 DynForCache 2023-12-20 18:13:39 +08:00
redkale
0c1e34c2cc lock 2023-12-20 17:19:43 +08:00
redkale
5d9bd3018a AsmMethodBean 2023-12-20 15:27:19 +08:00
redkale
ef5349098d CacheDyn 2023-12-20 12:04:08 +08:00
redkale
4ddf2dbe86 AsmMethodBoost优化 2023-12-19 22:57:56 +08:00
redkale
7a37df319c 优化schedule 2023-12-19 22:23:43 +08:00
redkale
e8eea11ca6 修复Application空指针问题 2023-12-19 17:10:10 +08:00
redkale
8e413db8d1 ScheduleEvent 2023-12-19 16:48:37 +08:00
redkale
ec48417e20 AsmMethodBoost接口 2023-12-19 14:58:41 +08:00
redkale
9942a194a6 优化 2023-12-19 10:49:25 +08:00
redkale
70aac955c6 spi 2023-12-19 10:13:14 +08:00
redkale
24a043195a 增加ResourceInjected功能 2023-12-19 09:53:46 +08:00
redkale
d3a6f46c6c spi 2023-12-19 00:07:40 +08:00
redkale
1a49db8a1b 优化包名 2023-12-19 00:02:09 +08:00
redkale
d971fe94ee proto 2023-12-18 23:53:30 +08:00
redkale
fc228964fd ResourceFactory迁移到inject包 2023-12-18 23:42:18 +08:00
redkale
7e45b458e9 优化 2023-12-18 17:07:16 +08:00
redkale
eb7c44de18 Application优化 2023-12-18 17:00:39 +08:00
redkale
6cb0a05720 优化 2023-12-15 22:55:27 +08:00
redkale
387f1688f4 优化 2023-12-15 22:40:19 +08:00
redkale
eec8939461 AnyValueWriter 2023-12-15 22:10:19 +08:00
redkale
feb063a4ed PropertiesAgent 2023-12-15 12:45:50 +08:00
redkale
56d0ad2711 优化 2023-12-14 23:18:52 +08:00
redkale
9b641edc11 ModuleEngine大优化 2023-12-14 23:08:57 +08:00
redkale
398b7b76a5 copier 2023-12-13 15:22:45 +08:00
redkale
a357c9f20e 格式化 2023-12-13 13:07:06 +08:00
redkale
680a12d83b CacheManager 2023-12-13 11:26:44 +08:00
redkale
9df80032a7 CacheManager支持nullable 2023-12-13 08:52:38 +08:00
redkale
8ef27add1c Copier兼容不是void返回类型的setter方法 2023-12-12 21:43:39 +08:00
redkale
8ab6b6e955 CacheManager 2023-12-12 16:38:15 +08:00
redkale
08d667d4d1 CacheManager优化 2023-12-12 14:44:43 +08:00
redkale
8698d12d1f CacheManager 2023-12-12 00:31:43 +08:00
redkale
618a42c5df localGet 2023-12-11 23:41:57 +08:00
redkale
f7e3f7d7ec 优化 2023-12-11 22:18:17 +08:00
redkale
a2f6578503 优化 2023-12-11 22:00:10 +08:00
redkale
53f029052b support 2023-12-11 20:15:49 +08:00
redkale
ce5125db9c CacheManagerService 2023-12-11 18:34:03 +08:00
redkale
d6b9402ce0 ScheduleEngine 2023-12-11 18:24:15 +08:00
redkale
8780365e17 CacheManager 2023-12-11 16:33:57 +08:00
redkale
c008dfdfd7 CacheExpire 2023-12-11 16:30:27 +08:00
redkale
2ee787f08b CacheManagerService优化 2023-12-11 16:19:33 +08:00
redkale
71a7e7e7f6 CacheManager 2023-12-11 15:18:51 +08:00
redkale
bd088ab9ec CacheMemorySource优化 2023-12-11 14:45:35 +08:00
redkale
8e51f99c7a CacheManager 2023-12-11 10:55:03 +08:00
redkale
d589eef853 trace 2023-12-10 17:18:07 +08:00
redkale
5b6c978620 CacheEntry 2023-12-09 19:05:29 +08:00
redkale
7dc6dc6a6d //TODO 2023-12-09 11:21:40 +08:00
redkale
23cfbf6f1e 优化命名 2023-12-09 11:19:11 +08:00
redkale
d06406c200 Caching 2023-12-09 11:16:18 +08:00
redkale
6d9f2ec6be Cacheing 2023-12-09 11:12:33 +08:00
redkale
c2f66b61ec CachedFactory 2023-12-09 11:00:53 +08:00
redkale
86cfeafd8d cacheing 2023-12-09 10:51:18 +08:00
redkale
e7a7461d9d CacheMemorySource优化 2023-12-08 10:01:05 +08:00
redkale
6615326edb EntityCache优化 2023-12-07 22:06:37 +08:00
redkale
64c3a2c4bd 废弃Cacheable类 2023-12-07 21:59:51 +08:00
redkale
8f6098834f ScheduledFactory优化 2023-12-07 15:45:02 +08:00
redkale
e204b60ac4 注释 2023-12-07 15:26:08 +08:00
redkale
0177599442 Resource的#改成@ 2023-12-07 15:18:08 +08:00
redkale
9f0a2b99b7 Scheduled优化 2023-12-07 15:08:19 +08:00
redkale
42a1229f1f Scheduled优化 2023-12-07 14:48:54 +08:00
redkale
cdcc42c90a CronExpression 2023-12-07 14:35:40 +08:00
redkale
875d335cc9 注释 2023-12-07 14:00:07 +08:00
redkale
989153815f 优化client 2023-12-06 21:35:02 +08:00
redkale
b3ea041b67 优化timeout 2023-12-06 21:03:43 +08:00
redkale
54f9b68b3d 单元测试用例 2023-12-05 17:44:18 +08:00
redkale
a0da13bc4f 增加定时任务功能 2023-12-05 16:59:13 +08:00
redkale
dbd4a79589 VertxSqlDataSource优化 2023-12-04 21:05:42 +08:00
redkale
158ff3b961 EntityInfo优化 2023-12-04 15:30:29 +08:00
redkale
c62b55fea4 DataJdbcSource优化 2023-12-04 12:10:54 +08:00
redkale
aeafac22b0 DataJdbcSource优化 2023-12-04 11:22:01 +08:00
redkale
225460f522 DataJdbcSource优化 2023-12-04 09:14:24 +08:00
redkale
7522e79f7d DataJdbcSource优化 2023-12-03 22:52:19 +08:00
redkale
ed8719c27b FilterJoinType增加 2023-12-02 11:12:02 +08:00
redkale
31c6ffdd17 client优化 2023-12-02 09:00:19 +08:00
redkale
0085493b3f 变更ne方法 2023-12-01 16:15:53 +08:00
redkale
c234663f87 ClientAddress优化 2023-12-01 08:40:30 +08:00
redkale
061fecf7b4 下划线字段名自动转换驼峰 2023-11-30 21:43:02 +08:00
redkale
609242bce8 DataSources 2023-11-30 18:12:15 +08:00
redkale
916f0eb793 DataSources优化 2023-11-30 18:08:34 +08:00
redkale
9dff5967fb 优化 2023-11-30 16:53:38 +08:00
redkale
c25001c5e4 HttpSimpleClient优化 2023-11-30 15:40:09 +08:00
redkale
f0e53d4a8e 优化client 2023-11-29 23:20:57 +08:00
redkale
a4b277e875 优化ProtocolCodec的续读功能 2023-11-29 22:59:13 +08:00
redkale
ba788eec9c 优化Client 2023-11-29 22:22:08 +08:00
redkale
fa575da721 DataJdbcSource优化 2023-11-28 22:02:02 +08:00
redkale
ad58cb76aa DataNativeSqlParser优化 2023-11-28 13:56:22 +08:00
redkale
b574313e61 jsqlparser升级到4.7 2023-11-28 12:10:28 +08:00
redkale
c3862297b1 加强注释 2023-11-28 10:28:36 +08:00
redkale
e192d37bf0 HttpSimpleClient优化 2023-11-27 22:50:09 +08:00
redkale
252a45fbb4 HttpSimpleClient优化 2023-11-27 19:21:58 +08:00
redkale
90e813a06c DataJdbcSource 2023-11-25 21:52:05 +08:00
redkale
0a93ccb818 DataJdbcSource优化 2023-11-24 22:44:19 +08:00
redkale
05e3046af8 HttpRequest.path优化 2023-11-23 15:14:07 +08:00
redkale
0bb91186a8 HttpSimpleRequest优化 2023-11-22 10:33:20 +08:00
redkale
7433530998 RestURI更名RestPath 2023-11-21 18:02:34 +08:00
redkale
aefd10c029 asm 2023-11-21 14:30:36 +08:00
redkale
b1b58da3ec npe 2023-11-20 22:40:06 +08:00
redkale
5be0cb5d2e 修复set方法 2023-11-20 22:13:30 +08:00
redkale
19d2bab0d1 代码格式优化 2023-11-20 21:44:59 +08:00
redkale
aecbf0fb26 json 2023-11-20 19:05:45 +08:00
redkale
4a8c3a58f7 增加HttpParameters 2023-11-20 18:56:40 +08:00
redkale
2223845ab3 HttpHeaders 2023-11-20 18:19:52 +08:00
redkale
753d8b020a 增加HttpHeader 2023-11-20 18:17:48 +08:00
redkale
ae91e47a73 优化javadoc 2023-11-18 11:52:55 +08:00
redkale
930f0781b8 ColumnValue优化 2023-11-18 11:28:49 +08:00
redkale
8f913dff0b 增加ColumnNodes 2023-11-18 08:52:08 +08:00
redkale
c82f454e42 增加DataJdbcConnection功能 2023-11-17 23:22:28 +08:00
redkale
1ee5d79866 删除注释 2023-11-17 23:05:09 +08:00
redkale
02b24953ea ColumnNode 2023-11-17 23:03:13 +08:00
redkale
b29dedbb79 增加ColumnXXXNode功能 2023-11-17 22:57:21 +08:00
redkale
36c68df5ff ColumnNodeValue更名为ColumnExpNode 2023-11-17 20:54:18 +08:00
redkale
ea13e89146 ClientCodec修复runWork逻辑 2023-11-17 20:10:08 +08:00
redkale
044e6c8b7a ClientCodec优化 2023-11-17 19:35:15 +08:00
redkale
b256db65d4 ClusterAgent优化 2023-11-16 13:16:42 +08:00
redkale
e44afc9208 FilterKey更名为FilterColValue 2023-11-16 09:41:06 +08:00
redkale
af45c451a3 sonar优化 2023-11-13 11:48:51 +08:00
redkale
ea91894cec 修正javadoc 2023-11-13 11:12:29 +08:00
redkale
c9386a445b sonar优化 2023-11-13 10:57:08 +08:00
redkale
73411593b2 移除excludelibs 2023-11-12 21:35:37 +08:00
redkale
d1a318f8ed 移除excludelibs配置功能 2023-11-12 21:27:27 +08:00
redkale
cfcc229000 移除jctools复制过来的的三个类 2023-11-12 20:03:02 +08:00
redkale
5e25bc623c 注释优化 2023-11-12 19:59:01 +08:00
redkale
cb2abab70c queryAddress优化 2023-11-11 12:34:15 +08:00
redkale
fdfa70c765 增加Times 2023-11-11 11:00:23 +08:00
redkale
2f80bbf379 MessageCoder优化 2023-11-11 08:50:34 +08:00
redkale
0391304024 优化命名 2023-11-10 22:42:40 +08:00
redkale
03152e4e6a 更换rpconly和automapping大小写 2023-11-10 22:31:52 +08:00
redkale
553622cfec 加强注释 2023-11-10 22:01:20 +08:00
redkale
3eb357055f FilterJoinNode优化 2023-11-10 14:38:17 +08:00
redkale
25398327c7 FilterNode优化 2023-11-10 13:58:12 +08:00
redkale
700ef231df FilterNode优化 2023-11-10 13:44:56 +08:00
redkale
b5a21838d2 优化注释 2023-11-09 08:47:55 +08:00
redkale
602647891c HttpRequest 2023-11-07 23:51:03 +08:00
redkale
ff4c34fe33 HttpSimpleRequest优化 2023-11-07 23:38:12 +08:00
redkale
7f8d6f96f1 优化Rest 2023-11-07 23:27:52 +08:00
redkale
8cbdcca40f sonar优化 2023-11-07 11:09:52 +08:00
redkale
c065f693a9 增加AnonymousThreadFactory功能 2023-10-26 15:18:59 +08:00
redkale
d78f2df9a8 HttpSimpleRequest优化 2023-10-25 08:13:49 +08:00
redkale
ce164d3047 keepAlive 2023-10-23 23:09:50 +08:00
redkale
bd9b04ce0b 增加ClientResult功能 2023-10-23 23:00:03 +08:00
redkale
2304e115da produceMessage加返回值 2023-10-23 15:27:21 +08:00
redkale
073568d6ac Utility优化 2023-10-22 21:29:44 +08:00
redkale
8ed6d18190 Utility 2023-10-22 09:14:16 +08:00
redkale
f04d55adab 优化httpclient 2023-10-21 17:28:01 +08:00
redkale
960e4ff358 注释 2023-10-21 15:51:12 +08:00
redkale
b3c1b156ee AnonymousVirtualExecutor优化 2023-10-21 15:04:37 +08:00
redkale
9dd3128a65 优化client 2023-10-21 14:27:23 +08:00
redkale
cb3cb00e2b 优化client 2023-10-21 08:04:53 +08:00
redkale
da81509157 优化traceid 2023-10-21 00:18:22 +08:00
redkale
48a4c60737 HttpResponse 2023-10-20 17:02:22 +08:00
redkale
2019c0ce3c trace完善 2023-10-20 16:08:51 +08:00
redkale
09596e9b4b 优化traceid 2023-10-20 15:40:16 +08:00
redkale
482a3313c4 traceid 2023-10-20 14:54:41 +08:00
redkale
fa8225fb1b 优化trace 2023-10-20 11:52:43 +08:00
redkale
ca93aceafc AsyncConnection写异常时需要终结 2023-10-20 08:17:12 +08:00
redkale
3d8dcc0026 sncp优化 2023-10-19 08:26:58 +08:00
redkale
8cba160af8 Response.finishError 2023-10-18 15:29:56 +08:00
redkale
d743d7e90d AnonymousVirtualExecutor 2023-10-18 08:37:00 +08:00
redkale
cde5b80c2d HttpSimpleClient 2023-10-17 21:37:58 +08:00
redkale
3b5010c0a7 HttpSimpleClient 2023-10-17 21:28:02 +08:00
redkale
cc6624bfdc 优化cluster 2023-10-17 18:40:34 +08:00
redkale
0e30db3463 CacheSource 2023-10-17 16:22:50 +08:00
redkale
bda65b483e 修复sncpAsyncGroup未启动的bug 2023-10-17 15:10:23 +08:00
redkale
2155c58989 MessageAgent增加rpcFirst配置 2023-10-17 10:20:06 +08:00
redkale
c3928fdc2b DataJdbcSource 2023-10-17 09:26:31 +08:00
redkale
8c625e93c7 修复bson问题 2023-10-16 20:07:30 +08:00
redkale
c4b91ebbc6 优化日志 2023-10-16 16:42:13 +08:00
redkale
6d63798ccf isVirtualWorkExecutor 2023-10-16 15:02:20 +08:00
redkale
a32586bf3b AbstractDataSource 2023-10-16 11:21:13 +08:00
redkale
b1f91d3b8a javadoc注释 2023-10-16 10:29:33 +08:00
redkale
89b0a06e51 修复DataJdbcSource事务问题 2023-10-16 10:10:43 +08:00
redkale
c5acc25dec 简化过滤类的正则 2023-10-15 08:41:54 +08:00
redkale
59ccb0fe6a BoolRef增加 2023-10-14 19:47:53 +08:00
redkale
007db8d508 优化提示 2023-10-14 16:14:32 +08:00
redkale
17fbb29957 mq 2023-10-14 15:29:38 +08:00
redkale
c2e3636062 日志 2023-10-14 10:04:40 +08:00
redkale
8ed540890b 优化 2023-10-14 09:19:08 +08:00
redkale
48c1263ea1 优化mq 2023-10-14 08:13:25 +08:00
redkale
bad571aecb 非空 2023-10-13 22:06:47 +08:00
redkale
98ff3cdfcf 重构mq 2023-10-13 21:37:41 +08:00
redkale
5936ec1986 shutdownNow 2023-10-12 20:08:11 +08:00
redkale
2dd2f6c38e 优化 2023-10-11 22:42:42 +08:00
redkale
c783c1ef31 修复HttpMessageResponse 2023-10-11 20:55:29 +08:00
redkale
52d7a7a3f7 优化 2023-10-11 13:52:32 +08:00
redkale
a5e3a277ba getParameterizedType 2023-10-10 15:48:05 +08:00
redkale
71a0a69bd3 优化getGenericType 2023-10-10 00:09:58 +08:00
redkale
404e1b8eee 优化 2023-10-09 22:05:57 +08:00
redkale
2fd56afe2a 简化 2023-10-09 12:45:40 +08:00
redkale
bf4920de93 修复currentUserid类型为String会报错的bug 2023-10-09 12:22:10 +08:00
redkale
c66aafe7fe WebSocket 2023-10-09 09:28:21 +08:00
redkale
c58c603e6d getSuperclass 2023-10-08 22:26:01 +08:00
redkale
1fa17bf10c mq 2023-10-08 12:11:49 +08:00
redkale
33e751a44c mq 2023-10-07 23:42:52 +08:00
redkale
fc574a31ff text 2023-10-07 23:16:08 +08:00
redkale
0d406530eb textPayload 2023-10-07 23:09:36 +08:00
redkale
26795ece3f 优化 2023-10-07 22:53:04 +08:00
redkale
341309e7ae 优化mq 2023-10-07 15:43:32 +08:00
redkale
89ff54a15e cluster 2023-10-07 08:45:28 +08:00
redkale
4351b74a91 cluster 2023-10-06 22:13:42 +08:00
redkale
2e060cba45 优化cluster 2023-10-06 18:04:42 +08:00
redkale
690acf286c 优化 2023-10-06 12:15:05 +08:00
redkale
d5e193d0a8 serviceType 2023-10-06 10:08:29 +08:00
redkale
d961a4283b mq兼容name='' 2023-10-06 09:19:19 +08:00
redkale
361e5a8500 RedkaleException 2023-10-06 09:04:31 +08:00
redkale
001c51c8fe getPropertyValue 2023-10-06 08:35:40 +08:00
redkale
8954c63285 移除MessageMultiConsumer功能 2023-10-06 05:36:03 +08:00
redkale
c7e06ed519 MessageConsumer 2023-10-05 22:51:12 +08:00
redkale
da1de47927 mq 2023-10-05 22:41:01 +08:00
redkale
61e2cc16ad 优化 2023-10-05 21:53:40 +08:00
redkale
a71544a78d 优化group 2023-10-05 21:22:06 +08:00
redkale
b8d5800434 ResourceProducer增加required属性 2023-10-05 20:22:43 +08:00
redkale
e280061dff 优化MessageConsumer 2023-10-05 19:47:40 +08:00
redkale
f4b4609acc 增加AnonymousThreadLocal 2023-10-02 12:53:52 +08:00
redkale
87f260d25a 默认线程池大小 2023-10-01 07:01:38 +08:00
redkale
dbf4c2e8ca 优化mq 2023-09-30 09:12:38 +08:00
redkale
1eb153f51f update 2023-09-25 14:30:27 +08:00
redkale
1c7bcdebc7 diect 2023-09-22 23:29:55 +08:00
redkale
e41af85715 移除continuousid功能 2023-09-22 23:16:51 +08:00
redkale
f97f17bceb 更新 2023-09-21 23:09:06 +08:00
redkale
19db4fdae9 优化client 2023-09-21 22:36:19 +08:00
redkale
8b65320491 优化native-image 2023-09-21 19:41:16 +08:00
redkale
e60e869fe9 优化Copier 2023-09-21 17:25:36 +08:00
redkale
915583d915 sequent 2023-09-21 15:06:25 +08:00
redkale
eab480f0be 新增MessageConext 2023-09-20 19:57:42 +08:00
redkale
2939556800 临时 2023-09-18 00:03:56 +08:00
redkale
df0c4489db javadoc 2023-09-17 23:47:04 +08:00
redkale
bca85e7e5f 优化MessageProducer 2023-09-17 23:42:56 +08:00
redkale
d748ca1bde write 2023-09-16 22:41:56 +08:00
redkale
164ec113cd 移除ConvertMask功能 2023-09-16 22:11:19 +08:00
redkale
39eea4be5a module-info 2023-09-16 14:51:25 +08:00
redkale
94121da0f3 增加ProtobufConvert 2023-09-16 14:44:52 +08:00
redkale
b2b8c0de2d Creator 2023-09-15 14:52:52 +08:00
redkale
c1414de552 JsonElement 2023-09-14 23:20:24 +08:00
redkale
fc1487bda4 修正常量名错误单词 2023-09-14 15:52:31 +08:00
redkale
ddfabc0010 CacheScoredValue 2023-09-12 08:21:15 +08:00
redkale
42bf6ec73b 优化DeParser 2023-09-09 22:39:43 +08:00
redkale
30213e9b0b CacheMemorySource 2023-09-08 13:12:22 +08:00
redkale
4c3f919238 增加ClientMessageListener功能 2023-09-08 13:09:02 +08:00
redkale
ddd3d33edc Client增加newConnection 2023-09-07 17:07:54 +08:00
redkale
388505c899 CacheMemorySource 2023-09-07 16:40:52 +08:00
redkale
da41c7f7fa 优化CacheSource 2023-09-07 15:20:44 +08:00
redkale
8af945d8c2 优化DeParser 2023-09-05 06:59:39 +08:00
redkale
b599dc9acb CacheMemorySource优化 2023-09-03 21:25:06 +08:00
redkale
55d26693bc unsubscribeAsync 2023-09-02 12:28:38 +08:00
redkale
95499542a4 RestLocale 2023-09-01 08:26:48 +08:00
redkale
651be0c50d 优化Writer 2023-09-01 07:45:14 +08:00
redkale
79ee417ae6 优化ConvertFactory.features 2023-09-01 07:38:03 +08:00
redkale
707ad2da70 convert优化features 2023-08-31 22:30:55 +08:00
redkale
3979af71cb AsyncNioConnection 2023-08-30 08:36:43 +08:00
redkale
58620ac519 AsyncNioConnection 2023-08-30 08:31:30 +08:00
redkale
d326750222 优化fastWrite 2023-08-30 00:10:32 +08:00
redkale
8db24bdcd6 DataNativeSqlParser增加loadFirst方法 2023-08-24 22:20:11 +08:00
redkale
41daf2ede5 Attribute 2023-08-22 23:44:23 +08:00
redkale
2caf609a2e 增加LambdaBiConsumer 2023-08-22 23:38:49 +08:00
redkale
1a95fb3d3a Inners 2023-08-22 23:07:18 +08:00
redkale
24188de9e0 DataNativeSqlParser 2023-08-20 20:14:04 +08:00
redkale
4bfe4278f3 Copier 2023-08-19 09:01:09 +08:00
redkale
061575bb94 DataNativeSqlParser支持#{},${} 2023-08-17 11:48:42 +08:00
redkale
00a37fb263 增加nativeQuerySheet方法 2023-08-16 15:45:15 +08:00
redkale
8130eea859 javadoc 2023-08-16 12:01:21 +08:00
redkale
3c33c2ecbb DataSqlSource优化 2023-08-16 11:20:20 +08:00
redkale
317f1ffbb8 DataNativeSqlParser优化 2023-08-14 15:16:40 +08:00
redkale
87892b27e7 增加AsmDepends 2023-08-13 22:27:11 +08:00
redkale
5ed7bc2c6f Invoker 2023-08-13 22:10:04 +08:00
redkale
1d52cc5acf 修复StringWrapper序列化json问题 2023-08-12 22:05:20 +08:00
redkale
eb1c0e1513 优化util 2023-08-12 18:50:22 +08:00
redkale
e729f04917 Creator优化 2023-08-12 14:05:27 +08:00
redkale
a6de4df777 Copier优化 2023-08-12 09:28:05 +08:00
redkale
509e81888c Copier 2023-08-11 23:22:22 +08:00
redkale
c0e2295c1c func 2023-08-11 22:42:59 +08:00
redkale
56cf1d0873 Copier兼容src==null 2023-08-11 22:39:33 +08:00
redkale
0b5c74b458 Copier增加Function方法 2023-08-11 22:14:06 +08:00
redkale
e8e9b46206 Copier增加OPTION_ALLOW_TYPE_CAST配置项 2023-08-11 16:11:29 +08:00
redkale
52a1fa9f3a Copier优化 2023-08-10 15:30:14 +08:00
redkale
e5d31344b9 DataNativeSqlParser 2023-08-10 00:08:09 +08:00
redkale
302259e30d 增加DataNativeSqlParser功能 2023-08-09 23:54:39 +08:00
redkale
398071a272 修复HttpRequest.readHeader问题 2023-08-07 18:45:43 +08:00
redkale
7fa66930a4 修复空指针问题 2023-08-07 17:57:24 +08:00
redkale
3e2a8c932e 修复Resource.name使用$的问题 2023-08-07 17:48:20 +08:00
redkale
357962ec97 Reproduce作废过期 2023-08-07 12:51:45 +08:00
redkale
6d613f715f 新增Copier 2023-08-07 11:43:17 +08:00
redkale
906c147ed6 Reproduce优化 2023-08-06 00:27:14 +08:00
redkale
d228228eee DataSqlSource增加natvieQuery的参数模板功能 2023-08-05 16:47:37 +08:00
redkale
30a6e29897 Utility.convertValue优化 2023-08-05 09:02:13 +08:00
redkale
11d88c887f EntityBuilder支持Map类型 2023-08-05 08:11:11 +08:00
redkale
213a9a362d ReproduceTest 2023-08-04 21:26:54 +08:00
redkale
f1a7c4588b Reproduce支持Map类型 2023-08-04 21:22:33 +08:00
redkale
82b64c2e38 增加convertValue方法 2023-08-04 17:55:18 +08:00
redkale
be11b0767e Reproduce优化 2023-08-04 16:41:10 +08:00
redkale
0fb3684a18 优化Reproduce 2023-08-04 15:38:01 +08:00
redkale
25a7aeacfa Resource里特殊值$改成# 2023-07-31 08:36:54 +08:00
redkale
4804eed0a7 移除FilterNode中的itemand属性 2023-07-29 22:17:36 +08:00
redkale
07585a01ed Filter优化 2023-07-29 20:20:23 +08:00
redkale
8346df60ec DataSource优化 2023-07-29 12:22:07 +08:00
redkale
047149798b 移除JsonCharsWriter 2023-07-29 12:11:51 +08:00
redkale
b84006d8db ConvertFactory增加nullable配置 2023-07-29 09:20:13 +08:00
redkale
e20d398a73 CacheMemorySource优化 2023-07-28 14:41:14 +08:00
redkale
a8ee396ffa CacheMemorySource优化 2023-07-28 13:09:07 +08:00
redkale
56924fb447 Reproduce优化 2023-07-27 22:01:42 +08:00
redkale
5b8f797b33 恢复GeneratedValue功能 2023-07-26 15:57:41 +08:00
redkale
f2769dc182 DataSqlSource增加executeQueryMap方法 2023-07-25 21:51:42 +08:00
redkale
fe67add571 DataSqlSource优化 2023-07-25 21:25:33 +08:00
redkale
70764f1ea4 EntityBuilder优化 2023-07-25 20:00:25 +08:00
redkale
e86638e490 EntityBuilder优化 2023-07-25 18:34:38 +08:00
redkale
1e87f6497c AbstractDataSource 2023-07-25 18:20:14 +08:00
redkale
16acc3a959 增加EntityBuilder功能 2023-07-25 18:09:15 +08:00
redkale
06efe3f5c3 DataBatch优化 2023-07-25 12:46:20 +08:00
redkale
3c45093632 DataJdbcSource优化 2023-07-24 22:51:35 +08:00
redkale
f33a1b997f 优化DataSqlSource 2023-07-24 22:11:00 +08:00
redkale
835e9b7eea 优化properties配置 2023-07-23 08:53:39 +08:00
redkale
f9bee11001 优化jsonobject 2023-07-21 14:55:09 +08:00
redkale
ede8f40b0d DataJdbcSource优化 2023-07-21 14:03:48 +08:00
redkale
7dcaa3eda0 DataJdbcSource优化 2023-07-18 20:01:43 +08:00
redkale
2a5184f4fc 修复writeVirtualRequest模式问题 2023-07-18 11:51:38 +08:00
redkale
0b1c02ac96 CacheSource优化 2023-07-18 09:16:41 +08:00
redkale
8b3c472d70 优化fastHandler 2023-07-18 08:37:30 +08:00
redkale
8ccea3750e 修复getDel问题 2023-07-18 07:33:22 +08:00
redkale
222969e8a3 CacheSource增加getDel方法 2023-07-15 22:06:51 +08:00
redkale
f9463c0f82 优化JsonObject 2023-07-15 11:09:19 +08:00
redkale
6b27653a99 增加JsonString类型 2023-07-15 08:12:00 +08:00
redkale
50faf01d10 增加JsonObject、JsonArray功能 2023-07-14 22:54:30 +08:00
redkale
ad71343650 优化ClientCodec回调 2023-07-11 11:58:52 +08:00
redkale
f234ed0614 优化CacheSource 2023-07-11 11:21:32 +08:00
redkale
69797fd29c Client增加批量请求方法 2023-07-08 09:01:06 +08:00
redkale
2163ce3c4c 增加setIfNull方法 2023-07-06 14:44:08 +08:00
redkale
a57b186c67 SncpHeader优化 2023-07-06 09:42:08 +08:00
redkale
4c11217dda Traceid生成规则优化 2023-07-06 08:11:52 +08:00
redkale
78b1285b37 优化traces 2023-07-05 21:52:20 +08:00
redkale
1ef6d51497 SncpRequest优化 2023-07-05 15:57:45 +08:00
redkale
1b7bdd2ad9 sncp协议优化 2023-07-05 14:51:28 +08:00
redkale
cfd22623b7 Merge branch 'main' of http://github.com/redkale/redkale 2023-07-05 06:50:30 +08:00
redkale
7b7fb33b7b 优化ByteBufferWriter 2023-07-05 06:48:26 +08:00
redkale
c64763cb35 AsyncConnection优化 2023-07-05 06:38:17 +08:00
redkale
c80bb876a3 AsyncNioConnection优化fastWrite 2023-07-04 22:30:06 +08:00
redkale
fbea655e96 AsyncConnection优化 2023-07-04 22:11:38 +08:00
redkale
5390147985 AsyncConnection优化 2023-07-04 19:09:29 +08:00
redkale
81e871cca9 ClientConnection优化 2023-07-03 16:03:06 +08:00
redkale
f016d5fb4a ClientConnection优化 2023-07-03 16:02:15 +08:00
redkale
319b9e04dd SncpHeader优化 2023-07-03 09:06:01 +08:00
redkale
6bb91552f7 AnyValue优化 2023-06-30 13:20:22 +08:00
redkale
7c66446459 ClientCodec优化 2023-06-30 10:29:15 +08:00
redkale
f38adacbe4 优化net 2023-06-30 10:18:00 +08:00
redkale
479d2d427a ClientCodec优化 2023-06-30 09:29:38 +08:00
redkale
6be5f42ddd 优化net模块 2023-06-30 08:56:30 +08:00
redkale
93524d515a 优化net模块 2023-06-30 08:55:57 +08:00
redkale
2fa3b1c7b2 youhua 2023-06-29 19:31:38 +08:00
redkale
4a62ea0cd3 移除SerializedLambda 2023-06-29 17:58:36 +08:00
redkale
1fd6dca941 doWrite必须全输出 2023-06-29 16:55:35 +08:00
redkale
647cf7ca7d 移除日志 2023-06-29 16:10:39 +08:00
redkale
49823d457c 临时日志 2023-06-29 15:43:12 +08:00
redkale
5f34ef68cc 临时日志 2023-06-29 14:49:04 +08:00
redkale
f6abbc99ab 优化LambdaFunction 2023-06-29 14:32:43 +08:00
redkale
9ff03e3ec6 兼容native 2023-06-29 12:01:55 +08:00
redkale
773a260438 SerializedLambda优化 2023-06-29 11:31:45 +08:00
redkale
7e7e352924 兼容native 2023-06-29 11:24:40 +08:00
redkale
cdb3dce63a 优化LambdaFunction/LambdaSupplier 2023-06-29 10:46:39 +08:00
redkale
00cc5d896e 增加LambdaFunction和LambdaSupplier功能 2023-06-29 08:25:12 +08:00
redkale
2591d92959 优化依赖注入 2023-06-28 10:37:16 +08:00
redkale
5b45022dfb 优化filter加载 2023-06-28 10:27:25 +08:00
redkale
a2be5a9430 优化注释 2023-06-27 21:04:06 +08:00
redkale
8c08112097 优化Response.completeInIOThread里的readRegister 2023-06-27 17:55:02 +08:00
redkale
5e6b2fb86e ClientConnection优化临时方案 2023-06-27 15:25:27 +08:00
redkale
f3475341a0 AsyncConnection优化 2023-06-27 09:10:24 +08:00
redkale
87899d514b CacheSource增加linsert方法 2023-06-26 16:51:43 +08:00
redkale
acee7cdfb0 CacheSource增加sunion方法 2023-06-26 15:30:31 +08:00
redkale
564aa972dc CacheSource增加srandmember方法 2023-06-26 10:38:48 +08:00
redkale
936f50659b CacheSource增加hstrlen方法 2023-06-26 08:16:27 +08:00
redkale
264dce055c 优化HttpResponse 2023-06-25 22:43:31 +08:00
redkale
ff5b9a897a Convert优化 2023-06-25 10:50:56 +08:00
redkale
d44fb67f88 Convert优化 2023-06-25 10:44:48 +08:00
redkale
27f54ebd15 ClientCodec优化responseComplete方法 2023-06-25 09:58:19 +08:00
redkale
94774d917f 优化Utility.aes 2023-06-23 20:22:20 +08:00
redkale
06d71bb2bc 优化CacheSource 2023-06-17 23:01:20 +08:00
redkale
cc0f35ce70 CacheSource增加zrange方法 2023-06-17 14:01:05 +08:00
redkale
4b329296f2 CacheSource增加zrank方法 2023-06-17 11:49:36 +08:00
redkale
197d76fd3c CacheSource增加zincrby方法 2023-06-16 09:15:36 +08:00
redkale
644186a398 优化CacheMemorySource 2023-06-14 22:43:01 +08:00
redkale
e2c6990265 CacheSource增加sorted set操作 2023-06-13 12:10:06 +08:00
redkale
98f89d87d4 删除append容易产生歧义的方法 2023-06-12 12:54:38 +08:00
redkale
3d379d59ef CacheSource增加smismember方法 2023-06-11 22:53:17 +08:00
redkale
a00a5eb5e2 CacheSource增加diff方法 2023-06-11 20:16:49 +08:00
redkale
2daa9ce7fd CacheSource优化srem、sadd 2023-06-11 17:30:12 +08:00
redkale
4dfeb2aa88 CacheSource增加lpop、lpush等系列方法 2023-06-11 16:43:58 +08:00
redkale
8603e98b9b 修正方法名 2023-06-09 22:18:11 +08:00
redkale
4b0570770c CacheSource增加list的rpop、lpush等一系列方法 2023-06-09 21:58:06 +08:00
redkale
85d23214ec 优化CacheSource.lrange 2023-06-09 11:34:55 +08:00
redkale
2e35abccd0 CacheSource增加sscan方法 2023-06-08 11:34:34 +08:00
redkale
685ae89685 CacheSource增加flushdb方法 2023-06-08 08:23:25 +08:00
redkale
2e6ec01711 增加isNotEmpty方法 2023-06-06 15:00:18 +08:00
redkale
d63d8ff836 增加scan方法 2023-06-04 22:41:41 +08:00
redkale
450ae24e94 优化CacheSource.hmap方法 2023-06-02 16:12:23 +08:00
redkale
39b0e0f318 增加removeHeader、removeParameter 2023-06-01 21:46:39 +08:00
redkale
ca9a13ea27 CacheSource增加hvals、hgetall方法 2023-05-31 10:39:39 +08:00
redkale
ca782e7c62 CacheSource增加persist、rename方法 2023-05-30 10:38:02 +08:00
redkale
29d45b1e3d 优化ProtocolCodec.start 2023-05-27 22:10:50 +08:00
redkale
2202465e31 修复JsonByteBuffer解析bug 2023-05-09 14:45:25 +08:00
redkale
454e6b60d7 修复json在ByteBuffer、InputSteam参数下无法解决数组的问题 2023-05-08 19:38:47 +08:00
redkale
6ff04b408c DataSqlSource 变量由${}改成#{}, 为了区别于配置项${} 2023-05-08 14:29:23 +08:00
redkale
de7c5e84f4 Response增加afterFinishListeners 2023-05-08 08:25:36 +08:00
redkale
18932bf48b DataJdbcSource优化 2023-05-06 08:21:27 +08:00
redkale
1b1bfbb3ac DataJdbcSource优化 2023-05-05 20:31:21 +08:00
redkale
20a98e2a95 优化mq 2023-05-05 08:12:03 +08:00
redkale
8dbf474662 优化mq 2023-05-04 21:35:59 +08:00
redkale
26d0cce404 优化mq 2023-05-04 14:06:29 +08:00
redkale
eb5142a125 优化NodeServer 2023-05-01 09:30:17 +08:00
redkale
4911aa3f15 修改module-info 2023-04-28 14:21:45 +08:00
redkale
4a8fc9d771 修复URISimpledCoder的常量笔误问题 2023-04-28 14:18:57 +08:00
redkale
0d9216dd35 DataJdbcSource增加PreparedStatement缓存 2023-04-22 14:37:48 +08:00
redkale
331047957a DataSqlSource方法名优化 2023-04-20 21:49:16 +08:00
redkale
bec1c0c2d8 DataSqlSource方法名优化 2023-04-20 21:47:01 +08:00
redkale
82fa56d66c 废弃ThreadHashExecutor 2023-04-20 19:56:02 +08:00
redkale
8db6fd7b73 优化@Local的Service 2023-04-20 19:38:06 +08:00
redkale
b82a7d86e5 NodeServer优化 2023-04-20 17:58:09 +08:00
redkale
698269f8b0 增加MessageConsumer、MessageProducer功能 2023-04-20 14:30:39 +08:00
redkale
5e9c85e0fc DataJdbcSource优化 2023-04-18 22:30:25 +08:00
redkale
0fca7cd47b DataJdbcSource优化 2023-04-18 08:51:07 +08:00
redkale
d56af6043d 修复checkValid问题 2023-04-18 08:38:20 +08:00
redkale
021bf8ce51 优化DataJdbcSource 2023-04-17 23:44:39 +08:00
redkale
53e8f44088 优化ByteArray 2023-04-11 08:11:14 +08:00
redkale
3f244b2cff 修复SncpServlet的asm问题 2023-04-10 08:27:57 +08:00
redkale
3178221c44 优化ByteArray 2023-04-09 21:28:55 +08:00
redkale
41d0cbcb46 优化iothread 2023-04-07 14:57:43 +08:00
redkale
e6a2167261 优化client 2023-04-07 14:05:13 +08:00
redkale
7286531bc5 WebSocket优化 2023-04-06 21:23:27 +08:00
redkale
91d7f51678 修复Rest将Future<HttpResult<byte[]>>类型用finishJsonFuture格式输出 2023-04-06 11:07:09 +08:00
redkale
5746449cfb 优化sncp版WebSocketNode 2023-04-05 22:52:17 +08:00
redkale
4bdbf0f493 优化WebSocket 2023-04-05 18:43:38 +08:00
redkale
68b9d955f6 优化uriPathCaches 2023-04-05 17:07:59 +08:00
redkale
39ac48884f 优化Utility 2023-04-03 23:24:22 +08:00
redkale
663ca4f441 jdbc优化 2023-04-03 22:17:46 +08:00
redkale
8f3ae4b5a7 jdbc优化 2023-04-03 21:39:36 +08:00
redkale
db77b8c8cb jdbc优化 2023-04-03 20:38:47 +08:00
redkale
dc6d53e6be 日志优化 2023-04-03 14:48:01 +08:00
redkale
849d628a75 增加测试用例 2023-04-03 11:02:15 +08:00
redkale
22fd2212de mq命名优化 2023-04-03 09:32:44 +08:00
redkale
188a74423b mq优化命名 2023-04-03 08:48:43 +08:00
redkale
8727b5165a client还原 2023-04-02 23:41:22 +08:00
redkale
aa03d356b8 client优化 2023-04-02 23:32:48 +08:00
redkale
d417fb7232 HttpRequest优化 2023-04-02 22:34:11 +08:00
redkale
156131d4b5 实现DataBatch 2023-04-01 14:43:41 +08:00
redkale
dba72cab46 client优化 2023-03-31 20:06:54 +08:00
redkale
0b4a52ccb1 client优化 2023-03-31 14:22:00 +08:00
redkale
6b92748b7c client优化 2023-03-31 12:07:39 +08:00
redkale
00829cf198 convert优化 2023-03-31 11:09:15 +08:00
redkale
20ebcad982 client优化 2023-03-31 08:11:19 +08:00
redkale
6f03f38222 增加AnonymousVirtualExecutor 2023-03-30 23:05:38 +08:00
redkale
5c6b9dcec8 Client.connect 2023-03-30 20:21:53 +08:00
redkale
c9be4a89af isThreadLocalConnMode 2023-03-30 19:54:19 +08:00
redkale
41e1ffa6e2 Nonnull 2023-03-30 18:29:12 +08:00
redkale
c9c202f63f 优化Source 2023-03-30 12:56:32 +08:00
redkale
1dbaf107ca EntityCache优化 2023-03-29 21:36:51 +08:00
redkale
ee535692b4 EntityCache优化 2023-03-29 21:34:55 +08:00
redkale
df0a290032 EntityCache优化 2023-03-29 21:05:18 +08:00
redkale
7de19f142f 增加Cacheable.continuousid功能 2023-03-29 20:06:54 +08:00
redkale
0cfb00e40b ClientConnection优化 2023-03-28 23:36:18 +08:00
redkale
3cf560f220 修复EntityCache 2023-03-28 23:31:45 +08:00
redkale
3bb287b3ef EntityCache临时屏蔽 2023-03-28 23:18:02 +08:00
redkale
49662a7d5f client优化 2023-03-28 15:04:43 +08:00
redkale
d7655aa2be 优化client 2023-03-28 13:16:10 +08:00
redkale
a61d515a49 优化client 2023-03-28 08:12:58 +08:00
redkale
94185cc23e 优化client 2023-03-28 08:05:04 +08:00
redkale
9ef977aee9 优化WebSocket.IOThread 2023-03-27 21:36:22 +08:00
redkale
34fb441817 优化workexecutor 2023-03-27 21:18:16 +08:00
redkale
ac33b36d20 update pom 2023-03-27 20:04:43 +08:00
redkale
372656fea9 临时屏蔽workExecutor 2023-03-27 19:56:52 +08:00
redkale
a872c6e75f 增加APP_GLOBAL_IOGROUP功能 2023-03-27 19:45:39 +08:00
redkale
067b88ab72 废弃ClientWriteIOThread 2023-03-27 18:55:27 +08:00
redkale
ffbad698b4 AsyncConnection增加readRegister方法 2023-03-26 21:15:00 +08:00
redkale
71d3c015d9 readTimeoutSeconds优化 2023-03-25 10:18:54 +08:00
redkale
051299d4a5 优化sncp cluster配置 2023-03-23 15:21:53 +08:00
redkale
ac9995fb1a 优化sncp 2023-03-23 13:11:41 +08:00
redkale
83d04d02da SncpClientRequest.seqno生成规则优化 2023-03-23 13:03:13 +08:00
redkale
80bad30811 SncpClient优化 2023-03-23 11:56:13 +08:00
redkale
f34554f2cb 修复AsyncNioConnection 2023-03-22 23:51:55 +08:00
redkale
e2f331ab6b 优化SncpClient 2023-03-22 23:24:01 +08:00
redkale
039ed0f569 优化SncpClient的新实现 2023-03-22 16:02:17 +08:00
redkale
358ad80f21 优化HttpScope 2023-03-20 14:31:48 +08:00
redkale
f9a65f7492 http优化 2023-03-19 19:26:11 +08:00
redkale
32cae92848 http优化 2023-03-19 10:05:03 +08:00
redkale
e168c1368c rest优化 2023-03-17 18:42:26 +08:00
redkale
9cab0c6443 http优化 2023-03-17 13:39:20 +08:00
redkale
9e7e4cc177 http优化 2023-03-16 22:09:58 +08:00
redkale
523c101e25 优化http注释 2023-03-15 16:23:30 +08:00
redkale
1428cd8f10 增加Nonnull、Nullable注解 2023-03-15 09:36:40 +08:00
redkale
1edd256028 Resource支持@name、@type 2023-03-14 10:56:19 +08:00
redkale
42201c7c11 HTTP支持Expect:100-continue 2023-03-13 18:55:04 +08:00
redkale
aec65a2ff5 加强注释 2023-03-12 17:31:37 +08:00
redkale
c2b5733ceb sncp优化 2023-02-08 23:07:50 +08:00
redkale
2e40c98b81 sncp优化 2023-02-08 22:44:00 +08:00
redkale
6622e88232 sncp优化 2023-02-08 21:33:14 +08:00
redkale
67cd0b1b46 sncp优化 2023-02-08 19:06:22 +08:00
redkale
3ec4f9f96d sncp优化 2023-02-08 17:57:28 +08:00
redkale
530bf8078e udp优化 2023-02-07 17:34:33 +08:00
redkale
848f33bd2b udp优化 2023-02-07 17:27:55 +08:00
redkale
1d6b76b182 udp优化 2023-02-07 16:43:47 +08:00
redkale
bab857778b udp优化 2023-02-07 15:02:19 +08:00
redkale
75469a49e8 udp优化 2023-02-07 14:55:58 +08:00
redkale
7d2a9f6d94 udp优化 2023-02-07 14:26:14 +08:00
redkale
35fddb48de 优化sncp.udp 2023-02-07 14:08:13 +08:00
redkale
89f9baee46 sncp优化 2023-02-07 01:18:06 +08:00
redkale
797d04fea7 sncp优化 2023-02-07 00:50:53 +08:00
redkale
5df83b2649 移除ChannelContext 2023-02-06 19:08:20 +08:00
redkale
0aa8e8653c 增加RedkaleException 2023-02-05 17:19:03 +08:00
redkale
2751e6475e 优化client 2023-02-04 21:20:35 +08:00
redkale
e9d25a67f8 优化client 2023-02-04 20:21:41 +08:00
redkale
eef43e8edc 优化client 2023-02-04 20:19:35 +08:00
redkale
b60e5fef96 Context.getWorkHashExecutor 2023-02-04 16:10:08 +08:00
redkale
b9c1fa723c redkale.convert.tiny默认值改为false 2023-02-04 15:32:30 +08:00
redkale
63f4a6ee0d 实现@NonBlocking 2023-02-04 14:59:30 +08:00
redkale
894ea65a35 Filter.isNonBlocking 2023-02-03 22:10:42 +08:00
redkale
73c9a3cdb4 增加NonBlocking 2023-02-03 21:47:39 +08:00
redkale
de39ac1981 优化掉Array.newInstance 2023-02-02 23:16:24 +08:00
redkale
6973e6b159 SncpClientCodecTest 2023-02-02 21:40:58 +08:00
redkale
7f379f9874 Server.changeAddress 2023-02-02 17:54:19 +08:00
redkale
3c6b15ee9d Context.updateServerAddress 2023-02-02 17:42:33 +08:00
redkale
c6ef28c358 sncp优化 2023-02-02 15:31:19 +08:00
redkale
2ef5eb6cd0 优化client 2023-02-02 15:02:43 +08:00
redkale
cfc20c6248 增加SncpClientRequest 2023-02-02 13:47:34 +08:00
redkale
ea9505c2da EntityCache优化synchronized 2023-02-01 20:41:34 +08:00
redkale
1c1c54ea8a 优化Array.newInstance 2023-02-01 20:34:01 +08:00
redkale
851c81e096 优化MessageProducer的closed 2023-02-01 19:53:55 +08:00
redkale
78f969d2cc synchronized优化 2023-02-01 19:17:32 +08:00
redkale
ad981835f9 synchronized优化 2023-02-01 17:23:33 +08:00
redkale
f7f9e8db41 优化DataMemorySource 2023-02-01 14:45:52 +08:00
redkale
44f0fe1852 DataJdbcSource读操作不自动建表 2023-02-01 14:37:39 +08:00
redkale
8088197e29 增加AbstractDataSqlSource 2023-02-01 14:23:51 +08:00
redkale
76797228a0 ResourceFactory支持BigDecimal 2023-01-31 22:03:07 +08:00
redkale
ba3c0fdf72 DataTransaction 2023-01-31 20:39:02 +08:00
redkale
c6a1d584ea ConvertFactory优化 2023-01-31 17:05:26 +08:00
redkale
be5da6e287 移除默认tiny=true系统变量 2023-01-31 13:20:07 +08:00
redkale
7c8f54dd5c ClusterAgent优化 2023-01-31 11:08:25 +08:00
redkale
7b2dc52a35 ClusterAgent优化 2023-01-31 10:59:25 +08:00
redkale
e55d991bce UDP优化 2023-01-31 10:24:52 +08:00
redkale
e47abd6417 命名优化 2023-01-30 22:29:13 +08:00
redkale
afaf97aaf8 优化命名 2023-01-30 21:15:42 +08:00
redkale
9bafeccd38 CacheSource和DataSource支持资源复用 2023-01-30 21:10:28 +08:00
redkale
18afbd6bae 优化命名 2023-01-30 20:13:58 +08:00
redkale
4d2458da64 writePipeline优化 2023-01-30 18:50:53 +08:00
redkale
737d36be67 优化SNCP.UDP 2023-01-30 17:52:58 +08:00
redkale
6d1cf4b6bf 优化sncp 2023-01-30 16:32:36 +08:00
redkale
7dc57c67ed AsyncNioConnection优化 2023-01-30 13:53:03 +08:00
redkale
823b89ec48 Rest优化 2023-01-30 12:10:41 +08:00
redkale
d428c58e15 ProtocolCodec优化 2023-01-30 10:49:55 +08:00
redkale
4b70e19211 Request增加getRequestid方法 2023-01-30 10:33:00 +08:00
redkale
ae27fffdb0 重写Sncp.getServiceType 2023-01-29 22:22:12 +08:00
redkale
f41a1bc3a1 重写Sncp.getServiceType 2023-01-29 22:21:05 +08:00
redkale
ed5c52cfdc EnumSimpledCoder支持字段名作为setter方法名 2023-01-29 20:11:17 +08:00
redkale
5740d2704a 优化Creator 2023-01-29 19:45:38 +08:00
redkale
56e7775c5a Convert不再限制setter要求void返回类型 2023-01-29 19:11:23 +08:00
redkale
d4e807ada3 ConvertCoder优化 2023-01-29 18:05:29 +08:00
redkale
0b5a8863f3 Creator增加paramTypes方法 2023-01-29 17:37:28 +08:00
redkale
83b4887dd6 优化doWrite 2023-01-28 11:58:27 +08:00
redkale
2a7f0901af 优化pipeline 2023-01-28 11:28:10 +08:00
Redkale
71fb4102f6 Sncp.getServiceType 优化 2023-01-27 17:31:00 +08:00
Redkale
a492cbd815 net浼樺寲璁℃暟鍣? 2023-01-27 15:59:09 +08:00
Redkale
8d4ebe653d net浼樺寲璁℃暟鍣? 2023-01-27 15:39:12 +08:00
Redkale
88026fae3c Client浼樺寲connIndex 2023-01-23 20:38:25 +08:00
Redkale
f34ec61458 ClientFuture优化 2023-01-18 11:22:09 +08:00
Redkale
4d42f94be4 ClientFuture优化 2023-01-18 11:19:15 +08:00
Redkale
961ff7fa22 ClientConnection优化 2023-01-17 22:40:00 +08:00
Redkale
4d41b2afda 浼樺寲AsyncIOThread 2023-01-17 18:22:12 +08:00
Redkale
ec5b337460 EntityInfo优化 2023-01-17 14:28:42 +08:00
Redkale
1d559ef4d4 EntityInfo优化 2023-01-17 12:06:11 +08:00
Redkale
732e855daa EntityInfo优化 2023-01-17 09:59:19 +08:00
Redkale
b74bc43007 Client优化 2023-01-16 08:50:13 +08:00
Redkale
f5d79c7035 DataSqlSource命名优化 2023-01-15 23:11:16 +08:00
Redkale
19c8ffb79d Response优化finish方法 2023-01-15 21:11:59 +08:00
Redkale
39ade6f3ab CacheSource优化 2023-01-15 19:39:04 +08:00
Redkale
8789c0915b CacheSource增加setnxex系列方法 2023-01-15 16:21:37 +08:00
Redkale
55ddf7c417 优化WebSocket的写操作 2023-01-14 22:33:05 +08:00
Redkale
58e206d0e9 增加WebSocketWriteIOThread 2023-01-14 21:04:44 +08:00
Redkale
dc0849d82a 优化ByteBuffer对象池 2023-01-14 19:45:57 +08:00
Redkale
9192cb4606 优化AsyncConnection 2023-01-14 18:09:49 +08:00
Redkale
87f7b82e0a Server优化 2023-01-14 17:08:04 +08:00
Redkale
21df7f05dd WorkThread优化 2023-01-14 16:13:46 +08:00
Redkale
e6150b3469 优化WebSocket 2023-01-14 14:44:46 +08:00
Redkale
68bfa944fe ProtocolCodec优化 2023-01-14 13:17:37 +08:00
Redkale
a973834325 ProtocolCodec优化 2023-01-14 11:58:15 +08:00
Redkale
6c8b482f65 AsyncNioTcpProtocolServer优化 2023-01-14 11:36:07 +08:00
Redkale
0712b71b71 浼樺寲AsyncNioTcpProtocolServer 2023-01-14 11:17:58 +08:00
Redkale
52b9fd8326 浼樺寲ClientCodec 2023-01-13 22:39:02 +08:00
Redkale
8e7b27eb16 浼樺寲ClientCodec 2023-01-13 22:38:00 +08:00
Redkale
ab79359eff ClientRequest增加transfer功能 2023-01-13 21:31:38 +08:00
Redkale
f904af3da6 优化loadEntityInfo 2023-01-13 19:42:57 +08:00
Redkale
48e1c5dc86 浼樺寲ClientExecutor鐨勭嚎绋嬫暟 2023-01-13 19:17:49 +08:00
Redkale
25214db1dd CacheSource修改setnx返回值 2023-01-13 17:15:02 +08:00
Redkale
091a08b783 优化SncpDyn 2023-01-13 13:52:09 +08:00
Redkale
cf37303b5e client泛型优化 2023-01-13 11:21:54 +08:00
Redkale
ad059eb3d6 client泛型优化 2023-01-13 11:05:04 +08:00
Redkale
41028384af 重构Client模块的IO读写策略 2023-01-13 09:33:23 +08:00
Redkale
43ff13867f 重构Client模块的IO读写策略 2023-01-12 20:26:39 +08:00
Redkale
9b66bd186f DataSqlSource优化UpdateSqlInfo 2023-01-12 20:04:06 +08:00
Redkale
851efa5097 Client优化 2023-01-12 10:57:47 +08:00
Redkale
35d923d856 Client优化 2023-01-11 11:49:31 +08:00
Redkale
bf3bf836ac AsyncConnection增加writeInIOThread方法 2023-01-10 20:41:20 +08:00
Redkale
8f8a2ef325 【不兼容】移除RpcCall、RpcCallAttribute功能 2023-01-10 16:12:20 +08:00
Redkale
eeaefb1ed2 优化命名 2023-01-10 13:13:41 +08:00
Redkale
6a605359d7 优化ClientExecutor 2023-01-09 17:46:44 +08:00
Redkale
d603915d2b 优化ClientWriteIOThread 2023-01-09 16:37:22 +08:00
Redkale
bb4482c08c 移除MAX_INVOKER_ONSTACK 2023-01-09 12:18:32 +08:00
Redkale
645ecc3a32 增加自定义Exception 2023-01-09 10:37:30 +08:00
Redkale
da96d2ef9f 增加部分package-info 2023-01-07 20:19:46 +08:00
Redkale
084ba6609d 优化线程名 2023-01-06 22:09:48 +08:00
Redkale
9cef4b4f79 优化线程名 2023-01-06 22:08:49 +08:00
Redkale
1898fa7717 优化命名 2023-01-06 19:47:22 +08:00
Redkale
159c7f9e1b 优化HttpRequest 2023-01-06 16:05:48 +08:00
Redkale
158ea68265 优化ClientAddress 2023-01-06 15:16:58 +08:00
Redkale
7ce7c71163 优化命名 2023-01-06 13:31:57 +08:00
Redkale
4e5a03bb65 Deprecated方法增加since描述 2023-01-06 12:47:12 +08:00
Redkale
a986becb70 优化HttpRequest 2023-01-06 12:21:21 +08:00
Redkale
aa78b98ebf 浼樺寲ByteArray鏋勯€犲嚱鏁? 2023-01-06 10:26:26 +08:00
Redkale
442d806161 优化ClientAddress 2023-01-05 22:31:05 +08:00
Redkale
310d6fe217 新增WeightAddress 2023-01-05 22:29:45 +08:00
Redkale
288cab7c4f redkale.net.invoker.max.onstack榛樿鍊兼敼鎴? 2023-01-05 11:06:13 +08:00
Redkale
6f9a6e32bd 优化HttpRequest 2023-01-05 10:19:33 +08:00
Redkale
bb8faf14cb 澧炲姞ObjectReference宸ュ叿绫? 2023-01-04 20:48:30 +08:00
Redkale
9be0afacef 修复ArrayEncoder并发下componentEncoder偶尔为null的bug 2023-01-04 16:38:20 +08:00
Redkale
809b574f12 【不兼容】DLong更名为Uint128 2023-01-04 13:56:31 +08:00
Redkale
5975be44d9 优化ClientFuture 2023-01-04 11:53:17 +08:00
Redkale
7680b4e165 优化net.client 2023-01-04 11:32:48 +08:00
Redkale
80c04d9645 修复JDK15下StringBuilder.isEmpty方法 2023-01-04 10:44:50 +08:00
Redkale
abe73c4022 优化Client的pingRequest和closeRequest 2023-01-04 10:21:07 +08:00
Redkale
13ef219ab1 绉婚櫎ioThread澶氫綑浠g爜 2023-01-03 18:52:42 +08:00
Redkale
d6d3fd0966 优化AsyncConnection的Thread 2023-01-03 16:57:21 +08:00
Redkale
43f2f38ae3 优化AsyncConnection的Thread 2023-01-03 15:59:05 +08:00
Redkale
44500b6500 AsyncConnection区分read/write 2023-01-03 14:46:28 +08:00
Redkale
979a263c88 优化DEFAULT_MAX_PIPELINES 2023-01-03 12:08:42 +08:00
Redkale
c72d0bec8c 优化ClientConnection.responseQueue命名 2023-01-03 10:56:32 +08:00
Redkale
ba82ca3051 DataSource增加createTable方法 2023-01-03 10:03:23 +08:00
Redkale
0032c06498 优化HttpRequest 2023-01-02 18:54:32 +08:00
Redkale
0c0cee756a 优化AsyncIOGroup 2023-01-02 16:24:56 +08:00
Redkale
21f66d13ee 优化DataSqlSource 2023-01-02 11:37:48 +08:00
Redkale
496b165d42 优化DataJdbcSource 2023-01-02 10:01:24 +08:00
Redkale
3a306a6235 优化DataJdbcSource 2023-01-02 08:43:34 +08:00
Redkale
6b75e950ec 优化DataJdbcSource 2023-01-01 22:07:24 +08:00
Redkale
f09a323b20 优化DataJdbcSource 2023-01-01 20:50:29 +08:00
Redkale
6f6c3f70ff 优化AsyncConnection 2023-01-01 19:52:44 +08:00
Redkale
1c1211a298 优化Response.channel.write 2023-01-01 17:51:52 +08:00
Redkale
b3862cea72 Client实现requestid 2023-01-01 13:53:19 +08:00
Redkale
391352e077 优化命名 2023-01-01 13:02:54 +08:00
Redkale
de089072fa 临时优化Client runWork 2022-12-31 09:58:51 +08:00
Redkale
2542eb959a 临时优化Client runWork 2022-12-30 10:08:50 +08:00
Redkale
76a85a6e3d 优化Client 2022-12-30 00:07:50 +08:00
Redkale
2c861a5ed4 优化DataJdbcSource 2022-12-29 14:56:24 +08:00
Redkale
8701450940 优化DataJdbcSource 2022-12-29 13:35:40 +08:00
Redkale
478b22e7c8 优化DataJdbcSource 2022-12-29 12:15:51 +08:00
Redkale
38436e7f37 格式化代码 2022-12-28 22:43:34 +08:00
Redkale
43a665497d 优化DataJdbcSource 2022-12-28 21:26:12 +08:00
Redkale
1622cb0285 DataJdbcSource优化事务 2022-12-28 19:36:22 +08:00
Redkale
3a28111cfc 优化TableStrategy 2022-12-28 19:18:15 +08:00
Redkale
b8b8873eaf Application加锁cacheSources 2022-12-28 17:07:19 +08:00
Redkale
34023f6d08 优化DataJdbcSource 2022-12-28 15:28:52 +08:00
Redkale
65f7692116 优化DataJdbcSource 2022-12-28 14:30:24 +08:00
Redkale
2af90d790b DataJdbcSource支持分表分库insert 2022-12-28 11:31:37 +08:00
Redkale
daa6fe4cbb 日志优化 2022-12-28 10:14:37 +08:00
Redkale
9c7676a3f2 Utility增加indexOf方法 2022-12-27 13:53:19 +08:00
Redkale
06bd653b24 优化CacheSource 2022-12-26 22:59:16 +08:00
Redkale
441a74a7c9 优化CacheSource 2022-12-26 22:48:59 +08:00
Redkale
ebd010b6d9 优化CacheSource 2022-12-26 22:27:24 +08:00
Redkale
9200a3a32b 优化CacheSource 2022-12-26 19:57:53 +08:00
Redkale
54ea96b820 CacheSource增加incrbyFloat方法 2022-12-26 14:46:49 +08:00
Redkale
ef6b90c2f6 EntityInfo浼樺寲 2022-12-26 11:12:55 +08:00
Redkale
bcb2a89388 优化DataSource 2022-12-25 17:54:37 +08:00
Redkale
9e37f693c3 DistributeTableStrategy增加getTables方法 2022-12-25 17:36:35 +08:00
Redkale
337377c001 浼樺寲HttpSimpleClient 2022-12-25 09:35:20 +08:00
Redkale
8636a1a43d 优化ConvertException 2022-12-23 21:15:42 +08:00
Redkale
b656c8877b 增加SourceException 2022-12-23 21:12:10 +08:00
Redkale
48ba0edd2e 优化日志 2022-12-23 20:56:27 +08:00
Redkale
e44bfbe9f3 优化CacheSource 2022-12-23 17:45:04 +08:00
Redkale
5750dd5dc3 优化CacheSource 2022-12-23 14:00:44 +08:00
Redkale
bb750d3689 优化CacheSource 2022-12-23 13:09:22 +08:00
Redkale
6940b7af81 优化CacheSource 2022-12-23 12:08:09 +08:00
Redkale
31eb6f8701 优化CacheSource 2022-12-23 10:48:27 +08:00
Redkale
989f1cddf8 打印慢sql日志 2022-12-22 21:49:11 +08:00
Redkale
2d06fd6ea9 优化CacheSource 2022-12-22 15:02:41 +08:00
Redkale
e79427f708 优化CacheSource 2022-12-22 13:05:14 +08:00
Redkale
68ff0f7bab 优化CacheSource 2022-12-22 10:48:08 +08:00
Redkale
19b22161c9 Convert兼容setter返回值是void或类本身对象 2022-12-22 09:55:35 +08:00
Redkale
2d84fc3eda 优化CacheSource 2022-12-22 09:46:56 +08:00
Redkale
e823c2e4e1 优化CacheSource 2022-12-22 08:28:31 +08:00
Redkale
e5a905f04c CacheSource增加getex系列方法 2022-12-21 22:46:11 +08:00
Redkale
616a501af7 优化CacheSource部分方法名 2022-12-21 17:35:43 +08:00
Redkale
c48ba58d55 优化CacheSource部分方法名 2022-12-21 16:43:32 +08:00
Redkale
d3236f57d2 CacheSource增加setnx、hsetnx系列方法 2022-12-21 16:33:44 +08:00
Redkale
f327378d18 修复APP_EXECUTOR资源为null时inject报错的bug 2022-12-21 14:43:13 +08:00
Redkale
66a1850c49 优化createDataSource和createCacheSource 2022-12-21 13:43:25 +08:00
Redkale
3ac01eca15 PrepareCompiler兼容旧注解 2022-12-21 12:17:10 +08:00
Redkale
e7aac019e1 javax.annotation包迁移至org.redkale.annotation; javax.persistence包迁移至org.redkale.persistence 2022-12-21 11:42:01 +08:00
Redkale
628e3f15b1 增加"redkale.resource.skip.check"系统变量 2022-12-18 23:58:28 +08:00
Redkale
321ce372d2 增加"redkale.resource.skip.check"系统变量 2022-12-18 23:52:02 +08:00
Redkale
4fa449990f 优化Traces 2022-12-18 21:25:52 +08:00
Redkale
d57b4715d0 修复Application.replaceValue空指针问题 2022-12-18 17:39:15 +08:00
Redkale
664ad9e4aa 修复Application.replaceValue空指针问题 2022-12-18 17:35:30 +08:00
Redkale
a31e47ea42 优化SncpResponse.fillRespHeader 2022-12-18 15:51:47 +08:00
Redkale
1334e2439d 修改Traces方法名 2022-12-17 14:22:18 +08:00
Redkale
543db6f8ab 增加慢sql告警日志 2022-12-17 11:07:34 +08:00
Redkale
8fd679d21f 优化命名规范 2022-12-16 09:52:34 +08:00
Redkale
d4def48c99 优化命名规范 2022-12-15 20:58:30 +08:00
Redkale
c805beeb34 优化DataBatch 2022-12-15 13:38:27 +08:00
Redkale
a2331ad71a 增加DefaultDataBatch类 2022-12-13 21:31:11 +08:00
Redkale
eaa2c4c269 ColumnValue.name做空判断 2022-12-13 20:17:41 +08:00
Redkale
bab765a8f8 优化变量名 2022-12-12 19:24:15 +08:00
Redkale
348b27365b 调整Application设置系统变量优先级 2022-12-12 11:08:48 +08:00
Redkale
164dd3d8ea Environment增加forEach方法 2022-12-12 09:36:22 +08:00
Redkale
4a91e6eb18 废弃依赖注入配置项时自动加入"property."前缀 2022-12-11 21:37:23 +08:00
Redkale
b6a0885927 优化LoggingSearchHandler 2022-12-11 19:24:13 +08:00
Redkale
93ce83f137 优化AnyValue.loadFromProperties 2022-12-11 17:57:44 +08:00
Redkale
d36c168faa 配置中心支持动态更改mq和cluster配置 2022-12-11 13:29:33 +08:00
Redkale
86c66aab6d 配置中心支持动态更改日志配置 2022-12-11 10:45:47 +08:00
Redkale
8c20ba96f6 Application.xml废弃<resources>节点 2022-12-09 21:54:51 +08:00
Redkale
8a630ff007 优化AnyValue.toString 2022-12-08 23:15:44 +08:00
Redkale
8e55ddfcae 优化AnyValue.toString 2022-12-08 22:46:45 +08:00
Redkale
1e49fa50b5 优化AnyValue.merge方法 2022-12-08 19:36:26 +08:00
Redkale
5093663cfd 修复WebSocketNodeService无sncp服务情况下不注入CacheSource的bug 2022-12-08 17:18:55 +08:00
Redkale
b41f34cade 优化DataSource配置中心通知 2022-12-07 22:21:47 +08:00
Redkale
1972e6308c AnyValue增加copy和merge方法 2022-12-07 21:28:12 +08:00
Redkale
c0c5cb7e93 修复mysql下 DELETE FROM table a别名问题 2022-12-07 20:10:10 +08:00
Redkale
186b6c8649 FilterNode.filter方法废弃 2022-12-07 19:55:21 +08:00
Redkale
23e68e2d0d CacheSource.getSet系列方法还原 2022-12-07 19:19:30 +08:00
Redkale
1247c37d71 Utility.md5默认改成utf-8 2022-12-07 16:16:02 +08:00
Redkale
2d92c78c0b Application初始化顺序优化 2022-12-07 14:31:14 +08:00
Redkale
07ed7163ea PropertiesAgent优化 2022-12-07 13:26:52 +08:00
Redkale
4560c231ce CacheSource.getSet系列方法改成setGet 2022-12-07 10:04:57 +08:00
Redkale
5a1f6c8b1a 日志优化 2022-12-07 09:56:03 +08:00
Redkale
7a915c7015 优化DataSqlSource.onResourceChange 2022-12-06 21:32:21 +08:00
Redkale
2663b6dea0 DataJdbcSource支持配置中心动态变更配置 2022-12-06 19:53:15 +08:00
Redkale
cc3c07d0c2 移除SourceChangeable 2022-12-06 13:38:21 +08:00
Redkale
e01cb1b94d 修改SourceChangeable类接口 2022-12-05 20:04:10 +08:00
Redkale
709d320a5a DataResultSetRow增加getColumnLabels方法 2022-12-05 19:44:07 +08:00
Redkale
e781be25a0 优化Application.updateSourceProperties方法实现 2022-12-05 17:43:39 +08:00
Redkale
f8eb3d03ad 增加SourceChangeable 2022-12-04 15:45:27 +08:00
Redkale
b2e7160ce7 ResourceListener支持对Environment环境变量的支持 2022-12-01 20:31:28 +08:00
Redkale
18bb3b807b 优化Application 2022-11-30 10:15:56 +08:00
Redkale
af92ac4048 优化updateEnvironmentProperty方法 2022-11-29 21:13:08 +08:00
Redkale
6ab8aa8e72 优化PropertiesAgent 2022-11-29 20:14:11 +08:00
Redkale
595e2b83f5 优化PropertiesAgent 2022-11-29 18:26:28 +08:00
Redkale
ea8ffbc510 优化PropertiesAgent 2022-11-29 12:00:57 +08:00
Redkale
2663fb318c Utility优化参数名 2022-11-28 13:33:20 +08:00
Redkale
1c70fd201a Application增加reconfigLogging方法 2022-11-27 15:46:25 +08:00
Redkale
6e635d4272 修复LoggingConsoleHandler.denyreg相关bug 2022-11-26 14:47:41 +08:00
Redkale
2c41a354f3 优化日志级别调用方式 2022-11-26 14:00:27 +08:00
Redkale
b24eb1ce9e 优化PropertiesAgent接口 2022-11-25 20:27:41 +08:00
Redkale
d6b626fd47 Resource增加required属性 2022-11-25 17:29:31 +08:00
Redkale
53f7e5d337 优化PropertiesAgent 2022-11-25 17:14:23 +08:00
Redkale
232accc0da 浼樺寲PropertiesAgent 2022-11-25 17:04:42 +08:00
Redkale
56119d2aab 浼樺寲PropertiesAgent 2022-11-25 17:00:22 +08:00
Redkale
53d35fa02f 优化PropertiesAgent.init接口参数 2022-11-25 16:55:27 +08:00
Redkale
a68d63d2be Utility增加remove方法 2022-11-25 14:31:04 +08:00
Redkale
17dcddcd80 ResourceEvent增加containsName方法 2022-11-25 13:46:23 +08:00
Redkale
7621c4bdc3 增加InstanceProvider,统一Provider接口 2022-11-25 13:34:52 +08:00
Redkale
949498f3a7 PropertiesAgent加强注释 2022-11-24 22:31:18 +08:00
Redkale
0b2f2b189c 优化PropertiesAgent 2022-11-24 20:01:41 +08:00
Redkale
050ebc673a HttpSimpleRequest和client模块增加链路ID 2022-11-24 15:31:24 +08:00
Redkale
cc397ed07b redkale.convert.tiny默认值还原成true 2022-11-24 13:44:34 +08:00
Redkale
5c7e0b8098 convert/BsonMainTest.tiny 默认为true 2022-11-24 10:33:55 +08:00
Redkale
16ebdcde85 客户端组AsyncGroup不再使用WorkExecutor线程池而是单独新建一个 2022-11-24 10:09:44 +08:00
Redkale
4e675d007e redkale.convert.tiny默认值由true改成false 2022-11-18 15:23:53 +08:00
Redkale
a4dd37fff2 增加ConvertEnumValue功能 2022-11-16 11:25:15 +08:00
Redkale
20a545825c 优化Sheet 2022-09-27 13:44:10 +08:00
Redkale
b912e3a35f HttpServlet提供finish404、finish405的可定制化接口 2022-09-06 22:08:36 +08:00
Redkale
86a7ffb642 http协议请求不符合method要求时改成返回405 2022-09-06 17:39:23 +08:00
Redkale
cd3e5bdd14 支持redkale.datasource.xxx 和 redkale.cachesource.xxx 配置格式 2022-07-12 09:36:05 +08:00
Redkale
48db5a76b0 Redkale 2.8.0 开始 2022-07-12 07:14:14 +08:00
Redkale
630f18792a 2022-07-07 09:22:31 +08:00
Redkale
d0cb04a224 Redkale 2.7.0 结束 2022-07-06 23:23:09 +08:00
Redkale
0e8ac2f43c 2022-07-06 23:21:14 +08:00
Redkale
0c60700d82 增加ResourceEvent 2022-07-06 22:44:44 +08:00
Redkale
dc285b6c2f 2022-07-06 22:03:29 +08:00
Redkale
74009b38c4 2022-07-06 16:42:39 +08:00
Redkale
e820be1de9 2022-07-06 16:29:56 +08:00
Redkale
7db3cbd03d 增加Environment 2022-07-06 16:09:30 +08:00
Redkale
27d2433993 增加ResourceListener.different功能 2022-07-05 14:34:59 +08:00
Redkale
64eda4cdf7 2022-07-04 09:18:24 +08:00
Redkale
f05961cf07 @WebServlet合并url,例如: /shop/*,/shop/info 合并成一个 /shop/* 2022-07-03 23:43:22 +08:00
Redkale
be713c9ccf 2022-07-02 22:45:11 +08:00
Redkale
00dc3ee945 2022-07-02 22:10:32 +08:00
Redkale
927007774b PrepareServlet 更名为 DispatcherServlet 2022-07-02 21:33:52 +08:00
Redkale
f4994f66c9 2022-07-02 21:02:21 +08:00
Redkale
aef973a4d9 增加RestLocale功能 2022-07-02 20:47:50 +08:00
Redkale
ba618ceba0 2022-06-28 12:08:03 +08:00
Redkale
7f22eca8dc 2022-06-27 20:04:14 +08:00
Redkale
862018b63f 修改getCreatetime 2022-06-27 19:56:07 +08:00
Redkale
f38143ff7b 2022-06-20 11:18:51 +08:00
Redkale
481cde05bf 2022-06-20 11:08:23 +08:00
Redkale
a1e6413704 Update README.md 2022-05-27 10:40:16 +08:00
Redkale
8d1b9a18b4 2.7.0-SNAPSHOT 2022-05-27 10:39:58 +08:00
Redkale
6e21fe56e9 Redkale 2.6.0 结束 2021-12-01 09:52:52 +08:00
Redkale
f0ac042b3c Update README.md 2021-10-18 20:58:14 +08:00
Redkale
13a4264488 Redkale 2.5.0 结束 2021-10-18 20:48:42 +08:00
redkale
7ffb65cc38 Redkale 2.4.0 结束 2021-10-18 13:19:30 +08:00
Redkale
2464c360c0 Redkale 2.4.0 结束 2021-06-06 19:06:05 +08:00
Redkale
1917ccf35c Redkale 2.3.0 结束 2021-04-09 00:28:57 +08:00
Redkale
4f9c14da97 2021-01-20 19:25:29 +08:00
Redkale
58e23c1b8c 2021-01-20 19:13:38 +08:00
Redkale
34156fc092 2021-01-20 18:52:11 +08:00
Redkale
86fde56129 Convert增加convertMapToBytes方法 2021-01-20 18:15:25 +08:00
Redkale
d997d3a7bb 增加ConvertSmallString功能 2021-01-20 17:37:29 +08:00
Redkale
4e689855f4 2021-01-20 13:20:03 +08:00
Redkale
eace16d7fd 2021-01-20 13:11:20 +08:00
Redkale
53b7f9b26f 2021-01-20 11:45:56 +08:00
Redkale
983c667725 2021-01-20 11:35:51 +08:00
Redkale
96fd660d46 2021-01-20 10:14:52 +08:00
Redkale
7d1770da8a 2021-01-19 17:40:08 +08:00
Redkale
b83f6867f3 2021-01-19 17:00:28 +08:00
Redkale
fa7db42f50 ObjectPool关闭public构造函数 2021-01-19 16:45:00 +08:00
Redkale
80c07a5c5b 2021-01-19 15:44:31 +08:00
Redkale
59a4c85aeb 2021-01-19 15:39:53 +08:00
Redkale
7fc01d38e8 2021-01-18 17:29:26 +08:00
Redkale
3010422f4e 2021-01-16 19:27:52 +08:00
Redkale
1f78bb1a98 2021-01-16 19:25:18 +08:00
Redkale
1d7f32efe4 2021-01-16 18:26:08 +08:00
Redkale
1e3d980437 2021-01-15 15:07:30 +08:00
Redkale
8654b5eef8 2021-01-14 13:37:45 +08:00
Redkale
5781ad1de0 2021-01-14 12:25:23 +08:00
Redkale
e2a1fa15d3 增加CacheClusterAgent功能 2021-01-14 12:01:25 +08:00
Redkale
50da7413d8 2021-01-13 09:24:35 +08:00
Redkale
e45b945024 2021-01-13 09:22:55 +08:00
Redkale
f3668a77ef 2021-01-12 21:39:56 +08:00
Redkale
2aee6cab20 2021-01-12 20:54:23 +08:00
Redkale
6233a0b960 2021-01-12 20:34:39 +08:00
Redkale
0ae469d8e2 2021-01-12 18:38:10 +08:00
Redkale
bcad47ebd5 修复HttpSimpleRequest的path编码bug 2021-01-12 17:59:33 +08:00
Redkale
71d179b8c3 2021-01-12 17:53:13 +08:00
Redkale
af35e5100e 2021-01-12 10:23:28 +08:00
Redkale
96c97c7dd2 2021-01-12 09:53:33 +08:00
Redkale
d5a41fc8b6 2021-01-10 14:59:00 +08:00
Redkale
c3c3afb3c3 2021-01-10 13:10:09 +08:00
Redkale
4f32dcda16 2021-01-10 10:33:48 +08:00
Redkale
67717e73ad 2021-01-10 10:19:05 +08:00
Redkale
1753734581 2021-01-10 09:05:47 +08:00
Redkale
3e408e535c 2021-01-09 15:41:35 +08:00
Redkale
f154292cb5 2021-01-09 15:32:59 +08:00
Redkale
ac261533c3 2021-01-09 14:53:12 +08:00
Redkale
1982c984ee 2021-01-09 14:42:45 +08:00
Redkale
fb5f82c44f 2021-01-09 14:01:41 +08:00
Redkale
840cea06db 2021-01-06 15:07:31 +08:00
Redkale
3237e2488e 2021-01-03 14:02:26 +08:00
Redkale
98e1e40e18 2021-01-03 14:00:54 +08:00
Redkale
def3fc7b2e 2021-01-03 12:04:51 +08:00
Redkale
6057b8f90a 2020-12-26 00:48:05 +08:00
Redkale
2847f761bb 修改MessageRecord的seqid生成规则 2020-12-26 00:07:49 +08:00
Redkale
b0a2d2ad80 2020-12-25 22:37:48 +08:00
Redkale
564b814f77 2020-12-25 20:51:18 +08:00
Redkale
433585a231 2020-12-25 20:33:50 +08:00
Redkale
6a4750e302 2020-12-25 20:30:47 +08:00
Redkale
748a6f11c1 2020-12-25 20:05:10 +08:00
Redkale
bdd9a82682 mq加入一些debug日志 2020-12-25 18:03:19 +08:00
Redkale
c551c157d1 @Local @AutoLoad(false) Service 能自动加载 2020-12-19 19:39:51 +08:00
Redkale
7e777229ba 2020-12-15 21:55:32 +08:00
Redkale
612bfcba37 WebSocket兼容connection:upgrade 小写的upgrade 2020-12-15 17:04:33 +08:00
Redkale
c44e00a100 2020-12-14 13:57:57 +08:00
Redkale
7f46b3194a Application 删除 restoreConfig 方法 2020-12-14 13:56:20 +08:00
Redkale
50b7999dee Application 增加 reloadConfig 方法 2020-12-14 13:55:19 +08:00
Redkale
871f84b1ff Redkale 2.3.0 开始 2020-12-14 13:49:47 +08:00
Redkale
4018a95af0 2020-12-13 12:17:00 +08:00
Redkale
ffe3ff5830 2020-12-13 01:08:09 +08:00
Redkale
9b9b0ab10e Redkale 2.2.0 结束 2020-12-12 09:36:29 +08:00
Redkale
b19e5fe839 2020-12-09 21:58:04 +08:00
Redkale
f6caf41960 2020-11-27 09:36:46 +08:00
Redkale
67d57de166 2020-11-12 21:59:16 +08:00
Redkale
4d79f17a3a 2020-11-12 21:38:21 +08:00
Redkale
245d6d6fc7 2020-11-12 09:08:15 +08:00
Redkale
66bd1feadf 2020-11-11 23:48:38 +08:00
Redkale
c02e3549eb 2020-11-11 23:28:58 +08:00
Redkale
210b8dcf9d 2020-11-11 22:55:58 +08:00
Redkale
bbefa788fd 2020-11-11 22:51:24 +08:00
Redkale
2f6eb0908e 2020-11-11 18:00:37 +08:00
Redkale
51e4d44fc1 2020-11-11 12:39:05 +08:00
Redkale
ed502daeb9 2020-11-10 21:11:11 +08:00
Redkale
d7da527bd5 2020-11-10 21:06:08 +08:00
Redkale
7c5146bc97 2020-11-10 00:22:03 +08:00
Redkale
91cdf9990b 2020-10-23 15:03:43 +08:00
Redkale
7d03609462 2020-10-10 12:00:13 +08:00
Redkale
7be9a06e76 2020-10-02 15:41:03 +08:00
Redkale
3eaecacac0 2020-10-02 00:19:04 +08:00
Redkale
9c5e23090c 2020-10-01 22:49:51 +08:00
Redkale
c7b05e530d 2020-10-01 15:38:39 +08:00
Redkale
889fa25e58 2020-10-01 00:38:41 +08:00
Redkale
da6945224f 2020-09-29 09:17:18 +08:00
Redkale
026a727480 2020-09-28 19:26:02 +08:00
Redkale
2404f547ab 2020-09-28 14:15:07 +08:00
Redkale
a9dd82dcf4 2020-09-27 18:59:54 +08:00
Redkale
95443be313 2020-09-27 11:25:57 +08:00
Redkale
5d1805b10e 2020-09-26 22:03:26 +08:00
Redkale
72eb175dc3 2020-09-25 22:03:19 +08:00
Redkale
d5cbcaaa15 2020-09-25 18:41:49 +08:00
Redkale
bfa722f6da 2020-09-25 16:56:10 +08:00
Redkale
6b9d35983a 2020-09-25 11:47:24 +08:00
Redkale
6cf50c7cc9 2020-09-24 23:32:26 +08:00
Redkale
cf05851752 2020-09-24 15:24:49 +08:00
Redkale
1cbbf17392 2020-09-24 14:50:05 +08:00
Redkale
96afeb19b2 2020-09-24 14:23:45 +08:00
Redkale
56da72b16e 2020-09-22 12:18:23 +08:00
Redkale
b781868876 2020-09-20 21:56:35 +08:00
Redkale
6a05f4b497 2020-09-20 17:43:46 +08:00
Redkale
b9fa617374 2020-09-20 17:00:03 +08:00
Redkale
c59baee1f5 2020-09-20 16:41:39 +08:00
Redkale
98531d6b2f 2020-09-20 16:21:47 +08:00
Redkale
8df5b45525 2020-09-20 15:22:38 +08:00
Redkale
ebba966d52 2020-09-20 15:15:34 +08:00
Redkale
169f35d41f 2020-09-20 12:08:49 +08:00
Redkale
8bec9e88a7 2020-09-20 12:08:20 +08:00
Redkale
854aa0153f 2020-09-19 23:29:10 +08:00
Redkale
77eaaae6ce 2020-09-19 23:17:12 +08:00
Redkale
fd7badec0a 2020-09-19 20:47:20 +08:00
Redkale
a834b6ea21 2020-09-19 20:23:51 +08:00
Redkale
31fad72172 CacheSource 增加 setBytes 系列方法 2020-09-19 09:53:58 +08:00
Redkale
ef14195e71 2020-09-18 22:58:10 +08:00
Redkale
a2fab32356 2020-09-18 22:32:25 +08:00
Redkale
2dd0ecfa49 2020-09-18 21:01:31 +08:00
Redkale
849fe15728 移除RestDyncListener 2020-09-18 21:00:31 +08:00
Redkale
76afab3c78 2020-09-18 14:09:27 +08:00
Redkale
21250794f5 2020-09-18 13:47:28 +08:00
Redkale
9f85ceb2ed 2020-09-17 19:08:54 +08:00
Redkale
b6ecdef0c5 2020-09-17 17:54:59 +08:00
Redkale
4dfd528533 2020-09-17 16:01:48 +08:00
Redkale
3131601477 2020-09-17 15:41:14 +08:00
Redkale
5921cf5f0d 增加RestDyncListener功能 2020-09-17 15:33:39 +08:00
Redkale
788f7d5eb1 2020-09-17 00:32:15 +08:00
Redkale
79cb79481e 2020-09-16 23:05:32 +08:00
Redkale
41f0061dca 2020-09-16 21:50:50 +08:00
Redkale
f981e4f886 2020-09-16 21:11:37 +08:00
Redkale
ebf30e488a 2020-09-15 23:41:17 +08:00
Redkale
7ab889baac 2020-09-15 21:37:58 +08:00
Redkale
8d9d893839 2020-09-14 11:16:16 +08:00
Redkale
205233f8c9 Utility增加todayYYYYMMDDHHmmss方法 2020-09-10 10:18:45 +08:00
Redkale
6ee9527ed9 HttpServlet 不再支持/aa/bbcc 能匹配到 /aa/bb 2020-09-09 19:17:04 +08:00
Redkale
ee56ffa346 2020-09-09 10:16:19 +08:00
Redkale
3fcc478356 修复创建HttpSimpleRequest时body参数没有解析的bug 2020-09-08 11:14:25 +08:00
Redkale
26e4cd2f4a 2020-09-08 09:54:21 +08:00
Redkale
509524144d 增加 ConvertLoader 2020-09-08 09:51:28 +08:00
Redkale
676285e20b 2020-09-07 23:04:44 +08:00
Redkale
43edb0f814 2020-09-03 15:01:06 +08:00
Redkale
1c684a4e32 2020-09-03 14:59:35 +08:00
Redkale
156af0e2a4 2020-09-03 11:45:02 +08:00
Redkale
28d9c465fd 2020-09-03 09:22:55 +08:00
Redkale
a285510656 2020-09-02 20:41:19 +08:00
Redkale
d6042d142e [优化]增加org.redkale.service.RetLabel.RetInfoTransfer 2020-08-31 21:07:50 +08:00
Redkale
be8d368e72 2.2.0 开始 2020-08-31 21:06:54 +08:00
Redkale
75698d9390 2020-08-31 13:35:52 +08:00
Redkale
9d343694cc <tt>替换成<code> 2020-08-31 09:31:38 +08:00
Redkale
fddb2a3be0 2020-08-28 22:35:43 +08:00
Redkale
3b44eddbb9 2020-08-28 19:37:34 +08:00
Redkale
ba4100e22d 增加 ThreadHashExecutor 2020-08-28 15:15:26 +08:00
Redkale
72155e31dd 2020-08-19 23:03:35 +08:00
Redkale
60903c844e 2020-08-19 22:56:26 +08:00
Redkale
5c810b5ff6 2020-08-11 19:57:17 +08:00
Redkale
e3a8c2d392 2020-08-06 16:33:49 +08:00
Redkale
1f27d5f3e3 完善Rest的泛型识别 2020-08-06 16:06:46 +08:00
Redkale
abb790da54 2020-07-31 12:00:27 +08:00
Redkale
f4a2f2af94 2020-07-31 10:26:26 +08:00
Redkale
29a21d060b 2020-07-31 10:22:19 +08:00
Redkale
de19861974 2020-07-31 10:13:53 +08:00
Redkale
e5766e31dc 2020-07-31 09:50:59 +08:00
Redkale
fca727ecaf 2020-07-30 20:54:35 +08:00
Redkale
d009c9b2ed 2020-07-30 19:14:39 +08:00
Redkale
fd2e84f781 2020-07-30 18:02:29 +08:00
Redkale
2b7676449d 2020-07-30 17:57:31 +08:00
Redkale
4b2c6eba63 2020-07-30 17:35:59 +08:00
Redkale
84147280cf 2020-07-30 09:44:07 +08:00
Redkale
e62d9f8201 2020-07-30 09:11:49 +08:00
Redkale
4cec4e64f9 2020-07-30 09:10:08 +08:00
Redkale
9eb647428c 2020-07-29 21:20:12 +08:00
Redkale
b68808b325 加入spop系列方法 2020-07-29 20:08:47 +08:00
Redkale
a9dce0efbf 2020-07-27 16:43:56 +08:00
Redkale
de63f81238 CacheSource remove系列方法返回值由void改成int 2020-07-25 09:39:43 +08:00
Redkale
a05afe45c0 2020-07-24 09:41:43 +08:00
Redkale
236996caa1 2020-07-22 13:41:54 +08:00
Redkale
b808c93885 2020-07-22 11:53:16 +08:00
Redkale
7865b74359 2020-07-22 11:27:10 +08:00
Redkale
143e1880d4 2020-07-22 11:24:39 +08:00
Redkale
1be467cfe9 2020-07-22 11:09:49 +08:00
Redkale
7f8f157616 2020-07-21 19:49:32 +08:00
Redkale
c140ad6828 2020-07-20 11:45:51 +08:00
Redkale
50e41dba25 2020-07-19 21:36:19 +08:00
Redkale
c73fc5f266 2020-07-19 15:25:59 +08:00
Redkale
a5f3adc477 2020-07-19 13:42:26 +08:00
Redkale
b77764c1cf 2020-07-17 20:18:10 +08:00
Redkale
714b188560 2020-07-17 18:21:09 +08:00
Redkale
47315f188a 2020-07-17 17:37:02 +08:00
Redkale
384a8a3991 2020-07-17 16:57:41 +08:00
Redkale
7a80c00439 2020-07-17 12:13:45 +08:00
Redkale
43486ce1e2 2020-07-17 11:43:51 +08:00
Redkale
627c1e953e CacheSource增加hxxx方法 2020-07-17 10:41:41 +08:00
Redkale
da141cc6bd 2020-07-16 23:43:35 +08:00
Redkale
8f3a9a6297 2020-07-16 17:50:04 +08:00
Redkale
e8d496b0ad 2020-07-16 17:30:27 +08:00
Redkale
f5accfbe8f 2020-07-15 23:07:55 +08:00
Redkale
16e291036e 2020-07-15 21:02:00 +08:00
Redkale
a79b8b77b5 2020-07-15 20:58:03 +08:00
Redkale
8e2d6acdf8 2020-07-15 19:34:31 +08:00
Redkale
70c5123f7a 增加强大的HttpMessageClusterClient功能 2020-07-15 18:03:33 +08:00
Redkale
7cfbaee199 2020-07-14 23:23:34 +08:00
Redkale
fa8d78e18f 2020-07-13 22:57:21 +08:00
Redkale
4f5e72a31a 2020-07-13 22:56:42 +08:00
Redkale
7c5822fb7c 2020-07-12 17:56:58 +08:00
Redkale
60df140bfd 2020-07-11 20:22:44 +08:00
Redkale
f41e905842 RetResult增加CompletableFuture相关方法 2020-07-11 11:02:18 +08:00
Redkale
9824fe6da3 2020-07-11 10:45:12 +08:00
Redkale
1fb37f4b67 2020-07-10 17:50:48 +08:00
Redkale
a8a6861a21 2020-07-09 19:50:06 +08:00
Redkale
614222bdc3 2020-07-09 16:58:05 +08:00
Redkale
8e98dda795 2020-07-09 00:22:19 +08:00
Redkale
3686306505 2020-07-08 23:18:28 +08:00
Redkale
d29aa78022 2020-07-04 23:52:27 +08:00
Redkale
85fa406e1d 2020-07-03 09:21:49 +08:00
Redkale
d501e2016f 2020-07-01 18:08:39 +08:00
Redkale
cf0cd66ac9 2020-07-01 15:02:26 +08:00
Redkale
c921f657b1 2020-06-30 20:33:07 +08:00
Redkale
c93c1d84c5 2020-06-30 19:30:53 +08:00
Redkale
2e66b1a546 2020-06-29 20:12:37 +08:00
Redkale
48629146ed 2020-06-28 23:18:59 +08:00
Redkale
a6c8502416 2020-06-28 23:16:53 +08:00
Redkale
fc74dc33c1 2020-06-28 22:49:14 +08:00
Redkale
73de9dfc33 2020-06-28 22:22:53 +08:00
Redkale
68d78a4aa4 2020-06-28 19:28:56 +08:00
Redkale
b618e0e884 2020-06-28 09:45:53 +08:00
Redkale
2d1a6e0edc 2020-06-28 07:23:07 +08:00
Redkale
76a7e92787 2020-06-26 22:06:22 +08:00
Redkale
a2178b9a5f 2020-06-26 00:45:29 +08:00
Redkale
dcf0fecdb0 2020-06-26 00:38:24 +08:00
Redkale
f88db8abf9 2020-06-25 23:33:57 +08:00
Redkale
0c8b0f5e19 2020-06-25 20:55:17 +08:00
Redkale
b794872147 2020-06-25 17:34:04 +08:00
Redkale
86614f035b 2020-06-25 16:14:57 +08:00
Redkale
5f3a472c5e 2020-06-24 23:08:17 +08:00
Redkale
7eb2a405d3 2020-06-24 18:04:42 +08:00
Redkale
1d030183bb 2020-06-24 16:34:58 +08:00
Redkale
d211692306 2020-06-24 10:43:46 +08:00
Redkale
86c7d95c80 2020-06-24 10:05:02 +08:00
Redkale
e99d43b25c 2020-06-24 09:25:23 +08:00
Redkale
730fc0a911 2020-06-23 10:28:25 +08:00
Redkale
1ea92d7165 2020-06-23 10:13:12 +08:00
Redkale
0dfc0ca853 2020-06-22 11:07:26 +08:00
Redkale
474f82b3cf 2020-06-21 09:41:14 +08:00
Redkale
ae80109c77 2020-06-21 09:15:17 +08:00
Redkale
807fe63cbe HttpSimpleRequest 增加 rpc 功能 2020-06-21 08:57:59 +08:00
Redkale
44ed3259f9 2020-06-19 13:56:46 +08:00
Redkale
93b2b5fab8 2020-06-19 00:46:05 +08:00
Redkale
58e807439c 2020-06-19 00:20:57 +08:00
Redkale
ca2f34bfac 2020-06-19 00:18:38 +08:00
Redkale
b8719d7f76 去掉Service.stop 增加 @Command 功能 2020-06-18 15:35:40 +08:00
Redkale
be0fdd9045 2020-06-18 15:00:14 +08:00
Redkale
1d2b583c0c 2020-06-17 22:50:04 +08:00
Redkale
9def35e2e1 2020-06-17 22:49:27 +08:00
Redkale
a11127ea58 2020-06-17 13:39:08 +08:00
Redkale
af80864e08 2020-06-16 21:03:22 +08:00
Redkale
f6a4fbdf87 2020-06-16 20:57:09 +08:00
Redkale
61f48be2a6 2020-06-16 19:58:08 +08:00
Redkale
8516925537 Service 增加 stop 方法 2020-06-16 17:48:19 +08:00
Redkale
f828ec3d08 2020-06-16 15:33:49 +08:00
Redkale
1eb1706166 2020-06-16 11:12:51 +08:00
Redkale
ffd3b6daf6 2020-06-15 23:35:26 +08:00
Redkale
76d538264a 2020-06-15 23:16:17 +08:00
Redkale
02d0a06195 2020-06-15 20:57:59 +08:00
Redkale
c43325e402 2020-06-15 18:01:49 +08:00
Redkale
63bc4b2d00 CacheSource 增加get多个keys值得系列方法 2020-06-14 21:52:08 +08:00
Redkale
6e5da92263 2020-06-14 14:25:13 +08:00
Redkale
6358719255 2020-06-14 12:04:59 +08:00
Redkale
bdfd92299a 2020-06-14 12:00:03 +08:00
Redkale
aa4c9896ba 2020-06-14 01:21:26 +08:00
Redkale
1549f1feed 2020-06-14 01:13:08 +08:00
Redkale
2a9a713f3e 2020-06-14 01:12:26 +08:00
Redkale
0377dac71f 2020-06-14 01:01:38 +08:00
Redkale
13217a11c0 2020-06-13 09:38:25 +08:00
Redkale
146b81ee5e 2020-06-12 19:21:41 +08:00
Redkale
8502792aad 2020-06-12 18:10:00 +08:00
Redkale
3d9447327a 2020-06-12 17:20:36 +08:00
Redkale
288fc67621 2020-06-12 14:08:04 +08:00
Redkale
d4bc751a20 2020-06-12 09:35:41 +08:00
Redkale
4cf160e5d3 2020-06-11 23:30:43 +08:00
Redkale
98f29d6a6e 2020-06-11 19:24:16 +08:00
Redkale
92bb0a561b 2020-06-11 17:27:25 +08:00
Redkale
1329f6f0e1 2020-06-11 17:11:31 +08:00
Redkale
a3dbfaba88 2020-06-11 16:03:39 +08:00
Redkale
2032f39bf9 2020-06-11 14:51:22 +08:00
Redkale
8840415739 MessageAgent增加timeoutExecutor 2020-06-11 14:25:50 +08:00
Redkale
bdf2fd21c3 增加 @MessageMultiConsumer 功能 2020-06-11 14:06:25 +08:00
Redkale
bd1e326404 Rest配置中开启MQ时,path字段失效 2020-06-11 10:47:14 +08:00
Redkale
ebd31bc3d3 2020-06-11 10:16:48 +08:00
Redkale
7185191d91 2020-06-10 23:06:20 +08:00
Redkale
1a1dd44f34 2020-06-10 22:07:20 +08:00
Redkale
95fd147268 2020-06-10 20:37:24 +08:00
Redkale
88657fdf63 2020-06-10 20:30:50 +08:00
Redkale
03de684940 2020-06-10 17:25:52 +08:00
Redkale
b445b99572 2020-06-10 10:34:38 +08:00
Redkale
bd4343c5d8 2020-06-09 21:31:08 +08:00
Redkale
a58c13cd9f 2020-06-09 21:22:17 +08:00
Redkale
cf23ecc12c 2020-06-09 17:46:50 +08:00
Redkale
86754c2324 2020-06-09 13:10:16 +08:00
Redkale
e6f0a8fdf3 增加 @RestHeaders 功能 2020-06-09 09:53:32 +08:00
Redkale
fa9fc531d0 2020-06-08 22:51:14 +08:00
Redkale
30bf2c1ad3 2020-06-08 22:43:46 +08:00
Redkale
d326da9344 2020-06-08 22:27:30 +08:00
Redkale
8f6494163d 2020-06-08 21:57:55 +08:00
Redkale
490cabefb2 增加 <excludelibs/> 配置项 2020-06-08 21:45:19 +08:00
Redkale
66ff86d6fb 2020-06-08 20:13:26 +08:00
Redkale
0e5479d55e 增加 @RpcTargetTopic 2020-06-08 19:31:29 +08:00
Redkale
3eb3e0104d 2020-06-08 13:42:19 +08:00
Redkale
079e6116b2 2020-06-08 09:13:41 +08:00
Redkale
b6a3adb21c 2020-06-07 22:11:49 +08:00
Redkale
ecf831c0f5 2020-06-07 15:56:55 +08:00
Redkale
adfa0be79e 2020-06-07 11:27:40 +08:00
Redkale
7ec91802b2 2020-06-06 23:51:56 +08:00
Redkale
1e15eb31c7 2020-06-06 23:37:59 +08:00
Redkale
8d5e61a9a2 2020-06-06 22:04:18 +08:00
Redkale
64500b113a 2020-06-06 18:50:18 +08:00
Redkale
a7e5fad571 2020-06-05 18:44:51 +08:00
Redkale
531b00b6fd 2020-06-05 18:01:25 +08:00
Redkale
ce3fc5792b 2020-06-05 17:52:09 +08:00
Redkale
a477b2fb73 2020-06-05 13:50:58 +08:00
Redkale
6a5d121615 2020-06-05 12:01:32 +08:00
Redkale
90960e0574 2020-06-05 11:56:04 +08:00
Redkale
b6980f7cf8 2020-06-05 11:29:54 +08:00
Redkale
2fb3472de0 2020-06-05 10:06:44 +08:00
Redkale
6dacbafc29 2020-06-05 07:50:10 +08:00
Redkale
f1fcbd7396 2020-06-04 22:22:35 +08:00
Redkale
681e389f19 2020-06-04 21:32:18 +08:00
Redkale
06b7274364 2020-06-04 20:56:45 +08:00
Redkale
b4f7de4858 2020-06-04 20:14:16 +08:00
Redkale
6261232ce6 2020-06-04 19:53:41 +08:00
Redkale
eb35b90950 2020-06-04 18:03:02 +08:00
Redkale
958cea4e0d 2020-06-04 17:56:13 +08:00
Redkale
7f184bae50 2020-06-04 17:25:42 +08:00
Redkale
3d68103a19 2020-06-04 17:09:30 +08:00
Redkale
612851bce0 2020-06-04 16:21:28 +08:00
Redkale
e365dae9e4 2020-06-04 14:06:35 +08:00
Redkale
b6d5fc02dc 2020-06-04 10:11:14 +08:00
Redkale
59d139ace2 2020-06-04 09:44:00 +08:00
Redkale
1d7a72f992 2020-06-04 09:39:38 +08:00
Redkale
45f2ce261e 2020-06-04 09:29:04 +08:00
Redkale
f79e49db5a 2020-06-03 23:21:57 +08:00
Redkale
218aebaa0f 2020-06-03 22:34:10 +08:00
Redkale
f11870d6bc 2020-06-03 20:06:48 +08:00
Redkale
ebea6bb92c 2020-06-03 19:58:13 +08:00
Redkale
4806d6ada0 2020-06-03 19:46:25 +08:00
Redkale
6909748bda 2020-06-03 19:26:38 +08:00
Redkale
982fc8440c 2020-06-03 17:53:55 +08:00
Redkale
e4df07a00c 2020-06-03 17:02:23 +08:00
Redkale
0ee30aca7e 2020-06-03 16:45:28 +08:00
Redkale
b994bcbcfb 2020-06-03 16:23:16 +08:00
Redkale
cc23b44409 2020-06-03 15:48:40 +08:00
Redkale
de36ef697d 2020-06-03 15:23:45 +08:00
Redkale
e0d224a330 2020-06-03 14:58:44 +08:00
Redkale
adc2106bec 2020-06-03 14:15:42 +08:00
Redkale
6cdbe957a7 2020-06-03 14:03:46 +08:00
Redkale
14808cb01c 2020-06-03 13:55:08 +08:00
Redkale
1edadbfee8 2020-06-03 12:03:04 +08:00
Redkale
043a23ecdf 2020-06-03 09:29:54 +08:00
Redkale
383ef37989 2020-06-02 23:18:36 +08:00
Redkale
9cd9a8d3ea 2020-06-02 09:56:01 +08:00
Redkale
db8c94f433 2020-06-01 21:19:47 +08:00
Redkale
22fb3e5bef 2020-06-01 13:44:34 +08:00
Redkale
6329722f17 2020-06-01 11:04:03 +08:00
Redkale
2dee61223d 2020-06-01 10:04:20 +08:00
Redkale
f83fc52e9c 2020-05-31 11:59:11 +08:00
Redkale
2f8a04c15d 2020-05-31 08:42:51 +08:00
Redkale
a1501af7a7 2020-05-30 19:55:07 +08:00
Redkale
a1fdfc9cc9 2020-05-30 17:59:28 +08:00
Redkale
2dddf3c2a5 2020-05-30 17:53:59 +08:00
Redkale
84061cf60f 2020-05-30 17:42:28 +08:00
Redkale
557c2c7858 2020-05-30 16:40:33 +08:00
Redkale
cb2d355bc9 2020-05-30 15:57:56 +08:00
Redkale
ed1b642d5b 2020-05-30 14:50:07 +08:00
Redkale
411f5e1951 2020-05-30 11:55:34 +08:00
Redkale
450506ca96 2020-05-30 11:32:16 +08:00
Redkale
bf700aa88f 2020-05-30 10:23:36 +08:00
Redkale
c108ab196c 2020-05-30 10:18:00 +08:00
Redkale
cac8662c01 2020-05-30 09:31:38 +08:00
Redkale
197c58ef98 2020-05-30 09:24:40 +08:00
Redkale
d4c2723759 删除MessageStreams 2020-05-29 23:18:59 +08:00
Redkale
c34a6d8f49 2020-05-29 22:34:53 +08:00
Redkale
5de580c00b 2020-05-29 21:04:00 +08:00
Redkale
ed1fb151d7 2020-05-29 16:06:02 +08:00
Redkale
4c4913c5d0 2020-05-29 13:43:47 +08:00
Redkale
adb0dc5963 2020-05-29 11:15:56 +08:00
Redkale
740bc8ae31 增加@RestUserid 废弃 HttpRequest.currentUser() 方法, 建议 HttpRequest.currentUserid() 2020-05-28 20:20:08 +08:00
Redkale
30a0b12020 2020-05-28 19:11:28 +08:00
Redkale
b0b8b0db3b 2020-05-28 11:40:03 +08:00
Redkale
71244732f2 2020-05-28 11:22:30 +08:00
Redkale
820af60c19 2020-05-28 10:03:13 +08:00
Redkale
b3252359bd 2020-05-28 09:55:05 +08:00
Redkale
9ade568597 2020-05-28 09:51:57 +08:00
Redkale
cf5224a5f6 2020-05-28 09:38:18 +08:00
Redkale
6c4a83d14d 2020-05-27 20:32:57 +08:00
Redkale
0439b95139 2020-05-27 19:18:48 +08:00
Redkale
72a618a0b7 2020-05-27 18:02:51 +08:00
Redkale
0f7520e67b 2020-05-27 17:10:23 +08:00
Redkale
fcd69474a2 2020-05-27 15:22:41 +08:00
Redkale
3130e00bab 2020-05-27 15:08:12 +08:00
Redkale
1c063b57ec 2020-05-27 15:01:36 +08:00
Redkale
efeff3b720 2020-05-27 14:21:01 +08:00
Redkale
ea15634f47 2020-05-27 12:00:32 +08:00
Redkale
e744d001c6 2020-05-27 11:49:44 +08:00
Redkale
06e486e5e2 2020-05-27 11:32:29 +08:00
Redkale
95180ffdef 2020-05-27 11:31:29 +08:00
Redkale
e5bd85e9aa 2020-05-27 11:23:07 +08:00
Redkale
ec4ec2ff77 2020-05-26 22:22:44 +08:00
Redkale
5a1c9215bc 2020-05-26 19:11:12 +08:00
Redkale
53457b73ad 加入MQ功能 2020-05-26 17:59:00 +08:00
Redkale
8cb9fcf01a 2020-05-22 19:45:57 +08:00
Redkale
2c88b0e75e 2020-05-22 16:49:45 +08:00
Redkale
4daffdc31f 2020-05-21 20:23:56 +08:00
Redkale
16dec2cde5 2020-05-17 23:37:22 +08:00
Redkale
82e5fb593e 2020-05-17 22:25:47 +08:00
Redkale
4a60ecb3ff 2020-05-17 22:11:34 +08:00
Redkale
38307405ed 2020-05-17 20:34:36 +08:00
Redkale
fe332d0cbd 2020-05-17 19:08:43 +08:00
Redkale
e45f75c1d6 2020-05-17 16:39:51 +08:00
Redkale
a77f450757 2020-05-17 15:49:32 +08:00
Redkale
9f8e946ea3 2020-05-16 22:40:41 +08:00
Redkale
7633687665 2020-05-16 22:24:37 +08:00
Redkale
a1e37643d0 2020-05-16 22:12:45 +08:00
Redkale
8440b58d6c 2020-05-16 20:34:03 +08:00
Redkale
a97f8efe21 2020-05-16 20:10:21 +08:00
Redkale
d83e7c22ac 2020-05-16 19:59:49 +08:00
Redkale
01a5b32b22 ClusterAgent 2020-05-16 17:51:30 +08:00
Redkale
8834f57582 2020-05-16 17:22:52 +08:00
Redkale
57fd7b96b4 $cluster 2020-05-16 17:03:55 +08:00
Redkale
14fe2fbc84 2020-05-16 14:46:11 +08:00
Redkale
0b86edb654 2020-05-16 14:27:46 +08:00
Redkale
07ab74902c 2020-05-16 14:27:08 +08:00
Redkale
e4c6e860c1 DataCallAttribute移至RpcCallAttribute 2020-05-16 09:12:06 +08:00
Redkale
02cf587fcf 2020-05-16 09:09:43 +08:00
Redkale
081773163b 2020-05-16 09:03:18 +08:00
Redkale
292ff63699 移除RpcMultiRun功能 2020-05-15 22:02:54 +08:00
Redkale
f1a97c0219 移除DataCacheListener功能 2020-05-15 21:53:21 +08:00
Redkale
e545010034 2020-05-15 17:36:19 +08:00
Redkale
ef57fa9a25 2020-05-15 15:01:18 +08:00
Redkale
1bd0d891a4 2020-05-15 14:39:29 +08:00
Redkale
9a51c1de1d Application加入nodeid属性 2020-05-15 14:38:53 +08:00
Redkale
e4bb75dd8e 2020-05-15 14:09:49 +08:00
Redkale
66e1e08ae2 2020-05-05 19:54:13 +08:00
Redkale
708cd5a644 修复DeMember/EnMember中attribute.type值不能精准显示泛型的bug 2020-05-04 22:12:25 +08:00
Redkale
138c9aba97 2020-05-04 20:59:28 +08:00
Redkale
e5e17b4496 2020-05-04 20:52:00 +08:00
Redkale
cadaebefb9 2020-05-04 20:21:49 +08:00
Redkale
e2fb7935f6 2020-05-04 20:02:18 +08:00
Redkale
16b3dab600 2020-05-04 19:51:19 +08:00
Redkale
758972890e 2020-04-17 11:08:30 +08:00
Redkale
a88285d935 回滚Mask convertFrom 方法 2020-04-16 22:08:14 +08:00
Redkale
d7832fb931 Convert增加convertFrom(final Type type, final ConvertMask mask, final byte[] bytes) 方法 2020-04-16 21:42:52 +08:00
Redkale
f073c9a0bc 2020-04-16 21:08:00 +08:00
Redkale
63ef83ec62 WebSocket支持permessage-deflate单向功能 2020-04-16 20:19:49 +08:00
1055 changed files with 169756 additions and 75362 deletions

36
.github/workflows/maven_check.yml vendored Normal file
View File

@@ -0,0 +1,36 @@
# This workflow will build a Java project with Maven, and cache/restore any dependencies to improve the workflow execution time
# For more information see: https://docs.github.com/en/actions/automating-builds-and-tests/building-and-testing-java-with-maven
# This workflow uses actions that are not certified by GitHub.
# They are provided by a third-party and are governed by
# separate terms of service, privacy policy, and support
# documentation.
name: Maven Check
on:
workflow_dispatch:
#push:
# branches: [ "main" ]
#pull_request:
# branches: [ "main" ]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Set up JDK 11
uses: actions/setup-java@v3
with:
java-version: '11'
distribution: 'temurin'
cache: maven
- name: Build with Maven
run: mvn -B package --file pom.xml
# Optional: Uploads the full dependency graph to GitHub to improve the quality of Dependabot alerts this repository can receive
- name: Update dependency graph
uses: advanced-security/maven-dependency-submission-action@571e99aab1055c2e71a1e2309b9691de18d6b7d6

35
.github/workflows/maven_snapshot.yml vendored Normal file
View File

@@ -0,0 +1,35 @@
name: Maven Snapshot
on:
workflow_dispatch:
jobs:
deploy:
runs-on: ubuntu-latest
strategy:
matrix:
java: [11]
name: Java ${{ matrix.java }} build
steps:
- uses: actions/checkout@v4
- name: Setup Java ${{ matrix.java }}
uses: actions/setup-java@v4
with:
java-version: ${{ matrix.java }}
distribution: 'temurin'
cache: maven
server-id: ossrh
server-username: MAVEN_USERNAME
server-password: MAVEN_PASSWORD
env:
MAVEN_USERNAME: ${{ secrets.OSSRHUSERNAME }}
MAVEN_PASSWORD: ${{ secrets.OSSRHPASSWORD }}
- name: Build with Maven
run: |
cp -fr my/pom.xml pom.xml
mvn --batch-mode -e -X clean deploy -DskipTests=true
env:
MAVEN_GPG_KEY: ${{ secrets.OSSRHGPGKEY }}
MAVEN_GPG_PASSPHRASE: ${{ secrets.OSSRHGPGPASSWORD }}

31
.gitignore vendored
View File

@@ -1,12 +1,19 @@
*.class
# Mobile Tools for Java (J2ME)
.mtj.tmp/
# Package Files #
*.jar
*.war
*.ear
# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml
hs_err_pid*
*.class
# Mobile Tools for Java (J2ME)
.mtj.tmp/
# Package Files #
*.jar
*.war
*.ear
# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml
hs_err_pid*
/target/
/.idea/
/redkale.iml
/ClientConnection.java
/nbactions.xml
/nb-configuration.xml
/my/target/

View File

@@ -1,27 +1,48 @@
<h1>项目介绍</h1>
<p>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Redkale (中文名: 红菜苔,一种湖北特产蔬菜) 是基于Java 8全新的微服务框架 包含HTTP、WebSocket、TCP/UDP、数据序列化、数据缓存、依赖注入等功能。 本框架致力于简化集中式和微服务架构的开发,在增强开发敏捷性的同时保持高性能。
</p>
<strong>RedKale 有如下主要特点:</strong>
<ol>
<li>大量使用Java 8新特性接口默认值、Stream、Lambda、JDk8内置的ASM等</li>
<li>提供HTTP服务同时内置JSON功能与限时缓存功能</li>
<li>TCP层完全使用NIO.2并统一TCP与UDP的接口换</li>
<li>提供分布式与集中式部署的无缝切换</li>
<li>提供类似JPA功能包含数据缓存自动同步、分表分库与简洁的数据层操作接口</li>
<li>可以动态修改已依赖注入的资源</li>
</ol>
# [Redkale 2.8](https://redkale.org) <img src="docs/images/logo.png" alt="redkale" width="100" align="right"/>
<strong>Redkale 设计理念</strong>
<p>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;作为一个全新的微服务框架Redkale在接口定义上使用了Java 8大量的新语法接口有默认实现、接口带静态方法、重复注解等特性同时在设计上与主流框架有很大不同。Redkale是按组件形式设计的而非以容器为主几乎每个子包都是能提供独立功能的组件。如Tomcat是按容器设计的所有web资源/配置由Tomcat控制开发者很能难控制到Tomcat内部而Redkale的HTTP服务只是个组件开发者既可以自己启动和配置HttpServer也可以把Redkale当成容器通过Redkale进程来初始化服务。Spring的Ioc容器也是如此Redkale提供的依赖注入仅通过ResouceFactory一个类来控制非常轻量并且可动态更改已注入的资源。Spring提倡控制反转思想而自身的容器却让开发者很难控制。Redkale是一个既能以组件形式也能以容器形式存在的框架。从整体上看Redkale的架构分两层接口和默认实现。开发者若想替换掉Redkale内置的HTTP服务而使用符合JavaEE规范的HttpServlet, 可以采用自定义协议基于JSR 340(Servlet 3.1)来实现自己的HTTP服务若想使用Hibernate作为数据库操作可以写一个自己的DataSource实现类JSON的序列化和反序列化也可以使用第三方的实现Memcached或Redis也可以作为另一个CacheSource的实现替换Redkale的默认实现。这其实包含了控制反转的思想让框架里的各个组件均可让开发者控制。<br/>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;与主流框架比功能上Redkale显得很简单这体现了Redkale的简易性而并非是不足从一个良好的设计习惯或架构上来看有些常用功能是不需要提供的如Redkale的HTTP服务不支持HTTPS和JSPHTTPS比HTTP多了一层加密解密这种密集型的计算不是Java的专长通常提供HTTP服务的架构不会将Java动态服务器放在最前端而是在前方会放nginx或apache除了负载均衡还能静动分离因此HTTPS的加解密应交给nginx这样的高性能服务器处理。Redkale再提供HTTPS服务就显得鸡肋。JSP其实算是一个落后的技术现在是一个多样化终端的时代终端不只局限于桌面程序和PC浏览器还有原生App、混合式App、微信端、移动H5、提供第三方接口等各种形式的终端这些都不是JSP能方便兼顾的而HTTP+JSON作为通用性接口可以避免重复开发模版引擎的功能加上各种强大的JS框架足以取代JSP。Redkale在功能上做了筛选不会为了迎合主流而提供而是以良好的设计思想为指导。这是Redkale的主导思维
</p>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<h5>详情请访问:&nbsp;&nbsp;&nbsp;&nbsp;<a href='https://redkale.org' target='_blank'>https://redkale.org</a></h5>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<h5>基本文档:&nbsp;&nbsp;&nbsp;&nbsp;<a href='https://redkale.org/articles.html' target='_blank'>https://redkale.org/articles.html</a></h5>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<h5>欢迎加入Redkale QQ群: 527523235</h5>
&nbsp;
## 简介
&emsp;&emsp;Redkale (中文名: 红菜苔,一种湖北特产蔬菜) 是基于Java 11全新的微服务框架 包含HTTP、WebSocket、TCP/UDP、数据序列化、数据缓存、依赖注入等功能。 本框架致力于简化集中式和微服务架构的开发,在增强开发敏捷性的同时保持高性能。
主要特点::
* 提供了动态依赖注入和动态字节码生成类功能
* 提供HTTP服务同时内置JSON功能与限时缓存功能
* TCP层完全使用NIO并统一TCP与UDP的接口换
* 提供分布式与集中式部署的无缝切换
* 提供类似JPA功能包含数据缓存自动同步、分表分库与简洁的数据层操作接口
* 提供了MQ消息消费与生产简洁化API
## 版本
```xml
<dependency>
<groupId>org.redkale</groupId>
<artifactId>redkale</artifactId>
<version>2.8.0</version>
</dependency>
```
## 开发文档
* [快速入门](docs/quick-start.md)
* [Service组件](docs/service.md)
* [序列化](docs/convert.md)
* [DB数据源组件](docs/datasource.md)
* [Cache数据源组件](docs/cachesource.md)
* [WebSocket](docs/websocket.md)
* [native-image](docs/native-image.md)
* [方法缓存Cached](docs/cached.md)
* [定时任务Scheduled](docs/scheduled.md)
* [消息队列MQ](docs/agent-message.md)
* [基本配置](docs/config.md)
* [FAQ](docs/faq.md)
## 设计理念
&emsp;&emsp;作为一个全新的微服务框架Redkale在接口定义上使用了默认实现、接口带静态方法、重复注解等特性同时在设计上与主流框架有很大不同。Redkale是按组件形式设计的而非以容器为主几乎每个子包都是能提供独立功能的组件。如Tomcat是按容器设计的所有web资源/配置由Tomcat控制开发者很能难控制到Tomcat内部而Redkale的HTTP服务只是个组件开发者既可以自己启动和配置HttpServer也可以把Redkale当成容器通过Redkale进程来初始化服务。Spring的Ioc容器也是如此Redkale提供的依赖注入仅通过ResouceFactory一个类来控制非常轻量并且可动态更改已注入的资源。Spring提倡控制反转思想而自身的容器却让开发者很难控制。Redkale是一个既能以组件形式也能以容器形式存在的框架。从整体上看Redkale的架构分两层接口和默认实现。开发者若想替换掉Redkale内置的HTTP服务而使用符合JavaEE规范的HttpServlet, 可以采用自定义协议基于JSR 340(Servlet 3.1)来实现自己的HTTP服务若想使用Hibernate作为数据库操作可以写一个自己的DataSource实现类JSON的序列化和反序列化也可以使用第三方的实现Memcached或Redis也可以作为另一个CacheSource的实现替换Redkale的默认实现。这其实包含了控制反转的思想让框架里的各个组件均可让开发者控制。
&emsp;&emsp;与主流框架比功能上Redkale显得很简单这体现了Redkale的简易性而并非是不足从一个良好的设计习惯或架构上来看有些常用功能是不需要提供的如Redkale的HTTP服务不支持JSP, JSP其实算是一个落后的技术现在是一个多样化终端的时代终端不只局限于桌面程序和PC浏览器还有原生App、混合式App、微信端、移动H5、提供第三方接口等各种形式的终端这些都不是JSP能方便兼顾的而HTTP+JSON作为通用性接口可以避免重复开发模版引擎的功能加上各种强大的JS框架足以取代JSP。Redkale在功能上做了筛选不会为了迎合主流而提供而是以良好的设计思想为指导。这是Redkale的主导思维。
&emsp;&emsp;&emsp;<b>详情请访问:&emsp;&emsp;<a href='https://redkale.org' target='_blank'>https://redkale.org</a></b>
&emsp;&emsp;&emsp;<b>基本文档:&emsp;&emsp;<a href='https://redkale.org/articles.html' target='_blank'>https://redkale.org/articles.html</a></b>
&emsp;&emsp;&emsp;<b>欢迎加入Redkale QQ群: 527523235</b>
&nbsp;

View File

@@ -1,7 +0,0 @@
@ECHO OFF
SET APP_HOME=%~dp0
IF NOT EXIST "%APP_HOME%\conf\application.xml" SET APP_HOME=%~dp0..
java -DCMD=APIDOC -DAPP_HOME="%APP_HOME%" -classpath "%APP_HOME%"\lib\* org.redkale.boot.Application

7
bin/apidoc.cmd Normal file
View File

@@ -0,0 +1,7 @@
@ECHO OFF
SET APP_HOME=%~dp0
IF NOT EXIST "%APP_HOME%\conf\application.xml" SET APP_HOME=%~dp0..
java -DAPP_HOME="%APP_HOME%" -classpath "%APP_HOME%"\lib\* org.redkale.boot.Application apidoc

View File

@@ -15,4 +15,4 @@ do
done
export CLASSPATH=$CLASSPATH:$lib
echo "$APP_HOME"
java -DCMD=APIDOC -DAPP_HOME="$APP_HOME" org.redkale.boot.Application
java -DAPP_HOME="$APP_HOME" org.redkale.boot.Application apidoc

View File

@@ -1,8 +1,7 @@
@ECHO OFF
SET APP_HOME=%~dp0
IF NOT EXIST "%APP_HOME%\conf\application.xml" SET APP_HOME=%~dp0..
java -DAPP_HOME="%APP_HOME%" -classpath "%APP_HOME%"\lib\* org.redkale.boot.Application
java -DAPP_HOME="%APP_HOME%" -classpath "%APP_HOME%"\lib\* org.redkale.boot.Application %*

23
bin/redkale.sh Normal file
View File

@@ -0,0 +1,23 @@
#!/bin/sh
export LC_ALL="zh_CN.UTF-8"
APP_HOME=`dirname "$0"`
cd "$APP_HOME"/..
APP_HOME=`pwd`
if [ ! -f "$APP_HOME"/conf/application.xml ]; then
APP_HOME="$APP_HOME"/..
fi
lib="$APP_HOME"/lib
for jar in `ls $APP_HOME/lib/*.jar`
do
lib=$lib:$jar
done
export CLASSPATH=$CLASSPATH:$lib
echo "$APP_HOME"
java -DAPP_HOME="$APP_HOME" org.redkale.boot.Application $@ &

View File

@@ -4,6 +4,6 @@ SET APP_HOME=%~dp0
IF NOT EXIST "%APP_HOME%\conf\application.xml" SET APP_HOME=%~dp0..
call "%APP_HOME%\bin\shutdown.bat"
call "%APP_HOME%\bin\shutdown.cmd"
call "%APP_HOME%\bin\start.bat"
call "%APP_HOME%\bin\start.cmd"

8
bin/start.cmd Normal file
View File

@@ -0,0 +1,8 @@
@ECHO OFF
SET APP_HOME=%~dp0
IF NOT EXIST "%APP_HOME%\conf\application.xml" SET APP_HOME=%~dp0..
java -server -DAPP_HOME="%APP_HOME%" -classpath "%APP_HOME%"\lib\* org.redkale.boot.Application

View File

@@ -24,5 +24,5 @@ done
export CLASSPATH=$CLASSPATH:$lib
echo "$APP_HOME"
nohup java -DAPP_HOME="$APP_HOME" org.redkale.boot.Application > "$APP_HOME"/logs.out &
nohup java -server -DAPP_HOME="$APP_HOME" org.redkale.boot.Application > "$APP_HOME"/logs.out &

View File

@@ -1,19 +1,16 @@
<?xml version="1.0" encoding="UTF-8"?>
<application port="2121">
<!-- 详细配置说明见: http://redkale.org/redkale.html#redkale_confxml -->
<resources>
</resources>
<application nodeid="10000" port="2020">
<server protocol="HTTP" port="6060">
<properties load="config.properties">
<property name="system.property.redkale.convert.protobuf.enumtostring" value="true"/>
</properties>
<server protocol="HTTP" port="5050">
<request>
<remoteaddr value="request.headers.X-RemoteAddress"/>
</request>
<response>
<defcookie domain="" path="/"/>
<addheader name="Access-Control-Allow-Origin" value="request.headers.Origin" />
@@ -24,10 +21,9 @@
<filters autoload="true"/>
<rest path="/pipes" /> <!-- base指定的自定义HttpServlet子类必须标记@HttpUserType, 不设置base则视为没有当前用户信息设置 -->
<servlets path="/pipes" autoload="true" />
<rest path="/pipes" />
<servlets path="/pipes" autoload="true" />
</server>
</application>

2
conf/config.properties Normal file
View File

@@ -0,0 +1,2 @@
#

View File

@@ -18,8 +18,8 @@ java.util.logging.FileHandler.level = FINER
java.util.logging.FileHandler.limit = 10M
java.util.logging.FileHandler.count = 20
java.util.logging.FileHandler.encoding = UTF-8
java.util.logging.FileHandler.pattern = ${APP_HOME}/logs-%m/log-%d.log
java.util.logging.FileHandler.unusual = ${APP_HOME}/logs-%m/log-warnerr-%d.log
java.util.logging.FileHandler.pattern = ${APP_HOME}/logs-%tY%tm/log-%tY%tm%td.log
java.util.logging.FileHandler.unusual = ${APP_HOME}/logs-%tY%tm/log-warnerr-%tY%tm%td.log
java.util.logging.FileHandler.append = true
java.util.logging.ConsoleHandler.level = FINEST

View File

@@ -1,34 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
<persistence-unit name="" transaction-type="RESOURCE_LOCAL">
<shared-cache-mode>ALL</shared-cache-mode>
<properties>
<property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/center?autoReconnect=true&amp;characterEncoding=utf8"/>
<property name="javax.persistence.jdbc.user" value="root"/>
<property name="javax.persistence.jdbc.password" value="1234"/>
</properties>
</persistence-unit>
<!--
<persistence-unit name="user.read" transaction-type="RESOURCE_LOCAL">
<shared-cache-mode>ALL</shared-cache-mode>
<properties>
<property name="javax.persistence.jdbc.url" value="jdbc:oracle:thin:@localhost:1521:orcl"/>
<property name="javax.persistence.jdbc.user" value="system"/>
<property name="javax.persistence.jdbc.password" value="1234"/>
</properties>
</persistence-unit>
<persistence-unit name="user.write" transaction-type="RESOURCE_LOCAL">
<shared-cache-mode>ALL</shared-cache-mode>
<properties>
<property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/center?characterEncoding=utf8&useSSL=false&serverTimezone=UTC&rewriteBatchedStatements=true"/>
<property name="javax.persistence.jdbc.user" value="root"/>
<property name="javax.persistence.jdbc.password" value="1234"/>
</properties>
</persistence-unit>
-->
</persistence>

22
conf/source.properties Normal file
View File

@@ -0,0 +1,22 @@
############ DataSource @Resource(name="platf") ############
#redkale.datasource[platf].url = jdbc:mysql://127.0.0.1:3306/platf?allowPublicKeyRetrieval=true&amp;rewriteBatchedStatements=true&amp;serverTimezone=UTC&amp;characterEncoding=utf8
#redkale.datasource[platf].user = root
#redkale.datasource[platf].password = 12345678
### true: auto ddl;
#redkale.datasource[platf].table-autoddl = true
############ DataSource @Resource(name="user") ############
#redkale.datasource[user].read.url = jdbc:mysql://127.0.0.1:3306/user_r?allowPublicKeyRetrieval=true&amp;rewriteBatchedStatements=true&amp;serverTimezone=UTC&amp;characterEncoding=utf8
#redkale.datasource[user].read.user = root
#redkale.datasource[user].read.password = 12345678
#redkale.datasource[user].write.url = jdbc:mysql://127.0.0.1:3306/user_w?allowPublicKeyRetrieval=true&amp;rewriteBatchedStatements=true&amp;serverTimezone=UTC&amp;characterEncoding=utf8
#redkale.datasource[user].write.user = root
#redkale.datasource[user].write.password = 12345678
############ CacheSource @Resource(name="usersession") ############
#redkale.cachesource[usersession].node[0].url = redis://127.0.0.1:6363
#redkale.cachesource[usersession].node[0].password = 12345678
#redkale.cachesource[usersession].node[0].db = 0

2
docs/agent-cluster.md Normal file
View File

@@ -0,0 +1,2 @@
# 服务管理
文档完善中……

104
docs/agent-message.md Normal file
View File

@@ -0,0 +1,104 @@
# 消息队列
&emsp;&emsp; MessageAgent是消息中心抽象接口。
## 配置
```xml
<mq name="mymq" type="kafka">
<servers value="127.0.0.1:9092"/>
<consumer autoload="true"/>
</mq>
```
## 消费消息
&emsp;&emsp; 通过```@ResourceConsumer```和```MessageConsumer```接口实现消费
```java
@ResourceConsumer(mq = "mymq", topics = "test_bean_topic")
public class TestMessageConsumer implements MessageConsumer<TestBean> {
@Override
public void init(AnyValue config) {
System.out.println("执行 TestMessageConsumer.init");
}
@Override
public void onMessage(MessageEvent<TestBean>[] events) {
for (MessageEvent<TestBean> event : events) {
System.out.println("消费消息, message: " + event.getMessage());
}
}
@Override
public void destroy(AnyValue config) {
System.out.println("执行 TestMessageConsumer.destroy");
}
}
```
&emsp;&emsp;通过Service里标记```@Messaged```的方法实现消费, 方法只能是```protected```或```public``` 不能是```final```、```static```。
```java
public class TestMessageService extends AbstractService {
@Messaged(mq = "mymq", topics = "test_bean_topic")
protected void runMessage(MessageEvent<TestBean>[] events) {
for (MessageEvent<TestBean> event : events) {
System.out.println("消费消息, message: " + event.getMessage());
}
}
}
```
&emsp;&emsp;通过```@Component```的Service里标记```@Messaged```的方法实现消费, 方法只能是```public```。
```java
@Component
public final class TestMessageService extends AbstractService {
@Messaged(mq = "mymq", topics = "test_bean_topic")
public int runMessage(MessageEvent<TestBean>[] events) {
for (MessageEvent<TestBean> event : events) {
System.out.println("消费消息, message: " + event.getMessage());
}
return 0;
}
}
```
## 生产消息
&emsp;&emsp;通过```@Component```的Service里标记```@Messaged```的方法实现消费, 方法只能是```public```。
```java
@Component
public class TestMessageService extends AbstractService {
@ResourceProducer(mq = "mymq")
private MessageProducer producer;
public void sendMessage() {
TestBean bean = new TestBean(12345, "this is a message");
System.out.println("生产消息: " + bean);
producer.sendMessage("test_bean_topic", bean);
}
}
```
## Topic管理
&emsp;&emsp;通过```MessageManager```操作topic。
```java
public class TestMessageManager extends AbstractService {
@Resource(name = "mymq")
private MessageManager manager;
// 创建topic
public void initTopic() {
manager.createTopic("topic_1", "topic_2").join();
}
// 删除topic
public void deleteTopic() {
manager.deleteTopic("topic_1", "topic_2").join();
}
// 查询topic
public void printTopic() {
List<String> topics = manager.queryTopic().join();
}
}
```

2
docs/agent-properties.md Normal file
View File

@@ -0,0 +1,2 @@
# 配置中心
文档完善中……

123
docs/cached.md Normal file
View File

@@ -0,0 +1,123 @@
# 方法缓存
&emsp;&emsp;@Cached注解在Service的方法上,实现对方法结果进行缓存。
&emsp;&emsp;&emsp;&emsp; 1、返回类型不能是```void```/```CompletableFuture<Void>```<br>
&emsp;&emsp;&emsp;&emsp; 2、返回类型必须是可json序列化的 <br>
&emsp;&emsp;&emsp;&emsp; 3、修饰必须是```protected```/```public``` <br>
&emsp;&emsp;&emsp;&emsp; 4、修饰不能是```final```/```static``` <br>
&emsp;&emsp;本地缓存和远程缓存可同时设置,```expire```设置为0表示永不过期, 支持异步方法(返回类型为```CompletableFuture```)。
## 属性说明
|属性|默认值|说明|
| --- | --- | --- |
|name|未定义|缓存的名称|
|key|未定义|缓存的key支持参数动态组合比如"key_#{id}"|
|manager|空|缓存管理器名称, 不能含有':'、'#'、'@'字符|
|localLimit|-1|本地缓存数量上限, 小于1表示无上限。 <br> 参数值支持方式:<br> &emsp;100: 设置数值 <br> &emsp;${env.cache.limit}: 读取系统配置项 |
|localExpire|-1|本地缓存过期时长, 0表示永不过期 -1表示不作本地缓存。 <br> 参数值支持方式:<br> &emsp;100: 设置数值 <br> &emsp;${env.cache.expires}: 读取系统配置项 |
|remoteExpire|-1|远程缓存过期时长, 0表示永不过期 -1表示不作远程缓存。 <br> 参数值支持方式:<br> &emsp;100: 设置数值 <br> &emsp;${env.cache.expires}: 读取系统配置项 |
|nullable|false|是否可以缓存null值|
|timeUnit|```TimeUnit.SECONDS```|时间单位TimeUnit|
|comment|未定义|备注描述|
|mode|```LoadMode.ANY```|作用于Service模式默认值为ANY作用于所有模式Service<br> LOCAL: 表示远程模式的Service对象中的缓存功能不起作用|
## 基本用法
&emsp;&emsp;将结果进行本地缓存30秒且远程缓存60秒
```java
@Cached(name = "name", key = "name", localExpire = "30", remoteExpire = "60")
public String getName() {
return "haha";
}
```
&emsp;&emsp;以参数code为key将结果进行本地缓存(时长由环境变量```env.cache.expire```配置没配置采用默认值30秒)
```java
@Cached(name = "name", key = "#{code}", localExpire = "${env.cache.expire:30}")
public CompletableFuture<String> getNameAsync(String code) {
return redis.getStringAsync(code);
}
```
&emsp;&emsp;以参数code+map.id为key将结果进行远程缓存60毫秒
```java
@Resource
private CachedManager cachedManager;
//实时修改远程缓存的key值
public void updateName(String code, Map<String, Long> map) {
cachedManager.remoteSetString("name", code + "_" + map.get("id"), code + "-" + map, Duration.ofMillis(60));
}
@Cached(name = "name", key = "#{code}_#{map.id}", remoteExpire = "60", timeUnit = TimeUnit.MILLISECONDS)
public String getName(String code, Map<String, Long> map) {
return code + "-" + map;
}
```
## 动态调整缓存时长
&emsp;&emsp;使用```@Resource```注入多个```CachedManager```
```java
@Resource
private CachedManager cachedManager;
@Cached(name = "name", key = "#{code}_#{map.id}", remoteExpire = "60", timeUnit = TimeUnit.MILLISECONDS)
public String getName(String code, Map<String, Long> map) {
return code + "-" + map;
}
public void updateExpire() {
Duration expire = Duration.ofMillis(600);
cachedManager.acceptCachedAction("name", action -> {
//将缓存时长改成600毫秒并开启本地缓存
action.setLocalExpire(expire);
action.setRemoteExpire(expire);
});
}
```
## 缓存配置
```xml
<!--
全局Serivce的缓存设置没配置该节点将自动创建一个。
name: 缓存管理器的名称, 默认: ""
enabled 是否开启缓存功能。默认: true
remote: 远程CacheSource的资源名
broadcastable: 存在远程CacheSource时修改数据是否进行广播到其他集群服务中。默认: true
-->
<cached name="" enabled="true" remote="xxx" broadcastable="true"/>
```
## 多缓存器
```xml
<cached name="" enabled="true" remote="redis_1" broadcastable="true"/>
<cached name="backup" enabled="true" remote="redis_2" broadcastable="true"/>
```
&emsp;&emsp;使用```@Resource```注入多个```CachedManager```
```java
//第一个缓存器
@Resource
private CachedManager cachedManager;
//第二个缓存器
@Resource(name = "backup")
private CachedManager cachedManager2;
//第一个缓存器实时修改远程缓存的key值
public void updateName(String code, Map<String, Long> map) {
cachedManager.remoteSetString("name", code + "_" + map.get("id"), code + "-" + map, Duration.ofMillis(60));
}
//使用第一个缓存器
@Cached(name = "name", key = "#{code}_#{map.id}", remoteExpire = "60", timeUnit = TimeUnit.MILLISECONDS)
public String getName(String code, Map<String, Long> map) {
return code + "-" + map;
}
//使用第二个缓存器
@Cached(manager = "backup", name = "name", key = "#{code}_#{map.id}_2", remoteExpire = "60", timeUnit = TimeUnit.MILLISECONDS)
public String getName2(String code, Map<String, Long> map) {
return code + "-" + map;
}
```

58
docs/cachesource.md Normal file
View File

@@ -0,0 +1,58 @@
# 缓存组件 CacheSource
&emsp;&emsp;```CachedCacheSource```是框架主要的缓存组件主要提供redis和内存两大实现接口大部分与redis命令保持一致。
## 使用CacheSouce存放登录会话
```java
public class UserService implements Service {
//用户简单信息缓存
private final Map<Integer, UserInfo> users = new ConcurrentHashMap<>();
//使用CacheSource必须要指明泛型
@Resource(name = "usersessions")
protected CacheSource sessions;
//登录
public RetResult<UserInfo> login(LoginBean bean) { //bean.sessionid 在接入层进行赋值
UserInfo user = null;
// 登陆逻辑 user = ...
users.put(user.getUserid(), user);
sessions.setLong(600, bean.getSessionid(), user.getUserid()); //session过期时间设置为10分钟
return new RetResult<>(user);
}
//获取当前用户信息
public UserInfo current(String sessionid) { //给HTTP的BaseServlet用
Long userid = sessions.getexLong(sessionid, 600);
return userid == null ? null : users.get(userid.intValue());
}
//注销
public void logout(String sessionid) {
sessions.del(sessionid);
}
}
```
## source.properties 配置说明
```
# usersession为@Resource.name值
# type可以不用设置框架会根据url判断使用哪个CacheSource实现类
redkale.cachesource.usersession.type = org.redkalex.cache.redis.RedisCacheSource
# 最大连接数
redkale.cachesource.usersession.maxconns = 16
# 节点地址
redkale.cachesource.usersession.nodes = redis://127.0.0.1:6363
# 节点密码
redkale.cachesource.usersession.password = 12345678
# 节点db
redkale.cachesource.usersession.db = 0
#简化写法: 可以不用.node[0], 将参数都合并到url中
redkale.cachesource.usersession.url = redis://user:123456@127.0.0.1:6363?db=0
@Resource.name=""的CacheSource
redkale.cachesource.nodes = redis://127.0.0.1:6363
redkale.cachesource.password = 12345678
```

463
docs/config.md Normal file
View File

@@ -0,0 +1,463 @@
# 配置说明
# application.xml 配置:
```xml
<!--
文件说明:
${APP_HOME} 指当前程序的根目录APP_HOME
没注明唯一的节点可多个存在
required 被声明required的属性值不能为空
-->
<!--
nodeid: int 进程的节点ID用于分布式环境一个系统中节点ID必须全局唯一使用cluster时框架会进行唯一性校验
name: 进程的名称,用于监控识别,命名规则: 字母、数字、下划线、短横、点
address: 本地局域网的IP地址 默认值为默认网卡的ip当不使用默认值需要指定值如192.168.1.22
port: required 程序的管理Server的端口用于关闭或者与监管系统进行数据交互
lib: 加上额外的lib路径,多个路径用分号;隔开; 默认为空。 例如: ${APP_HOME}/lib/a.jar;${APP_HOME}/lib2/b.jar;
-->
<application nodeid="1000" port="6560" lib="">
<!--
【节点全局唯一】 @since 2.3.0
全局Serivce执行的线程池 Application.workExecutor, 没配置该节点将自动创建一个。
threads 线程数,默认值: CPU核数*10, 核数=2的情况下默认值为20。值为0表示不启用workExecutor都在IO线程中运行。
clients client回调函数运行的线程池大小 默认值: CPU核数*4
-->
<executor threads="4"/>
<!--
【节点全局唯一】 @since 2.8.0
全局Serivce的定时任务设置没配置该节点将自动创建一个。
enabled 是否开启缓存功能。默认: true
-->
<scheduled enabled="true"/>
<!--
@since 2.8.0
全局Serivce的缓存设置没配置该节点将自动创建一个。
name: 缓存管理器的名称, 默认: ""
enabled 是否开启缓存功能。默认: true
remote: 远程CacheSource的资源名
broadcastable: 存在远程CacheSource时修改数据是否进行广播到其他集群服务中。默认: true
-->
<cached name="" enabled="true" remote="xxx" broadcastable="true"/>
<!--
【节点全局唯一】
第三方服务发现管理接口
type 类名必须是org.redkale.cluster.ClusterAgent的子类
waits: 注销服务后是否需要等待检查周期时间后再进行Service销毁默认值为false
当一个Service进行服务注销后不能立刻销毁Service因为健康检测是有间隔时间差的
需要等待一个健康检测周期时间,让其他进程都更新完服务列表。
如果使用MQ可以设置为false如果对服务健壮性要求高建议设置为true
protocols: 服务发现可以处理的协议, 默认值为: SNCP, 多个协议用分号;隔开
ports: 服务发现可以处理的端口, 多个端口用分号;隔开
ttls: 心跳频率,多少秒一次
xxxx: 自定义的字段属性例如CacheClusterAgent有source字段; ConsulClusterAgent有apiurl字段;
-->
<cluster type="org.redkalex.cluster.consul.ConsulClusterAgent" waits="false" protocols="SNCP" ports="7070;7071" xxx="xxx" />
<!--
MQ管理接口配置
不同MQ节点所配置的MQ集群不能重复。
MQ跟着协议走所以mq的属性值需要被赋值在rest节点上, 由于SncpServlet是自动生成的故SNCP协议下mq属性值被赋值在service/services节点上
name: 服务的名称用于监控识别多个mq节点时只能有一个name为空的节点mq.name不能重复,命名规则: 字母、数字、下划线
type 实现类名必须是org.redkale.mq.MessageAgent的子类
threads 线程数为0表示使用workExecutor。默认: CPU核数, 核数=1的情况下默认值为2JDK 21以上版本默认使用虚拟线程池
rpcfirstcluster和mq同名组件时HttpRpcClient优先使用MQ默认不优先走MQ。
coder: MessageRecord的解析器类必须是org.redkale.mq.MessageCoder<MessageRecord>的实现类,
可对数据包进行加密解密默认值org.redkale.mq.MessageRecordCoder
MQ节点下的子节点配置没有固定格式, 根据MessageAgent实现方的定义来配置
-->
<mq name="" type="org.redkalex.mq.kafka.KafkaMessageAgent" rpcfirst="false" threads="4">
<servers value="127.0.0.1:9101"/>
<!--
加载所有的MessageConsumer实例;
autoload="true" 默认值. 自动加载classpath下所有的MessageConsumer类
autoload="false" 需要显著的指定MessageConsumer类
includes 当autoload="true" 拉取类名与includes中的正则表达式匹配的类, 多个正则表达式用分号;隔开
excludes 当autoload="true" 排除类名与excludes中的正则表达式匹配的类, 多个正则表达式用分号;隔开
-->
<consumer autoload="true" includes="" excludes=""/>
<!--
MQ实现方的配置项
type: 配置项类型值只能是consumer或producer
-->
<config type="consumer">
<property name="xxxxxx" value="XXXXXXXX"/>
</config>
<config type="producer">
<property name="xxxxxx" value="XXXXXXXX"/>
</config>
</mq>
<!--
一个组包含多个node 同一Service服务可以由多个进程提供这些进程称为一个GROUP且同一GROUP内的进程必须在同一机房或局域网内
name: 服务组ID长度不能超过11个字节. 默认为空字符串。 注意: name不能包含$符号。
protocol 值范围UDP TCP 默认TCP
nodes: 多个node节点值 例如:192.168.0.1:6060,192.168.0.2:6060
注意: 一个node只能所属一个group。只要存在protocol=SNCP的Server节点信息 就必须有group节点信息。
-->
<group name="" protocol="TCP" nodes="192.168.0.1:6060,192.168.0.2:6060">
<!--
需要将本地node的addr与port列在此处, 也可以直接用nodes属性。
同一个<node>节点值只能存在一个<group>节点内即同一个addr+port只能属于一个group。
addr: required IP地址
port: required 端口
-->
<node addr="127.0.0.1" port="7070"/>
</group>
<!--
Application启动的监听事件,可配置多个节点
value: 类名必须是ApplicationListener的子类
-->
<listener value="org.redkalex.xxx.XXXApplicationListener"/>
<!--
【节点全局唯一】
全局的参数配置, 可以通过@Resource(name="property.xxxxxx") 进行注入<property>的信息, 被注解的字段类型只能是String、primitive class
如果name是system.property.开头的值将会在进程启动时进行System.setProperty("yyyy", "YYYYYY")操作。
如果name是mimetype.property.开头的值将会在进程启动时进行MimeType.add("yyyy", "YYYYYY")操作。
先加载子节点property再加载load文件 最后加载agent的实现子类。
load: 加载文件,多个用;隔开。
其他属性: 供org.redkale.boot.PropertiesAgentProvider使用判断
默认置入的system.property.的有:
System.setProperty("redkale.convert.pool.size", "128");
System.setProperty("redkale.convert.writer.buffer.defsize", "4096");
<properties>节点下也可包含非<property>节点.
非<property>其节点可以通过@Resource(name="properties.xxxxxx")进行注入, 被注解的字段类型只能是AnyValue、AnyValue[]
-->
<properties load="config.properties">
<property name="system.property.yyyy" value="YYYYYY"/>
<property name="xxxxxx" value="XXXXXXXX"/>
<property name="xxxxxx" value="XXXXXXXX"/>
<property name="xxxxxx" value="XXXXXXXX"/>
</properties>
<!--
protocol: required server所启动的协议Redkale内置的有HTTP、SNCP、WATCH。协议均使用TCP实现; WATCH服务只能存在一个。
name: 服务的名称用于监控识别一个配置文件中的server.name不能重复,命名规则: 字母、数字、下划线
host: 服务所占address 默认: 0.0.0.0
port: required 服务所占端口
root: 如果是web类型服务则包含页面 默认:{APP_HOME}/root
lib: server额外的class目录 默认为${APP_HOME}/libs/*;
charset: 文本编码, 默认: UTF-8
backlog: 默认10K
maxconns 最大连接数, 小于1表示无限制 默认: 0
maxbody: request.body最大值 默认: 256K
bufferCapacity: ByteBuffer的初始化大小 TCP默认: 32K; (HTTP 2.0、WebSocket必须要16k以上); UDP默认: 8K
bufferPoolSize ByteBuffer池的大小默认: 线程数*4
responsePoolSize Response池的大小默认: 1024
aliveTimeoutSeconds: KeepAlive读操作超时秒数 默认30 0表示永久不超时; -1表示禁止KeepAlive
readTimeoutSeconds: 读操作超时秒数, 默认0 0表示永久不超时
writeTimeoutSeconds: 写操作超时秒数, 默认0 0表示永久不超时
interceptor: 启动/关闭NodeServer时被调用的拦截器实现类必须是org.redkale.boot.NodeInterceptor的子类默认为null
-->
<server protocol="HTTP" host="127.0.0.1" port="6060" root="root" lib="">
<!--
【节点在<server>中唯一】
builder: 创建SSLContext的实现类, 可自定义必须是org.redkale.net.SSLBuilder的子类
sslProvider: java.security.Provider自定义的实现类如第三方: org.conscrypt.OpenSSLProvider、org.bouncycastle.jce.provider.BouncyCastleProvider
jsseProvider: java.security.Provider自定义的实现类如第三方: org.conscrypt.JSSEProvider、 org.bouncycastle.jce.provider.BouncyCastleJsseProvider
protocol: TLS版本默认值: TLS
protocols: 设置setEnabledProtocols, 多个用,隔开 如: TLSv1.2,TLSv1.3
clientAuth: WANT/NEED/NONE, 默认值: NONE
ciphers: 设置setEnabledCipherSuites, 多个用,隔开 如: TLS_RSA_WITH_AES_128_CBC_SHA256,TLS_RSA_WITH_AES_256_CBC_SHA256
keystorePass: KEY密码
keystoreFile: KEY文件 .jks
keystoreType: KEY类型 默认值为JKS
keystoreAlgorithm: KEY文件的algorithm 默认值为SunX509
truststorePass: TRUST密码
truststoreFile: TRUST文件
truststoreType: TRUST类型 默认值为JKS
truststoreAlgorithm: TRUST文件的algorithm 默认值为SunX509
-->
<ssl builder=""/>
<!--
加载所有的Service服务;
在同一个进程中同一个name同一类型的Service将共用同一个实例
autoload="true" 默认值. 自动加载classpath下所有的Service类
autoload="false" 需要显著的指定Service类
mq: 所属的MQ管理器当 protocol == SNCP 时该值才有效, 存在该属性表示Service的SNCP协议采用消息总线代理模式
includes 当autoload="true" 拉取类名与includes中的正则表达式匹配的类, 多个正则表达式用分号;隔开
excludes 当autoload="true" 排除类名与excludes中的正则表达式匹配的类, 多个正则表达式用分号;隔开
group: 所属组的节点, 不能指定多个group, 如果配置文件中存在多个SNCP协议的Server节点需要显式指定group属性.
当 protocol == SNCP 时 group表示当前Server与哪些节点组关联。
当 protocol != SNCP 时 group只能是空或者一个group的节点值。
特殊值"$remote", 视为通过第三方服务注册发现管理工具来获取远程模式的ip端口信息
-->
<services autoload="true" includes="" excludes="">
<!-- 显著加载指定的Service的接口类 -->
<service value="com.xxx.XXX1Service"/>
<!--
name: 显式指定name覆盖默认的空字符串值。 注意: name不能包含$符号。
mq: 所属的MQ管理器当 protocol == SNCP 时该值才有效, 存在该属性表示Service的SNCP协议采用消息总线代理模式
group: 显式指定group覆盖<services>节点的group默认值。
ignore: 是否禁用, 默认为false。
-->
<service value="com.xxx.XXX2Service" name="" group="xxx"/>
<!-- 给Service增加配置属性 -->
<service value="com.xxx.XXX1Service">
<!-- property值在public void init(AnyValue conf)方法中可以通过AnyValue properties=conf.getAnyValue("properties")获取 -->
<property name="xxxxxx" value="XXXXXXXX"/>
<property name="xxxxxx" value="XXXXXXXX"/>
</service>
</services>
<!--
加载所有的Filter服务;
autoload="true" 默认值.
autoload="false" 需要显著的指定Filter类
includes 当autoload="true" 拉取类名与includes中的正则表达式匹配的类, 多个正则表达式用分号;隔开
excludes 当autoload="true" 排除类名与excludes中的正则表达式匹配的类, 多个正则表达式用分号;隔开
-->
<filters autoload="true" includes="" excludes="">
<!--
显著加载指定的Filter类
value=: Filter类名。必须与Server的协议层相同HTTP必须是HttpFilter
ignore: 是否禁用, 默认为false。
-->
<!-- 显著加载指定的Filter类 -->
<filter value="com.xxx.XXX1Filter"/>
<!-- 给Filter增加配置属性 -->
<filter value="com.xxx.XXX12Filter">
<!-- property值在public void init(AnyValue conf)方法中可以通过AnyValue properties=conf.getAnyValue("properties")获取 -->
<property name="xxxxxx" value="XXXXXXXX"/>
<property name="xxxxxx" value="XXXXXXXX"/>
</filter>
</filters>
<!--
REST的核心配置项
当Server为HTTP协议时, rest节点才有效。存在[rest]节点则Server启动时会加载REST服务, 节点可以多个,(WATCH协议不需要设置系统会自动生成)
path: servlet的ContextPath前缀 默认为空 【注: 开启MQ时,该字段失效】
base: REST服务的BaseServlet必须是 org.redkale.net.http.HttpServlet 的子类,且子类必须标记@HttpUserType。
mq: 所属的MQ管理器, 存在该属性表示RestService的请求来自于消息总线 【注: 开启MQ时,path字段失效】
autoload默认值"true" 默认值. 加载当前server所能使用的Servce对象;
includes当autoload="true" 拉取类名与includes中的正则表达式匹配的类, 多个正则表达式用分号;隔开
excludes当autoload="true" 排除类名与excludes中的正则表达式匹配的类, 多个正则表达式用分号;隔开
-->
<rest path="/pipes" base="org.redkale.net.http.HttpServlet" autoload="true" includes="" excludes="">
<!--
value: Service类名列出的表示必须被加载的Service对象
ignore: 是否忽略设置为true则不会加载该Service对象默认值为false
-->
<service value="com.xxx.XXXXService"/>
<!--
value: WebSocket类名列出的表示必须被加载且标记为@RestWebSocket的WebSocket对象
ignore: 是否忽略设置为true则不会加载该RestWebSocket对象默认值为false
-->
<websocket value="com.xxx.XXXXRestWebSocket"/>
</rest>
<!--
【节点在<server>中唯一】
当Server为HTTP协议时, request节点才有效。
remoteaddr 节点: 替换请求方节点的IP地址 通常请求方是由nginx等web静态服务器转发过的则需要配置该节点。
且value值只能是以request.headers.开头表示从request.headers中获取对应的header值。
locale value值必须是request.headers.或request.parameters.开头。
例如下面例子获取request.getRemoteAddr()值如果header存在X-RemoteAddress值则返回X-RemoteAddress值不存在返回getRemoteAddress()。
-->
<request>
<remoteaddr value="request.headers.X-RemoteAddress"/>
<locale value="request.headers.locale" />
<rpc authenticator="org.redkale.net.http.HttpRpcAuthenticator的实现类"/>
</request>
<!--
【节点在<server>中唯一】
当Server为HTTP协议时, response节点才有效。
contenttype: plain值为调用finish时的ContentType; 默认值: text/plain; charset=utf-8
json值为调用finishJson时的ContentType; 默认值: application/json; charset=utf-8
defcookie 节点: 当response里输出的cookie没有指定domain 和path时使用该节点的默认值。
addheader、setheader 的value值以request.parameters.开头则表示从request.parameters中获取对应的parameter值
addheader、setheader 的value值以request.headers.开头则表示从request.headers中获取对应的header值
例如下面例子是在Response输出header时添加两个header一个addHeader 一个setHeader
options 节点: 设置了该节点且auto=true当request的method=OPTIONS自动设置addheader、setheader并返回200状态码
date 节点: 设置了该节点且period有值(单位:毫秒);返回response会包含Date头信息默认为period=0
period=0表示实时获取当前时间;
period<0表示不设置date;
period>0表示定时获取时间; 设置1000表示每秒刷新Date时间
-->
<response>
<content-type plain="text/plain; charset=utf-8" json="application/json; charset=utf-8"/>
<defcookie domain="" path=""/>
<addheader name="Access-Control-Allow-Origin" value="request.headers.Origin" /> <!-- 可多节点 -->
<setheader name="Access-Control-Allow-Headers" value="request.headers.Access-Control-Request-Headers"/> <!-- 可多节点 -->
<setheader name="Access-Control-Allow-Credentials" value="true"/>
<options auto="true" />
<date period="0" />
</response>
<!--
【节点在<server>中唯一】
当Server为HTTP协议时render才有效. 指定输出引擎的实现类
value: 输出引擎的实现类, 必须是org.redkale.net.http.HttpRender的子类
suffixs: 引擎文件名后缀,多个用;隔开,默认值为: .htel
-->
<render value="org.redkalex.htel.HttpTemplateRender" suffixs=".htel"/>
<!--
【节点在<server>中唯一】
当Server为HTTP协议时ResourceServlet才有效. 默认存在一个有默认属性的resource-servlet节点
webroot: web资源的根目录, 默认取server节点中的root值
servlet: 静态资源HttpServlet的实现默认使用HttpResourceServlet
index : 启始页默认值index.html
-->
<resource-servlet webroot="root" index="index.html">
<!--
【节点在<resource-servlet>中唯一】
资源缓存的配置, 默认存在一个含默认属性的caches节点
limit: 资源缓存最大容量, 默认: 0, 为0表示不缓存 单位可以是B、K、M、G不区分大小写
lengthmax: 可缓存的文件大小上限, 默认: 1M超过1M的文件不会被缓存
watch: 是否监控缓存文件的变化, 默认为false不监控
-->
<cache limit="0M" lengthmax="1M" watch="false"/>
<!--
支持类似nginx中的rewrite 目前只支持静态资源对静态资源的跳转。
type: 匹配的类型, 目前只支持location(匹配path), 默认: location
match: 匹配的正则表达式
forward: 需跳转后的资源链接
例如下面例子是将/xxx-yyy.html的页面全部跳转到/xxx.html
-->
<rewrite type="location" match="^/([^-]+)-[^-\.]+\.html(.*)" forward="/$1.html"/>
</resource-servlet>
<!--
加载所有的Servlet服务;
path: servlet的ContextPath前缀 默认为空
autoload="true" 默认值. 自动加载classpath下所有的Servlet类
autoload="false" 需要显著的指定Service类
includes 当autoload="true" 拉取类名与includes中的正则表达式匹配的类, 多个正则表达式用分号;隔开
excludes 当autoload="true" 排除类名与excludes中的正则表达式匹配的类, 多个正则表达式用分号;隔开
-->
<servlets path="/pipes" autoload="true" includes="" excludes="">
<!--
显著加载指定的Servlet类
value=: Servlet类名。必须与Server的协议层相同HTTP必须是HttpServlet
ignore: 是否禁用, 默认为false。
-->
<servlet value="com.xxx.XXX1Servlet" />
<servlet value="com.xxx.XXX2Servlet" />
<servlet value="com.xxx.XXX3Servlet" >
<property name="xxxxxx" value="XXXXXXXX"/>
<property name="yyyyyy" value="YYYYYYYY"/>
</servlet>
</servlets>
</server>
<server protocol="SNCP" host="127.0.0.1" port="7070" root="root" lib="">
<!-- 参数完全同上 -->
<services autoload="true" includes="" excludes="" />
</server>
</application>
```
# source.properties 配置:
```properties
# CacheSource @Resource(name="usersession")
# type可以不用设置框架会根据url判断使用哪个CacheSource实现类
redkale.cachesource.usersession.type = org.redkalex.cache.redis.RedisCacheSource
# 最大连接数
redkale.cachesource.usersession.maxconns = 16
# 节点地址
redkale.cachesource.usersession.nodes = redis://127.0.0.1:6363
# 节点密码
redkale.cachesource.usersession.password = 12345678
# 节点db
redkale.cachesource.usersession.db = 0
#简化写法: 可以不用.node[0], 将参数都合并到url中
redkale.cachesource.usersession.url = redis://user:123456@127.0.0.1:6363?db=0
# DataSource @Resource(name="platf")
# type可以不用设置框架会根据url判断使用哪个DataSource实现类默认值: org.redkale.source.DataJdbcSource
redkale.datasource.platf.type = org.redkale.source.DataJdbcSource
# 是否开启缓存(标记为@Cacheable的Entity类),值目前只支持两种: ALL: 所有开启缓存。 NONE: 关闭所有缓存, 非NONE字样统一视为ALL
redkale.datasource.platf.cachemode = ALL
# 是否自动建表当表不存在的时候, 目前只支持mysql、postgres 默认为false
redkale.datasource.platf.table-autoddl = false
# 用户
redkale.datasource.platf.user = root
# 密码
redkale.datasource.platf.password = 12345678
# 多个URL用;隔开如分布式SearchSource需要配多个URL
redkale.datasource.platf.url = jdbc:mysql://127.0.0.1:3306/platf?allowPublicKeyRetrieval=true&rewriteBatchedStatements=true&serverTimezone=UTC&characterEncoding=utf8
# 最大连接数默认值CPU数
redkale.datasource.platf.maxconns = 16
# 包含的SQL模板相当于反向LIKE不同的JDBC驱动的SQL语句不一样Redkale内置了MySQL的语句
redkale.datasource.platf.contain-sqltemplate = LOCATE(#{keystr}, #{column}) > 0
# 包含的SQL模板相当于反向LIKE不同的JDBC驱动的SQL语句不一样Redkale内置了MySQL的语句
redkale.datasource.platf.notcontain-sqltemplate = LOCATE(#{keystr}, #{column}) = 0
# 复制表结构的SQL模板Redkale内置了MySQL的语句
redkale.datasource.platf.tablenotexist-sqlstates = 42000;42S02
# 复制表结构的SQL模板Redkale内置了MySQL的语句
redkale.datasource.platf.tablecopy-sqltemplate = CREATE TABLE IF NOT EXISTS #{newtable} LIKE #{oldtable}
# DataSource 读写分离
redkale.datasource.platf.read.url = jdbc:mysql://127.0.0.1:3306/platf_r?allowPublicKeyRetrieval=true&rewriteBatchedStatements=true&serverTimezone=UTC&characterEncoding=utf8
redkale.datasource.platf.read.user = root
redkale.datasource.platf.read.password = 12345678
redkale.datasource.platf.write.url = jdbc:mysql://127.0.0.1:3306/platf_w?allowPublicKeyRetrieval=true&rewriteBatchedStatements=true&serverTimezone=UTC&characterEncoding=utf8
redkale.datasource.platf.write.user = root
redkale.datasource.platf.write.password = 12345678
```
# logging.properties 配置:
```properties
handlers = java.util.logging.ConsoleHandler,java.util.logging.FileHandler
.handlers = java.util.logging.ConsoleHandler,java.util.logging.FileHandler
############################################################
.level = FINE
sun.level = INFO
java.level = INFO
javax.level = INFO
com.sun.level = INFO
#java.util.logging.FileHandler.level = FINE
java.util.logging.FileHandler.limit = 20M
java.util.logging.FileHandler.count = 100
java.util.logging.FileHandler.encoding = UTF-8
java.util.logging.FileHandler.pattern = ${APP_HOME}/logs-%tY%tm/log-%tY%tm%td.log
#java.util.logging.FileHandler.unusual 属性表示将 WARNING、SEVERE 级别的日志复制写入单独的文件中
java.util.logging.FileHandler.unusual = ${APP_HOME}/logs-%tY%tm/log-warnerr-%tY%tm%td.log
#需要屏蔽消息内容的正则表达式
java.util.logging.FileHandler.denyregx =
java.util.logging.FileHandler.append = true
#java.util.logging.ConsoleHandler.level = FINE
#将日志写进SearchSource, 必须指定source资源名在source.properties中定义
#java.util.logging.SearchHandler.source = platfsearch
#指定写进SearchSource的表名默认值为log-record
#java.util.logging.SearchHandler.tag = log-${APP_NAME}-%tY%tm%td
```
# yaml配置
&emsp;&emsp;application和source的配置文件支持yaml格式需要依赖第三方包 默认的yaml配置文件名为 application.yml、source.yml。
```xml
<dependency>
<groupId>org.redkalex</groupId>
<artifactId>redkale-plugins</artifactId>
<version>2.8.0</version>
</dependency>
<dependency>
<groupId>org.yaml</groupId>
<artifactId>snakeyaml</artifactId>
<version>2.2</version>
</dependency>
```

442
docs/convert.md Normal file
View File

@@ -0,0 +1,442 @@
# 序列化
&emsp;&emsp;Convert提供Java对象的序列化与反序列化功能。支持JSON、PROTOBUF两种格式化。 两种格式使用方式完全一样其性能都大幅度超过其他JSON框架。同时JSON内置于HTTP服务中PROTOBUF也是SNCP协议数据序列化的基础。
## 基本API
&emsp;&emsp;JSON序列化其操作类主要是JsonConvert配置类主要是JsonFactory、ConvertColumn。JsonFactory采用同ClassLoader类似的双亲委托方式设计。
JsonConvert 序列化encode方法
```java
public String convertTo(Object value);
public String convertTo(Type type, Object value);
public byte[] convertToBytes(Type type, Object value);
public void convertTo(OutputStream out, Type type, Object value);
public ByteBuffer[] convertTo(Supplier<ByteBuffer> supplier, Type type, Object value);
public void convertTo(JsonWriter writer, Type type, Object value);
```
JsonConvert 反序列化decode方法
```java
public <T> T convertFrom(Type type, String text);
public <T> T convertFrom(Type type, InputStream in);
public <T> T convertFrom(Type type, ByteBuffer... buffers);
public <T> T convertFrom(Type type, JsonReader reader);
public Object[] convertFrom(Type[] types, String text);
// 返回非null的值是由String、ArrayList、HashMap任意组合的对象
public <V> V convertFrom(final String text);
// 返回非null的值是由String、ArrayList、HashMap任意组合的对象
public <V> V convertFrom(final InputStream in);
```
## JSON基本用法
```java
@Data
public class UserRecord {
private int userid;
private String username = "";
private String password = "";
public UserRecord() {
}
}
public static void main(String[] args) throws Exception {
UserRecord user = new UserRecord();
user.setUserid(100);
user.setUsername("redkalename");
user.setPassword("123456");
final JsonConvert convert = JsonConvert.root();
String json = convert.convertTo(user);
System.out.println(json); //应该是 {"password":"123456","userid":100,"username":"redkalename"}
UserRecord user2 = convert.convertFrom(UserRecord.class, json);
//应该也是 {"password":"123456","userid":100,"username":"redkalename"}
System.out.println(convert.convertTo(user2));
/**
* 以下功能是为了屏蔽password字段。
* 等价于 public String getPassword() 加上 @ConvertColumn
*
* @ConvertColumn(ignore = true, type = ConvertType.JSON)
* public String getPassword() {
* return password;
* }
**/
final JsonFactory childFactory = JsonFactory.root().createChild();
childFactory.register(UserRecord.class, true, "password"); //屏蔽掉password字段使其不输出
childFactory.reloadCoder(UserRecord.class); //重新加载Coder使之覆盖父Factory的配置
final JsonConvert childConvert = childFactory.getConvert();
json = childConvert.convertTo(user);
System.out.println(json); //应该是 {"userid":100,"username":"redkalename"}
user2 = childConvert.convertFrom(UserRecord.class, json);
//应该也是 {"userid":100,"username":"redkalename"}
System.out.println(childConvert.convertTo(user2));
}
```
&emsp;&emsp;在Redkale里存在默认的JsonConvert、ProtobufConvert对象。 只需在所有Service、Servlet中增加依赖注入资源。
```java
public class XXXService implements Service {
@Resource
private JsonConvert jsonConvert;
@Resource
private ProtobufConvert protobufConvert;
}
public class XXXServlet extends HttpServlet {
@Resource
private JsonConvert jsonConvert;
@Resource
private ProtobufConvert protobufConvert;
}
```
&emsp;&emsp; 同一类型数据通过设置新的JsonFactory可以有不同的输出。
```java
@Data
public class UserSimpleInfo {
private int userid;
private String username = "";
@ConvertColumn(ignore = true, type = ConvertType.JSON)
private long regtime; //注册时间
@ConvertColumn(ignore = true, type = ConvertType.JSON)
private String regaddr = ""; //注册IP
}
public class UserInfoServlet extends HttpBaseServlet {
@Resource
private UserSerice service;
@Resource
private JsonFactory jsonRootFactory;
@Resource
private JsonConvert detailConvert;
@Override
public void init(HttpContext context, AnyValue config) {
final JsonFactory childFactory = jsonRootFactory.createChild();
childFactory.register(UserSimpleInfo.class, false, "regtime", "regaddr"); //允许输出注册时间与注册地址
childFactory.reloadCoder(UserSimpleInfo.class); //重新加载Coder使之覆盖父Factory的配置
this.detailConvert = childFactory.getConvert();
}
// 获取他人基本信息
@HttpMapping(url = "/user/info/")
public void info(HttpRequest req, HttpResponse resp) throws IOException {
int userid = Integer.parseInt(req.getRequstURILastPath());
UserSimpleInfo user = service.findUserInfo(userid);
resp.finishJson(user); // 不包含用户的注册时间和注册地址字段信息
}
//获取用户自己的信息
@HttpMapping(url = "/user/myinfo")
public void mydetail(HttpRequest req, HttpResponse resp) throws IOException {
int userid = req.currentUser().getUserid(); //获取当前用户ID
UserSimpleInfo user = service.findUserInfo(userid);
resp.finishJson(detailConvert, user); // 包含用户的注册时间和注册地址字段信息
}
}
```
&emsp;&emsp;Convert 支持带参数构造函数。
&emsp;&emsp;&emsp;&emsp;1. public 带参数的构造函数加上 @ConstructorParameters 注解:
```java
public class UserRecord {
private int userid;
private String username = "";
private String password = "";
@ConstructorParameters({"userid", "username", "password"})
public UserRecord(int userid, String username, String password) {
this.userid = userid;
this.username = username;
this.password = password;
}
public int getUserid() {
return userid;
}
public String getUsername() {
return username;
}
public String getPassword() {
return password;
}
}
```
&emsp;&emsp;&emsp;&emsp;2. 自定义Creator
```java
public class UserRecord {
private int userid;
private String username = "";
private String password = "";
UserRecord(int userid, String username, String password) {
this.userid = userid;
this.username = username;
this.password = password;
}
public int getUserid() {
return userid;
}
public String getUsername() {
return username;
}
public String getPassword() {
return password;
}
/**
* 自定义Creator方法。
* 1) 方法名可以随意。
* 2) 方法必须是static。
* 3方法的参数必须为空。
* 4方法的返回类型必须是Creator。
*
* @return
*/
private static Creator<UserRecord> creator() {
return new Creator<UserRecord>() {
@Override
@ConstructorParameters({"userid", "username", "password"}) //带参数的构造函数必须有ConstructorParameters注解
public UserRecord create(Object... params) {
int userid = (params[0] == null ? 0 : (Integer) params[0]);
return new UserRecord(userid, (String) params[1], (String) params[2]);
}
};
}
}
```
&emsp;&emsp;通常JavaBean类默认有个public空参数的构造函数因此大部分情况下不要自定义Creator其实只要不是private的空参数构造函数Convert都能自动支持(其他的框架都仅支持public的构造函数)只有仅含private的构造函数才需要自定义Creator。带参数的构造函数就需要标记@ConstructorParameters常见于Immutable Object。
## 自定义
&emsp;&emsp;Convert 支持自定义Decode、Encode。
&emsp;&emsp;&emsp;&emsp;1. 通过ConvertFactory显式的注册
```java
public class FileSimpleCoder<R extends Reader, W extends Writer> extends SimpledCoder<R, W, File> {
public static final FileSimpleCoder instance = new FileSimpleCoder();
@Override
public void convertTo(W out, File value) {
out.writeString(value == null ? null : value.getPath());
}
@Override
public File convertFrom(R in) {
String path = in.readString();
return path == null ? null : new File(path);
}
}
JsonFactory.root().register(File.class, FileSimpleCoder.instance);
ProtobufFactory.root().register(File.class, FileSimpleCoder.instance);
```
&emsp;&emsp;&emsp;&emsp;2. 通过JavaBean类自定义静态方法自动加载
```java
public class InnerCoderEntity {
private final String val;
private final int id;
private InnerCoderEntity(int id, String value) {
this.id = id;
this.val = value;
}
public static InnerCoderEntity create(int id, String value) {
return new InnerCoderEntity(id, value);
}
/**
* 该方法提供给Convert组件自动加载。
* 1) 方法名可以随意。
* 2) 方法必须是static
* 3方法的参数有且只能有一个 且必须是org.redkale.convert.ConvertFactory或子类。
* —3.1) 参数类型为org.redkale.convert.ConvertFactory 表示适合JSON,PROTOBUF。
* —3.2) 参数类型为org.redkale.convert.json.JsonFactory 表示仅适合JSON。
* —3.3) 参数类型为org.redkale.convert.pb.ProtobufFactory 表示仅适合PROTOBUF。
* 4方法的返回类型必须是 Decodeable/Encodeable/SimpledCoder
* 若返回类型不是SimpledCoder, 就必须提供两个方法: 一个返回Decodeable 一个返回 Encodeable。
*
* @param factory
* @return
*/
private static SimpledCoder<Reader, Writer, InnerCoderEntity> createConvertCoder(final ConvertFactory factory) {
return new SimpledCoder<Reader, Writer, InnerCoderEntity>() {
//必须与EnMember[] 顺序一致
private final DeMember[] deMembers = new DeMember[]{
DeMember.create(factory, InnerCoderEntity.class, "id"),
DeMember.create(factory, InnerCoderEntity.class, "val")};
//必须与DeMember[] 顺序一致
private final EnMember[] enMembers = new EnMember[]{
EnMember.create(factory, InnerCoderEntity.class, "id"),
EnMember.create(factory, InnerCoderEntity.class, "val")};
@Override
public void convertTo(Writer out, InnerCoderEntity value) {
if (value == null) {
out.writeObjectNull(InnerCoderEntity.class);
return;
}
out.writeObjectB(value);
for (EnMember member : enMembers) {
out.writeObjectField(member, value);
}
out.writeObjectE(value);
}
@Override
public InnerCoderEntity convertFrom(Reader in) {
if (!in.readObjectB(this)) {
return null;
}
int index = 0;
final Object[] params = new Object[deMembers.length];
while (in.hasNext()) {
DeMember member = in.readFieldName(deMembers); //读取字段名
in.readBlank(); //读取字段名与字段值之间的间隔符JSON则是跳过冒号:
if (member == null) {
in.skipValue(); //跳过不存在的字段的值, 一般不会发生
} else {
params[index++] = member.read(in);
}
}
in.readObjectE();
return InnerCoderEntity.create(params[0] == null ? 0 : (Integer) params[0], (String) params[1]);
}
};
}
public int getId() {
return id;
}
public String getVal() {
return val;
}
@Override
public String toString() {
return JsonConvert.root().convertTo(this);
}
}
```
## RestConvert
&emsp;&emsp;```@RestConvert```、```@RestConvertCoder```是针对```@RestService```接口进行自定义序列化注解
```java
@Data
public class RestConvertItem {
private long createTime;
@ConvertColumn(ignore = true)
private String aesKey;
}
@Data
public class RestConvertBean {
private int id;
private boolean enable;
private String name;
private RestConvertItem content;
}
//将boolean类型值转换成0/1的int值
public class RestConvertBoolCoder<R extends Reader, W extends Writer> extends SimpledCoder<R, W, Boolean> {
@Override
public void convertTo(W out, Boolean value) {
out.writeInt(value == null || !value ? 0 : 1);
}
@Override
public Boolean convertFrom(R in) {
return in.readInt() == 1;
}
}
@RestService(name = "test", autoMapping = true)
public class RestConvertService extends AbstractService {
//输出: {"content":{"createTime":100},"enable":true,"id":123,"name":"haha"}
public RestConvertBean load1() {
return createBean();
}
//输出: {"content":{"aesKey":"keykey","createTime":100},"enable":true,"id":123,"name":"haha"}
//aesKey字段也会被输出
@RestConvert(type = RestConvertItem.class, skipIgnore = true)
public RestConvertBean load2() {
return createBean();
}
//输出: {"id":123}
//只输出id字段
@RestConvert(type = RestConvertBean.class, onlyColumns = "id")
public RestConvertBean load3() {
return createBean();
}
//输出: {"content":{"createTime":100},"enable":1,"id":123,"name":"haha"}
//enable字段输出1而不是true
@RestConvertCoder(type = RestConvertBean.class, field = "enable", coder = RestConvertBoolCoder.class)
public RestConvertBean load4() {
return createBean();
}
private RestConvertBean createBean() {
RestConvertBean bean = new RestConvertBean();
bean.setId(123);
bean.setName("haha");
bean.setEnable(true);
RestConvertItem item = new RestConvertItem();
item.setCreateTime(100);
item.setAesKey("keykey");
bean.setContent(item);
return bean;
}
}
```

195
docs/datasource.md Normal file
View File

@@ -0,0 +1,195 @@
# DB数据源
&emsp;&emsp; DataSource是数据层操作的抽象接口不仅用于关系型数据库还支持内存、Mongodb、ElasticSearch等数据源redkale内置了内存版DataSource官方扩展包```redkale-plugins```提供了Mongodb、ElasticSearch的实现。<br>
&emsp;&emsp; DataSource几乎所有操作都提供同步与异步两种方法对性能要求高的可以采用异步方式例如使用vertx实现的DataSqlSource。
## 注解说明
|注解类名 | 功能描述|
| --- | --- |
|@Column |标记字段与JPA用法一致 |
|@Entity |标记实体类与JPA用法一致 |
|@Id |标记主键字段与JPA用法一致 |
|@Table |标记表的别名与JPA用法一致 |
|@Transient |标记是否为表对应的字段与JPA用法一致 |
|@VirtualEntity |用于非数据库表对应的Entity类且仅用于开启缓存模式的DataSource |
|@DistributeTable |标记表进行分表分库存储, 与DistributeTableStrategy接口结合使用 |
|@FilterColumn |用于FilterBean过滤类的字段设置 |
|@FilterJoinColumn |用于FilterBean过滤类的关联表字段设置 |
|@FilterGroup | 用于FilterBean过滤类的过滤条件分组设置 |
|@FilterOrs | 用于FilterBean字段间的与或关系 |
## 操作方法
|系列方法 | 功能描述|
| --- | --- |
|insert |插入实体 |
|delete |删除实体 |
|update |更新实体 |
|updateColumn |更新数据的部分字段 |
|find |查找单个对象 |
|queryList |查询对象的List集合 |
|querySheet |查询对象的Sheet页式集合 |
|getNumberXXX |统计查询,用于查询字段的总和、最大值、平均值等数据 |
|queryColumnXXX |单个字段数据查询和字段的统计查询 |
|nativeXXX |直接运行SQL语句用于复杂的关联查询与更新(仅限DataSqlSource) |
## 配置数据源
```properties
redkale.datasource.platf.url = jdbc:mysql://127.0.0.1:3306/platf?serverTimezone=UTC&characterEncoding=utf8
redkale.datasource.platf.user = root
redkale.datasource.platf.password = pwd123
```
## pom依赖
&emsp;&emsp; 使用jdbc驱动
```xml
<dependency>
<groupId>com.mysql</groupId>
<artifactId>mysql-connector-j</artifactId>
<version>8.2.0</version>
</dependency>
```
&emsp;&emsp; 异步场景可使用vertx-mysql-client实现, 需要依赖官方扩展包 ```redkale-plugins```
```xml
<dependency>
<groupId>org.redkalex</groupId>
<artifactId>redkale-plugins</artifactId>
<version>2.8.0</version>
</dependency>
<dependency>
<groupId>io.vertx</groupId>
<artifactId>vertx-mysql-client</artifactId>
<version>4.5.1</version>
</dependency>
```
## 增删改查
```java
@Data
@Table(name = "t_account")
public class Account {
//男
public static final short GENDER_MALE = 1;
//女
public static final short GENDER_FEMALE = 2;
@Id
@Column(name = "account_id")
private String accountid;
@Column(name = "account_name")
private String accountName;
private int age;
private short gender;
private String remark;
@Column(name = "create_time", updatable = false)
private long createTime;
}
```
&emsp;&emsp;新增实体对象:
```java
@Resource(name = "platf")
private DataSource source;
public void insertTest() {
//新增单个
Account account = new Account();
account.setAccountid("account1");
account.setAccountName("Hello");
account.setCreateTime(System.currentTimeMillis());
source.insert(account);
//异步新增多个
Account a1 = new Account();
a1.setAccountid("account1");
a1.setAccountName("Hello1");
a1.setCreateTime(System.currentTimeMillis());
Account a2 = new Account();
a2.setAccountid("account2");
a2.setAccountName("Hello2");
a2.setCreateTime(System.currentTimeMillis());
source.insertAsync(a1, a2);
}
```
&emsp;&emsp;删除实体:
```java
//根据主键值删除
Account account = new Account();
account.setAccountid("account1");
source.delete(account);
//过滤删除, 删除16以下男生
//等价sql: DELETE FROM t_account WHERE age < 16 AND gender = 1;
source.delete(Account.class, FilterNodes.lt(Account::getAge, 16).and("gender", GENDER_MALE));
```
&emsp;&emsp;修改实体对象:
```java
//Lambda方式根据主键更新单个字段
source.updateColumn(Account.class, "account1", Account::getRemark, "新备注");
//Lambda方式根据主键更新多个字段
//等价sql: UPDATE t_account SET account_name='新名称', remark='新备注', age=age+2 WHERE account_id='account1';
source.updateColumn(Account.class, "account1",
ColumnValue.set(Account::getAccountName, "新名称"),
ColumnValue.set(Account::getRemark, "新备注"),
ColumnValue.inc(Account::getAge, 2)); //年龄+2
//根据主键更新多个字段
Account account = new Account();
account.setAccountid("account1");
account.setAccountName("新名称");
account.setRemark("新备注");
source.updateColumn(account, "accountName", "remark");
//或者
//等价sql: UPDATE t_account SET account_name='新名称', remark='新备注' WHERE account_id='account1';
source.updateColumn(account, Account::getAccountName, Account::getRemark);
//根据主键更新整个对象
Account one = new Account();
one.setAccountid("account1");
one.setAccountName("Hello1");
one.setCreateTime(System.currentTimeMillis());
source.update(one); //createTime不会被更新因字段设置了@Column(updatable=false)
//过滤更新
//等价sql: UPDATE t_account SET remark = '不满16岁是青少年' WHERE age < 16;
source.updateColumn(Account.class, FilterNodes.lt(Account::getAge, 16),
ColumnValue.set(Account::getRemark, "不满16岁是青少年"));
```
&emsp;&emsp;批量操作:
```java
Account a1 = new Account();
a1.setAccountid("account1");
a1.setAccountName("Hello1");
a1.setCreateTime(System.currentTimeMillis());
//事务性批量操作
DataBatch batch = DataBatch.create()
.insert(a1)
.updateColumn(Account.class, "account1", ColumnValue.set(Account::getRemark, "不满16岁是青少年"))
.delete(Account.class, FilterNodes.lt(Account::getAge, 16).and("gender", GENDER_MALE));
source.batch(batch);
```
&emsp;&emsp;查询实体对象:
```java
//主键查询
//等价sql: SELECT * FROM t_account WHERE account_id = 'account1';
Account account = source.find(Account.class, "account1");
//等价sql: SELECT * FROM t_account WHERE account_name = 'Hello' AND age = 18 LIMIT 1;
Account one = source.find(Account.class, FilterNodes.eq(Account::getAccountName, "Hello").and(Account::getAge, 18));
//等价sql: SELECT * FROM t_account WHERE account_name = 'Hello' OR age = 18;
FilterNode filter = FilterNodes.eq(Account::getAccountName, "Hello").or(Account::getAge, 18);
List<Account> list = source.queryList(Account.class, filter);
```

2
docs/faq.md Normal file
View File

@@ -0,0 +1,2 @@
# FAQ
文档完善中……

1
docs/http.md Normal file
View File

@@ -0,0 +1 @@
文档完善中……

Binary file not shown.

After

Width:  |  Height:  |  Size: 86 KiB

BIN
docs/images/home-dir.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.6 KiB

BIN
docs/images/logo.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.9 KiB

1
docs/locked.md Normal file
View File

@@ -0,0 +1 @@
文档完善中……

40
docs/native-image.md Normal file
View File

@@ -0,0 +1,40 @@
# 使用native-image
&emsp;&emsp; Redkale支持GraalVM的native-image 由于Redkale使用了大量的asm动态生成代码而native-image不支持动态字节码因此需要使用```redkale-maven-plugin```执行预编译,提前生成动态字节码进行打包。
## 安装GraalVM
```
下载地址: https://www.graalvm.org/downloads/
```
## 安装native-image
```
install native-image
```
## 配置pom
```xml
<plugin>
<groupId>org.redkale.maven.plugins</groupId>
<artifactId>redkale-maven-plugin</artifactId>
<version>1.2.0</version>
<configuration>
<nativeimageArgs>
<arg>--no-fallback</arg>
</nativeimageArgs>
</configuration>
<executions>
<execution>
<id>redkale-compile</id>
<phase>process-classes</phase>
<goals>
<goal>compile</goal>
</goals>
</execution>
</executions>
</plugin>
```
## native-image编译
```
native-image -H:+ReportExceptionStackTraces --report-unsupported-elements-at-runtime -jar xxx.jar
```

62
docs/quick-start.md Normal file
View File

@@ -0,0 +1,62 @@
# 安装
使用maven:
```xml
<dependency>
<groupId>org.redkale</groupId>
<artifactId>redkale</artifactId>
<version>2.8.0</version>
</dependency>
```
如果工程需要用到Redis、Kafka、Elasticsearch、SQL模板、模板引擎等可使用redkale的官方插件:
```xml
<dependency>
<groupId>org.redkalex</groupId>
<artifactId>redkale-plugins</artifactId>
<version>2.8.0</version>
</dependency>
```
# 创建工程
在IDE中使用ant或maven方式创建工程增加redkale的依赖。下载解压
&emsp;&emsp;![home](images/home-dir.png)
并覆盖到工程目录下。
* bin 存放启动/关闭脚本(start.sh、shutdown.sh、redkale.sh等)
* conf 存放服务器所需配置文件:
* &emsp;&emsp; application.xml &nbsp;&nbsp;服务配置文件 (必需)
* &emsp;&emsp; logging.properties日志配置文件 (可选)
* &emsp;&emsp; source.properties 数据库配置文件 (可选)
* lib 存放服务所依赖jar
* logs logging.properties配置中默认的日志存放目录。
# Hello World
演示工程, 编写HelloService:
```java
package org.redkalex.example;
import org.redkale.net.http.*;
import org.redkale.service.Service;
@RestService(autoMapping = true)
public class HelloService implements Service {
public String sayHello() {
return "Hello World!";
}
public String hi(String name) {
return "Hi, " + name + "!";
}
}
```
运行结果:
&emsp;&emsp;![console](images/hello-console.png)
# 进一步阅读
* 详细的配置说明看[这里](config.md)。
* 数据源[这里](source.md)

85
docs/scheduled.md Normal file
View File

@@ -0,0 +1,85 @@
# 定时任务
&emsp;&emsp;@Scheduled注解在Service的方法上,实现对方法结果进行定时运行。方法必须是无参数或者```ScheduledEvent```参数。
## 属性说明
|属性|默认值|说明|
| --- | --- | --- |
|name|未定义|名称, 可用于第三方实现的定时任务组件的key, 比如xxl-job的任务标识|
|cron|未定义|cron表达式也可以使用常量值: <br> &emsp;@yearly、@annually、@monthly、@weekly、<br> &emsp;@daily、@midnight、@hourly、@minutely <br> &emsp;@1m、@2m、@3m、@5m、@10m、@15m、@30m <br> &emsp;@1h、@2h、@3h、@6h <br> &emsp;${env.scheduled.cron}: 读取系统配置项|
|zone|未定义|时区,```cron```有值才有效, 例如: "Asia/Shanghai"|
|fixedDelay|-1|延迟时间,负数为无效值,支持参数配置、乘法表达式和对象字段值 <br> 参数值支持方式:<br> &emsp;100: 设置数值 <br> &emsp;${env.scheduled.fixedDelay}: 读取系统配置项 <br> 值大于0且fixedRate小于0则使用 ScheduledThreadPoolExecutor.scheduleWithFixedDelay |
|fixedRate|-1|周期时间,负数为无效值,支持参数配置、乘法表达式和对象字段值 <br> 参数值支持方式:<br> &emsp;100: 设置数值 <br> &emsp;${env.scheduled.fixedRate}: 读取系统配置项 <br> 值大于0且fixedRate小于0则使用 ScheduledThreadPoolExecutor.scheduleAtFixedRate |
|initialDelay|-1|起始延迟时间,负数为无效值,支持参数配置、乘法表达式和对象字段值 <br> 参数值支持方式:<br> &emsp;100: 设置数值 <br> &emsp;${env.scheduled.initialDelay}: 读取系统配置项 <br> 值大于0且fixedRate和fixedDelay小于0则使用 ScheduledThreadPoolExecutor.schedule |
|timeUnit|```TimeUnit.SECONDS```|时间单位TimeUnit|
|comment|未定义|备注描述|
|mode|```LoadMode.LOCAL```|作用于Service模式默认值为LOCAL<br> LOCAL: 表示远程模式的Service对象中的定时任务不起作用|
## 基本用法
&emsp;&emsp;每秒执行
```java
@Scheduled(cron = "0/1 * * * * ?")
public void task1() {
System.out.println(Times.nowMillis() + "执行一次");
}
```
&emsp;&emsp;<b>数值配置</b>, 系统启动后延迟10分钟后每60分钟执行一次
```java
@Scheduled(fixedDelay = "10", fixedRate = "60", timeUnit = TimeUnit.MINUTES)
private void task3() {
System.out.println(Times.nowMillis() + "执行一次");
}
```
&emsp;&emsp;<b>环境配置</b>, 定时间隔时间由环境变量```env.scheduled.fixedRate```配置没配置采用默认值60秒)
```java
@Scheduled(fixedRate = "${env.scheduled.fixedRate:60}")
public String task2() {
System.out.println(Times.nowMillis() + "执行一次");
return "";
}
```
## 基本配置
```xml
<!--
全局Serivce的定时任务设置没配置该节点将自动创建一个。
enabled 是否开启缓存功能。默认: true
-->
<scheduled enabled="true"/>
```
## 使用Xxl-Job
&emsp;&emsp;Scheduled可以采用第三方实现, 官方扩展包```redkale-plugins```提供了xxl-job实现且不依赖xxl-job包。
### pom依赖
```xml
<dependency>
<groupId>org.redkalex</groupId>
<artifactId>redkale-plugins</artifactId>
<version>2.8.0</version>
</dependency>
```
### 配置文件
```xml
<scheduled enabled="true">
<xxljob addresses="http://localhost:8080/xxl-job-admin"
executorName="redkale-examples"
ip="127.0.0.1" <!-- 可选 -->
port="5678" <!-- 可选 -->
accessToken="default_token" />
</scheduled>
```
### 使用方法
```java
@Scheduled(name = "testTask")
public void runTask(ScheduledEvent event) {
System.out.println("xxl-job参数param: " + event.getString("param"));
System.out.println("xxl-job参数index: " + event.getInteger("index"));
System.out.println("xxl-job参数total: " + event.getInteger("total"));
}
```

64
docs/service.md Normal file
View File

@@ -0,0 +1,64 @@
# Service组件
&emsp;&emsp;Service是Redkale最核心的组件主要处理业务逻辑和操作数据层。Service实例分两种模式: <b>本地模式</b><b>远程模式</b>。其模式由```conf/application.xml```文件来配置。开发人员在调用过程中通常不需要区分Service实例是哪种模式。 <br/>
&emsp;&emsp;并不是Sevice都能进行本地和远程模式切换 以下情况的Service不能转成远程模式:
&emsp;&emsp;&emsp;&emsp; 1、类被修饰为```final``` <br>
&emsp;&emsp;&emsp;&emsp; 2、类被标记```@Local``` <br>
&emsp;&emsp;&emsp;&emsp; 3、类被标记```@Component``` <br>
&emsp;&emsp;Redkale进程启动时扫描可加载的Service实现类根据配置文件配置的模式采用```ASM```技术动态生成相应的Service临时类进行实例化并注册到ResourceFactory同其他Service、Servlet依赖注入。
## Service使用类型
|类型|使用注解|场景说明|
| --- | --- | --- |
|默认加载|```@AutoLoad```或无注解|默认的Service会自动加载并初始化且会自动生成对应协议层Servlet|
|依赖加载|```@AutoLoad(false)```|此类Service只有被其他服务依赖或者显式的配置时才会被初始化<br> 主要用于工具类功能服务, <br> 比如```DataSource```、```CacheSource```|
|本地模式|```@Local```|此类Service无论配不配成远程模式都不会转成远程模式<br>主要用于功能依赖本地环境或者参数无法序列化的服务|
|组件模式|```@Component```|此类Service不会被动态生成协议层Servlet<br>主要用于无需提供对进程外提供接口的服务,<br> 比如```DataSource```、```CacheSource```的实现|
# 用法
```java
@RestService(comment = "用户服务模块")
public class UserService implements Service {
@Resource(name = "platf")
private DataSource source;
//请求url: /user/updatePwd?bean={}
@RestMapping(auth = true, methods = "POST", comment = "更改密码(只能POST请求)")
public RetResult<String> updatePwd(@RestUserid long userid, UserPwdBean bean) {
//逻辑处理
return RetResult.success();
}
//请求url: /user/updateIntro?intro=xxx
@RestMapping(auth = true, comment = "更新用户介绍")
public RetResult<String> updateIntro(@RestUserid long userid, String intro) {
intro = Utility.orElse(intro, ""); //为null则用""
//更新数据库
source.updateColumn(UserDetail.class, userid, UserDetail::getIntro, intro);
return RetResult.success();
}
//请求url: /user/updateGender?gender=1
@RestMapping(auth = true, comment = "修改用户性别(异步方法)")
public CompletableFuture<RetResult<String>> updateGender(@RestUserid long userid, short gender) {
if (gender != GENDER_MALE && gender != GENDER_FEMALE) {
return RetCodes.retResultFuture(RET_USER_GENDER_ILLEGAL);
}
//更新数据库
return source.updateColumnAsync(UserDetail.class, userid, UserDetail::getGender, gender)
.thenApply(v -> RetResult.success());
}
}
```
&emsp;&emsp;```@RestUserid int userid```为当前用户Id, 值是在BaseServlet里进行设置userid可以是String、long、int类型。
## 远程模式Service
&emsp;&emsp;远程Servie其实是提供RPC接口需要配置文件中显式配置才可使用远程模式。
```xml
<group name="remote-A" nodes="192.168.10.11:6060,192.168.10.22:7070"/>
<server protocol="HTTP" host="0.0.0.0" port="8080">
<services autoload="true" group="remote-A"/>
<service name="" value="org.redkale.demo.user.UserService" group="remote-A"/>
</server>
```

1
docs/sncp.md Normal file
View File

@@ -0,0 +1 @@
文档完善中……

108
docs/sqlsource.md Normal file
View File

@@ -0,0 +1,108 @@
# DataSqlSource数据源
&emsp;&emsp;```DataSqlSource```是```DataSource```的SQL扩展类增强了对原生SQL的操作。
## SQL模板
&emsp;&emsp;Redkale中的SQL模板与Mybatis里的SQL模板用法类似 最大区别在于不需要写很多```if/else```判断语句,也不用写xml文件 框架会根据参数存在与否动态生成sql语句 查询结果时下划线式sql字段名和驼峰式类字段名会自动匹配。
```sql
SELECT * FROM user WHERE user_id IN #{bean.userIds} OR user_name = #{bean.userName}
```
&emsp;&emsp;当bean.userIds=nullbean.userName='hello'时sql语句转换成:
```sql
SELECT * FROM user WHERE user_name = 'hello'
```
&emsp;&emsp;当bean.userIds=[1,2,3]bean.userName=null时sql语句转换成:
```sql
SELECT * FROM user WHERE user_id IN (1,2,3)
```
&emsp;&emsp;IN或者NOT IN语句当参数不为null而是空数组或者空List会进行特殊处理IN语句会转化成```1=1```, NOT IN语句会转化成```1=2```。 当bean.userIds=空数组bean.userName='hello'时sql语句转换成:
```sql
SELECT * FROM user WHERE 1=2 OR user_name = 'hello'
```
&emsp;&emsp;参数支持默认值,用逗号隔开,非String参数类型主要指定数据类型目前支持(int)、(long)、(short)、(float)、(double), 参数不存在会使用默认值aaa:
```sql
DELETE FROM user WHERE user_name = #{bean.userName,aaa}
```
&emsp;&emsp;IN参数也支持默认值:
```sql
DELETE FROM user WHERE type IN #{types,(1, 2, 3)}
DELETE FROM user WHERE type IN (1, 2, #{type, (int)3})
DELETE FROM user WHERE user_name IN #{name, ('aa','bb','cc')}
DELETE FROM user WHERE user_name ('aa', 'bb', #{type,cc})
```
&emsp;&emsp;有些场景要求参数是必需的,就需要使用##{}来校验参数是否必需。
```sql
DELETE FROM user WHERE user_name = ##{bean.userName}
```
&emsp;&emsp;当bean=null或者bean.userName=null时执行sql会报错 ```Missing parameter bean.userName```
&emsp;&emsp;Service调用原生SQL模板示例
```java
public class ForumInfoService extends AbstractService {
//查询单个记录的sql
private static final String findSql = "SELECT f.forum_groupid, s.forum_section_color "
+ "FROM forum_info f, forum_section s "
+ " WHERE f.forumid = s.forumid AND "
+ "s.forum_sectionid = #{bean.forumSectionid} AND "
+ "f.forumid = #{bean.forumid} AND s.forum_section_color = #{bean.forumSectionColor}";
//查询列表记录的sql
private static final String querySql = "SELECT f.forum_groupid, s.forum_section_color "
+ "FROM forum_info f, forum_section s "
+ " WHERE f.forumid = s.forumid AND "
+ "s.forum_sectionid = #{bean.forumSectionid} AND "
+ "f.forumid = #{bean.forumid} AND s.forum_section_color = #{bean.forumSectionColor}";
@Resource
private DataSqlSource source;
public ForumResult findForumResultOne(ForumBean bean) {
return source.nativeQueryOne(ForumResult.class, findSql, Map.of("bean", bean));
}
public CompletableFuture<List<ForumResult>> queryForumResultListAsync(ForumBean bean) {
return source.nativeQueryListAsync(ForumResult.class, querySql, Map.of("bean", bean));
}
//翻页查询
public Sheet<ForumResult> queryForumResult(RowBound bound, ForumBean bean){
return source.nativeQuerySheet(ForumResult.class, querySql, round, Map.of("bean", bean));
}
}
```
## DataSqlMapper
&emsp;&emsp;DataSqlMapper与MyBatis里的Mapper用法类似且都支持异步方法。
```java
public interface ForumInfoMapper extends BaseMapper<ForumInfo> {
@Sql("SELECT f.forum_groupid, s.forum_section_color "
+ "FROM forum_info f, forum_section s "
+ "WHERE f.forumid = s.forumid "
+ "AND s.forum_sectionid = #{bean.forumSectionid} "
+ "AND f.forumid = #{bean.forumid} "
+ "AND s.forum_section_color = #{bean.forumSectionColor}")
public ForumResult findForumResultOne(ForumBean bean);
@Sql("SELECT f.forum_groupid, s.forum_section_color "
+ "FROM forum_info f, forum_section s "
+ "WHERE f.forumid = s.forumid AND "
+ "s.forum_sectionid = #{bean.forumSectionid} "
+ "AND f.forumid = #{bean.forumid} "
+ "AND s.forum_section_color = #{bean.forumSectionColor}")
public CompletableFuture<ForumResult> findForumResultOneAsync(ForumBean bean);
//翻页查询
@Sql("SELECT f.forum_groupid, s.forum_section_color "
+ "FROM forum_info f, forum_section s "
+ " WHERE f.forumid = s.forumid AND "
+ "s.forum_sectionid = #{bean.forumSectionid} AND "
+ "f.forumid = #{bean.forumid} AND s.forum_section_color = #{bean.forumSectionColor}")
public Sheet<ForumResult> queryForumResult(RowBound bound, ForumBean bean);
@Sql("UPDATE forum_section s "
+ " SET s.forum_sectionid = '' "
+ " WHERE s.forum_section_color = ##{bean.forumSectionColor}")
public int updateForumResult(@Param("bean") ForumBean bean0);
}
```

1
docs/watch.md Normal file
View File

@@ -0,0 +1 @@
文档完善中……

1
docs/websocket.md Normal file
View File

@@ -0,0 +1 @@
文档完善中……

View File

@@ -1 +1 @@
<EFBFBD><EFBFBD><EFBFBD>н<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ĵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>jarĬ<EFBFBD>Ϸ<EFBFBD><EFBFBD>ڴ˴<EFBFBD>
<EFBFBD><EFBFBD><EFBFBD>н<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ĵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>jarĬ<EFBFBD>Ϸ<EFBFBD><EFBFBD>ڴ˴<EFBFBD>

18
my/gitrun.sh Normal file
View File

@@ -0,0 +1,18 @@
#!/bin/sh
export LC_ALL="zh_CN.UTF-8"
rm -fr redkale
rm -fr src
rm -fr bin
rm -fr conf
git clone https://github.com/redkale/redkale.git
cp -fr redkale/src ./
cp -fr redkale/bin ./
cp -fr redkale/conf ./
mvn clean
mvn deploy

View File

@@ -1,94 +1,169 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.redkale</groupId>
<artifactId>redkale</artifactId>
<packaging>jar</packaging>
<url>http://redkale.org</url>
<name>RedkaleProject</name>
<url>https://redkale.org</url>
<description>redkale -- java framework</description>
<version>1.6.2</version>
<version>2.8.0-SNAPSHOT</version>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>11</maven.compiler.source>
<maven.compiler.target>11</maven.compiler.target>
<junit.version>5.9.0</junit.version>
<maven-jar-plugin.version>3.4.0</maven-jar-plugin.version>
<maven-gpg-plugin.version>3.2.4</maven-gpg-plugin.version>
<maven-source-plugin.version>3.2.0</maven-source-plugin.version>
<maven-assembly-plugin.version>3.7.0</maven-assembly-plugin.version>
<nexus-staging-plugin.version>1.7.0</nexus-staging-plugin.version>
<maven-compiler-plugin.version>3.13.0</maven-compiler-plugin.version>
<maven-surefire-plugin.version>3.2.5</maven-surefire-plugin.version>
<maven-failsafe-plugin.version>3.2.5</maven-failsafe-plugin.version>
<spotless-maven-plugin.version>2.43.0</spotless-maven-plugin.version>
<palantir-java-format.version>2.46.0</palantir-java-format.version>
</properties>
<licenses>
<license>
<name>Apache 2</name>
<url>http://www.apache.org/licenses/</url>
<url>https://www.apache.org/licenses/</url>
<distribution>repo</distribution>
<comments>Apache License</comments>
</license>
</license>
</licenses>
<dependencies>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter</artifactId>
<version>${junit.version}</version>
<scope>test</scope>
</dependency>
</dependencies>
<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>
<developers>
<developer>
<id>Redkale</id>
<name>redkale</name>
<email>redkale@qq.com</email>
<url>http://redkale.org</url>
<url>https://redkale.org</url>
<roles>
<role>Project Manager</role>
<role>Architect</role>
</roles>
<organization>redkale</organization>
<organizationUrl>http://redkale.org</organizationUrl>
<organizationUrl>https://redkale.org</organizationUrl>
<properties>
<dept>No</dept>
</properties>
<timezone>8</timezone>
</developer>
</developers>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
</properties>
<name>Redkale</name>
<distributionManagement>
<snapshotRepository>
<id>ossrh</id>
<url>https://oss.sonatype.org/content/repositories/snapshots</url>
</snapshotRepository>
<repository>
<id>ossrh</id>
<url>https://oss.sonatype.org/service/local/staging/deploy/maven2/</url>
<url>https://s01.oss.sonatype.org/service/local/staging/deploy/maven2/</url>
</repository>
<snapshotRepository>
<id>ossrh</id>
<url>https://s01.oss.sonatype.org/content/repositories/snapshots/</url>
</snapshotRepository>
</distributionManagement>
<scm>
<url>https://github.com/redkale/redkale</url>
<connection>scm:git:git@github.com/redkale/redkale.git</connection>
<developerConnection>scm:git:git@github.com:redkale/redkale.git</developerConnection>
</scm>
<issueManagement>
<system>GitHub Issues</system>
<url>https://github.com/redkale/redkale/issues</url>
</issueManagement>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.5.1</version>
<configuration>
<compilerArgument>-parameters</compilerArgument>
<version>${maven-compiler-plugin.version}</version>
<configuration>
<encoding>UTF-8</encoding>
<compilerArguments>
<verbose />
</compilerArguments>
</configuration>
<compilerArgs>
<arg>-parameters</arg>
</compilerArgs>
</configuration>
</plugin>
<!-- 需要注释掉, 否则会生成native-image配置信息
<plugin>
<groupId>org.redkale.maven.plugins</groupId>
<artifactId>redkale-maven-plugin</artifactId>
<version>1.1.0</version>
<executions>
<execution>
<id>redkale-compile</id>
<phase>process-classes</phase>
<goals>
<goal>compile</goal>
</goals>
</execution>
</executions>
</plugin>
-->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>2.6</version>
<version>${maven-jar-plugin.version}</version>
<configuration>
<archive>
<addMavenDescriptor>false</addMavenDescriptor>
<addMavenDescriptor>false</addMavenDescriptor>
<manifest>
<mainClass>org.redkale.boot.Application</mainClass>
</manifest>
</archive>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>${maven-surefire-plugin.version}</version>
<configuration>
<forkMode>once</forkMode>
<argLine>-Dfile.encoding=UTF-8</argLine>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-failsafe-plugin</artifactId>
<version>${maven-failsafe-plugin.version}</version>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-gpg-plugin</artifactId>
<version>1.6</version>
<version>${maven-gpg-plugin.version}</version>
<executions>
<execution>
<id>sign-artifacts</id>
@@ -96,13 +171,17 @@
<goals>
<goal>sign</goal>
</goals>
<configuration>
<signer>bc</signer>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-source-plugin</artifactId>
<version>3.0.0</version>
<version>${maven-source-plugin.version}</version>
<executions>
<execution>
<goals>
@@ -111,10 +190,11 @@
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-javadoc-plugin</artifactId>
<version>3.0.0</version>
<version>${maven-source-plugin.version}</version>
<executions>
<execution>
<goals>
@@ -122,16 +202,16 @@
</goals>
</execution>
</executions>
</plugin>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<version>3.0.0</version>
<version>${maven-assembly-plugin.version}</version>
<configuration>
<appendAssemblyId>false</appendAssemblyId>
<descriptors>
<descriptor>assembly.xml</descriptor>
<descriptor>my/assembly.xml</descriptor>
</descriptors>
</configuration>
<executions>
@@ -144,8 +224,56 @@
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.sonatype.plugins</groupId>
<artifactId>nexus-staging-maven-plugin</artifactId>
<version>${nexus-staging-plugin.version}</version>
<extensions>true</extensions>
<configuration>
<serverId>ossrh</serverId>
<nexusUrl>https://s01.oss.sonatype.org/</nexusUrl>
<autoReleaseAfterClose>true</autoReleaseAfterClose>
</configuration>
</plugin>
<plugin>
<groupId>com.diffplug.spotless</groupId>
<artifactId>spotless-maven-plugin</artifactId>
<version>${spotless-maven-plugin.version}</version>
<configuration>
<lineEndings>UNIX</lineEndings>
<formats>
<format>
<includes>
<include>src/**/java/**/*.java</include>
</includes>
<trimTrailingWhitespace/>
<endWithNewline/>
<indent>
<spaces>true</spaces>
<spacesPerTab>4</spacesPerTab>
</indent>
</format>
</formats>
<java>
<palantirJavaFormat>
<version>${palantir-java-format.version}</version>
<style>PALANTIR</style>
<formatJavadoc>true</formatJavadoc>
</palantirJavaFormat>
</java>
</configuration>
<executions>
<execution>
<goals>
<goal>check</goal>
</goals>
<phase>compile</phase>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
</project>

View File

@@ -1 +1,9 @@
<EFBFBD><EFBFBD>Ŀ¼<EFBFBD>µ<EFBFBD><EFBFBD>ļ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>sonatypeʱʹ<EFBFBD>ã<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڹ<EFBFBD><DAB9>̴<EFBFBD><CCB4><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD>Ŀ¼<EFBFBD>µ<EFBFBD><EFBFBD>ļ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>sonatypeʱʹ<EFBFBD>ã<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڹ<EFBFBD><DAB9>̴<EFBFBD><CCB4><EFBFBD><EFBFBD><EFBFBD>
ʹ<EFBFBD><EFBFBD>gpg<EFBFBD><EFBFBD><EFBFBD><EFBFBD>sonatype<EFBFBD><EFBFBD>Կ:
1<EFBFBD><EFBFBD> gpg <20>C-gen-key
2<EFBFBD><EFBFBD> gpg --keyserver keys.openpgp.org --send-keys <20><><EFBFBD>Ĺ<EFBFBD>Կ(һ<><D2BB>ʮ<EFBFBD><CAAE><EFBFBD><EFBFBD><EFBFBD>Ƶ<EFBFBD><C6B5><EFBFBD><EFBFBD>֣<EFBFBD><D6A3><EFBFBD><EFBFBD><EFBFBD>DE346FA5)
<20><>ʾ<EFBFBD><CABE> gpg: <20>ӹ<EFBFBD>Կ<EFBFBD><D4BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʧ<EFBFBD>ܣ<EFBFBD>Server indicated a failure <20><>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>

View File

@@ -21,6 +21,7 @@
<profile>
<id>release</id>
<!--
<build>
<plugins>
<plugin>
@@ -92,6 +93,7 @@
</plugin>
</plugins>
</build>
-->
</profile>
</profiles>
</settings>

196
pom.xml Normal file
View File

@@ -0,0 +1,196 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.redkale</groupId>
<artifactId>redkale</artifactId>
<packaging>jar</packaging>
<name>RedkaleProject</name>
<url>https://redkale.org</url>
<description>redkale -- java framework</description>
<version>2.8.1-SNAPSHOT</version>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>11</maven.compiler.source>
<maven.compiler.target>11</maven.compiler.target>
<junit.version>5.9.0</junit.version>
<jmh.version>1.37</jmh.version>
<maven-jar-plugin.version>3.4.0</maven-jar-plugin.version>
<maven-compiler-plugin.version>3.13.0</maven-compiler-plugin.version>
<maven-surefire-plugin.version>3.2.5</maven-surefire-plugin.version>
<maven-failsafe-plugin.version>3.2.5</maven-failsafe-plugin.version>
<spotless-maven-plugin.version>2.43.0</spotless-maven-plugin.version>
<palantir-java-format.version>2.46.0</palantir-java-format.version>
</properties>
<licenses>
<license>
<name>Apache 2</name>
<url>https://www.apache.org/licenses/</url>
<distribution>repo</distribution>
<comments>Apache License</comments>
</license>
</licenses>
<dependencies>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter</artifactId>
<version>${junit.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.openjdk.jmh</groupId>
<artifactId>jmh-core</artifactId>
<version>${jmh.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.openjdk.jmh</groupId>
<artifactId>jmh-generator-annprocess</artifactId>
<version>${jmh.version}</version>
<scope>test</scope>
</dependency>
</dependencies>
<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>
<developers>
<developer>
<id>Redkale</id>
<name>redkale</name>
<email>redkale@qq.com</email>
<url>https://redkale.org</url>
<roles>
<role>Project Manager</role>
<role>Architect</role>
</roles>
<organization>redkale</organization>
<organizationUrl>https://redkale.org</organizationUrl>
<properties>
<dept>No</dept>
</properties>
<timezone>8</timezone>
</developer>
</developers>
<scm>
<url>https://github.com/redkale/redkale</url>
<connection>scm:git:git@github.com/redkale/redkale.git</connection>
<developerConnection>scm:git:git@github.com:redkale/redkale.git</developerConnection>
</scm>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>${maven-compiler-plugin.version}</version>
<configuration>
<encoding>UTF-8</encoding>
<compilerArgs>
<arg>-parameters</arg>
</compilerArgs>
</configuration>
</plugin>
<!-- must commented, otherwise native-image information will be generated
<plugin>
<groupId>org.redkale.maven.plugins</groupId>
<artifactId>redkale-maven-plugin</artifactId>
<version>1.1.0</version>
<executions>
<execution>
<id>redkale-compile</id>
<phase>process-classes</phase>
<goals>
<goal>compile</goal>
</goals>
</execution>
</executions>
</plugin>
-->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>${maven-jar-plugin.version}</version>
<configuration>
<archive>
<addMavenDescriptor>false</addMavenDescriptor>
<manifest>
<mainClass>org.redkale.boot.Application</mainClass>
</manifest>
</archive>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>${maven-surefire-plugin.version}</version>
<configuration>
<forkMode>once</forkMode>
<argLine>-Dfile.encoding=UTF-8</argLine>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-failsafe-plugin</artifactId>
<version>${maven-failsafe-plugin.version}</version>
</plugin>
<plugin>
<groupId>com.diffplug.spotless</groupId>
<artifactId>spotless-maven-plugin</artifactId>
<version>${spotless-maven-plugin.version}</version>
<configuration>
<lineEndings>UNIX</lineEndings>
<formats>
<format>
<includes>
<include>src/**/java/**/*.java</include>
</includes>
<trimTrailingWhitespace/>
<endWithNewline/>
<indent>
<spaces>true</spaces>
<spacesPerTab>4</spacesPerTab>
</indent>
</format>
</formats>
<java>
<palantirJavaFormat>
<version>${palantir-java-format.version}</version>
<style>PALANTIR</style>
<formatJavadoc>true</formatJavadoc>
</palantirJavaFormat>
</java>
</configuration>
<executions>
<execution>
<goals>
<goal>check</goal>
</goals>
<phase>compile</phase>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>

View File

@@ -0,0 +1 @@

View File

@@ -1,313 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<!--
文件说明:
${APP_HOME} 指当前程序的根目录APP_HOME
没注明唯一的节点可多个存在
required 被声明required的属性值不能为空
group
/ / \ \
/ / \ \
/ / \ \
node1 node2 node3 node4
/ \
/ \
/ \
/ \
serviceid1 serviceid2
/ \ / \
serviceid1_name1 serviceid1_name2 serviceid2_name1 serviceid2_name2
-->
<!--
address: 本地局域网的IP地址 默认值为默认网卡的ip当不使用默认值需要指定值如192.168.1.22
port: required 程序的管理Server的端口用于关闭或者与监管系统进行数据交互
lib: 加上额外的lib路径,多个路径用分号;隔开; 默认为空。 例如: ${APP_HOME}/lib/a.jar;${APP_HOME}/lib2/b.jar;
-->
<application port="6560" lib="">
<!--
【节点全局唯一】
所有服务所需的资源
-->
<resources>
<!--
【节点全局唯一】
transport节点只能有一个用于配置所有Transport的池参数没配置该节点将自动创建一个。
threads 线程总数, 默认: <group>节点数*CPU核数*2
bufferCapacity: ByteBuffer的初始化大小 默认: 32K;
bufferPoolSize ByteBuffer池的大小默认: 线程总数*4
readTimeoutSeconds: TCP读取超时秒数, 默认为6秒 为0表示无超时限制
writeTimeoutSeconds: TCP写入超时秒数, 默认为6秒 为0表示无超时限制
strategy: 远程请求的负载均衡策略, 必须是org.redkale.net.TransportStrategy的实现类
-->
<transport bufferCapacity="32K" bufferPoolSize="32" threads="32" readTimeoutSeconds="6" writeTimeoutSeconds="6"/>
<!--
一个组包含多个node 同一Service服务可以由多个进程提供这些进程称为一个GROUP且同一GROUP内的进程必须在同一机房或局域网内
一个group节点对应一个 Transport 对象。
name: 服务组ID长度不能超过11个字节. 默认为空字符串。 注意: name不能包含$符号。
protocol值范围UDP TCP 默认TCP
subprotocol: 子协议,预留字段。默认值为空
注意: 一个node只能所属一个group。只要存在protocol=SNCP的Server节点信息 就必须有group节点信息。
-->
<group name="" protocol="TCP">
<!--
需要将本地node的addr与port列在此处。
同一个<node>节点值只能存在一个<group>节点内即同一个addr+port只能属于一个group。
addr: required IP地址
port: required 端口
-->
<node addr="127.0.0.1" port="7070"/>
</group>
<!--
全局的数据源设置, 可以是CacheSource、DataSource JDBC的DataSource通常通过persistence.xml配置此处多用于CacheSource的配置
name: 资源名,用于依赖注入。
value类名必须是CacheSource或DataSource的子类且必须实现Service接口。如果是DataSource.class系统自动映射成DataJdbcSource.class
groups: 指定groups。
xxx: 其他属性与子节点通过Service.init方法传入的AnyValue获取。
-->
<source name="redis" value="org.redkalex.cache.RedisCacheSource" xxx="16">
<node addr="127.0.0.1" port="7070"/>
</source>
<!--
Application启动的监听事件,可配置多个节点
value: 类名必须是ApplicationListener的子类
-->
<listener value="org.redkalex.xxx.XXXApplicationListener"/>
<!--
【节点全局唯一】
全局的参数配置, 可以通过@Resource(name="property.xxxxxx") 进行注入<property>的信息, 被注解的字段类型只能是String、primitive class
如果name是system.property.开头的值将会在进程启动时进行System.setProperty("yyyy", "YYYYYY")操作。
如果name是mimetype.property.开头的值将会在进程启动时进行MimeType.add("yyyy", "YYYYYY")操作。
load: 加载文件,多个用;隔开。
默认置入的system.property.的有:
System.setProperty("net.transport.poolmaxconns", "100");
System.setProperty("net.transport.pinginterval", "30");
System.setProperty("net.transport.checkinterval", "30");
System.setProperty("convert.json.tiny", "true");
System.setProperty("convert.bson.tiny", "true");
System.setProperty("convert.json.pool.size", "128");
System.setProperty("convert.bson.pool.size", "128");
System.setProperty("convert.json.writer.buffer.defsize", "4096");
System.setProperty("convert.bson.writer.buffer.defsize", "4096");
<properties>节点下也可包含非<property>节点.
非<property>其节点可以通过@Resource(name="properties.xxxxxx")进行注入, 被注解的字段类型只能是AnyValue、AnyValue[]
-->
<properties load="config.properties">
<property name="system.property.yyyy" value="YYYYYY"/>
<property name="xxxxxx" value="XXXXXXXX"/>
<property name="xxxxxx" value="XXXXXXXX"/>
<property name="xxxxxx" value="XXXXXXXX"/>
</properties>
</resources>
<!--
protocol: required server所启动的协议Redkale内置的有HTTP、SNCP、WATCH。协议均使用TCP实现; WATCH服务只能存在一个。
name: 服务的名称用于监控识别一个配置文件中的server.name不能重复,命名规则: 字母、数字、下划线
host: 服务所占address 默认: 0.0.0.0
port: required 服务所占端口
root: 如果是web类型服务则包含页面 默认:{APP_HOME}/root
lib: server额外的class目录 默认为${APP_HOME}/libs/*;
excludelibs: 排除lib.path与excludes中的正则表达式匹配的路径, 多个正则表达式用分号;隔开
charset: 文本编码, 默认: UTF-8
backlog: 默认10K
threads 线程数, 默认: CPU核数*2最小8个
maxconns最大连接数, 小于1表示无限制 默认: 0
maxbody: request.body最大值 默认: 64K
bufferCapacity: ByteBuffer的初始化大小 TCP默认: 32K; (HTTP 2.0、WebSocket必须要16k以上); UDP默认: 1350B
bufferPoolSize ByteBuffer池的大小默认: 线程数*4
responsePoolSize Response池的大小默认: 线程数*2
aliveTimeoutSeconds: KeepAlive读操作超时秒数 默认30 0表示永久不超时; -1表示禁止KeepAlive
readTimeoutSeconds: 读操作超时秒数, 默认0 表示永久不超时
writeTimeoutSeconds: 写操作超时秒数, 默认0 表示永久不超时
netimpl: ProtocolServer的实现类。TCP情况下值可以是aio或nio默认值为aioUDP情况下值可以是bio默认值为bio
interceptor: 启动/关闭NodeServer时被调用的拦截器实现类必须是org.redkale.boot.NodeInterceptor的子类默认为null
-->
<server protocol="HTTP" host="127.0.0.1" port="6060" root="root" lib="">
<!--
【节点在<server>中唯一】
value: 创建SSLContext的实现类, 可自定义必须是org.redkale.net.SSLCreator的子类
clientauth: true/false/want
keystorepass: KEY密码
keystorefile: KEY文件
truststorepass: TRUST密码
truststorefile: TRUST文件
-->
<ssl creator=""/>
<!--
加载所有的Service服务;
在同一个进程中同一个name同一类型的Service将共用同一个实例
autoload="true" 默认值. 自动加载classpath下所有的Service类
autoload="false" 需要显著的指定Service类
includes 当autoload="true" 拉取类名与includes中的正则表达式匹配的类, 多个正则表达式用分号;隔开
excludes 当autoload="true" 排除类名与excludes中的正则表达式匹配的类, 多个正则表达式用分号;隔开
groups: 所属组的节点,多个节点值用;隔开如果配置文件中存在多个SNCP协议的Server节点需要显式指定group属性.
当 protocol == SNCP 时 group表示当前Server与哪些节点组关联。
当 protocol != SNCP 时 group只能是空或者一个group的节点值不能为多个节点值。
-->
<services autoload="true" includes="" excludes="">
<!-- 显著加载指定的Service的接口类 -->
<service value="com.xxx.XXX1Service"/>
<!--
name: 显式指定name覆盖默认的空字符串值。 注意: name不能包含$符号。
groups: 显式指定groups覆盖<services>节点的groups默认值。
ignore: 是否禁用, 默认为false。
-->
<service value="com.xxx.XXX2Service" name="" groups="xxx;yyy"/>
<!-- 给Service增加配置属性 -->
<service value="com.xxx.XXX1Service">
<!-- property值在public void init(AnyValue conf)方法中可以通过AnyValue properties=conf.getAnyValue("properties")获取 -->
<property name="xxxxxx" value="XXXXXXXX"/>
<property name="xxxxxx" value="XXXXXXXX"/>
</service>
</services>
<!--
加载所有的Filter服务;
autoload="true" 默认值.
autoload="false" 需要显著的指定Filter类
includes 当autoload="true" 拉取类名与includes中的正则表达式匹配的类, 多个正则表达式用分号;隔开
excludes 当autoload="true" 排除类名与excludes中的正则表达式匹配的类, 多个正则表达式用分号;隔开
-->
<filters autoload="true" includes="" excludes="">
<!--
显著加载指定的Filter类
value=: Filter类名。必须与Server的协议层相同HTTP必须是HttpFilter
ignore: 是否禁用, 默认为false。
-->
<!-- 显著加载指定的Filter类 -->
<filter value="com.xxx.XXX1Filter"/>
<!-- 给Filter增加配置属性 -->
<filter value="com.xxx.XXX12Filter">
<!-- property值在public void init(AnyValue conf)方法中可以通过AnyValue properties=conf.getAnyValue("properties")获取 -->
<property name="xxxxxx" value="XXXXXXXX"/>
<property name="xxxxxx" value="XXXXXXXX"/>
</filter>
</filters>
<!--
REST的核心配置项
当Server为HTTP协议时, rest节点才有效。存在[rest]节点则Server启动时会加载REST服务, 节点可以多个,(WATCH协议不需要设置系统会自动生成)
path: servlet的ContextPath前缀 默认为空
base: REST服务的BaseServlet必须是 org.redkale.net.http.HttpServlet 的子类,且子类必须标记@HttpUserType。
autoload默认值"true" 默认值. 加载当前server所能使用的Servce对象;
includes当autoload="true" 拉取类名与includes中的正则表达式匹配的类, 多个正则表达式用分号;隔开
excludes当autoload="true" 排除类名与excludes中的正则表达式匹配的类, 多个正则表达式用分号;隔开
-->
<rest path="/pipes" base="org.redkale.net.http.HttpServlet" autoload="true" includes="" excludes="">
<!--
value: Service类名列出的表示必须被加载的Service对象
ignore: 是否忽略设置为true则不会加载该Service对象默认值为false
-->
<service value="com.xxx.XXXXService"/>
<!--
value: WebSocket类名列出的表示必须被加载且标记为@RestWebSocket的WebSocket对象
ignore: 是否忽略设置为true则不会加载该RestWebSocket对象默认值为false
-->
<websocket value="com.xxx.XXXXRestWebSocket"/>
</rest>
<!--
【节点在<server>中唯一】
当Server为HTTP协议时, request节点才有效。
remoteaddr 节点: 替换请求方节点的IP地址 通常请求方是由nginx等web静态服务器转发过的则需要配置该节点。
且value值只能是以request.headers.开头表示从request.headers中获取对应的header值。
例如下面例子获取request.getRemoteAddr()值如果header存在X-RemoteAddress值则返回X-RemoteAddress值不存在返回getRemoteAddress()。
-->
<request>
<remoteaddr value="request.headers.X-RemoteAddress"/>
</request>
<!--
【节点在<server>中唯一】
当Server为HTTP协议时, response节点才有效。
contenttype: plain值为调用finish时的ContentType; 默认值: text/plain; charset=utf-8
json值为调用finishJson时的ContentType; 默认值: application/json; charset=utf-8
defcookie 节点: 当response里输出的cookie没有指定domain 和path时使用该节点的默认值。
如果addheader、setheader 的value值以request.parameters.开头则表示从request.parameters中获取对应的parameter值
如果addheader、setheader 的value值以request.headers.开头则表示从request.headers中获取对应的header值
例如下面例子是在Response输出header时添加两个header一个addHeader 一个setHeader
options 节点: 设置了该节点且auto=true当request的method=OPTIONS自动设置addheader、setheader并返回200状态码
date 节点: 设置了该节点且period有值(单位:毫秒);返回response会包含Date头信息默认为period=0
period=0表示实时获取当前时间;
period<0表示不设置date;
period>0表示定时获取时间; 设置1000表示每秒刷新Date时间
-->
<response>
<contenttype plain="text/plain; charset=utf-8" json="application/json; charset=utf-8"/>
<defcookie domain="" path=""/>
<addheader name="Access-Control-Allow-Origin" value="request.headers.Origin" />
<setheader name="Access-Control-Allow-Headers" value="request.headers.Access-Control-Request-Headers"/>
<setheader name="Access-Control-Allow-Credentials" value="true"/>
<options auto="true" />
<date period="0" />
</response>
<!--
【节点在<server>中唯一】
当Server为HTTP协议时render才有效. 指定输出引擎的实现类
value: 输出引擎的实现类, 必须是org.redkale.net.http.HttpRender的子类
-->
<render value="org.redkalex.htel.HttpTemplateRender"/>
<!--
【节点在<server>中唯一】
当Server为HTTP协议时ResourceServlet才有效. 默认存在一个有默认属性的resource-servlet节点
webroot: web资源的根目录, 默认取server节点中的root值
servlet: 静态资源HttpServlet的实现默认使用HttpResourceServlet
index : 启始页默认值index.html
-->
<resource-servlet webroot="root" index="index.html">
<!--
【节点在<resource-servlet>中唯一】
资源缓存的配置, 默认存在一个含默认属性的caches节点
limit: 资源缓存最大容量, 默认: 0, 为0表示不缓存 单位可以是B、K、M、G不区分大小写
lengthmax: 可缓存的文件大小上限, 默认: 1M超过1M的文件不会被缓存
watch: 是否监控缓存文件的变化, 默认为false不监控
-->
<cache limit="0M" lengthmax="1M" watch="false"/>
<!--
支持类似nginx中的rewrite 目前只支持静态资源对静态资源的跳转。
type: 匹配的类型, 目前只支持location(匹配requestURI), 默认: location
match: 匹配的正则表达式
forward: 需跳转后的资源链接
例如下面例子是将/xxx-yyy.html的页面全部跳转到/xxx.html
-->
<rewrite type="location" match="^/([^-]+)-[^-\.]+\.html(.*)" forward="/$1.html"/>
</resource-servlet>
<!--
加载所有的Servlet服务;
path: servlet的ContextPath前缀 默认为空
autoload="true" 默认值. 自动加载classpath下所有的Servlet类
autoload="false" 需要显著的指定Service类
includes 当autoload="true" 拉取类名与includes中的正则表达式匹配的类, 多个正则表达式用分号;隔开
excludes 当autoload="true" 排除类名与excludes中的正则表达式匹配的类, 多个正则表达式用分号;隔开
-->
<servlets path="/pipes" autoload="true" includes="" excludes="">
<!--
显著加载指定的Servlet类
value=: Servlet类名。必须与Server的协议层相同HTTP必须是HttpServlet
ignore: 是否禁用, 默认为false。
-->
<servlet value="com.xxx.XXX1Servlet" />
<servlet value="com.xxx.XXX2Servlet" />
<servlet value="com.xxx.XXX3Servlet" >
<property name="xxxxxx" value="XXXXXXXX"/>
<property name="yyyyyy" value="YYYYYYYY"/>
</servlet>
</servlets>
</server>
<server protocol="SNCP" host="127.0.0.1" port="7070" root="root" lib="">
<!-- 参数完全同上 -->
<services autoload="true" includes="" excludes="" />
</server>
</application>

View File

@@ -1,57 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- 其配置算是标准的JPA配置文件的缩略版 -->
<persistence>
<!-- 系统基本库 -->
<persistence-unit name="demouser">
<properties>
<!--
DataSource的实现类没有设置默认为org.redkale.source.DataJdbcSource的实现使用常规基于JDBC的数据库驱动一般无需设置
-->
<property name="javax.persistence.datasource" value="org.redkale.source.DataJdbcSource"/>
<!--
是否开启缓存(标记为@Cacheable的Entity类),值目前只支持两种: ALL: 所有开启缓存。 NONE: 关闭所有缓存, 非NONE字样统一视为ALL
-->
<property name="javax.persistence.cachemode" value="ALL"/>
<property name="javax.persistence.jdbc.url" value="jdbc:mysql://127.0.0.1:3306/dbuser?characterEncoding=utf8"/>
<!--
javax.persistence.jdbc.driver在JPA的值是JDBC驱动Redkale有所不同值应该是javax.sql.DataSource的子类。
为了兼容用户习惯Redkale内置常见JDBC驱动到javax.sql.DataSource的映射关系
org.mariadb.jdbc.Driver —————— org.mariadb.jdbc.MySQLDataSource
org.postgresql.Driver —————— org.postgresql.ds.PGConnectionPoolDataSource
com.mysql.jdbc.Driver —————— com.mysql.jdbc.jdbc2.optional.MysqlConnectionPoolDataSource
com.mysql.cj.jdbc.Driver —————— com.mysql.cj.jdbc.MysqlConnectionPoolDataSource
oracle.jdbc.driver.OracleDriver —————— oracle.jdbc.pool.OracleConnectionPoolDataSource
com.microsoft.sqlserver.jdbc.SQLServerDriver —————— com.microsoft.sqlserver.jdbc.SQLServerConnectionPoolDataSource
org.h2.Driver —————— org.h2.jdbcx.JdbcDataSource
因此 com.mysql.jdbc.Driver 会被自动转换成 com.mysql.jdbc.jdbc2.optional.MysqlConnectionPoolDataSource
并且如果JDBC驱动是以上几个版本javax.persistence.jdbc.driver属性都可以省略Redkale会根据javax.persistence.jdbc.url的值来识别驱动
<property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver"/>
<property name="javax.persistence.jdbc.source" value="com.mysql.jdbc.jdbc2.optional.MysqlConnectionPoolDataSource"/>
-->
<property name="javax.persistence.jdbc.user" value="root"/>
<property name="javax.persistence.jdbc.password" value="123456"/>
<!-- 最大连接数默认值CPU数*16 -->
<property name="javax.persistence.connections.limit" value="32"/>
<!-- 包含的SQL模板相当于反向LIKE不同的JDBC驱动的SQL语句不一样Redkale内置了MySQL的语句 -->
<property name="javax.persistence.contain.sqltemplate" value="LOCATE(${keystr}, ${column}) > 0"/>
<property name="javax.persistence.notcontain.sqltemplate" value="LOCATE(${keystr}, ${column}) = 0"/>
<!-- 复制表结构的SQL模板Redkale内置了MySQL的语句 -->
<property name="javax.persistence.tablenotexist.sqlstates" value="42000;42S02"/>
<property name="javax.persistence.tablecopy.sqltemplate" value="CREATE TABLE ${newtable} LIKE ${oldtable}"/>
</properties>
</persistence-unit>
<!-- IM消息库 -->
<persistence-unit name="demoim">
<properties>
<!-- jdbc:mysql://127.0.0.1:3306/dbim?autoReconnect=true&amp;autoReconnectForPools=true&amp;characterEncoding=utf8 -->
<property name="javax.persistence.jdbc.url" value="jdbc:mysql://127.0.0.1:3306/dbim?characterEncoding=utf8"/>
<property name="javax.persistence.jdbc.user" value="root"/>
<property name="javax.persistence.jdbc.password" value="123456"/>
</properties>
</persistence-unit>
</persistence>

View File

@@ -1,32 +0,0 @@
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package javax.annotation;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
/**
* @since Common Annotations 1.0
*/
@Target({ElementType.TYPE, ElementType.METHOD, ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
public @interface Resource {
public enum AuthenticationType {
CONTAINER,
APPLICATION
}
public String name() default "";
public Class<?> type() default Object.class;
public AuthenticationType authenticationType() default AuthenticationType.CONTAINER;
public boolean shareable() default true;
public String description() default "";
public String mappedName() default "";
public String lookup() default "";
}

View File

@@ -1,54 +0,0 @@
/** *****************************************************************************
* Copyright (c) 2008 - 2013 Oracle Corporation. All rights reserved.
*
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License v1.0 and Eclipse Distribution License v. 1.0
* which accompanies this distribution.
* The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html
* and the Eclipse Distribution License is available at
* http://www.eclipse.org/org/documents/edl-v10.php.
*
* Contributors:
* Linda DeMichiel - Java Persistence 2.1
* Linda DeMichiel - Java Persistence 2.0
*
***************************************************************************** */
package javax.persistence;
import static java.lang.annotation.ElementType.TYPE;
import static java.lang.annotation.RetentionPolicy.RUNTIME;
import java.lang.annotation.Retention;
import java.lang.annotation.Target;
/**
* Specifies whether an entity should be cached if caching is enabled
* when the value of the <code>persistence.xml</code> caching element
* is <code>ENABLE_SELECTIVE</code> or <code>DISABLE_SELECTIVE</code>.
* The value of the <code>Cacheable</code> annotation is inherited by
* subclasses; it can be overridden by specifying
* <code>Cacheable</code> on a subclass.
*
* <p>
* <code>Cacheable(false)</code> means that the entity and its state must
* not be cached by the provider.
*
* @since Java Persistence 2.0
*/
@Target({TYPE})
@Retention(RUNTIME)
public @interface Cacheable {
/**
* (Optional) Whether or not the entity should be cached.
*
* @return boolean
*/
boolean value() default true;
/**
* (Optional) 定时自动更新缓存的周期秒数为0表示不做定时更新 大于0表示每经过interval秒后会自动从数据库中拉取数据更新Cache
*
* @return int
*/
int interval() default 0;
}

View File

@@ -1,139 +0,0 @@
/** *****************************************************************************
* Copyright (c) 2008 - 2013 Oracle Corporation. All rights reserved.
*
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License v1.0 and Eclipse Distribution License v. 1.0
* which accompanies this distribution.
* The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html
* and the Eclipse Distribution License is available at
* http://www.eclipse.org/org/documents/edl-v10.php.
*
* Contributors:
* Linda DeMichiel - Java Persistence 2.1
* Linda DeMichiel - Java Persistence 2.0
*
***************************************************************************** */
package javax.persistence;
import java.lang.annotation.Target;
import java.lang.annotation.Retention;
import static java.lang.annotation.ElementType.METHOD;
import static java.lang.annotation.ElementType.FIELD;
import static java.lang.annotation.RetentionPolicy.RUNTIME;
/**
* Specifies the mapped column for a persistent property or field.
* If no <code>Column</code> annotation is specified, the default values apply.
*
* <blockquote><pre>
* Example 1:
*
* &#064;Column(name="DESC", nullable=false, length=512)
* public String getDescription() { return description; }
*
* Example 2:
*
* &#064;Column(name="DESC",
* columnDefinition="CLOB NOT NULL",
* table="EMP_DETAIL")
* &#064;Lob
* public String getDescription() { return description; }
*
* Example 3:
*
* &#064;Column(name="ORDER_COST", updatable=false, precision=12, scale=2)
* public BigDecimal getCost() { return cost; }
*
* </pre></blockquote>
*
*
* @since Java Persistence 1.0
*/
@Target({METHOD, FIELD})
@Retention(RUNTIME)
public @interface Column {
/**
* (Optional) The name of the column. Defaults to
* the property or field name.
*
* @return String
*/
String name() default "";
/**
* (Optional) The comment of the column.
*
* @return String
*/
String comment() default "";
/**
* (Optional) Whether the column is a unique key. This is a
* shortcut for the <code>UniqueConstraint</code> annotation at the table
* level and is useful for when the unique key constraint
* corresponds to only a single column. This constraint applies
* in addition to any constraint entailed by primary key mapping and
* to constraints specified at the table level.
*
* @return boolean
*/
boolean unique() default false;
/**
* (Optional) Whether the database column is nullable.
*
* @return boolean
*/
boolean nullable() default true;
/**
* (Optional) Whether the column is included in SQL INSERT
* statements generated by the persistence provider.
*
* @return boolean
*/
boolean insertable() default true;
/**
* (Optional) Whether the column is included in SQL UPDATE
* statements generated by the persistence provider.
*
* @return boolean
*/
boolean updatable() default true;
/**
* (Optional) The name of the table that contains the column.
* If absent the column is assumed to be in the primary table.
*
* @return String
*/
String table() default "";
/**
* (Optional) The column length. (Applies only if a
* string-valued column is used.)
*
* @return int
*/
int length() default 255;
/**
* (Optional) The precision for a decimal (exact numeric)
* column. (Applies only if a decimal column is used.)
* Value must be set by developer if used when generating
* the DDL for the column.
*
* @return int
*/
int precision() default 0;
/**
* (Optional) The scale for a decimal (exact numeric) column.
* (Applies only if a decimal column is used.)
*
* @return int
*/
int scale() default 0;
}

View File

@@ -1,50 +0,0 @@
/*******************************************************************************
* Copyright (c) 2008 - 2013 Oracle Corporation. All rights reserved.
*
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License v1.0 and Eclipse Distribution License v. 1.0
* which accompanies this distribution.
* The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html
* and the Eclipse Distribution License is available at
* http://www.eclipse.org/org/documents/edl-v10.php.
*
* Contributors:
* Linda DeMichiel - Java Persistence 2.1
* Linda DeMichiel - Java Persistence 2.0
*
******************************************************************************/
package javax.persistence;
import java.lang.annotation.Target;
import java.lang.annotation.Retention;
import java.lang.annotation.Documented;
import static java.lang.annotation.ElementType.TYPE;
import static java.lang.annotation.RetentionPolicy.RUNTIME;
/**
* Specifies that the class is an entity. This annotation is applied to the
* entity class.
*
* @since Java Persistence 1.0
*/
@Documented
@Target(TYPE)
@Retention(RUNTIME)
public @interface Entity {
/**
* (Optional) The entity name. Defaults to the unqualified
* name of the entity class. This name is used to refer to the
* entity in queries. The name must not be a reserved literal
* in the Java Persistence query language.
* @return String
*/
String name() default "";
/**
* (Optional) The comment of the entity.
*
* @return String
*/
String comment() default "";
}

View File

@@ -1,55 +0,0 @@
/*******************************************************************************
* Copyright (c) 2008 - 2013 Oracle Corporation. All rights reserved.
*
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License v1.0 and Eclipse Distribution License v. 1.0
* which accompanies this distribution.
* The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html
* and the Eclipse Distribution License is available at
* http://www.eclipse.org/org/documents/edl-v10.php.
*
* Contributors:
* Linda DeMichiel - Java Persistence 2.1
* Linda DeMichiel - Java Persistence 2.0
*
******************************************************************************/
package javax.persistence;
import java.lang.annotation.Target;
import java.lang.annotation.Retention;
import static java.lang.annotation.ElementType.FIELD;
import static java.lang.annotation.ElementType.METHOD;
import static java.lang.annotation.RetentionPolicy.RUNTIME;
/**
* Specifies the primary key of an entity.
* The field or property to which the <code>Id</code> annotation is applied
* should be one of the following types: any Java primitive type;
* any primitive wrapper type;
* <code>String</code>;
* <code>java.util.Date</code>;
* <code>java.sql.Date</code>;
* <code>java.math.BigDecimal</code>;
* <code>java.math.BigInteger</code>.
*
* <p>The mapped column for the primary key of the entity is assumed
* to be the primary key of the primary table. If no <code>Column</code> annotation
* is specified, the primary key column name is assumed to be the name
* of the primary key property or field.
*
* <pre>
* Example:
*
* &#064;Id
* public Long getId() { return id; }
* </pre>
*
* @see Column
* see GeneratedValue
*
* @since Java Persistence 1.0
*/
@Target({METHOD, FIELD})
@Retention(RUNTIME)
public @interface Id {}

View File

@@ -1,69 +0,0 @@
/** *****************************************************************************
* Copyright (c) 2011 - 2013 Oracle Corporation. All rights reserved.
*
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License v1.0 and Eclipse Distribution License v. 1.0
* which accompanies this distribution.
* The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html
* and the Eclipse Distribution License is available at
* http://www.eclipse.org/org/documents/edl-v10.php.
*
* Contributors:
* Linda DeMichiel - Java Persistence 2.1
*
***************************************************************************** */
package javax.persistence;
import static java.lang.annotation.RetentionPolicy.RUNTIME;
import java.lang.annotation.Retention;
import java.lang.annotation.Target;
/**
* Used in schema generation to specify creation of an index.
* <p>
* Note that it is not necessary to specify an index for a primary key,
* as the primary key index will be created automatically.
*
* <p>
* The syntax of the <code>columnList</code> element is a
* <code>column_list</code>, as follows:
*
* <pre>
* column::= index_column [,index_column]*
* index_column::= column_name [ASC | DESC]
* </pre>
*
* <p>
* If <code>ASC</code> or <code>DESC</code> is not specified,
* <code>ASC</code> (ascending order) is assumed.
*
* @since Java Persistence 2.1
*
*/
@Target({})
@Retention(RUNTIME)
public @interface Index {
/**
* (Optional) The name of the index; defaults to a provider-generated name.
*
* @return String
*/
String name() default "";
/**
* (Required) The names of the columns to be included in the index,
* in order.
*
* @return String
*/
String columnList();
/**
* (Optional) Whether the index is unique.
*
* @return boolean
*/
boolean unique() default false;
}

View File

@@ -1,87 +0,0 @@
/** *****************************************************************************
* Copyright (c) 2008 - 2013 Oracle Corporation. All rights reserved.
*
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License v1.0 and Eclipse Distribution License v. 1.0
* which accompanies this distribution.
* The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html
* and the Eclipse Distribution License is available at
* http://www.eclipse.org/org/documents/edl-v10.php.
*
* Contributors:
* Linda DeMichiel - Java Persistence 2.1
* Linda DeMichiel - Java Persistence 2.0
*
***************************************************************************** */
package javax.persistence;
import java.lang.annotation.Target;
import java.lang.annotation.Retention;
import static java.lang.annotation.ElementType.TYPE;
import static java.lang.annotation.RetentionPolicy.RUNTIME;
/**
* Specifies the primary table for the annotated entity. Additional
* tables may be specified using SecondaryTable or SecondaryTables annotation.
*
* <p>
* If no <code>Table</code> annotation is specified for an entity
* class, the default values apply.
*
* <pre>
* Example:
*
* &#064;Entity
* &#064;Table(name="CUST", schema="RECORDS")
* public class Customer { ... }
* </pre>
*
* @since Java Persistence 1.0
*/
@Target(TYPE)
@Retention(RUNTIME)
public @interface Table {
/**
* (Optional) The name of the table.
* <p>
* Defaults to the entity name.
*
* @return String
*/
String name() default "";
/** (Optional) The catalog of the table.
* <p>
* Defaults to the default catalog.
*
* @return String
*/
String catalog() default "";
/**
* (Optional) Unique constraints that are to be placed on
* the table. These are only used if table generation is in
* effect. These constraints apply in addition to any constraints
* specified by the <code>Column</code> and <code>JoinColumn</code>
* annotations and constraints entailed by primary key mappings.
* <p>
* Defaults to no additional constraints.
* @return UniqueConstraint[]
*/
UniqueConstraint[] uniqueConstraints() default {};
/**
* (Optional) Indexes for the table. These are only used if
* table generation is in effect. Note that it is not necessary
* to specify an index for a primary key, as the primary key
* index will be created automatically.
*
* @return indexes
* @since Java Persistence 2.1
*/
Index[] indexes() default {};
String comment() default "";
}

View File

@@ -1,45 +0,0 @@
/*******************************************************************************
* Copyright (c) 2008 - 2013 Oracle Corporation. All rights reserved.
*
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License v1.0 and Eclipse Distribution License v. 1.0
* which accompanies this distribution.
* The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html
* and the Eclipse Distribution License is available at
* http://www.eclipse.org/org/documents/edl-v10.php.
*
* Contributors:
* Linda DeMichiel - Java Persistence 2.1
* Linda DeMichiel - Java Persistence 2.0
*
******************************************************************************/
package javax.persistence;
import java.lang.annotation.Target;
import java.lang.annotation.Retention;
import static java.lang.annotation.ElementType.METHOD;
import static java.lang.annotation.ElementType.FIELD;
import static java.lang.annotation.RetentionPolicy.RUNTIME;
/**
* Specifies that the property or field is not persistent. It is used
* to annotate a property or field of an entity class, mapped
* superclass, or embeddable class.
*
* <pre>
* Example:
*
* &#064;Entity
* public class Employee {
* &#064;Id int id;
* &#064;Transient User currentUser;
* ...
* }
* </pre>
*
* @since Java Persistence 1.0
*/
@Target({METHOD, FIELD})
@Retention(RUNTIME)
public @interface Transient {}

View File

@@ -1,56 +0,0 @@
/** *****************************************************************************
* Copyright (c) 2008 - 2013 Oracle Corporation. All rights reserved.
*
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License v1.0 and Eclipse Distribution License v. 1.0
* which accompanies this distribution.
* The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html
* and the Eclipse Distribution License is available at
* http://www.eclipse.org/org/documents/edl-v10.php.
*
* Contributors:
* Linda DeMichiel - Java Persistence 2.1
* Linda DeMichiel - Java Persistence 2.0
*
***************************************************************************** */
package javax.persistence;
import java.lang.annotation.Target;
import java.lang.annotation.Retention;
import static java.lang.annotation.RetentionPolicy.RUNTIME;
/**
* Specifies that a unique constraint is to be included in
* the generated DDL for a primary or secondary table.
*
* <pre>
* Example:
* &#064;Entity
* &#064;Table(
* name="EMPLOYEE",
* uniqueConstraints=
* &#064;UniqueConstraint(columnNames={"EMP_ID", "EMP_NAME"})
* )
* public class Employee { ... }
* </pre>
*
* @since Java Persistence 1.0
*/
@Target({})
@Retention(RUNTIME)
public @interface UniqueConstraint {
/** (Optional) Constraint name. A provider-chosen name will be chosen
* if a name is not specified.
*
* @return String
* @since Java Persistence 2.0
*/
String name() default "";
/** (Required) An array of the column names that make up the constraint.
*
* @return String[]
*/
String[] columnNames();
}

View File

@@ -0,0 +1,110 @@
<!doctype html>
<html>
<head>
<meta charset="UTF-8"><title>接口文档(apidoc生成)</title>
<style type="text/css">
body {text-align: center;margin:auto;}
a{text-decoration: none;}
.table {margin: auto;border-collapse: collapse;border-spacing: 0;display: block;width: 100%;overflow: auto;word-break: normal;word-break: keep-all;}
.table td,.table th{padding: 0.2rem 0.8rem 0.2rem 0.8rem;border: 1px solid #aaa;}
.table td {text-align: left;}
.s {font-size: 0.8rem; vertical-align: middle;}
.subtable {border-spacing: 0;border: 0;margin:0;}
.subtable td{border: 0;padding: 0 0 0 10px;}
.typetable {border-spacing: 0;border: 0;margin:0;}
.typetable td{border: 0;padding: 2px 20px 2px 10px;}
.typetable .l{border-bottom: 1px solid red;}
</style>
</head>
<body>
<script>
var createhtml = function (jsoncontent) {
var classmap = jsoncontent.types;
var html = [];
html.push('<div style="width:' + Math.floor(window.screen.width * 0.9) + 'px;margin:0 auto;text-align: center;">');
html.push('<br/><br/><table class="table" align="center">');
for (var i = 0; i < jsoncontent.servers.length; i++) {
var servlets = jsoncontent.servers[i].servlets;
if (servlets.length && (servlets[0].comment || "").indexOf("【") === 0) {
servlets.sort(function (a, b) {
return a.comment > b.comment ? -1 : (a.comment == b.comment ? 0 : 1);
});
}
for (var j = 0; j < servlets.length; j++) {
var servlet = servlets[j];
if (html.length > 2) html.push(' <tr><th colspan="5" style="border-bottom:0;">&nbsp;</th></tr>');
html.push(' <tr><th colspan="5" style="border-top:' + ((html.length > 2) ? 0 : 1) + ';">' + (servlet.comment || '未知模块') + '</th></tr>');
html.push(' <tr><th>请求URL</th><th>描 述</th><th>鉴 权</th><th>参 数 <span style="font-size:12px;">(粗体: 必填项; 红色: Header; 蓝色: Cookie)</span></th><th>输 出</th></tr>');
for (var k = 0; k < servlet.mappings.length; k++) {
var action = servlet.mappings[k];
html.push(' <tr>');
html.push('<td style="color:#ff00ff;">' + action.url + '</td>');
html.push('<td>' + action.comment + '</td>');
html.push('<td class="s" style="width:80px;">模块ID: ' + servlet.moduleid + '<br/>操作ID: ' + action.actionid + '<br/>需鉴权: ' + (action.auth ? '<font style="font-weight:bold;color:green;">true</font>' : '<font color=red>false</font>') + '</td>');
var paramshtml = [];
paramshtml.push('<table class="subtable">');
for (var p = 0; p < action.params.length; p++) {
var param = action.params[p];
var t = param.type.substring(param.type.lastIndexOf('.') + 1);
if (classmap[param.type.replace('[]', '')]) {
t = '<a href="#' + param.type.replace('[]', '') + '">' + t + '</a>';
}
if (param.name == '&') {
paramshtml.push('<tr><td style="font-size:12px;">内置 </td><td> ' + t + '</td><td> 当前用户</td></tr>');
} else {
var w = param.required ? "font-weight:bold;" : "";
var c = ' style="' + w + '"';
if (param.style == "HEADER") c = ' style="color:red;' + w + '"';
if (param.style == "COOKIE") c = ' style="color:blue;' + w + '"';
paramshtml.push('<tr><td ' + c + '> ' + param.name + ' </td><td> ' + t + '</td><td> ' + param.comment + '</td></tr>');
}
}
paramshtml.push('</table>');
html.push('<td class="s" style="padding:0 5px;">' + paramshtml.join('') + '</td>');
var rs = [];
rs.push(action.result.replace(/</g, "&lt;").replace(/>/g, "&gt;").replace(/([a-zA-Z0-9_\$]+\.)+/g, ""));
var results = action.results || [];
for (var r = 0; r < results.length; r++) {
rs.push('<a href="#' + results[r].replace('[]', '') + '">' + results[r].replace(/([a-zA-Z0-9_\$]+\.)+/g, "") + '</a>');
}
html.push('<td>' + rs.join("<br/>") + '</td>');
html.push('</tr>');
}
}
}
for (var type in classmap) {
html.push(' <tr><th colspan="5" style="border-bottom:0;">&nbsp;</th></tr>');
html.push(' <tr id="' + type + '"><th colspan="5" style="border-top:0;">' + type + '</th></tr>');
html.push(' <tr><td colspan="5"><table class="typetable">');
for (var fieldname in classmap[type]) {
var field = classmap[type][fieldname];
var t = field.type.replace(/</g, "&lt;").replace(/>/g, "&gt;").replace(/\$/g, ".").replace(/([a-zA-Z0-9_\$]+\.)+/g, "");
if (t == 'boolean' || t == 'short' || t == 'int' || t == 'long' || t == 'float' || t == 'double'
|| t == 'boolean[]' || t == 'short[]' || t == 'int[]' || t == 'long[]' || t == 'float[]' || t == 'double[]') {
t = '<font color=blue>' + t + '</font>';
} else if (t == 'String' || t == 'String[]' || t == 'LongRange' || t.indexOf('Map&lt;') === 0) {
t = '<font color=red>' + t + '</font>';
}
var c = (field.comment || '');
if (field.primary) {
c = '【主键】 ' + c;
} else if (!field.updatable) {
c = '【只读】 ' + c;
}
html.push(' <tr class="l"><td>' + fieldname + '</td><td>' + t + '</td><td colspan="2">' + c + '</td></tr>');
}
html.push(' </table></td></tr>');
}
html.push('</table><br/><br/><br/>');
html.push('</div>');
return html.join('');
};
</script>
<script>
var jsoncontent = '#{content}'; //这里必须要用单引号引起来
document.write(createhtml(jsoncontent));
</script>
</body>
</html>

View File

@@ -0,0 +1,43 @@
redkale.nodeid = 1000
redkale.port = 6560
redkale.lib = ./
#\u3010executor\u8282\u70b9\u5168\u5c40\u552f\u4e00\u3011
redkale.executor.threads = 4
redkale.executor.hash = false
#\u3010cluster\u8282\u70b9\u5168\u5c40\u552f\u4e00\u3011
redkale.cluster.type = org.redkalex.cluster.consul.ConsulClusterAgent
redkale.cluster.waits= = false
redkale.cluster.protocols = SNCP
redkale.cluster.ports = 7070;7071
redkale.mq[0].name =
redkale.mq[0].type = org.redkalex.mq.kafka.KafkaMessageAgent
redkale.mq[0].servers.value = 127.0.0.1:9101
redkale.group[0].name =
redkale.group[0].protocol = TCP
redkale.group[0].node[0].addr = 127.0.0.1
redkale.group[0].node[0].port = 7070
redkale.listener[0].value = org.redkalex.xxx.XXXApplicationListener
#\u3010properties\u8282\u70b9\u5168\u5c40\u552f\u4e00\u3011
redkale.properties.load = config.properties
redkale.properties.property[0].name = system.property.yyyy
redkale.properties.property[0].value = YYYYYY
redkale.properties.property[1].name = xxxxxxx
redkale.properties.property[1].value = YYYYYY
redkale.server[0].protocol = HTTP
redkale.server[0].host = 127.0.0.1
redkale.server[0].port = 6060
redkale.server[0].root = root
redkale.server[0].lib =
#\u3010ssl\u8282\u70b9\u5728<server>\u4e2d\u552f\u4e00\u3011
redkale.server[0].ssl.build = org.redkale.net.SSLBuilder\u5b50\u7c7b
redkale.server[0].services[0].autoload = true

View File

@@ -0,0 +1,369 @@
<?xml version="1.0" encoding="UTF-8"?>
<!--
文件说明:
${APP_HOME} 指当前程序的根目录APP_HOME
没注明唯一的节点可多个存在
required 被声明required的属性值不能为空
group
/ / \ \
/ / \ \
/ / \ \
node1 node2 node3 node4
/ \
/ \
/ \
/ \
serviceid1 serviceid2
/ \ / \
serviceid1_name1 serviceid1_name2 serviceid2_name1 serviceid2_name2
-->
<!--
nodeid: int 进程的节点ID用于分布式环境一个系统中节点ID必须全局唯一使用cluster时框架会进行唯一性校验
name: 进程的名称,用于监控识别,命名规则: 字母、数字、下划线、短横、点
address: 本地局域网的IP地址 默认值为默认网卡的ip当不使用默认值需要指定值如192.168.1.22
port: required 程序的管理Server的端口用于关闭或者与监管系统进行数据交互
lib: 加上额外的lib路径,多个路径用分号;隔开; 默认为空。 例如: ${APP_HOME}/lib/a.jar;${APP_HOME}/lib2/b.jar;
-->
<application nodeid="1000" port="6560" lib="">
<!--
【节点全局唯一】 @since 2.3.0
全局Serivce执行的线程池 Application.workExecutor, 没配置该节点将自动创建一个。
threads 线程数,默认值: CPU核数*10, 核数=2的情况下默认值为20。值为0表示不启用workExecutor都在IO线程中运行。
clients client回调函数运行的线程池大小 默认值: CPU核数*4
-->
<executor threads="4"/>
<!--
【节点全局唯一】 @since 2.8.0
全局Serivce的定时任务设置没配置该节点将自动创建一个。
enabled 是否开启缓存功能。默认: true
-->
<scheduled enabled="true"/>
<!--
@since 2.8.0
全局Serivce的缓存设置没配置该节点将自动创建一个。
name: 缓存管理器的名称, 默认: ""
enabled 是否开启缓存功能。默认: true
remote: 远程CacheSource的资源名
broadcastable: 存在远程CacheSource时修改数据是否进行广播到其他集群服务中。默认: true
-->
<cached name="" enabled="true" remote="xxx" broadcastable="true"/>
<!--
【节点全局唯一】
第三方服务发现管理接口
type 类名必须是org.redkale.cluster.ClusterAgent的子类
waits: 注销服务后是否需要等待检查周期时间后再进行Service销毁默认值为false
当一个Service进行服务注销后不能立刻销毁Service因为健康检测是有间隔时间差的
需要等待一个健康检测周期时间,让其他进程都更新完服务列表。
如果使用MQ可以设置为false如果对服务健壮性要求高建议设置为true
protocols: 服务发现可以处理的协议, 默认值为: SNCP, 多个协议用分号;隔开
ports: 服务发现可以处理的端口, 多个端口用分号;隔开
ttls: 心跳频率,多少秒一次
xxxx: 自定义的字段属性例如CacheClusterAgent有source字段; ConsulClusterAgent有apiurl字段;
-->
<cluster type="org.redkalex.cluster.consul.ConsulClusterAgent" waits="false" protocols="SNCP" ports="7070;7071" xxx="xxx" />
<!--
MQ管理接口配置
不同MQ节点所配置的MQ集群不能重复。
MQ跟着协议走所以mq的属性值需要被赋值在rest节点上, 由于SncpServlet是自动生成的故SNCP协议下mq属性值被赋值在service/services节点上
name: 服务的名称用于监控识别多个mq节点时只能有一个name为空的节点mq.name不能重复,命名规则: 字母、数字、下划线
type 实现类名必须是org.redkale.mq.MessageAgent的子类
threads线程数为0表示使用workExecutor。默认: CPU核数, 核数=1的情况下默认值为2JDK 21以上版本默认使用虚拟线程池
rpccluster和mq同名组件时HttpRpcClient优先使用MQ默认不优先走MQ。
coder: MessageRecord的解析器类必须是org.redkale.mq.MessageCoder<MessageRecord>的实现类,
可对数据包进行加密解密默认值org.redkale.mq.MessageRecordCoder
MQ节点下的子节点配置没有固定格式, 根据MessageAgent实现方的定义来配置
-->
<mq name="" type="org.redkalex.mq.kafka.KafkaMessageAgent" rpc="false" threads="4">
<servers value="127.0.0.1:9101"/>
<!--
加载所有的MessageConsumer实例;
autoload="true" 默认值. 自动加载classpath下所有的MessageConsumer类
autoload="false" 需要显著的指定MessageConsumer类
includes 当autoload="true" 拉取类名与includes中的正则表达式匹配的类, 多个正则表达式用分号;隔开
excludes 当autoload="true" 排除类名与excludes中的正则表达式匹配的类, 多个正则表达式用分号;隔开
-->
<consumer autoload="true" includes="" excludes=""/>
<!--
MQ实现方的配置项
type: 配置项类型值只能是consumer或producer
-->
<config type="consumer">
<property name="xxxxxx" value="XXXXXXXX"/>
</config>
<config type="producer">
<property name="xxxxxx" value="XXXXXXXX"/>
</config>
</mq>
<!--
一个组包含多个node 同一Service服务可以由多个进程提供这些进程称为一个GROUP且同一GROUP内的进程必须在同一机房或局域网内
name: 服务组ID长度不能超过11个字节. 默认为空字符串。 注意: name不能包含$符号。
protocol 值范围UDP TCP 默认TCP
nodes: 多个node节点值 例如:192.168.0.1:6060,192.168.0.2:6060
注意: 一个node只能所属一个group。只要存在protocol=SNCP的Server节点信息 就必须有group节点信息。
-->
<group name="" protocol="TCP" nodes="192.168.0.1:6060,192.168.0.2:6060">
<!--
需要将本地node的addr与port列在此处, 也可以直接用nodes属性。
同一个<node>节点值只能存在一个<group>节点内即同一个addr+port只能属于一个group。
addr: required IP地址
port: required 端口
-->
<node addr="127.0.0.1" port="7070"/>
</group>
<!--
Application启动的监听事件,可配置多个节点
value: 类名必须是ApplicationListener的子类
-->
<listener value="org.redkalex.xxx.XXXApplicationListener"/>
<!--
【节点全局唯一】
全局的参数配置, 可以通过@Resource(name="property.xxxxxx") 进行注入<property>的信息, 被注解的字段类型只能是String、primitive class
如果name是system.property.开头的值将会在进程启动时进行System.setProperty("yyyy", "YYYYYY")操作。
如果name是mimetype.property.开头的值将会在进程启动时进行MimeType.add("yyyy", "YYYYYY")操作。
先加载子节点property再加载load文件 最后加载agent的实现子类。
load: 加载文件,多个用;隔开。
其他属性: 供org.redkale.boot.PropertiesAgentProvider使用判断
默认置入的system.property.的有:
System.setProperty("redkale.convert.pool.size", "128");
System.setProperty("redkale.convert.writer.buffer.defsize", "4096");
<properties>节点下也可包含非<property>节点.
非<property>其节点可以通过@Resource(name="properties.xxxxxx")进行注入, 被注解的字段类型只能是AnyValue、AnyValue[]
-->
<properties load="config.properties">
<property name="system.property.yyyy" value="YYYYYY"/>
<property name="xxxxxx" value="XXXXXXXX"/>
<property name="xxxxxx" value="XXXXXXXX"/>
<property name="xxxxxx" value="XXXXXXXX"/>
</properties>
<!--
protocol: required server所启动的协议Redkale内置的有HTTP、SNCP、WATCH。协议均使用TCP实现; WATCH服务只能存在一个。
name: 服务的名称用于监控识别一个配置文件中的server.name不能重复,命名规则: 字母、数字、下划线
host: 服务所占address 默认: 0.0.0.0
port: required 服务所占端口
root: 如果是web类型服务则包含页面 默认:{APP_HOME}/root
lib: server额外的class目录 默认为${APP_HOME}/libs/*;
charset: 文本编码, 默认: UTF-8
backlog: 默认10K
maxConns 最大连接数, 小于1表示无限制 默认: 0
maxHeader: request.header最大值 默认: 16K
maxBody: request.body最大值 默认: 256K
bufferCapacity: ByteBuffer的初始化大小 TCP默认: 32K; (HTTP 2.0、WebSocket必须要16k以上); UDP默认: 8K
bufferPoolSize ByteBuffer池的大小默认: 线程数*4
responsePoolSize Response池的大小默认: 1024
aliveTimeoutSeconds: KeepAlive读操作超时秒数 默认30 0表示永久不超时; -1表示禁止KeepAlive
readTimeoutSeconds: 读操作超时秒数, 默认0 0表示永久不超时
writeTimeoutSeconds: 写操作超时秒数, 默认0 0表示永久不超时
interceptor: 启动/关闭NodeServer时被调用的拦截器实现类必须是org.redkale.boot.NodeInterceptor的子类默认为null
-->
<server protocol="HTTP" host="127.0.0.1" port="6060" root="root" lib="">
<!--
【节点在<server>中唯一】
builder: 创建SSLContext的实现类, 可自定义必须是org.redkale.net.SSLBuilder的子类
sslProvider: java.security.Provider自定义的实现类如第三方: org.conscrypt.OpenSSLProvider、org.bouncycastle.jce.provider.BouncyCastleProvider
jsseProvider: java.security.Provider自定义的实现类如第三方: org.conscrypt.JSSEProvider、 org.bouncycastle.jce.provider.BouncyCastleJsseProvider
protocol: TLS版本默认值: TLS
protocols: 设置setEnabledProtocols, 多个用,隔开 如: TLSv1.2,TLSv1.3
clientAuth: WANT/NEED/NONE, 默认值: NONE
ciphers: 设置setEnabledCipherSuites, 多个用,隔开 如: TLS_RSA_WITH_AES_128_CBC_SHA256,TLS_RSA_WITH_AES_256_CBC_SHA256
keystorePass: KEY密码
keystoreFile: KEY文件 .jks
keystoreType: KEY类型 默认值为JKS
keystoreAlgorithm: KEY文件的algorithm 默认值为SunX509
truststorePass: TRUST密码
truststoreFile: TRUST文件
truststoreType: TRUST类型 默认值为JKS
truststoreAlgorithm: TRUST文件的algorithm 默认值为SunX509
-->
<ssl builder=""/>
<!--
加载所有的Service服务;
在同一个进程中同一个name同一类型的Service将共用同一个实例
autoload="true" 默认值. 自动加载classpath下所有的Service类
autoload="false" 需要显著的指定Service类
mq: 所属的MQ管理器当 protocol == SNCP 时该值才有效, 存在该属性表示Service的SNCP协议采用消息总线代理模式
includes 当autoload="true" 拉取类名与includes中的正则表达式匹配的类, 多个正则表达式用分号;隔开
excludes 当autoload="true" 排除类名与excludes中的正则表达式匹配的类, 多个正则表达式用分号;隔开
group: 所属组的节点, 不能指定多个group, 如果配置文件中存在多个SNCP协议的Server节点需要显式指定group属性.
当 protocol == SNCP 时 group表示当前Server与哪些节点组关联。
当 protocol != SNCP 时 group只能是空或者一个group的节点值。
特殊值"$remote", 视为通过第三方服务注册发现管理工具来获取远程模式的ip端口信息
-->
<services autoload="true" includes="" excludes="">
<!-- 显著加载指定的Service的接口类 -->
<service value="com.xxx.XXX1Service"/>
<!--
name: 显式指定name覆盖默认的空字符串值。 注意: name不能包含$符号。
mq: 所属的MQ管理器当 protocol == SNCP 时该值才有效, 存在该属性表示Service的SNCP协议采用消息总线代理模式
group: 显式指定group覆盖<services>节点的group默认值。
ignore: 是否禁用, 默认为false。
-->
<service value="com.xxx.XXX2Service" name="" group="xxx"/>
<!-- 给Service增加配置属性 -->
<service value="com.xxx.XXX1Service">
<!-- property值在public void init(AnyValue conf)方法中可以通过AnyValue properties=conf.getAnyValue("properties")获取 -->
<property name="xxxxxx" value="XXXXXXXX"/>
<property name="xxxxxx" value="XXXXXXXX"/>
</service>
</services>
<!--
加载所有的Filter服务;
autoload="true" 默认值.
autoload="false" 需要显著的指定Filter类
includes 当autoload="true" 拉取类名与includes中的正则表达式匹配的类, 多个正则表达式用分号;隔开
excludes 当autoload="true" 排除类名与excludes中的正则表达式匹配的类, 多个正则表达式用分号;隔开
-->
<filters autoload="true" includes="" excludes="">
<!--
显著加载指定的Filter类
value=: Filter类名。必须与Server的协议层相同HTTP必须是HttpFilter
ignore: 是否禁用, 默认为false。
-->
<!-- 显著加载指定的Filter类 -->
<filter value="com.xxx.XXX1Filter"/>
<!-- 给Filter增加配置属性 -->
<filter value="com.xxx.XXX12Filter">
<!-- property值在public void init(AnyValue conf)方法中可以通过AnyValue properties=conf.getAnyValue("properties")获取 -->
<property name="xxxxxx" value="XXXXXXXX"/>
<property name="xxxxxx" value="XXXXXXXX"/>
</filter>
</filters>
<!--
REST的核心配置项
当Server为HTTP协议时, rest节点才有效。存在[rest]节点则Server启动时会加载REST服务, 节点可以多个,(WATCH协议不需要设置系统会自动生成)
path: servlet的ContextPath前缀 默认为空 【注: 开启MQ时,该字段失效】
base: REST服务的BaseServlet必须是 org.redkale.net.http.HttpServlet 的子类,且子类必须标记@HttpUserType。
mq: 所属的MQ管理器, 存在该属性表示RestService的请求来自于消息总线 【注: 开启MQ时,path字段失效】
autoload默认值"true" 默认值. 加载当前server所能使用的Servce对象;
includes当autoload="true" 拉取类名与includes中的正则表达式匹配的类, 多个正则表达式用分号;隔开
excludes当autoload="true" 排除类名与excludes中的正则表达式匹配的类, 多个正则表达式用分号;隔开
-->
<rest path="/pipes" base="org.redkale.net.http.HttpServlet" autoload="true" includes="" excludes="">
<!--
value: Service类名列出的表示必须被加载的Service对象
ignore: 是否忽略设置为true则不会加载该Service对象默认值为false
-->
<service value="com.xxx.XXXXService"/>
<!--
value: WebSocket类名列出的表示必须被加载且标记为@RestWebSocket的WebSocket对象
ignore: 是否忽略设置为true则不会加载该RestWebSocket对象默认值为false
-->
<websocket value="com.xxx.XXXXRestWebSocket"/>
</rest>
<!--
【节点在<server>中唯一】
当Server为HTTP协议时, request节点才有效。
remoteaddr 节点: 替换请求方节点的IP地址 通常请求方是由nginx等web静态服务器转发过的则需要配置该节点。
且value值只能是以request.headers.开头表示从request.headers中获取对应的header值, 多个header用逗号隔开。
locale value值必须是request.headers.或request.parameters.开头。
例如下面例子获取request.getRemoteAddr()值如果header存在X-RemoteAddress值则返回X-RemoteAddress值不存在返回getRemoteAddress()。
-->
<request>
<remoteaddr value="request.headers.X-RemoteAddress,X-Forwarded-For"/>
<locale value="request.headers.locale" />
<rpc authenticator="org.redkale.net.http.HttpRpcAuthenticator的实现类"/>
</request>
<!--
【节点在<server>中唯一】
当Server为HTTP协议时, response节点才有效。
contenttype: plain值为调用finish时的ContentType; 默认值: text/plain; charset=utf-8
json值为调用finishJson时的ContentType; 默认值: application/json; charset=utf-8
defcookie 节点: 当response里输出的cookie没有指定domain 和path时使用该节点的默认值。
addheader、setheader 的value值以request.parameters.开头则表示从request.parameters中获取对应的parameter值
addheader、setheader 的value值以request.headers.开头则表示从request.headers中获取对应的header值
例如下面例子是在Response输出header时添加两个header一个addHeader 一个setHeader
options 节点: 设置了该节点且auto=true当request的method=OPTIONS自动设置addheader、setheader并返回200状态码
date 节点: 设置了该节点且period有值(单位:毫秒);返回response会包含Date头信息默认为period=0
period=0表示实时获取当前时间;
period<0表示不设置date;
period>0表示定时获取时间; 设置1000表示每秒刷新Date时间
-->
<response>
<content-type plain="text/plain; charset=utf-8" json="application/json; charset=utf-8"/>
<defcookie domain="" path=""/>
<addheader name="Access-Control-Allow-Origin" value="request.headers.Origin" /> <!-- 可多节点 -->
<setheader name="Access-Control-Allow-Headers" value="request.headers.Access-Control-Request-Headers"/> <!-- 可多节点 -->
<setheader name="Access-Control-Allow-Credentials" value="true"/>
<options auto="true" />
<date period="0" />
</response>
<!--
【节点在<server>中唯一】
当Server为HTTP协议时render才有效. 指定输出引擎的实现类
value: 输出引擎的实现类, 必须是org.redkale.net.http.HttpRender的子类
suffixs: 引擎文件名后缀,多个用;隔开,默认值为: .htel
-->
<render value="org.redkalex.htel.HttpTemplateRender" suffixs=".htel"/>
<!--
【节点在<server>中唯一】
当Server为HTTP协议时ResourceServlet才有效. 默认存在一个有默认属性的resource-servlet节点
webroot: web资源的根目录, 默认取server节点中的root值
servlet: 静态资源HttpServlet的实现默认使用HttpResourceServlet
index : 启始页默认值index.html
-->
<resource-servlet webroot="root" index="index.html">
<!--
【节点在<resource-servlet>中唯一】
资源缓存的配置, 默认存在一个含默认属性的caches节点
limit: 资源缓存最大容量, 默认: 0, 为0表示不缓存 单位可以是B、K、M、G不区分大小写
lengthmax: 可缓存的文件大小上限, 默认: 1M超过1M的文件不会被缓存
watch: 是否监控缓存文件的变化, 默认为false不监控
-->
<cache limit="0M" lengthmax="1M" watch="false"/>
<!--
支持类似nginx中的rewrite 目前只支持静态资源对静态资源的跳转。
type: 匹配的类型, 目前只支持location(匹配path), 默认: location
match: 匹配的正则表达式
forward: 需跳转后的资源链接
例如下面例子是将/xxx-yyy.html的页面全部跳转到/xxx.html
-->
<rewrite type="location" match="^/([^-]+)-[^-\.]+\.html(.*)" forward="/$1.html"/>
</resource-servlet>
<!--
加载所有的Servlet服务;
path: servlet的ContextPath前缀 默认为空
autoload="true" 默认值. 自动加载classpath下所有的Servlet类
autoload="false" 需要显著的指定Service类
includes 当autoload="true" 拉取类名与includes中的正则表达式匹配的类, 多个正则表达式用分号;或者逗号,隔开
excludes 当autoload="true" 排除类名与excludes中的正则表达式匹配的类, 多个正则表达式用分号;或者逗号,隔开
-->
<servlets path="/pipes" autoload="true" includes="" excludes="">
<!--
显著加载指定的Servlet类
value=: Servlet类名。必须与Server的协议层相同HTTP必须是HttpServlet
ignore: 是否禁用, 默认为false。
-->
<servlet value="com.xxx.XXX1Servlet" />
<servlet value="com.xxx.XXX2Servlet" />
<servlet value="com.xxx.XXX3Servlet" >
<property name="xxxxxx" value="XXXXXXXX"/>
<property name="yyyyyy" value="YYYYYYYY"/>
</servlet>
</servlets>
</server>
<server protocol="SNCP" host="127.0.0.1" port="7070" root="root" lib="">
<!-- 参数完全同上 -->
<services autoload="true" includes="" excludes="" />
</server>
</application>

View File

@@ -15,11 +15,16 @@ com.sun.level = INFO
java.util.logging.FileHandler.limit = 20M
java.util.logging.FileHandler.count = 100
java.util.logging.FileHandler.encoding = UTF-8
java.util.logging.FileHandler.pattern = ${APP_HOME}/logs-%m/log-%d.log
java.util.logging.FileHandler.pattern = ${APP_HOME}/logs-%tY%tm/log-%tY%tm%td.log
#java.util.logging.FileHandler.unusual \u5c5e\u6027\u8868\u793a\u5c06 WARNING\u3001SEVERE \u7ea7\u522b\u7684\u65e5\u5fd7\u590d\u5236\u5199\u5165\u5355\u72ec\u7684\u6587\u4ef6\u4e2d
java.util.logging.FileHandler.unusual = ${APP_HOME}/logs-%m/log-warnerr-%d.log
java.util.logging.FileHandler.unusual = ${APP_HOME}/logs-%tY%tm/log-warnerr-%tY%tm%td.log
#\u9700\u8981\u5c4f\u853d\u6d88\u606f\u5185\u5bb9\u7684\u6b63\u5219\u8868\u8fbe\u5f0f
java.util.logging.FileHandler.denyreg =
java.util.logging.FileHandler.denyregex =
java.util.logging.FileHandler.append = true
#java.util.logging.ConsoleHandler.level = FINE
#\u5c06\u65e5\u5fd7\u5199\u8fdbSearchSource, \u5fc5\u987b\u6307\u5b9asource\u8d44\u6e90\u540d\uff0c\u5728source.properties\u4e2d\u5b9a\u4e49
#java.util.logging.SearchHandler.source = platfsearch
#\u6307\u5b9a\u5199\u8fdbSearchSource\u7684\u8868\u540d\uff0c\u9ed8\u8ba4\u503c\u4e3alog-record
#java.util.logging.SearchHandler.tag = log-${APP_NAME}-%tY%tm%td

View File

@@ -0,0 +1,50 @@
# CacheSource @Resource(name="usersession")
# type\u53ef\u4ee5\u4e0d\u7528\u8bbe\u7f6e\uff0c\u6846\u67b6\u4f1a\u6839\u636eurl\u5224\u65ad\u4f7f\u7528\u54ea\u4e2aCacheSource\u5b9e\u73b0\u7c7b
redkale.cachesource.usersession.type = org.redkalex.cache.redis.RedisCacheSource
# \u6700\u5927\u8fde\u63a5\u6570
redkale.cachesource.usersession.maxconns = 16
# \u8282\u70b9\u5730\u5740
redkale.cachesource.usersession.nodes = redis://127.0.0.1:6363
# \u8282\u70b9\u5bc6\u7801
redkale.cachesource.usersession.password = 12345678
# \u8282\u70b9db
redkale.cachesource.usersession.db = 0
#\u7b80\u5316\u5199\u6cd5: \u53ef\u4ee5\u4e0d\u7528.node[0], \u5c06\u53c2\u6570\u90fd\u5408\u5e76\u5230url\u4e2d
redkale.cachesource.usersession.url = redis://user:123456@127.0.0.1:6363?db=0
# DataSource @Resource(name="platf")
# type\u53ef\u4ee5\u4e0d\u7528\u8bbe\u7f6e\uff0c\u6846\u67b6\u4f1a\u6839\u636eurl\u5224\u65ad\u4f7f\u7528\u54ea\u4e2aDataSource\u5b9e\u73b0\u7c7b\uff0c\u9ed8\u8ba4\u503c: org.redkale.source.DataJdbcSource
redkale.datasource.platf.type = org.redkale.source.DataJdbcSource
# \u662f\u5426\u5f00\u542f\u7f13\u5b58(\u6807\u8bb0\u4e3a@Cacheable\u7684Entity\u7c7b)\uff0c\u503c\u76ee\u524d\u53ea\u652f\u6301\u4e24\u79cd\uff1a ALL: \u6240\u6709\u5f00\u542f\u7f13\u5b58\u3002 NONE: \u5173\u95ed\u6240\u6709\u7f13\u5b58\uff0c \u975eNONE\u5b57\u6837\u7edf\u4e00\u89c6\u4e3aALL
redkale.datasource.platf.cachemode = ALL
# \u662f\u5426\u81ea\u52a8\u5efa\u8868\u5f53\u8868\u4e0d\u5b58\u5728\u7684\u65f6\u5019\uff0c \u76ee\u524d\u53ea\u652f\u6301mysql\u3001postgres\uff0c \u9ed8\u8ba4\u4e3afalse
redkale.datasource.platf.table-autoddl = false
# \u7528\u6237
redkale.datasource.platf.user = root
# \u5bc6\u7801
redkale.datasource.platf.password = 12345678
# \u591a\u4e2aURL\u7528;\u9694\u5f00\uff0c\u5982\u5206\u5e03\u5f0fSearchSource\u9700\u8981\u914d\u591a\u4e2aURL
redkale.datasource.platf.url = jdbc:mysql://127.0.0.1:3306/platf?allowPublicKeyRetrieval=true&rewriteBatchedStatements=true&serverTimezone=UTC&characterEncoding=utf8
# \u6700\u5927\u8fde\u63a5\u6570\uff0c\u9ed8\u8ba4\u503c\uff1aCPU\u6570
redkale.datasource.platf.maxconns = 16
# \u5305\u542b\u7684SQL\u6a21\u677f\uff0c\u76f8\u5f53\u4e8e\u53cd\u5411LIKE\uff0c\u4e0d\u540c\u7684JDBC\u9a71\u52a8\u7684SQL\u8bed\u53e5\u4e0d\u4e00\u6837\uff0cRedkale\u5185\u7f6e\u4e86MySQL\u7684\u8bed\u53e5
redkale.datasource.platf.contain-sqltemplate = LOCATE(#{keystr}, #{column}) > 0
# \u5305\u542b\u7684SQL\u6a21\u677f\uff0c\u76f8\u5f53\u4e8e\u53cd\u5411LIKE\uff0c\u4e0d\u540c\u7684JDBC\u9a71\u52a8\u7684SQL\u8bed\u53e5\u4e0d\u4e00\u6837\uff0cRedkale\u5185\u7f6e\u4e86MySQL\u7684\u8bed\u53e5
redkale.datasource.platf.notcontain-sqltemplate = LOCATE(#{keystr}, #{column}) = 0
# \u590d\u5236\u8868\u7ed3\u6784\u7684SQL\u6a21\u677f\uff0cRedkale\u5185\u7f6e\u4e86MySQL\u7684\u8bed\u53e5
redkale.datasource.platf.tablenotexist-sqlstates = 42000;42S02
# \u590d\u5236\u8868\u7ed3\u6784\u7684SQL\u6a21\u677f\uff0cRedkale\u5185\u7f6e\u4e86MySQL\u7684\u8bed\u53e5
redkale.datasource.platf.tablecopy-sqltemplate = CREATE TABLE IF NOT EXISTS #{newtable} LIKE #{oldtable}
# DataSource \u8bfb\u5199\u5206\u79bb
redkale.datasource.platf.read.url = jdbc:mysql://127.0.0.1:3306/platf_r?allowPublicKeyRetrieval=true&rewriteBatchedStatements=true&serverTimezone=UTC&characterEncoding=utf8
redkale.datasource.platf.read.user = root
redkale.datasource.platf.read.password = 12345678
redkale.datasource.platf.write.url = jdbc:mysql://127.0.0.1:3306/platf_w?allowPublicKeyRetrieval=true&rewriteBatchedStatements=true&serverTimezone=UTC&characterEncoding=utf8
redkale.datasource.platf.write.user = root
redkale.datasource.platf.write.password = 12345678

View File

@@ -1,33 +1,39 @@
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package javax.annotation;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
/**
* 值越大优先级越高
*
* @since Common Annotations 1.2
*/
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
public @interface Priority {
int value();
}
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package javax.annotation;
import java.lang.annotation.*;
/**
* 值越大优先级越高
*
* @see org.redkale.annotation.Priority
* @since Common Annotations 1.2
* @deprecated replace by {@link org.redkale.annotation.Priority}
*/
@Deprecated(since = "2.8.0")
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
public @interface Priority {
/**
* 优先级值
*
* @return int
*/
int value();
}

View File

@@ -0,0 +1,83 @@
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package javax.annotation;
import java.lang.annotation.*;
/**
* @since Common Annotations 1.0
* @see org.redkale.annotation.Resource
* @deprecated replace by {@link org.redkale.annotation.Resource}
*/
@Deprecated(since = "2.8.0")
@Target({ElementType.TYPE, ElementType.METHOD, ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
public @interface Resource {
// /**
// * AuthenticationType
// */
// @Deprecated
// public enum AuthenticationType {
// /**
// * @deprecated
// */
// CONTAINER,
// /**
// * @deprecated
// */
// APPLICATION
// }
//
/**
* 资源名称
*
* @return String
*/
public String name() default "";
/**
* 依赖注入的类型
*
* @return Class
*/
public Class<?> type() default Object.class;
//
// /**
// *
// * @return AuthenticationType
// */
// @Deprecated
// public AuthenticationType authenticationType() default AuthenticationType.CONTAINER;
//
// /**
// *
// * @return boolean
// */
// @Deprecated
// public boolean shareable() default true;
//
// /**
// *
// * @return String
// */
// @Deprecated
// public String description() default "";
//
// /**
// *
// * @return String
// */
// @Deprecated
// public String mappedName() default "";
//
// /**
// *
// * @return String
// */
// @Deprecated
// public String lookup() default "";
}

View File

@@ -0,0 +1,58 @@
/**
* ***************************************************************************** Copyright (c) 2008 - 2013 Oracle
* Corporation. All rights reserved.
*
* <p>This program and the accompanying materials are made available under the terms of the Eclipse Public License v1.0
* and Eclipse Distribution License v. 1.0 which accompanies this distribution. The Eclipse Public License is available
* at http://www.eclipse.org/legal/epl-v10.html and the Eclipse Distribution License is available at
* http://www.eclipse.org/org/documents/edl-v10.php.
*
* <p>Contributors: Linda DeMichiel - Java Persistence 2.1 Linda DeMichiel - Java Persistence 2.0
*
* <p>****************************************************************************
*/
package javax.persistence;
import static java.lang.annotation.ElementType.TYPE;
import static java.lang.annotation.RetentionPolicy.RUNTIME;
import java.lang.annotation.*;
/**
* Specifies whether an entity should be cached if caching is enabled when the value of the <code>persistence.xml</code>
* caching element is <code>ENABLE_SELECTIVE</code> or <code>DISABLE_SELECTIVE</code>. The value of the <code>Cacheable
* </code> annotation is inherited by subclasses; it can be overridden by specifying <code>Cacheable</code> on a
* subclass.
*
* <p><code>Cacheable(false)</code> means that the entity and its state must not be cached by the provider.
*
* @since Java Persistence 2.0
* @deprecated replace by {@link org.redkale.persistence.Cacheable}
* @see org.redkale.persistence.Cacheable
*/
@Deprecated(since = "2.8.0")
@Target({TYPE})
@Retention(RUNTIME)
public @interface Cacheable {
/**
* (Optional) Whether or not the entity should be cached.
*
* @return boolean
*/
boolean value() default true;
/**
* (Optional) 定时自动更新缓存的周期秒数为0表示不做定时更新 大于0表示每经过interval秒后会自动从数据库中拉取数据更新Cache
*
* @return int
*/
int interval() default 0;
/**
* DataSource是否直接返回对象的真实引用 而不是copy一份
*
* @return boolean
*/
boolean direct() default false;
}

View File

@@ -0,0 +1,147 @@
/**
* ***************************************************************************** Copyright (c) 2008 - 2013 Oracle
* Corporation. All rights reserved.
*
* <p>This program and the accompanying materials are made available under the terms of the Eclipse Public License v1.0
* and Eclipse Distribution License v. 1.0 which accompanies this distribution. The Eclipse Public License is available
* at http://www.eclipse.org/legal/epl-v10.html and the Eclipse Distribution License is available at
* http://www.eclipse.org/org/documents/edl-v10.php.
*
* <p>Contributors: Linda DeMichiel - Java Persistence 2.1 Linda DeMichiel - Java Persistence 2.0
*
* <p>****************************************************************************
*/
package javax.persistence;
import static java.lang.annotation.ElementType.*;
import static java.lang.annotation.RetentionPolicy.RUNTIME;
import java.lang.annotation.*;
/**
* Specifies the mapped column for a persistent property or field. If no <code>Column</code> annotation is specified,
* the default values apply.
*
* <blockquote>
*
* <pre>
* Example 1:
*
* &#064;Column(name="DESC", nullable=false, length=512)
* public String getDescription() { return description; }
*
* Example 2:
*
* &#064;Column(name="DESC",
* columnDefinition="CLOB NOT NULL",
* table="EMP_DETAIL")
* &#064;Lob
* public String getDescription() { return description; }
*
* Example 3:
*
* &#064;Column(name="ORDER_COST", updatable=false, precision=12, scale=2)
* public BigDecimal getCost() { return cost; }
*
* </pre>
*
* </blockquote>
*
* @since Java Persistence 1.0
* @deprecated replace by {@link org.redkale.persistence.Column}
* @see org.redkale.persistence.Column
*/
@Deprecated(since = "2.8.0")
@Target({METHOD, FIELD})
@Retention(RUNTIME)
public @interface Column {
/**
* (Optional) The name of the column. Defaults to the property or field name.
*
* @return String
*/
String name() default "";
/**
* (Optional) The comment of the column.
*
* @return String
*/
String comment() default "";
/**
* (Optional) Whether the column is a unique key. This is a shortcut for the <code>UniqueConstraint</code>
* annotation at the table level and is useful for when the unique key constraint corresponds to only a single
* column. This constraint applies in addition to any constraint entailed by primary key mapping and to constraints
* specified at the table level.
*
* @return boolean
*/
boolean unique() default false;
/**
* (Optional) Whether the database column is required.
*
* @return boolean
*/
boolean nullable() default true;
/**
* for OpenAPI Specification 3
*
* @return String
*/
String example() default "";
/**
* (Optional) Whether the column is included in SQL INSERT statements generated by the persistence provider.
*
* @return boolean
*/
boolean insertable() default true;
/**
* (Optional) Whether the column is included in SQL UPDATE statements generated by the persistence provider.
*
* @return boolean
*/
boolean updatable() default true;
/**
* (Optional) The name of the table that contains the column. If absent the column is assumed to be in the primary
* table.
*
* @return String
*/
@Deprecated
String table() default "";
/**
* (Optional) The column length. (Applies only if a string-valued column is used.) if type==String and length ==
* 65535 then sqltype is TEXT <br>
* if type==String and length &#60;= 16777215 then sqltype is MEDIUMTEXT <br>
* if type==String and length &#62; 16777215 then sqltype is LONGTEXT <br>
* if type==byte[] and length &#60;= 65535 then sqltype is BLOB <br>
* if type==byte[] and length &#60;= 16777215 then sqltype is MEDIUMBLOB <br>
* if type==byte[] and length &#62; 16777215 then sqltype is LONGBLOB <br>
*
* @return int
*/
int length() default 255;
/**
* (Optional) The precision for a decimal (exact numeric) column. (Applies only if a decimal column is used.) Value
* must be set by developer if used when generating the DDL for the column.
*
* @return int
*/
int precision() default 0;
/**
* (Optional) The scale for a decimal (exact numeric) column. (Applies only if a decimal column is used.)
*
* @return int
*/
int scale() default 0;
}

View File

@@ -0,0 +1,49 @@
/**
* ***************************************************************************** Copyright (c) 2008 - 2013 Oracle
* Corporation. All rights reserved.
*
* <p>This program and the accompanying materials are made available under the terms of the Eclipse Public License v1.0
* and Eclipse Distribution License v. 1.0 which accompanies this distribution. The Eclipse Public License is available
* at http://www.eclipse.org/legal/epl-v10.html and the Eclipse Distribution License is available at
* http://www.eclipse.org/org/documents/edl-v10.php.
*
* <p>Contributors: Linda DeMichiel - Java Persistence 2.1 Linda DeMichiel - Java Persistence 2.0
*
* <p>****************************************************************************
*/
package javax.persistence;
import static java.lang.annotation.ElementType.TYPE;
import static java.lang.annotation.RetentionPolicy.RUNTIME;
import java.lang.annotation.*;
/**
* Specifies that the class is an entity. This annotation is applied to the entity class.
*
* @since Java Persistence 1.0
* @deprecated replace by {@link org.redkale.persistence.Entity}
* @see org.redkale.persistence.Entity
*/
@Deprecated(since = "2.8.0")
@Inherited
@Documented
@Target(TYPE)
@Retention(RUNTIME)
public @interface Entity {
/**
* (Optional) The entity name. Defaults to the unqualified name of the entity class. This name is used to refer to
* the entity in queries. The name must not be a reserved literal in the Java Persistence query language.
*
* @return String
*/
String name() default "";
/**
* (Optional) The comment of the entity.
*
* @return String
*/
String comment() default "";
}

View File

@@ -0,0 +1,46 @@
/**
* ***************************************************************************** Copyright (c) 2008 - 2013 Oracle
* Corporation. All rights reserved.
*
* <p>This program and the accompanying materials are made available under the terms of the Eclipse Public License v1.0
* and Eclipse Distribution License v. 1.0 which accompanies this distribution. The Eclipse Public License is available
* at http://www.eclipse.org/legal/epl-v10.html and the Eclipse Distribution License is available at
* http://www.eclipse.org/org/documents/edl-v10.php.
*
* <p>Contributors: Linda DeMichiel - Java Persistence 2.1 Linda DeMichiel - Java Persistence 2.0
*
* <p>****************************************************************************
*/
package javax.persistence;
import static java.lang.annotation.ElementType.*;
import static java.lang.annotation.RetentionPolicy.RUNTIME;
import java.lang.annotation.*;
/**
* Specifies the primary key of an entity. The field or property to which the <code>Id</code> annotation is applied
* should be one of the following types: any Java primitive type; any primitive wrapper type; <code>String</code>;
* <code>java.util.Date</code>; <code>java.sql.Date</code>; <code>java.math.BigDecimal</code>; <code>
* java.math.BigInteger</code>.
*
* <p>The mapped column for the primary key of the entity is assumed to be the primary key of the primary table. If no
* <code>Column</code> annotation is specified, the primary key column name is assumed to be the name of the primary key
* property or field.
*
* <pre>
* Example:
*
* &#064;Id
* public Long getId() { return id; }
* </pre>
*
* @see Column see GeneratedValue
* @since Java Persistence 1.0
* @deprecated replace by {@link org.redkale.persistence.Id}
* @see org.redkale.persistence.Id
*/
@Deprecated(since = "2.8.0")
@Target({METHOD, FIELD})
@Retention(RUNTIME)
public @interface Id {}

View File

@@ -0,0 +1,64 @@
/**
* ***************************************************************************** Copyright (c) 2011 - 2013 Oracle
* Corporation. All rights reserved.
*
* <p>This program and the accompanying materials are made available under the terms of the Eclipse Public License v1.0
* and Eclipse Distribution License v. 1.0 which accompanies this distribution. The Eclipse Public License is available
* at http://www.eclipse.org/legal/epl-v10.html and the Eclipse Distribution License is available at
* http://www.eclipse.org/org/documents/edl-v10.php.
*
* <p>Contributors: Linda DeMichiel - Java Persistence 2.1
*
* <p>****************************************************************************
*/
package javax.persistence;
import static java.lang.annotation.RetentionPolicy.RUNTIME;
import java.lang.annotation.*;
/**
* Used in schema generation to specify creation of an index.
*
* <p>Note that it is not necessary to specify an index for a primary key, as the primary key index will be created
* automatically.
*
* <p>The syntax of the <code>columnList</code> element is a <code>column_list</code>, as follows:
*
* <pre>
* column::= index_column [,index_column]*
* index_column::= column_name [ASC | DESC]
* </pre>
*
* <p>If <code>ASC</code> or <code>DESC</code> is not specified, <code>ASC</code> (ascending order) is assumed.
*
* @since Java Persistence 2.1
* @deprecated replace by {@link org.redkale.persistence.Index}
* @see org.redkale.persistence.Index
*/
@Deprecated(since = "2.8.0")
@Target({})
@Retention(RUNTIME)
public @interface Index {
/**
* (Optional) The name of the index; defaults to a provider-generated name.
*
* @return String
*/
String name() default "";
/**
* (Required) The names of the columns to be included in the index, in order.
*
* @return String
*/
String columnList();
/**
* (Optional) Whether the index is unique.
*
* @return boolean
*/
boolean unique() default false;
}

View File

@@ -0,0 +1,88 @@
/**
* ***************************************************************************** Copyright (c) 2008 - 2013 Oracle
* Corporation. All rights reserved.
*
* <p>This program and the accompanying materials are made available under the terms of the Eclipse Public License v1.0
* and Eclipse Distribution License v. 1.0 which accompanies this distribution. The Eclipse Public License is available
* at http://www.eclipse.org/legal/epl-v10.html and the Eclipse Distribution License is available at
* http://www.eclipse.org/org/documents/edl-v10.php.
*
* <p>Contributors: Linda DeMichiel - Java Persistence 2.1 Linda DeMichiel - Java Persistence 2.0
*
* <p>****************************************************************************
*/
package javax.persistence;
import static java.lang.annotation.ElementType.TYPE;
import static java.lang.annotation.RetentionPolicy.RUNTIME;
import java.lang.annotation.*;
/**
* Specifies the primary table for the annotated entity. Additional tables may be specified using SecondaryTable or
* SecondaryTables annotation.
*
* <p>If no <code>Table</code> annotation is specified for an entity class, the default values apply.
*
* <pre>
* Example:
*
* &#064;Entity
* &#064;Table(name="CUST", schema="RECORDS")
* public class Customer { ... }
* </pre>
*
* @since Java Persistence 1.0
* @deprecated replace by {@link org.redkale.persistence.Table}
* @see org.redkale.persistence.Table
*/
@Deprecated(since = "2.8.0")
@Target(TYPE)
@Retention(RUNTIME)
public @interface Table {
/**
* (Optional) The name of the table.
*
* <p>Defaults to the entity name.
*
* @return String
*/
String name() default "";
/**
* (Optional) The catalog of the table.
*
* <p>Defaults to the default catalog.
*
* @return String
*/
String catalog() default "";
/**
* (Optional) Unique constraints that are to be placed on the table. These are only used if table generation is in
* effect. These constraints apply in addition to any constraints specified by the <code>Column</code> and <code>
* JoinColumn</code> annotations and constraints entailed by primary key mappings.
*
* <p>Defaults to no additional constraints.
*
* @return UniqueConstraint[]
*/
UniqueConstraint[] uniqueConstraints() default {};
/**
* (Optional) Indexes for the table. These are only used if table generation is in effect. Note that it is not
* necessary to specify an index for a primary key, as the primary key index will be created automatically.
*
* @return indexes
* @since Java Persistence 2.1
*/
Index[] indexes() default {};
/**
* comment
*
* @return String
*/
String comment() default "";
}

View File

@@ -0,0 +1,43 @@
/**
* ***************************************************************************** Copyright (c) 2008 - 2013 Oracle
* Corporation. All rights reserved.
*
* <p>This program and the accompanying materials are made available under the terms of the Eclipse Public License v1.0
* and Eclipse Distribution License v. 1.0 which accompanies this distribution. The Eclipse Public License is available
* at http://www.eclipse.org/legal/epl-v10.html and the Eclipse Distribution License is available at
* http://www.eclipse.org/org/documents/edl-v10.php.
*
* <p>Contributors: Linda DeMichiel - Java Persistence 2.1 Linda DeMichiel - Java Persistence 2.0
*
* <p>****************************************************************************
*/
package javax.persistence;
import static java.lang.annotation.ElementType.*;
import static java.lang.annotation.RetentionPolicy.RUNTIME;
import java.lang.annotation.*;
/**
* Specifies that the property or field is not persistent. It is used to annotate a property or field of an entity
* class, mapped superclass, or embeddable class.
*
* <pre>
* Example:
*
* &#064;Entity
* public class Employee {
* &#064;Id int id;
* &#064;Transient User currentUser;
* ...
* }
* </pre>
*
* @since Java Persistence 1.0
* @deprecated replace by {@link org.redkale.persistence.Transient}
* @see org.redkale.persistence.Transient
*/
@Deprecated(since = "2.8.0")
@Target({METHOD, FIELD})
@Retention(RUNTIME)
public @interface Transient {}

View File

@@ -0,0 +1,57 @@
/**
* ***************************************************************************** Copyright (c) 2008 - 2013 Oracle
* Corporation. All rights reserved.
*
* <p>This program and the accompanying materials are made available under the terms of the Eclipse Public License v1.0
* and Eclipse Distribution License v. 1.0 which accompanies this distribution. The Eclipse Public License is available
* at http://www.eclipse.org/legal/epl-v10.html and the Eclipse Distribution License is available at
* http://www.eclipse.org/org/documents/edl-v10.php.
*
* <p>Contributors: Linda DeMichiel - Java Persistence 2.1 Linda DeMichiel - Java Persistence 2.0
*
* <p>****************************************************************************
*/
package javax.persistence;
import static java.lang.annotation.RetentionPolicy.RUNTIME;
import java.lang.annotation.*;
/**
* Specifies that a unique constraint is to be included in the generated DDL for a primary or secondary table.
*
* <pre>
* Example:
* &#064;Entity
* &#064;Table(
* name="EMPLOYEE",
* uniqueConstraints=
* &#064;UniqueConstraint(columnNames={"EMP_ID", "EMP_NAME"})
* )
* public class Employee { ... }
* </pre>
*
* @since Java Persistence 1.0
* @deprecated replace by {@link org.redkale.persistence.UniqueConstraint}
* @see org.redkale.persistence.UniqueConstraint
*/
@Deprecated(since = "2.8.0")
@Target({})
@Retention(RUNTIME)
public @interface UniqueConstraint {
/**
* (Optional) Constraint name. A provider-chosen name will be chosen if a name is not specified.
*
* @return String
* @since Java Persistence 2.0
*/
String name() default "";
/**
* (Required) An array of the column names that make up the constraint.
*
* @return String[]
*/
String[] columnNames();
}

View File

@@ -0,0 +1,54 @@
/**
* see: https://redkale.org
*
* @author zhangjx
*/
module org.redkale {
requires java.base;
requires java.logging;
requires java.net.http;
requires java.sql;
requires jdk.unsupported; // sun.misc.Unsafe
exports org.redkale.annotation;
exports org.redkale.boot;
exports org.redkale.boot.watch;
exports org.redkale.cached;
exports org.redkale.cached.spi;
exports org.redkale.cluster;
exports org.redkale.cluster.spi;
exports org.redkale.convert;
exports org.redkale.convert.ext;
exports org.redkale.convert.json;
exports org.redkale.convert.pb;
exports org.redkale.convert.spi;
exports org.redkale.inject;
exports org.redkale.locked;
exports org.redkale.locked.spi;
exports org.redkale.mq;
exports org.redkale.mq.spi;
exports org.redkale.net;
exports org.redkale.net.client;
exports org.redkale.net.http;
exports org.redkale.net.sncp;
exports org.redkale.persistence;
exports org.redkale.props.spi;
exports org.redkale.scheduled;
exports org.redkale.scheduled.spi;
exports org.redkale.service;
exports org.redkale.source;
exports org.redkale.source.spi;
exports org.redkale.util;
exports org.redkale.watch;
uses org.redkale.util.YamlProvider;
uses org.redkale.props.spi.PropertiesAgentProvider;
uses org.redkale.cached.spi.CachedManagerProvider;
uses org.redkale.cluster.spi.ClusterAgentProvider;
uses org.redkale.convert.spi.ConvertProvider;
uses org.redkale.mq.spi.MessageAgentProvider;
uses org.redkale.scheduled.spi.ScheduledManagerProvider;
uses org.redkale.source.spi.CacheSourceProvider;
uses org.redkale.source.spi.DataSourceProvider;
uses org.redkale.source.spi.DataNativeSqlParserProvider;
}

View File

@@ -1,26 +1,27 @@
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package org.redkale.util;
import static java.lang.annotation.ElementType.TYPE;
import static java.lang.annotation.RetentionPolicy.RUNTIME;
import java.lang.annotation.*;
/**
* 自动加载 使用场景
* 1被标记为&#64;AutoLoad(false)的Service类不会被自动加载, 当被依赖时才会被加载
* 2被标记为&#64;AutoLoad(false)的Servlet类不会被自动加载
*
* <p> 详情见: https://redkale.org
* @author zhangjx
*/
@Documented
@Target({TYPE})
@Retention(RUNTIME)
public @interface AutoLoad {
boolean value() default true;
}
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package org.redkale.annotation;
import java.lang.annotation.*;
import static java.lang.annotation.ElementType.TYPE;
import static java.lang.annotation.RetentionPolicy.RUNTIME;
/**
* 自动加载 使用场景 <br>
* 1被标记为&#64;AutoLoad(false)的Service类不会被自动加载, 当被依赖时才会被加载 <br>
* 2被标记为&#64;AutoLoad(false)的Servlet类不会被自动加载 <br>
*
* <p>详情见: https://redkale.org
*
* @author zhangjx
*/
@Documented
@Target({TYPE})
@Retention(RUNTIME)
public @interface AutoLoad {
boolean value() default true;
}

View File

@@ -0,0 +1,26 @@
/*
*
*/
package org.redkale.annotation;
import java.lang.annotation.*;
import static java.lang.annotation.ElementType.*;
import static java.lang.annotation.RetentionPolicy.*;
/**
* 被标记的元素表示会被动态字节码调用
*
* <p>详情见: https://redkale.org
*
* @author zhangjx
* @since 2.8.0
*/
@Documented
@Target({TYPE, METHOD, FIELD, CONSTRUCTOR})
@Retention(SOURCE)
public @interface ClassDepends {
Class[] value() default {};
String comment() default "";
}

View File

@@ -0,0 +1,47 @@
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package org.redkale.annotation;
import static java.lang.annotation.ElementType.*;
import static java.lang.annotation.RetentionPolicy.RUNTIME;
import java.lang.annotation.*;
/**
* 接收命令的标记, 只能标记在本地模式下Service里参数为(String)或(String, String[])的public方法上
*
* <p>详情见: https://redkale.org
*
* @author zhangjx
* @since 2.1.0
*/
@Documented
@Target({METHOD})
@Retention(RUNTIME)
public @interface Command {
/**
* 命令号,没有指定值则接收所有的命令
*
* @return String
*/
String value() default "";
/**
* 参数帮助说明在value不为空命令redkale --help时显示
*
* @return String
* @since 2.7.0
*/
String description() default "";
/**
* 描述
*
* @return String
*/
String comment() default "";
}

View File

@@ -1,29 +1,29 @@
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package org.redkale.util;
import java.lang.annotation.*;
import static java.lang.annotation.ElementType.*;
import static java.lang.annotation.RetentionPolicy.RUNTIME;
/**
* 标记注释备注
*
* <p>
* 详情见: https://redkale.org
*
* @author zhangjx
*/
@Inherited
@Documented
@Target({TYPE, METHOD, FIELD, PARAMETER, CONSTRUCTOR, LOCAL_VARIABLE, ANNOTATION_TYPE, TYPE_PARAMETER})
@Retention(RUNTIME)
public @interface Comment {
String name() default "";
String value();
}
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package org.redkale.annotation;
import static java.lang.annotation.ElementType.*;
import static java.lang.annotation.RetentionPolicy.RUNTIME;
import java.lang.annotation.*;
/**
* 标记注释备注
*
* <p>详情见: https://redkale.org
*
* @author zhangjx
*/
@Inherited
@Documented
@Target({TYPE, METHOD, FIELD, PARAMETER, CONSTRUCTOR, LOCAL_VARIABLE, ANNOTATION_TYPE, TYPE_PARAMETER})
@Retention(RUNTIME)
public @interface Comment {
String name() default "";
String value();
}

View File

@@ -0,0 +1,22 @@
package org.redkale.annotation;
import static java.lang.annotation.ElementType.TYPE;
import static java.lang.annotation.RetentionPolicy.RUNTIME;
import java.lang.annotation.*;
/**
* 标记Component的Service类特点: <br>
* 1、直接构造, 不使用Sncp动态构建对象 <br>
* 2、不会生成对应协议的Servlet <br>
*
* <p>详情见: https://redkale.org
*
* @author zhangjx
* @since 2.8.0
*/
@Inherited
@Documented
@Target({TYPE})
@Retention(RUNTIME)
public @interface Component {}

View File

@@ -0,0 +1,49 @@
/*
*/
package org.redkale.annotation;
import java.lang.annotation.Documented;
import static java.lang.annotation.ElementType.TYPE;
import java.lang.annotation.Retention;
import static java.lang.annotation.RetentionPolicy.RUNTIME;
import java.lang.annotation.Target;
/**
* 启动服务时的初始化配置,需要结合{@link org.redkale.annotation.Resource}使用
* <blockquote>
* <pre>
* &#064;Configuration
* public class MyConfiguration {
*
* &#064;Resource(name = "a")
* BeanA createBeanA() {
* System.out.println("创建一个Bean");
* BeanA bean = new BeanA();
* bean.desc = "auto";
* return bean;
* }
*
* &#064;Resource(name = "b")
* BeanA createBeanA(&#064;Resource(name = "dev.desc") String desc) {
* System.out.println("创建一个Bean");
* BeanA bean = new BeanA();
* bean.desc = name;
* return bean;
* }
* }
*
* </pre>
* </blockquote>
*
* <p>
* 详情见: https://redkale.org
*
* @author zhangjx
* @since 2.8.0
*/
@Documented
@Target({TYPE})
@Retention(RUNTIME)
public @interface Configuration {}

View File

@@ -1,26 +1,27 @@
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package org.redkale.util;
import java.lang.annotation.*;
import static java.lang.annotation.ElementType.*;
import static java.lang.annotation.RetentionPolicy.RUNTIME;
/**
* 类似java.beans.ConstructorProperties, 必须配合Creator使用
*
* <p>
* 详情见: https://redkale.org
*
* @author zhangjx
*/
@Documented
@Target({METHOD, CONSTRUCTOR})
@Retention(RUNTIME)
public @interface ConstructorParameters {
String[] value();
}
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package org.redkale.annotation;
import static java.lang.annotation.ElementType.*;
import static java.lang.annotation.RetentionPolicy.RUNTIME;
import java.lang.annotation.*;
/**
* 类似java.beans.ConstructorProperties, 必须配合Creator使用
*
* <p>详情见: https://redkale.org
*
* @author zhangjx
*/
@Documented
@Target({METHOD, CONSTRUCTOR})
@Retention(RUNTIME)
@ClassDepends
public @interface ConstructorParameters {
String[] value();
}

View File

@@ -1,46 +1,51 @@
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package org.redkale.util;
import java.lang.annotation.*;
import static java.lang.annotation.ElementType.TYPE;
import static java.lang.annotation.RetentionPolicy.RUNTIME;
/**
* 等于level日志级别且包含keys字符串的日志才会被排除 <br>
*
* <blockquote><pre>
* &#64;LogExcludeLevel(levels = {"FINEST"}, keys = {"SET username ="})
* public class UserRecord {
* public int userid;
* public String username = "";
* }
*
* 这样当调用DataSource对UserRecord对象进行操作时拼接的SQL语句含"SET username ="字样的都会在FINEST日志级别过滤掉
* </pre></blockquote>
* <p>
* 详情见: https://redkale.org
*
* @author zhangjx
*/
@Documented
@Target({TYPE})
@Retention(RUNTIME)
@Repeatable(LogExcludeLevel.LogExcludeLevels.class)
public @interface LogExcludeLevel {
String[] levels();
String[] keys();
@Documented
@Target({TYPE})
@Retention(RUNTIME)
@interface LogExcludeLevels {
LogExcludeLevel[] value();
}
}
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package org.redkale.annotation;
import static java.lang.annotation.ElementType.TYPE;
import static java.lang.annotation.RetentionPolicy.RUNTIME;
import java.lang.annotation.*;
/**
* 等于level日志级别且包含keys字符串的日志才会被排除 <br>
*
* <blockquote>
*
* <pre>
* &#64;LogExcludeLevel(levels = {"FINEST"}, keys = {"SET username ="})
* public class UserRecord {
* public int userid;
* public String username = "";
* }
*
* 这样当调用DataSource对UserRecord对象进行操作时拼接的SQL语句含"SET username ="字样的都会在FINEST日志级别过滤掉
* </pre>
*
* </blockquote>
*
* <p>详情见: https://redkale.org
*
* @author zhangjx
*/
@Documented
@Target({TYPE})
@Retention(RUNTIME)
@Repeatable(LogExcludeLevel.LogExcludeLevels.class)
public @interface LogExcludeLevel {
String[] levels();
String[] keys();
@Documented
@Target({TYPE})
@Retention(RUNTIME)
@interface LogExcludeLevels {
LogExcludeLevel[] value();
}
}

View File

@@ -1,26 +1,26 @@
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package org.redkale.util;
import java.lang.annotation.*;
import static java.lang.annotation.ElementType.TYPE;
import static java.lang.annotation.RetentionPolicy.RUNTIME;
/**
* 被标记的日志级别以上的才会被记录
*
* <p>
* 详情见: https://redkale.org
*
* @author zhangjx
*/
@Documented
@Target({TYPE})
@Retention(RUNTIME)
public @interface LogLevel {
String value();
}
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package org.redkale.annotation;
import static java.lang.annotation.ElementType.TYPE;
import static java.lang.annotation.RetentionPolicy.RUNTIME;
import java.lang.annotation.*;
/**
* 被标记的日志级别以上的才会被记录
*
* <p>详情见: https://redkale.org
*
* @author zhangjx
*/
@Documented
@Target({TYPE})
@Retention(RUNTIME)
public @interface LogLevel {
String value();
}

View File

@@ -0,0 +1,25 @@
/*
*
*/
package org.redkale.annotation;
import java.lang.annotation.*;
/**
* 非阻塞模式标记, 标记在Service类和方法、Filter类、HttpServlet类上 <br>
* 一般情况下,没有显注此注解的方法视为阻塞时, 以下两种情况除外: <br>
* 1、返回类型是CompletionStage <br>
* 2、返回类型是void且参数存在CompletionHandler类型 <br>
* 阻塞模式的方法会在work线程池中运行 非阻塞在IO线程中运行。
*
* <p>详情见: https://redkale.org
*
* @author zhangjx
* @since 2.8.0
*/
@Target({ElementType.TYPE, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
public @interface NonBlocking { // 不可使用@Inherited防止被继承, 见HttpServlet.preExecute/authenticate/execute
boolean value() default true;
}

View File

@@ -0,0 +1,18 @@
/*
*
*/
package org.redkale.annotation;
import java.lang.annotation.*;
/**
* 标记值可以为null
*
* <p>详情见: https://redkale.org
*
* @author zhangjx
* @since 2.8.0
*/
@Documented
@Retention(RetentionPolicy.RUNTIME)
public @interface Nonnull {}

View File

@@ -0,0 +1,18 @@
/*
*
*/
package org.redkale.annotation;
import java.lang.annotation.*;
/**
* 标记值可以为null
*
* <p>详情见: https://redkale.org
*
* @author zhangjx
* @since 2.8.0
*/
@Documented
@Retention(RetentionPolicy.RUNTIME)
public @interface Nullable {}

View File

@@ -0,0 +1,29 @@
/*
*
*/
package org.redkale.annotation;
import static java.lang.annotation.ElementType.PARAMETER;
import static java.lang.annotation.RetentionPolicy.RUNTIME;
import java.lang.annotation.Documented;
import java.lang.annotation.Retention;
import java.lang.annotation.Target;
/**
* 参数名注解,编译时加上 <b>-parameters</b> 参数可以不用此注解
*
* <p>详情见: https://redkale.org
*
* @author zhangjx
* @since 2.8.0
*/
@Documented
@Target({PARAMETER})
@Retention(RUNTIME)
public @interface Param {
String value();
String comment() default "";
}

View File

@@ -0,0 +1,20 @@
/*
*
*/
package org.redkale.annotation;
import static java.lang.annotation.ElementType.*;
import static java.lang.annotation.RetentionPolicy.*;
import java.lang.annotation.Documented;
import java.lang.annotation.Retention;
import java.lang.annotation.Target;
/**
* @since Common Annotations 1.0
* @since 2.8.0
*/
@Documented
@Retention(RUNTIME)
@Target(METHOD)
public @interface PostConstruct {}

View File

@@ -0,0 +1,18 @@
/*
*
*/
package org.redkale.annotation;
import static java.lang.annotation.ElementType.*;
import static java.lang.annotation.RetentionPolicy.*;
import java.lang.annotation.*;
/**
* @since Common Annotations 1.0
* @since 2.8.0
*/
@Documented
@Retention(RUNTIME)
@Target(METHOD)
public @interface PreDestroy {}

View File

@@ -0,0 +1,45 @@
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.redkale.annotation;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
/**
* 值越大,优先级越高
*
* @since Common Annotations 1.2
*/
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
public @interface Priority {
/** 最高优先级, 其他值必须比此值小 */
public static final int HIGHTEST = Integer.MAX_VALUE;
/** 最低优先级, 其他值必须比此值大 */
public static final int LOWEST = Integer.MIN_VALUE;
/**
* 优先级值
*
* @return int
*/
int value();
}

View File

@@ -0,0 +1,60 @@
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package org.redkale.annotation;
import java.lang.annotation.*;
/**
* &#64;Resource(name = "@") 表示资源name采用所属对象的name <br>
* &#64;Resource(name = "#name") 表示资源对象自身的name <br>
* &#64;Resource(name = "#type") 表示资源对象自身的类型 <br>
*
* @since Common Annotations 1.0
* @since 2.8.0
*/
@Target({ElementType.TYPE, ElementType.METHOD, ElementType.FIELD, ElementType.PARAMETER})
@Retention(RetentionPolicy.RUNTIME)
public @interface Resource {
public static final String PARENT_NAME = "@";
public static final String SELF_NAME = "#name";
public static final String SELF_TYPE = "#type";
/**
* 是否必须存在
*
* @return boolean
* @since 2.8.0
*/
public boolean required() default true;
/**
* 资源名称 <br>
*
* <blockquote>
*
* <pre>
* name规则:
* 1: "@"有特殊含义, 表示资源本身,"@"不能单独使用
* 2: "#name"、"#type"有特殊含义
* 3: 只能是字母、数字、(短横)-、(下划线)_、点(.)的组合
* </pre>
*
* </blockquote>
*
* @return String
*/
public String name() default "";
/**
* 依赖注入的类型
*
* @return Class
*/
public Class<?> type() default Object.class;
}

View File

@@ -0,0 +1,67 @@
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package org.redkale.annotation;
import java.lang.annotation.*;
import static java.lang.annotation.ElementType.METHOD;
import static java.lang.annotation.RetentionPolicy.RUNTIME;
/**
* &#64;Resource资源被更新时的监听事件, 本注解只能标记在方法参数为ResourceEvent[]上 <br>
* 注意: 一个类只能存在一个&#64;ResourceChanged的方法 多余的会被忽略 <br>
* 方法在资源被更新以后调用。
*
* <blockquote>
*
* <pre>
* public class RecordService implements Service {
*
* &#64;Resource(name = "record.id")
* private int id;
*
* &#64;Resource(name = "record.name")
* private String name;
*
* &#64;ResourceChanged
* private void changeResource(ResourceEvent[] events) {
* for(ResourceEvent event : events) {
* System.out .println("@Resource = " + event.name()
* + " 资源变更: newVal = " + event.newValue() + ", oldVal = " + event.oldValue());
* }
* }
*
* public static void main(String[] args) throws Exception {
* ResourceFactory factory = ResourceFactory.create();
* factory.register("record.id", "2345");
* factory.register("record.name", "my old name");
* Record record = new Record();
* factory.inject(record);
* factory.register("record.name", "my new name");
* }
* }
* </pre>
*
* </blockquote>
*
* <p>详情见: https://redkale.org
*
* @author zhangjx
*/
@Documented
@Target({METHOD})
@Retention(RUNTIME)
public @interface ResourceChanged {
/**
* 新旧值是否不相同的情况下才回调方法 <br>
* true: 新值与旧值不相同才回调ResourceChanged方法 <br>
* false: 只要执行了ResourceFactory.register 就回调ResourceChanged方法
*
* @since 2.7.0
* @return boolean
*/
boolean different() default true;
}

View File

@@ -0,0 +1,64 @@
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package org.redkale.annotation;
import java.lang.annotation.*;
import static java.lang.annotation.ElementType.METHOD;
import static java.lang.annotation.RetentionPolicy.RUNTIME;
/**
* &#64;Resource资源被依赖注入时的监听事件。<br>
* 本注解只能标记在空参数或者(String、Object、java.lang.reflect.Field)三个参数类型的任意组合方法上 <br>
* 方法在资源被依赖注入后调用。
*
* <blockquote>
*
* <pre>
* public class ResourceService implements Service {
*
* &#64;Resource(name = "res.id")
* private int id;
*
* &#64;Resource(name = "res.name")
* private String name;
*
* &#64;ResourceInjected
* private void onInjected(Object dest, String fieldName) {
* System.out .println("资源被注入到对象(" + dest + ")的字段(" + fieldName + ")上");
* }
* }
*
* public class RecordService implements Service {
*
* &#64;Resource
* private ResourceService resService;
*
* public void test() {
* }
*
* public static void main(String[] args) throws Exception {
* ResourceFactory factory = ResourceFactory.create();
* factory.register("res.id", "2345");
* factory.register("res.name", "my old name");
* ResourceService res = new ResourceService();
* factory.inject(res);
* factory.register("", res);
* RecordService serice = new RecordService();
* factory.inject(record);
* }
* }
* </pre>
*
* </blockquote>
*
* <p>详情见: https://redkale.org
*
* @author zhangjx
*/
@Documented
@Target({METHOD})
@Retention(RUNTIME)
public @interface ResourceInjected {}

View File

@@ -1,29 +1,28 @@
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package org.redkale.util;
import static java.lang.annotation.ElementType.TYPE;
import static java.lang.annotation.RetentionPolicy.RUNTIME;
import java.lang.annotation.*;
/**
* 显式的指明资源类型
* 调用ResourceFactory.register(Object rs)时通常执行的是ResourceFactory.register(rs.getClass(), Object rs);
* 若rs.getClass()的类标记了&#64;ResourceType, 则使用&#64;ResourceType.value()的class值进行注入
*
* <p>
* 详情见: https://redkale.org
*
* @author zhangjx
*/
@Inherited
@Documented
@Target({TYPE})
@Retention(RUNTIME)
public @interface ResourceType {
Class value();
}
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package org.redkale.annotation;
import static java.lang.annotation.ElementType.TYPE;
import static java.lang.annotation.RetentionPolicy.RUNTIME;
import java.lang.annotation.*;
/**
* 显式的指明资源类型 调用ResourceFactory.register(Object rs)时通常执行的是ResourceFactory.register(rs.getClass(), Object rs);
* 若rs.getClass()的类标记了&#64;ResourceType, 则使用&#64;ResourceType.value()的class值进行注入
*
* <p>详情见: https://redkale.org
*
* @author zhangjx
*/
@Inherited
@Documented
@Target({TYPE})
@Retention(RUNTIME)
public @interface ResourceType {
Class value();
}

View File

@@ -0,0 +1,21 @@
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package org.redkale.annotation;
import java.lang.annotation.*;
import static java.lang.annotation.ElementType.TYPE;
import static java.lang.annotation.RetentionPolicy.RUNTIME;
/**
* 用于预编译时执行Convert.convertFrom方法
*
* @since 2.5.0
*/
@Inherited
@Documented
@Target(TYPE)
@Retention(RUNTIME)
public @interface Serial {}

View File

@@ -0,0 +1,2 @@
/** 提供基础注解包 */
package org.redkale.annotation;

View File

@@ -59,9 +59,9 @@
package org.redkale.asm;
/**
* A visitor to visit a Java annotation. The methods of this class must be
* called in the following order: ( <tt>visit</tt> | <tt>visitEnum</tt> |
* <tt>visitAnnotation</tt> | <tt>visitArray</tt> )* <tt>visitEnd</tt>.
* A visitor to visit a Java annotation. The methods of this class must be called in the following order: (
* &#60;tt&#62;visit&#60;/tt&#62; | &#60;tt&#62;visitEnum&#60;/tt&#62; | &#60;tt&#62;visitAnnotation&#60;/tt&#62; |
* &#60;tt&#62;visitArray&#60;/tt&#62; )* &#60;tt&#62;visitEnd&#60;/tt&#62;.
*
* @author Eric Bruneton
* @author Eugene Kuleshov
@@ -69,23 +69,19 @@ package org.redkale.asm;
public abstract class AnnotationVisitor {
/**
* The ASM API version implemented by this visitor. The value of this field
* must be one of {@link Opcodes#ASM4}, {@link Opcodes#ASM5} or {@link Opcodes#ASM6}.
* The ASM API version implemented by this visitor. The value of this field must be one of {@link Opcodes#ASM4},
* {@link Opcodes#ASM5} or {@link Opcodes#ASM6}.
*/
protected final int api;
/**
* The annotation visitor to which this visitor must delegate method calls.
* May be null.
*/
/** The annotation visitor to which this visitor must delegate method calls. May be null. */
protected AnnotationVisitor av;
/**
* Constructs a new {@link AnnotationVisitor}.
*
* @param api
* the ASM API version implemented by this visitor. Must be one
* of {@link Opcodes#ASM4}, {@link Opcodes#ASM5} or {@link Opcodes#ASM6}.
* @param api the ASM API version implemented by this visitor. Must be one of {@link Opcodes#ASM4},
* {@link Opcodes#ASM5} or {@link Opcodes#ASM6}.
*/
public AnnotationVisitor(final int api) {
this(api, null);
@@ -94,12 +90,9 @@ public abstract class AnnotationVisitor {
/**
* Constructs a new {@link AnnotationVisitor}.
*
* @param api
* the ASM API version implemented by this visitor. Must be one
* of {@link Opcodes#ASM4}, {@link Opcodes#ASM5} or {@link Opcodes#ASM6}.
* @param av
* the annotation visitor to which this visitor must delegate
* method calls. May be null.
* @param api the ASM API version implemented by this visitor. Must be one of {@link Opcodes#ASM4},
* {@link Opcodes#ASM5} or {@link Opcodes#ASM6}.
* @param av the annotation visitor to which this visitor must delegate method calls. May be null.
*/
public AnnotationVisitor(final int api, final AnnotationVisitor av) {
this.api = api;
@@ -109,17 +102,12 @@ public abstract class AnnotationVisitor {
/**
* Visits a primitive value of the annotation.
*
* @param name
* the value name.
* @param value
* the actual value, whose type must be {@link Byte},
* {@link Boolean}, {@link Character}, {@link Short},
* {@link Integer} , {@link Long}, {@link Float}, {@link Double},
* {@link String} or {@link Type} of OBJECT or ARRAY sort. This
* value can also be an array of byte, boolean, short, char, int,
* long, float or double values (this is equivalent to using
* {@link #visitArray visitArray} and visiting each array element
* in turn, but is more convenient).
* @param name the value name.
* @param value the actual value, whose type must be {@link Byte}, {@link Boolean}, {@link Character},
* {@link Short}, {@link Integer} , {@link Long}, {@link Float}, {@link Double}, {@link String} or {@link Type}
* of OBJECT or ARRAY sort. This value can also be an array of byte, boolean, short, char, int, long, float or
* double values (this is equivalent to using {@link #visitArray visitArray} and visiting each array element in
* turn, but is more convenient).
*/
public void visit(String name, Object value) {
if (av != null) {
@@ -130,12 +118,9 @@ public abstract class AnnotationVisitor {
/**
* Visits an enumeration value of the annotation.
*
* @param name
* the value name.
* @param desc
* the class descriptor of the enumeration class.
* @param value
* the actual enumeration value.
* @param name the value name.
* @param desc the class descriptor of the enumeration class.
* @param value the actual enumeration value.
*/
public void visitEnum(String name, String desc, String value) {
if (av != null) {
@@ -146,15 +131,11 @@ public abstract class AnnotationVisitor {
/**
* Visits a nested annotation value of the annotation.
*
* @param name
* the value name.
* @param desc
* the class descriptor of the nested annotation class.
* @return a visitor to visit the actual nested annotation value, or
* <tt>null</tt> if this visitor is not interested in visiting this
* nested annotation. <i>The nested annotation value must be fully
* visited before calling other methods on this annotation
* visitor</i>.
* @param name the value name.
* @param desc the class descriptor of the nested annotation class.
* @return a visitor to visit the actual nested annotation value, or &#60;tt&#62;null&#60;/tt&#62; if this visitor
* is not interested in visiting this nested annotation. <i>The nested annotation value must be fully visited
* before calling other methods on this annotation visitor</i>.
*/
public AnnotationVisitor visitAnnotation(String name, String desc) {
if (av != null) {
@@ -164,18 +145,14 @@ public abstract class AnnotationVisitor {
}
/**
* Visits an array value of the annotation. Note that arrays of primitive
* types (such as byte, boolean, short, char, int, long, float or double)
* can be passed as value to {@link #visit visit}. This is what
* {@link ClassReader} does.
* Visits an array value of the annotation. Note that arrays of primitive types (such as byte, boolean, short, char,
* int, long, float or double) can be passed as value to {@link #visit visit}. This is what {@link ClassReader}
* does.
*
* @param name
* the value name.
* @return a visitor to visit the actual array value elements, or
* <tt>null</tt> if this visitor is not interested in visiting these
* values. The 'name' parameters passed to the methods of this
* visitor are ignored. <i>All the array values must be visited
* before calling other methods on this annotation visitor</i>.
* @param name the value name.
* @return a visitor to visit the actual array value elements, or &#60;tt&#62;null&#60;/tt&#62; if this visitor is
* not interested in visiting these values. The 'name' parameters passed to the methods of this visitor are
* ignored. <i>All the array values must be visited before calling other methods on this annotation visitor</i>.
*/
public AnnotationVisitor visitArray(String name) {
if (av != null) {
@@ -184,9 +161,7 @@ public abstract class AnnotationVisitor {
return null;
}
/**
* Visits the end of the annotation.
*/
/** Visits the end of the annotation. */
public void visitEnd() {
if (av != null) {
av.visitEnd();

View File

@@ -66,50 +66,34 @@ package org.redkale.asm;
*/
final class AnnotationWriter extends AnnotationVisitor {
/**
* The class writer to which this annotation must be added.
*/
/** The class writer to which this annotation must be added. */
private final ClassWriter cw;
/**
* The number of values in this annotation.
*/
/** The number of values in this annotation. */
private int size;
/**
* <tt>true<tt> if values are named, <tt>false</tt> otherwise. Annotation
* writers used for annotation default and annotation arrays use unnamed
* values.
* &#60;tt&#62;true&#60;tt&#62; if values are named, &#60;tt&#62;false&#60;/tt&#62; otherwise. Annotation writers
* used for annotation default and annotation arrays use unnamed values.
*/
private final boolean named;
/**
* The annotation values in bytecode form. This byte vector only contains
* the values themselves, i.e. the number of values must be stored as a
* unsigned short just before these bytes.
* The annotation values in bytecode form. This byte vector only contains the values themselves, i.e. the number of
* values must be stored as a unsigned short just before these bytes.
*/
private final ByteVector bv;
/**
* The byte vector to be used to store the number of values of this
* annotation. See {@link #bv}.
*/
/** The byte vector to be used to store the number of values of this annotation. See {@link #bv}. */
private final ByteVector parent;
/**
* Where the number of values of this annotation must be stored in
* {@link #parent}.
*/
/** Where the number of values of this annotation must be stored in {@link #parent}. */
private final int offset;
/**
* Next annotation writer. This field is used to store annotation lists.
*/
/** Next annotation writer. This field is used to store annotation lists. */
AnnotationWriter next;
/**
* Previous annotation writer. This field is used to store annotation lists.
*/
/** Previous annotation writer. This field is used to store annotation lists. */
AnnotationWriter prev;
// ------------------------------------------------------------------------
@@ -119,20 +103,14 @@ final class AnnotationWriter extends AnnotationVisitor {
/**
* Constructs a new {@link AnnotationWriter}.
*
* @param cw
* the class writer to which this annotation must be added.
* @param named
* <tt>true<tt> if values are named, <tt>false</tt> otherwise.
* @param bv
* where the annotation values must be stored.
* @param parent
* where the number of annotation values must be stored.
* @param offset
* where in <tt>parent</tt> the number of annotation values must
* be stored.
* @param cw the class writer to which this annotation must be added.
* @param named &#60;tt&#62;true&#60;tt&#62; if values are named, &#60;tt&#62;false&#60;/tt&#62; otherwise.
* @param bv where the annotation values must be stored.
* @param parent where the number of annotation values must be stored.
* @param offset where in &#60;tt&#62;parent&#60;/tt&#62; the number of annotation values must be stored.
*/
AnnotationWriter(final ClassWriter cw, final boolean named,
final ByteVector bv, final ByteVector parent, final int offset) {
AnnotationWriter(
final ClassWriter cw, final boolean named, final ByteVector bv, final ByteVector parent, final int offset) {
super(Opcodes.ASM6);
this.cw = cw;
this.named = named;
@@ -219,8 +197,7 @@ final class AnnotationWriter extends AnnotationVisitor {
}
@Override
public void visitEnum(final String name, final String desc,
final String value) {
public void visitEnum(final String name, final String desc, final String value) {
++size;
if (named) {
bv.putShort(cw.newUTF8(name));
@@ -229,8 +206,7 @@ final class AnnotationWriter extends AnnotationVisitor {
}
@Override
public AnnotationVisitor visitAnnotation(final String name,
final String desc) {
public AnnotationVisitor visitAnnotation(final String name, final String desc) {
++size;
if (named) {
bv.putShort(cw.newUTF8(name));
@@ -280,11 +256,9 @@ final class AnnotationWriter extends AnnotationVisitor {
}
/**
* Puts the annotations of this annotation writer list into the given byte
* vector.
* Puts the annotations of this annotation writer list into the given byte vector.
*
* @param out
* where the annotations must be put.
* @param out where the annotations must be put.
*/
void put(final ByteVector out) {
int n = 0;
@@ -311,15 +285,11 @@ final class AnnotationWriter extends AnnotationVisitor {
/**
* Puts the given annotation lists into the given byte vector.
*
* @param panns
* an array of annotation writer lists.
* @param off
* index of the first annotation to be written.
* @param out
* where the annotations must be put.
* @param panns an array of annotation writer lists.
* @param off index of the first annotation to be written.
* @param out where the annotations must be put.
*/
static void put(final AnnotationWriter[] panns, final int off,
final ByteVector out) {
static void put(final AnnotationWriter[] panns, final int off, final ByteVector out) {
int size = 1 + 2 * (panns.length - off);
for (int i = off; i < panns.length; ++i) {
size += panns[i] == null ? 0 : panns[i].getSize();
@@ -346,49 +316,45 @@ final class AnnotationWriter extends AnnotationVisitor {
}
/**
* Puts the given type reference and type path into the given bytevector.
* LOCAL_VARIABLE and RESOURCE_VARIABLE target types are not supported.
* Puts the given type reference and type path into the given bytevector. LOCAL_VARIABLE and RESOURCE_VARIABLE
* target types are not supported.
*
* @param typeRef
* a reference to the annotated type. See {@link TypeReference}.
* @param typePath
* the path to the annotated type argument, wildcard bound, array
* element type, or static inner type within 'typeRef'. May be
* <tt>null</tt> if the annotation targets 'typeRef' as a whole.
* @param out
* where the type reference and type path must be put.
* @param typeRef a reference to the annotated type. See {@link TypeReference}.
* @param typePath the path to the annotated type argument, wildcard bound, array element type, or static inner type
* within 'typeRef'. May be &#60;tt&#62;null&#60;/tt&#62; if the annotation targets 'typeRef' as a whole.
* @param out where the type reference and type path must be put.
*/
static void putTarget(int typeRef, TypePath typePath, ByteVector out) {
switch (typeRef >>> 24) {
case 0x00: // CLASS_TYPE_PARAMETER
case 0x01: // METHOD_TYPE_PARAMETER
case 0x16: // METHOD_FORMAL_PARAMETER
out.putShort(typeRef >>> 16);
break;
case 0x13: // FIELD
case 0x14: // METHOD_RETURN
case 0x15: // METHOD_RECEIVER
out.putByte(typeRef >>> 24);
break;
case 0x47: // CAST
case 0x48: // CONSTRUCTOR_INVOCATION_TYPE_ARGUMENT
case 0x49: // METHOD_INVOCATION_TYPE_ARGUMENT
case 0x4A: // CONSTRUCTOR_REFERENCE_TYPE_ARGUMENT
case 0x4B: // METHOD_REFERENCE_TYPE_ARGUMENT
out.putInt(typeRef);
break;
// case 0x10: // CLASS_EXTENDS
// case 0x11: // CLASS_TYPE_PARAMETER_BOUND
// case 0x12: // METHOD_TYPE_PARAMETER_BOUND
// case 0x17: // THROWS
// case 0x42: // EXCEPTION_PARAMETER
// case 0x43: // INSTANCEOF
// case 0x44: // NEW
// case 0x45: // CONSTRUCTOR_REFERENCE
// case 0x46: // METHOD_REFERENCE
default:
out.put12(typeRef >>> 24, (typeRef & 0xFFFF00) >> 8);
break;
case 0x00: // CLASS_TYPE_PARAMETER
case 0x01: // METHOD_TYPE_PARAMETER
case 0x16: // METHOD_FORMAL_PARAMETER
out.putShort(typeRef >>> 16);
break;
case 0x13: // FIELD
case 0x14: // METHOD_RETURN
case 0x15: // METHOD_RECEIVER
out.putByte(typeRef >>> 24);
break;
case 0x47: // CAST
case 0x48: // CONSTRUCTOR_INVOCATION_TYPE_ARGUMENT
case 0x49: // METHOD_INVOCATION_TYPE_ARGUMENT
case 0x4A: // CONSTRUCTOR_REFERENCE_TYPE_ARGUMENT
case 0x4B: // METHOD_REFERENCE_TYPE_ARGUMENT
out.putInt(typeRef);
break;
// case 0x10: // CLASS_EXTENDS
// case 0x11: // CLASS_TYPE_PARAMETER_BOUND
// case 0x12: // METHOD_TYPE_PARAMETER_BOUND
// case 0x17: // THROWS
// case 0x42: // EXCEPTION_PARAMETER
// case 0x43: // INSTANCEOF
// case 0x44: // NEW
// case 0x45: // CONSTRUCTOR_REFERENCE
// case 0x46: // METHOD_REFERENCE
default:
out.put12(typeRef >>> 24, (typeRef & 0xFFFF00) >> 8);
break;
}
if (typePath == null) {
out.putByte(0);

View File

@@ -0,0 +1,157 @@
/*
*
*/
package org.redkale.asm;
import java.lang.reflect.Method;
import java.lang.reflect.Parameter;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import org.redkale.annotation.Param;
/**
* 存放方法的字节信息
*
* @see org.redkale.asm.AsmMethodBoost
* @since 2.8.0
*/
public class AsmMethodBean {
private List<AsmMethodParam> params;
private int access;
private String name;
private String desc;
private String signature;
private String[] exceptions;
public AsmMethodBean() {}
public AsmMethodBean(int access, String name, String desc, String signature, String[] exceptions) {
this.access = access;
this.name = name;
this.desc = desc;
this.signature = signature;
this.exceptions = exceptions;
this.params = new ArrayList<>();
}
public static AsmMethodBean get(Map<String, AsmMethodBean> map, Method method) {
return map == null ? null : map.get(method.getName() + ":" + Type.getMethodDescriptor(method));
}
void removeEmptyNames() {
if (params != null) {
List<AsmMethodParam> dels = null;
for (AsmMethodParam p : params) {
if (" ".equals(p.getName())) {
if (dels == null) {
dels = new ArrayList<>();
}
dels.add(p);
}
}
if (dels != null) {
for (AsmMethodParam p : dels) {
params.remove(p);
}
}
}
}
public List<String> fieldNameList() {
return paramNameList(null);
}
public List<String> paramNameList(Method method) {
if (params == null) {
return new ArrayList<>();
}
int index = 0;
Parameter[] ps = method == null ? null : method.getParameters();
List<String> rs = new ArrayList<>(params.size());
for (AsmMethodParam p : params) {
Param pann = ps == null ? null : ps[index].getAnnotation(Param.class);
rs.add(pann == null ? p.getName() : pann.value());
index++;
}
return rs;
}
public String[] fieldNameArray() {
return paramNameArray(null);
}
public String[] paramNameArray(Method method) {
if (params == null) {
return null;
}
Parameter[] ps = method == null ? null : method.getParameters();
// params包含了throws, size()可能比ps.length大
String[] rs = new String[ps == null ? params.size() : ps.length];
for (int i = 0; i < rs.length; i++) {
Param pann = ps == null ? null : ps[i].getAnnotation(Param.class);
rs[i] = pann == null ? params.get(i).getName() : pann.value();
}
return rs;
}
public List<AsmMethodParam> getParams() {
return params;
}
public void setParams(List<AsmMethodParam> params) {
this.params = params;
}
public int getAccess() {
return access;
}
public void setAccess(int access) {
this.access = access;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getDesc() {
return desc;
}
public void setDesc(String desc) {
this.desc = desc;
}
public String getSignature() {
return signature;
}
public void setSignature(String signature) {
this.signature = signature;
}
public String[] getExceptions() {
return exceptions;
}
public void setExceptions(String[] exceptions) {
this.exceptions = exceptions;
}
@Override
public String toString() {
return "{params:" + params + ", access:" + access + ", name:" + name + ", desc:" + desc + ", signature:"
+ signature + ", exceptions:" + exceptions + '}';
}
}

View File

@@ -0,0 +1,464 @@
/*
*
*/
package org.redkale.asm;
import java.io.InputStream;
import java.lang.annotation.Annotation;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.concurrent.atomic.AtomicInteger;
import org.redkale.annotation.Nullable;
import static org.redkale.asm.Opcodes.ACC_PRIVATE;
import static org.redkale.asm.Opcodes.ACC_PROTECTED;
import static org.redkale.asm.Opcodes.ACC_PUBLIC;
import static org.redkale.asm.Opcodes.ALOAD;
import static org.redkale.asm.Opcodes.ARETURN;
import static org.redkale.asm.Opcodes.DLOAD;
import static org.redkale.asm.Opcodes.DRETURN;
import static org.redkale.asm.Opcodes.FLOAD;
import static org.redkale.asm.Opcodes.FRETURN;
import static org.redkale.asm.Opcodes.ILOAD;
import static org.redkale.asm.Opcodes.IRETURN;
import static org.redkale.asm.Opcodes.LLOAD;
import static org.redkale.asm.Opcodes.LRETURN;
import static org.redkale.asm.Opcodes.RETURN;
import org.redkale.inject.ResourceFactory;
import org.redkale.util.RedkaleClassLoader;
import org.redkale.util.Utility;
/**
* 生产动态字节码的方法扩展器, 可以进行方法加强动作
*
* <p>详情见: https://redkale.org
*
* @param <T> 泛型
* @author zhangjx
* @since 2.8.0
*/
public abstract class AsmMethodBoost<T> {
protected final AtomicInteger fieldIndex = new AtomicInteger();
protected final boolean remote;
protected final Class serviceType;
protected AsmMethodBoost(boolean remote, Class serviceType) {
this.remote = remote;
this.serviceType = serviceType;
}
public static AsmMethodBoost create(boolean remote, Collection<AsmMethodBoost> list) {
return new AsmMethodBoosts(remote, list);
}
public static AsmMethodBoost create(boolean remote, AsmMethodBoost... items) {
return new AsmMethodBoosts(remote, items);
}
/**
* 返回一个类所有方法的字节信息, key为: method.getName+':'+Type.getMethodDescriptor(method)
*
* @param clazz Class
* @return Map
*/
public static Map<String, AsmMethodBean> getMethodBeans(Class clazz) {
Map<String, AsmMethodBean> rs = MethodParamClassVisitor.getMethodParamNames(new HashMap<>(), clazz);
// 返回的List中参数列表可能会比方法参数量多因为方法内的临时变量也会存入list中 所以需要list的元素集合比方法的参数多
rs.values().forEach(AsmMethodBean::removeEmptyNames);
return rs;
}
public static String getMethodBeanKey(Method method) {
return method.getName() + ":" + Type.getMethodDescriptor(method);
}
/**
* 获取需屏蔽的方法上的注解
*
* @param method 方法
* @return 需要屏蔽的注解
*/
public abstract List<Class<? extends Annotation>> filterMethodAnnotations(Method method);
/**
* 对方法进行动态加强处理
*
* @param classLoader ClassLoader
* @param cw 动态字节码Writer
* @param serviceImplClass 原始实现类
* @param newDynName 动态新类名
* @param fieldPrefix 动态字段的前缀
* @param filterAnns 需要过滤的注解
* @param method 操作的方法
* @param newMethod 新的方法名, 可能为null
* @return 下一个新的方法名不做任何处理应返回参数newMethodName
*/
public abstract AsmNewMethod doMethod(
RedkaleClassLoader classLoader,
ClassWriter cw,
Class serviceImplClass,
String newDynName,
String fieldPrefix,
List<Class<? extends Annotation>> filterAnns,
Method method,
@Nullable AsmNewMethod newMethod);
/**
* 处理所有动态方法后调用
*
* @param classLoader ClassLoader
* @param cw 动态字节码Writer
* @param newDynName 动态新类名
* @param fieldPrefix 动态字段的前缀
*/
public void doAfterMethods(RedkaleClassLoader classLoader, ClassWriter cw, String newDynName, String fieldPrefix) {}
/**
* 处理所有动态方法后调用
*
* @param classLoader ClassLoader
* @param cw 动态字节码Writer
* @param mv 构造函数MethodVisitor
* @param newDynName 动态新类名
* @param fieldPrefix 动态字段的前缀
* @param remote 是否远程模式
*/
public void doConstructorMethod(
RedkaleClassLoader classLoader,
ClassWriter cw,
MethodVisitor mv,
String newDynName,
String fieldPrefix,
boolean remote) {}
/**
* 实例对象进行操作,通常用于给动态的字段赋值
*
* @param classLoader ClassLoader
* @param resourceFactory ResourceFactory
* @param service 实例对象
*/
public abstract void doInstance(RedkaleClassLoader classLoader, ResourceFactory resourceFactory, T service);
protected AsmMethodBean getMethodBean(Method method) {
Map<String, AsmMethodBean> methodBeans = AsmMethodBoost.getMethodBeans(serviceType);
return AsmMethodBean.get(methodBeans, method);
}
protected MethodVisitor createMethodVisitor(
ClassWriter cw, Method method, AsmNewMethod newMethod, AsmMethodBean methodBean) {
return new MethodDebugVisitor(cw.visitMethod(
getAcc(method, newMethod),
getNowMethodName(method, newMethod),
Type.getMethodDescriptor(method),
getMethodSignature(method, methodBean),
getMethodExceptions(method, methodBean)));
}
protected final int getAcc(Method method, AsmNewMethod newMethod) {
if (newMethod != null) {
return ACC_PRIVATE;
}
return Modifier.isProtected(method.getModifiers()) ? ACC_PROTECTED : ACC_PUBLIC;
}
protected String getNowMethodName(Method method, AsmNewMethod newMethod) {
return newMethod == null ? method.getName() : newMethod.getMethodName();
}
protected String getMethodSignature(Method method, AsmMethodBean methodBean) {
return methodBean != null ? methodBean.getSignature() : null;
}
protected String[] getMethodExceptions(Method method, AsmMethodBean methodBean) {
if (methodBean == null) {
String[] exceptions = null;
Class<?>[] expTypes = method.getExceptionTypes();
if (expTypes.length > 0) {
exceptions = new String[expTypes.length];
for (int i = 0; i < expTypes.length; i++) {
exceptions[i] = expTypes[i].getName().replace('.', '/');
}
}
return exceptions;
} else {
return methodBean.getExceptions();
}
}
protected void visitRawAnnotation(
Method method, AsmNewMethod newMethod, MethodVisitor mv, Class skipAnnType, List skipAnns) {
if (newMethod == null) {
// 给方法加上原有的Annotation
final Annotation[] anns = method.getAnnotations();
for (Annotation ann : anns) {
if (ann.annotationType() != skipAnnType
&& (skipAnns == null || !skipAnns.contains(ann.annotationType()))) {
Asms.visitAnnotation(
mv.visitAnnotation(Type.getDescriptor(ann.annotationType()), true),
ann.annotationType(),
ann);
}
}
// 给参数加上原有的Annotation
final Annotation[][] annss = method.getParameterAnnotations();
for (int k = 0; k < annss.length; k++) {
for (Annotation ann : annss[k]) {
Asms.visitAnnotation(
mv.visitParameterAnnotation(k, Type.getDescriptor(ann.annotationType()), true),
ann.annotationType(),
ann);
}
}
}
}
protected List<Integer> visitVarInsnParamTypes(MethodVisitor mv, Method method, int insn) {
// 传参数
Class[] paramTypes = method.getParameterTypes();
List<Integer> insns = new ArrayList<>();
for (Class pt : paramTypes) {
insn++;
if (pt.isPrimitive()) {
if (pt == long.class) {
mv.visitVarInsn(LLOAD, insn++);
} else if (pt == float.class) {
mv.visitVarInsn(FLOAD, insn++);
} else if (pt == double.class) {
mv.visitVarInsn(DLOAD, insn++);
} else {
mv.visitVarInsn(ILOAD, insn);
}
} else {
mv.visitVarInsn(ALOAD, insn);
}
insns.add(insn);
}
return insns;
}
protected void visitParamTypesLocalVariable(
MethodVisitor mv, Method method, Label l0, Label l2, List<Integer> insns, AsmMethodBean methodBean) {
Class[] paramTypes = method.getParameterTypes();
if (methodBean != null && paramTypes.length > 0) {
mv.visitLabel(l2);
List<AsmMethodParam> params = methodBean.getParams();
for (int i = 0; i < paramTypes.length; i++) {
AsmMethodParam param = params.get(i);
mv.visitLocalVariable(
param.getName(),
param.description(paramTypes[i]),
param.signature(paramTypes[i]),
l0,
l2,
insns.get(i));
}
}
}
protected void visitInsnReturn(
MethodVisitor mv, Method method, Label l0, List<Integer> insns, AsmMethodBean methodBean) {
if (method.getGenericReturnType() == void.class) {
mv.visitInsn(RETURN);
} else {
Class returnclz = method.getReturnType();
if (returnclz.isPrimitive()) {
if (returnclz == long.class) {
mv.visitInsn(LRETURN);
} else if (returnclz == float.class) {
mv.visitInsn(FRETURN);
} else if (returnclz == double.class) {
mv.visitInsn(DRETURN);
} else {
mv.visitInsn(IRETURN);
}
} else {
mv.visitInsn(ARETURN);
}
}
visitParamTypesLocalVariable(mv, method, l0, new Label(), insns, methodBean);
}
/**
* 生产动态字节码的方法扩展器, 可以进行方法加强动作
*
* @param <T> 泛型
* @since 2.8.0
*/
static class AsmMethodBoosts<T> extends AsmMethodBoost<T> {
private final AsmMethodBoost[] items;
public AsmMethodBoosts(boolean remote, Collection<AsmMethodBoost> list) {
super(remote, null);
this.items = list.toArray(new AsmMethodBoost[list.size()]);
}
public AsmMethodBoosts(boolean remote, AsmMethodBoost... items) {
super(remote, null);
this.items = items;
}
@Override
public List<Class<? extends Annotation>> filterMethodAnnotations(Method method) {
List<Class<? extends Annotation>> list = null;
for (AsmMethodBoost item : items) {
if (item != null) {
List<Class<? extends Annotation>> sub = item.filterMethodAnnotations(method);
if (sub != null) {
if (list == null) {
list = new ArrayList<>();
}
list.addAll(sub);
}
}
}
return list;
}
@Override
public AsmNewMethod doMethod(
RedkaleClassLoader classLoader,
ClassWriter cw,
Class serviceImplClass,
String newDynName,
String fieldPrefix,
List<Class<? extends Annotation>> filterAnns,
Method method,
AsmNewMethod newMethod) {
AsmNewMethod newResult = newMethod;
for (AsmMethodBoost item : items) {
if (item != null) {
newResult = item.doMethod(
classLoader, cw, serviceImplClass, newDynName, fieldPrefix, filterAnns, method, newResult);
}
}
return newResult;
}
@Override
public void doAfterMethods(
RedkaleClassLoader classLoader, ClassWriter cw, String newDynName, String fieldPrefix) {
for (AsmMethodBoost item : items) {
if (item != null) {
item.doAfterMethods(classLoader, cw, newDynName, fieldPrefix);
}
}
}
@Override
public void doConstructorMethod(
RedkaleClassLoader classLoader,
ClassWriter cw,
MethodVisitor mv,
String newDynName,
String fieldPrefix,
boolean remote) {
for (AsmMethodBoost item : items) {
if (item != null) {
item.doConstructorMethod(classLoader, cw, mv, newDynName, fieldPrefix, remote);
}
}
}
@Override
public void doInstance(RedkaleClassLoader classLoader, ResourceFactory resourceFactory, T service) {
for (AsmMethodBoost item : items) {
if (item != null) {
item.doInstance(classLoader, resourceFactory, service);
}
}
}
}
static class MethodParamClassVisitor extends ClassVisitor {
private Class serviceType;
private final Map<String, AsmMethodBean> methodBeanMap;
public MethodParamClassVisitor(int api, Class serviceType, final Map<String, AsmMethodBean> methodBeanMap) {
super(api);
this.serviceType = serviceType;
this.methodBeanMap = methodBeanMap;
}
@Override
public MethodVisitor visitMethod(
int methodAccess,
String methodName,
String methodDesc,
String methodSignature,
String[] methodExceptions) {
super.visitMethod(api, methodName, methodDesc, methodSignature, methodExceptions);
if (java.lang.reflect.Modifier.isStatic(methodAccess)) {
return null;
}
String key = methodName + ":" + methodDesc;
if (methodBeanMap.containsKey(key)) {
return null;
}
AsmMethodBean bean =
new AsmMethodBean(methodAccess, methodName, methodDesc, methodSignature, methodExceptions);
List<AsmMethodParam> paramList = bean.getParams();
methodBeanMap.put(key, bean);
return new MethodVisitor(Opcodes.ASM6) {
@Override
public void visitParameter(String paramName, int paramAccess) {
paramList.add(new AsmMethodParam(paramName));
}
@Override
public void visitLocalVariable(
String varName, String varDesc, String varSignature, Label start, Label end, int varIndex) {
if (varIndex < 1) {
return;
}
int size = paramList.size();
// index并不会按顺序执行
if (varIndex > size) {
for (int i = size; i < varIndex; i++) {
paramList.add(new AsmMethodParam(" ", varDesc, varSignature));
}
paramList.set(varIndex - 1, new AsmMethodParam(varName, varDesc, varSignature));
}
paramList.set(varIndex - 1, new AsmMethodParam(varName, varDesc, varSignature));
}
};
}
// 返回的List中参数列表可能会比方法参数量多因为方法内的临时变量也会存入list中 所以需要list的元素集合比方法的参数多
static Map<String, AsmMethodBean> getMethodParamNames(Map<String, AsmMethodBean> map, Class clazz) {
String n = clazz.getName();
byte[] bs = RedkaleClassLoader.getDynClassBytes(n);
if (bs == null) {
InputStream in = clazz.getResourceAsStream(n.substring(n.lastIndexOf('.') + 1) + ".class");
if (in == null) {
return map;
}
try {
bs = Utility.readBytesThenClose(in);
} catch (Exception e) {
// do nothing
}
}
try {
new ClassReader(bs).accept(new MethodParamClassVisitor(Opcodes.ASM6, clazz, map), 0);
} catch (Exception e) {
e.printStackTrace();
// do nothing
}
Class superClass = clazz.getSuperclass();
if (superClass == null || superClass == Object.class) { // 接口的getSuperclass为null
return map;
}
return getMethodParamNames(map, superClass);
}
}
}

Some files were not shown because too many files have changed in this diff Show More