springbootAI 2.2.5__tar.gz → 2.3.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (326) hide show
  1. {springbootai-2.2.5 → springbootai-2.3.0}/CHANGELOG.md +69 -1
  2. {springbootai-2.2.5/springbootAI.egg-info → springbootai-2.3.0}/PKG-INFO +58 -18
  3. {springbootai-2.2.5 → springbootai-2.3.0}/README.md +26 -14
  4. {springbootai-2.2.5 → springbootai-2.3.0}/pyproject.toml +43 -5
  5. {springbootai-2.2.5 → springbootai-2.3.0}/requirements-ai.txt +1 -0
  6. {springbootai-2.2.5 → springbootai-2.3.0}/spring/__init__.py +1 -1
  7. {springbootai-2.2.5 → springbootai-2.3.0}/spring/annotations/__init__.py +43 -2
  8. springbootai-2.3.0/spring/annotations/batch.py +101 -0
  9. springbootai-2.3.0/spring/annotations/data.py +67 -0
  10. springbootai-2.3.0/spring/annotations/enterprise.py +223 -0
  11. {springbootai-2.2.5 → springbootai-2.3.0}/spring/annotations/messaging.py +83 -1
  12. springbootai-2.3.0/spring/annotations/security.py +115 -0
  13. springbootai-2.3.0/spring/batch/__init__.py +545 -0
  14. springbootai-2.3.0/spring/cli/__init__.py +19 -0
  15. springbootai-2.3.0/spring/cli/main.py +293 -0
  16. springbootai-2.3.0/spring/cli/scaffold.py +398 -0
  17. {springbootai-2.2.5 → springbootai-2.3.0}/spring/cloud/__init__.py +27 -0
  18. springbootai-2.3.0/spring/cloud/bus.py +356 -0
  19. springbootai-2.3.0/spring/cloud/config_center.py +393 -0
  20. {springbootai-2.2.5 → springbootai-2.3.0}/spring/cloud/seata.py +24 -3
  21. springbootai-2.3.0/spring/cloud/seata_at_proxy.py +534 -0
  22. springbootai-2.3.0/spring/config/spring-configuration-metadata.json +56 -0
  23. {springbootai-2.2.5 → springbootai-2.3.0}/spring/context/application_context.py +33 -0
  24. {springbootai-2.2.5 → springbootai-2.3.0}/spring/csv/annotations.py +161 -12
  25. {springbootai-2.2.5 → springbootai-2.3.0}/spring/csv/reader.py +53 -1
  26. springbootai-2.3.0/spring/data/rest.py +259 -0
  27. springbootai-2.3.0/spring/devtools.py +153 -0
  28. {springbootai-2.2.5 → springbootai-2.3.0}/spring/excel/annotations.py +161 -12
  29. {springbootai-2.2.5 → springbootai-2.3.0}/spring/excel/reader.py +54 -1
  30. {springbootai-2.2.5 → springbootai-2.3.0}/spring/langgraph/autoconfig.py +1 -1
  31. {springbootai-2.2.5 → springbootai-2.3.0}/spring/main.py +296 -6
  32. {springbootai-2.2.5 → springbootai-2.3.0}/spring/mcp/server.py +1 -1
  33. springbootai-2.3.0/spring/messaging/kafka.py +275 -0
  34. {springbootai-2.2.5 → springbootai-2.3.0}/spring/orm/ddl_auto.py +44 -3
  35. {springbootai-2.2.5 → springbootai-2.3.0}/spring/orm/migration.py +271 -20
  36. {springbootai-2.2.5 → springbootai-2.3.0}/spring/orm/pymybatis/security/sql_injection_detector.py +5 -3
  37. {springbootai-2.2.5 → springbootai-2.3.0}/spring/orm/pymybatis/version.py +1 -1
  38. {springbootai-2.2.5 → springbootai-2.3.0}/spring/security/jwt_utils.py +66 -10
  39. springbootai-2.3.0/spring/security/oauth2.py +354 -0
  40. {springbootai-2.2.5 → springbootai-2.3.0}/spring/utils/banner.py +12 -3
  41. {springbootai-2.2.5 → springbootai-2.3.0}/spring/validation/validator.py +27 -3
  42. {springbootai-2.2.5 → springbootai-2.3.0}/spring/web/actuator.py +210 -20
  43. springbootai-2.3.0/spring/web/csrf.py +273 -0
  44. springbootai-2.3.0/spring/web/hateoas.py +367 -0
  45. {springbootai-2.2.5 → springbootai-2.3.0}/spring/web/web_context.py +24 -0
  46. {springbootai-2.2.5 → springbootai-2.3.0/springbootAI.egg-info}/PKG-INFO +58 -18
  47. {springbootai-2.2.5 → springbootai-2.3.0}/springbootAI.egg-info/SOURCES.txt +34 -0
  48. {springbootai-2.2.5 → springbootai-2.3.0}/springbootAI.egg-info/entry_points.txt +1 -0
  49. {springbootai-2.2.5 → springbootai-2.3.0}/springbootAI.egg-info/requires.txt +35 -3
  50. {springbootai-2.2.5 → springbootai-2.3.0}/tests/test_actuator_prometheus_admin.py +84 -4
  51. {springbootai-2.2.5 → springbootai-2.3.0}/tests/test_ai_comprehensive.py +3 -5
  52. springbootai-2.3.0/tests/test_batch.py +311 -0
  53. springbootai-2.3.0/tests/test_bus.py +242 -0
  54. springbootai-2.3.0/tests/test_cli.py +181 -0
  55. springbootai-2.3.0/tests/test_compositional_annotations.py +534 -0
  56. springbootai-2.3.0/tests/test_config_center.py +303 -0
  57. springbootai-2.3.0/tests/test_csrf.py +269 -0
  58. {springbootai-2.2.5 → springbootai-2.3.0}/tests/test_csv_module.py +336 -24
  59. springbootai-2.3.0/tests/test_data_rest.py +221 -0
  60. springbootai-2.3.0/tests/test_devtools.py +353 -0
  61. {springbootai-2.2.5 → springbootai-2.3.0}/tests/test_excel_module.py +332 -5
  62. springbootai-2.3.0/tests/test_hateoas.py +260 -0
  63. springbootai-2.3.0/tests/test_kafka.py +754 -0
  64. {springbootai-2.2.5 → springbootai-2.3.0}/tests/test_langchain_comprehensive.py +0 -1
  65. {springbootai-2.2.5 → springbootai-2.3.0}/tests/test_langchain_ext.py +6 -1
  66. {springbootai-2.2.5 → springbootai-2.3.0}/tests/test_langgraph_comprehensive.py +1 -3
  67. {springbootai-2.2.5 → springbootai-2.3.0}/tests/test_langgraph_module.py +1 -1
  68. springbootai-2.3.0/tests/test_metadata.py +114 -0
  69. springbootai-2.3.0/tests/test_migration.py +740 -0
  70. springbootai-2.3.0/tests/test_new_annotations.py +454 -0
  71. springbootai-2.3.0/tests/test_oauth2.py +394 -0
  72. springbootai-2.3.0/tests/test_seata_at_proxy.py +436 -0
  73. {springbootai-2.2.5 → springbootai-2.3.0}/tests/test_seata_durable_store.py +4 -2
  74. springbootai-2.3.0/tests/test_starter.py +113 -0
  75. {springbootai-2.2.5 → springbootai-2.3.0}/LICENSE +0 -0
  76. {springbootai-2.2.5 → springbootai-2.3.0}/MANIFEST.in +0 -0
  77. {springbootai-2.2.5 → springbootai-2.3.0}/SECURITY.md +0 -0
  78. {springbootai-2.2.5 → springbootai-2.3.0}/requirements-langgraph.txt +0 -0
  79. {springbootai-2.2.5 → springbootai-2.3.0}/requirements-mcp.txt +0 -0
  80. {springbootai-2.2.5 → springbootai-2.3.0}/requirements.txt +0 -0
  81. {springbootai-2.2.5 → springbootai-2.3.0}/setup.cfg +0 -0
  82. {springbootai-2.2.5 → springbootai-2.3.0}/setup.py +0 -0
  83. {springbootai-2.2.5 → springbootai-2.3.0}/spring/ai/__init__.py +0 -0
  84. {springbootai-2.2.5 → springbootai-2.3.0}/spring/ai/advisors.py +0 -0
  85. {springbootai-2.2.5 → springbootai-2.3.0}/spring/ai/annotations.py +0 -0
  86. {springbootai-2.2.5 → springbootai-2.3.0}/spring/ai/autoconfig.py +0 -0
  87. {springbootai-2.2.5 → springbootai-2.3.0}/spring/ai/core.py +0 -0
  88. {springbootai-2.2.5 → springbootai-2.3.0}/spring/ai/etl.py +0 -0
  89. {springbootai-2.2.5 → springbootai-2.3.0}/spring/ai/memory.py +0 -0
  90. {springbootai-2.2.5 → springbootai-2.3.0}/spring/ai/observability.py +0 -0
  91. {springbootai-2.2.5 → springbootai-2.3.0}/spring/ai/providers.py +0 -0
  92. {springbootai-2.2.5 → springbootai-2.3.0}/spring/ai/resilience.py +0 -0
  93. {springbootai-2.2.5 → springbootai-2.3.0}/spring/ai/tools.py +0 -0
  94. {springbootai-2.2.5 → springbootai-2.3.0}/spring/ai/vectorstore.py +0 -0
  95. {springbootai-2.2.5 → springbootai-2.3.0}/spring/annotations/cache.py +0 -0
  96. {springbootai-2.2.5 → springbootai-2.3.0}/spring/annotations/cloud.py +0 -0
  97. {springbootai-2.2.5 → springbootai-2.3.0}/spring/annotations/conditional.py +0 -0
  98. {springbootai-2.2.5 → springbootai-2.3.0}/spring/annotations/core.py +0 -0
  99. {springbootai-2.2.5 → springbootai-2.3.0}/spring/annotations/langchain.py +0 -0
  100. {springbootai-2.2.5 → springbootai-2.3.0}/spring/annotations/langgraph.py +0 -0
  101. {springbootai-2.2.5 → springbootai-2.3.0}/spring/aop/__init__.py +0 -0
  102. {springbootai-2.2.5 → springbootai-2.3.0}/spring/aop/aspect.py +0 -0
  103. {springbootai-2.2.5 → springbootai-2.3.0}/spring/aop/cloud_aop.py +0 -0
  104. {springbootai-2.2.5 → springbootai-2.3.0}/spring/aop/comprehensive_aop.py +0 -0
  105. {springbootai-2.2.5 → springbootai-2.3.0}/spring/aop/method_interceptor.py +0 -0
  106. {springbootai-2.2.5 → springbootai-2.3.0}/spring/aop/proxy_factory.py +0 -0
  107. {springbootai-2.2.5 → springbootai-2.3.0}/spring/cloud/discovery.py +0 -0
  108. {springbootai-2.2.5 → springbootai-2.3.0}/spring/cloud/feign.py +0 -0
  109. {springbootai-2.2.5 → springbootai-2.3.0}/spring/cloud/gateway.py +0 -0
  110. {springbootai-2.2.5 → springbootai-2.3.0}/spring/cloud/load_balancer.py +0 -0
  111. {springbootai-2.2.5 → springbootai-2.3.0}/spring/cloud/seata_bridge.py +0 -0
  112. {springbootai-2.2.5 → springbootai-2.3.0}/spring/cloud/sentinel.py +0 -0
  113. {springbootai-2.2.5 → springbootai-2.3.0}/spring/cloud/tracer.py +0 -0
  114. {springbootai-2.2.5 → springbootai-2.3.0}/spring/cloud/transaction_store.py +0 -0
  115. {springbootai-2.2.5 → springbootai-2.3.0}/spring/config/__init__.py +0 -0
  116. {springbootai-2.2.5 → springbootai-2.3.0}/spring/config/binding.py +0 -0
  117. {springbootai-2.2.5 → springbootai-2.3.0}/spring/config/config_loader.py +0 -0
  118. {springbootai-2.2.5 → springbootai-2.3.0}/spring/context/__init__.py +0 -0
  119. {springbootai-2.2.5 → springbootai-2.3.0}/spring/context/bean_definition.py +0 -0
  120. {springbootai-2.2.5 → springbootai-2.3.0}/spring/context/bean_factory.py +0 -0
  121. {springbootai-2.2.5 → springbootai-2.3.0}/spring/context/registry.py +0 -0
  122. {springbootai-2.2.5 → springbootai-2.3.0}/spring/context/scanner.py +0 -0
  123. {springbootai-2.2.5 → springbootai-2.3.0}/spring/core/__init__.py +0 -0
  124. {springbootai-2.2.5 → springbootai-2.3.0}/spring/core/graceful_shutdown.py +0 -0
  125. {springbootai-2.2.5 → springbootai-2.3.0}/spring/core/typing_utils.py +0 -0
  126. {springbootai-2.2.5 → springbootai-2.3.0}/spring/csv/__init__.py +0 -0
  127. {springbootai-2.2.5 → springbootai-2.3.0}/spring/csv/converters.py +0 -0
  128. {springbootai-2.2.5 → springbootai-2.3.0}/spring/csv/easy_csv.py +0 -0
  129. {springbootai-2.2.5 → springbootai-2.3.0}/spring/csv/exceptions.py +0 -0
  130. {springbootai-2.2.5 → springbootai-2.3.0}/spring/csv/writer.py +0 -0
  131. {springbootai-2.2.5 → springbootai-2.3.0}/spring/data/__init__.py +0 -0
  132. {springbootai-2.2.5 → springbootai-2.3.0}/spring/data/page.py +0 -0
  133. {springbootai-2.2.5 → springbootai-2.3.0}/spring/data/repository.py +0 -0
  134. {springbootai-2.2.5 → springbootai-2.3.0}/spring/data/specification.py +0 -0
  135. {springbootai-2.2.5 → springbootai-2.3.0}/spring/datasource/__init__.py +0 -0
  136. {springbootai-2.2.5 → springbootai-2.3.0}/spring/datasource/annotations.py +0 -0
  137. {springbootai-2.2.5 → springbootai-2.3.0}/spring/datasource/context.py +0 -0
  138. {springbootai-2.2.5 → springbootai-2.3.0}/spring/datasource/dynamic.py +0 -0
  139. {springbootai-2.2.5 → springbootai-2.3.0}/spring/event/__init__.py +0 -0
  140. {springbootai-2.2.5 → springbootai-2.3.0}/spring/event/publisher.py +0 -0
  141. {springbootai-2.2.5 → springbootai-2.3.0}/spring/excel/__init__.py +0 -0
  142. {springbootai-2.2.5 → springbootai-2.3.0}/spring/excel/converters.py +0 -0
  143. {springbootai-2.2.5 → springbootai-2.3.0}/spring/excel/easy_excel.py +0 -0
  144. {springbootai-2.2.5 → springbootai-2.3.0}/spring/excel/exceptions.py +0 -0
  145. {springbootai-2.2.5 → springbootai-2.3.0}/spring/excel/style.py +0 -0
  146. {springbootai-2.2.5 → springbootai-2.3.0}/spring/excel/writer.py +0 -0
  147. {springbootai-2.2.5 → springbootai-2.3.0}/spring/i18n/__init__.py +0 -0
  148. {springbootai-2.2.5 → springbootai-2.3.0}/spring/i18n/accessor.py +0 -0
  149. {springbootai-2.2.5 → springbootai-2.3.0}/spring/i18n/auto_config.py +0 -0
  150. {springbootai-2.2.5 → springbootai-2.3.0}/spring/i18n/holder.py +0 -0
  151. {springbootai-2.2.5 → springbootai-2.3.0}/spring/i18n/locale.py +0 -0
  152. {springbootai-2.2.5 → springbootai-2.3.0}/spring/i18n/locale_resolver.py +0 -0
  153. {springbootai-2.2.5 → springbootai-2.3.0}/spring/i18n/message_source.py +0 -0
  154. {springbootai-2.2.5 → springbootai-2.3.0}/spring/i18n/middleware.py +0 -0
  155. {springbootai-2.2.5 → springbootai-2.3.0}/spring/i18n/properties.py +0 -0
  156. {springbootai-2.2.5 → springbootai-2.3.0}/spring/i18n/sources.py +0 -0
  157. {springbootai-2.2.5 → springbootai-2.3.0}/spring/langchain/__init__.py +0 -0
  158. {springbootai-2.2.5 → springbootai-2.3.0}/spring/langchain/adapters.py +0 -0
  159. {springbootai-2.2.5 → springbootai-2.3.0}/spring/langchain/agents/__init__.py +0 -0
  160. {springbootai-2.2.5 → springbootai-2.3.0}/spring/langchain/agents/services.py +0 -0
  161. {springbootai-2.2.5 → springbootai-2.3.0}/spring/langchain/annotations.py +0 -0
  162. {springbootai-2.2.5 → springbootai-2.3.0}/spring/langchain/autoconfig.py +0 -0
  163. {springbootai-2.2.5 → springbootai-2.3.0}/spring/langchain/callbacks/__init__.py +0 -0
  164. {springbootai-2.2.5 → springbootai-2.3.0}/spring/langchain/callbacks/handlers.py +0 -0
  165. {springbootai-2.2.5 → springbootai-2.3.0}/spring/langchain/chains/__init__.py +0 -0
  166. {springbootai-2.2.5 → springbootai-2.3.0}/spring/langchain/chains/services.py +0 -0
  167. {springbootai-2.2.5 → springbootai-2.3.0}/spring/langchain/core.py +0 -0
  168. {springbootai-2.2.5 → springbootai-2.3.0}/spring/langchain/indexes/__init__.py +0 -0
  169. {springbootai-2.2.5 → springbootai-2.3.0}/spring/langchain/indexes/index.py +0 -0
  170. {springbootai-2.2.5 → springbootai-2.3.0}/spring/langchain/loaders/__init__.py +0 -0
  171. {springbootai-2.2.5 → springbootai-2.3.0}/spring/langchain/loaders/loaders.py +0 -0
  172. {springbootai-2.2.5 → springbootai-2.3.0}/spring/langchain/memory/__init__.py +0 -0
  173. {springbootai-2.2.5 → springbootai-2.3.0}/spring/langchain/memory/memory.py +0 -0
  174. {springbootai-2.2.5 → springbootai-2.3.0}/spring/langchain/parsers/__init__.py +0 -0
  175. {springbootai-2.2.5 → springbootai-2.3.0}/spring/langchain/parsers/parsers.py +0 -0
  176. {springbootai-2.2.5 → springbootai-2.3.0}/spring/langchain/partners.py +0 -0
  177. {springbootai-2.2.5 → springbootai-2.3.0}/spring/langchain/prompts/__init__.py +0 -0
  178. {springbootai-2.2.5 → springbootai-2.3.0}/spring/langchain/prompts/templates.py +0 -0
  179. {springbootai-2.2.5 → springbootai-2.3.0}/spring/langchain/retrievers/__init__.py +0 -0
  180. {springbootai-2.2.5 → springbootai-2.3.0}/spring/langchain/retrievers/retrievers.py +0 -0
  181. {springbootai-2.2.5 → springbootai-2.3.0}/spring/langchain/tools/__init__.py +0 -0
  182. {springbootai-2.2.5 → springbootai-2.3.0}/spring/langchain/tools/tools.py +0 -0
  183. {springbootai-2.2.5 → springbootai-2.3.0}/spring/langchain/utilities/__init__.py +0 -0
  184. {springbootai-2.2.5 → springbootai-2.3.0}/spring/langchain/utilities/utils.py +0 -0
  185. {springbootai-2.2.5 → springbootai-2.3.0}/spring/langchain/vectorstores/__init__.py +0 -0
  186. {springbootai-2.2.5 → springbootai-2.3.0}/spring/langchain/vectorstores/stores.py +0 -0
  187. {springbootai-2.2.5 → springbootai-2.3.0}/spring/langgraph/__init__.py +0 -0
  188. {springbootai-2.2.5 → springbootai-2.3.0}/spring/langgraph/annotation_runtime.py +0 -0
  189. {springbootai-2.2.5 → springbootai-2.3.0}/spring/langgraph/annotations.py +0 -0
  190. {springbootai-2.2.5 → springbootai-2.3.0}/spring/langgraph/checkpoint.py +0 -0
  191. {springbootai-2.2.5 → springbootai-2.3.0}/spring/langgraph/config.py +0 -0
  192. {springbootai-2.2.5 → springbootai-2.3.0}/spring/langgraph/runtime.py +0 -0
  193. {springbootai-2.2.5 → springbootai-2.3.0}/spring/logging/__init__.py +0 -0
  194. {springbootai-2.2.5 → springbootai-2.3.0}/spring/logging/loguru_logger.py +0 -0
  195. {springbootai-2.2.5 → springbootai-2.3.0}/spring/mcp/__init__.py +0 -0
  196. {springbootai-2.2.5 → springbootai-2.3.0}/spring/mcp/annotation_runtime.py +0 -0
  197. {springbootai-2.2.5 → springbootai-2.3.0}/spring/mcp/annotations.py +0 -0
  198. {springbootai-2.2.5 → springbootai-2.3.0}/spring/mcp/autoconfig.py +0 -0
  199. {springbootai-2.2.5 → springbootai-2.3.0}/spring/mcp/client.py +0 -0
  200. {springbootai-2.2.5 → springbootai-2.3.0}/spring/mcp/config.py +0 -0
  201. {springbootai-2.2.5 → springbootai-2.3.0}/spring/messaging/__init__.py +0 -0
  202. {springbootai-2.2.5 → springbootai-2.3.0}/spring/messaging/rabbitmq.py +0 -0
  203. {springbootai-2.2.5 → springbootai-2.3.0}/spring/monitoring/__init__.py +0 -0
  204. {springbootai-2.2.5 → springbootai-2.3.0}/spring/monitoring/prometheus.py +0 -0
  205. {springbootai-2.2.5 → springbootai-2.3.0}/spring/orm/__init__.py +0 -0
  206. {springbootai-2.2.5 → springbootai-2.3.0}/spring/orm/database.py +0 -0
  207. {springbootai-2.2.5 → springbootai-2.3.0}/spring/orm/mybatis_integration.py +0 -0
  208. {springbootai-2.2.5 → springbootai-2.3.0}/spring/orm/pymybatis/__init__.py +0 -0
  209. {springbootai-2.2.5 → springbootai-2.3.0}/spring/orm/pymybatis/annotations/__init__.py +0 -0
  210. {springbootai-2.2.5 → springbootai-2.3.0}/spring/orm/pymybatis/annotations/annotations.py +0 -0
  211. {springbootai-2.2.5 → springbootai-2.3.0}/spring/orm/pymybatis/cache/__init__.py +0 -0
  212. {springbootai-2.2.5 → springbootai-2.3.0}/spring/orm/pymybatis/cache/cache.py +0 -0
  213. {springbootai-2.2.5 → springbootai-2.3.0}/spring/orm/pymybatis/cache/redis_cache.py +0 -0
  214. {springbootai-2.2.5 → springbootai-2.3.0}/spring/orm/pymybatis/circuit_breaker/__init__.py +0 -0
  215. {springbootai-2.2.5 → springbootai-2.3.0}/spring/orm/pymybatis/circuit_breaker/circuit_breaker.py +0 -0
  216. {springbootai-2.2.5 → springbootai-2.3.0}/spring/orm/pymybatis/configuration.py +0 -0
  217. {springbootai-2.2.5 → springbootai-2.3.0}/spring/orm/pymybatis/core/__init__.py +0 -0
  218. {springbootai-2.2.5 → springbootai-2.3.0}/spring/orm/pymybatis/core/sql_session.py +0 -0
  219. {springbootai-2.2.5 → springbootai-2.3.0}/spring/orm/pymybatis/core/sql_session_factory.py +0 -0
  220. {springbootai-2.2.5 → springbootai-2.3.0}/spring/orm/pymybatis/dialect/__init__.py +0 -0
  221. {springbootai-2.2.5 → springbootai-2.3.0}/spring/orm/pymybatis/dialect/dialect.py +0 -0
  222. {springbootai-2.2.5 → springbootai-2.3.0}/spring/orm/pymybatis/dynamic_sql/__init__.py +0 -0
  223. {springbootai-2.2.5 → springbootai-2.3.0}/spring/orm/pymybatis/dynamic_sql/dynamic_sql.py +0 -0
  224. {springbootai-2.2.5 → springbootai-2.3.0}/spring/orm/pymybatis/interceptor/__init__.py +0 -0
  225. {springbootai-2.2.5 → springbootai-2.3.0}/spring/orm/pymybatis/interceptor/interceptor.py +0 -0
  226. {springbootai-2.2.5 → springbootai-2.3.0}/spring/orm/pymybatis/mapper/__init__.py +0 -0
  227. {springbootai-2.2.5 → springbootai-2.3.0}/spring/orm/pymybatis/mapper/mapper.py +0 -0
  228. {springbootai-2.2.5 → springbootai-2.3.0}/spring/orm/pymybatis/metrics/__init__.py +0 -0
  229. {springbootai-2.2.5 → springbootai-2.3.0}/spring/orm/pymybatis/metrics/metrics.py +0 -0
  230. {springbootai-2.2.5 → springbootai-2.3.0}/spring/orm/pymybatis/pool/__init__.py +0 -0
  231. {springbootai-2.2.5 → springbootai-2.3.0}/spring/orm/pymybatis/pool/connection_pool.py +0 -0
  232. {springbootai-2.2.5 → springbootai-2.3.0}/spring/orm/pymybatis/security/__init__.py +0 -0
  233. {springbootai-2.2.5 → springbootai-2.3.0}/spring/orm/pymybatis/security/access_control.py +0 -0
  234. {springbootai-2.2.5 → springbootai-2.3.0}/spring/orm/pymybatis/security/password_encoder.py +0 -0
  235. {springbootai-2.2.5 → springbootai-2.3.0}/spring/orm/pymybatis/security/sensitive_data_masker.py +0 -0
  236. {springbootai-2.2.5 → springbootai-2.3.0}/spring/orm/pymybatis/transaction/__init__.py +0 -0
  237. {springbootai-2.2.5 → springbootai-2.3.0}/spring/orm/pymybatis/transaction/transaction.py +0 -0
  238. {springbootai-2.2.5 → springbootai-2.3.0}/spring/orm/pymybatis/type_handler/__init__.py +0 -0
  239. {springbootai-2.2.5 → springbootai-2.3.0}/spring/orm/pymybatis/type_handler/type_handler.py +0 -0
  240. {springbootai-2.2.5 → springbootai-2.3.0}/spring/orm/pymybatis/xml_parser/__init__.py +0 -0
  241. {springbootai-2.2.5 → springbootai-2.3.0}/spring/orm/pymybatis/xml_parser/xml_parser.py +0 -0
  242. {springbootai-2.2.5 → springbootai-2.3.0}/spring/retry/__init__.py +0 -0
  243. {springbootai-2.2.5 → springbootai-2.3.0}/spring/retry/recovery.py +0 -0
  244. {springbootai-2.2.5 → springbootai-2.3.0}/spring/retry/retry_annotations.py +0 -0
  245. {springbootai-2.2.5 → springbootai-2.3.0}/spring/retry/retry_decorator.py +0 -0
  246. {springbootai-2.2.5 → springbootai-2.3.0}/spring/scheduling/__init__.py +0 -0
  247. {springbootai-2.2.5 → springbootai-2.3.0}/spring/scheduling/scheduler.py +0 -0
  248. {springbootai-2.2.5 → springbootai-2.3.0}/spring/security/__init__.py +0 -0
  249. {springbootai-2.2.5 → springbootai-2.3.0}/spring/security/replay_protection.py +0 -0
  250. {springbootai-2.2.5 → springbootai-2.3.0}/spring/security/secret_manager.py +0 -0
  251. {springbootai-2.2.5 → springbootai-2.3.0}/spring/security/security_aop.py +0 -0
  252. {springbootai-2.2.5 → springbootai-2.3.0}/spring/security/security_context.py +0 -0
  253. {springbootai-2.2.5 → springbootai-2.3.0}/spring/test/__init__.py +0 -0
  254. {springbootai-2.2.5 → springbootai-2.3.0}/spring/test/slicing.py +0 -0
  255. {springbootai-2.2.5 → springbootai-2.3.0}/spring/tracing/__init__.py +0 -0
  256. {springbootai-2.2.5 → springbootai-2.3.0}/spring/tracing/skywalking.py +0 -0
  257. {springbootai-2.2.5 → springbootai-2.3.0}/spring/tx/__init__.py +0 -0
  258. {springbootai-2.2.5 → springbootai-2.3.0}/spring/tx/events.py +0 -0
  259. {springbootai-2.2.5 → springbootai-2.3.0}/spring/tx/synchronization.py +0 -0
  260. {springbootai-2.2.5 → springbootai-2.3.0}/spring/utils/__init__.py +0 -0
  261. {springbootai-2.2.5 → springbootai-2.3.0}/spring/utils/bean_utils.py +0 -0
  262. {springbootai-2.2.5 → springbootai-2.3.0}/spring/utils/logger.py +0 -0
  263. {springbootai-2.2.5 → springbootai-2.3.0}/spring/utils/redis_client.py +0 -0
  264. {springbootai-2.2.5 → springbootai-2.3.0}/spring/validation/__init__.py +0 -0
  265. {springbootai-2.2.5 → springbootai-2.3.0}/spring/validation/aop.py +0 -0
  266. {springbootai-2.2.5 → springbootai-2.3.0}/spring/validation/constraints.py +0 -0
  267. {springbootai-2.2.5 → springbootai-2.3.0}/spring/validation/exceptions.py +0 -0
  268. {springbootai-2.2.5 → springbootai-2.3.0}/spring/web/__init__.py +0 -0
  269. {springbootai-2.2.5 → springbootai-2.3.0}/spring/web/exception_handler.py +0 -0
  270. {springbootai-2.2.5 → springbootai-2.3.0}/spring/web/health.py +0 -0
  271. {springbootai-2.2.5 → springbootai-2.3.0}/spring/web/interceptor.py +0 -0
  272. {springbootai-2.2.5 → springbootai-2.3.0}/spring/web/result.py +0 -0
  273. {springbootai-2.2.5 → springbootai-2.3.0}/spring/web/swagger.py +0 -0
  274. {springbootai-2.2.5 → springbootai-2.3.0}/spring/websocket/__init__.py +0 -0
  275. {springbootai-2.2.5 → springbootai-2.3.0}/spring/websocket/annotations.py +0 -0
  276. {springbootai-2.2.5 → springbootai-2.3.0}/spring/websocket/broker.py +0 -0
  277. {springbootai-2.2.5 → springbootai-2.3.0}/spring/websocket/exceptions.py +0 -0
  278. {springbootai-2.2.5 → springbootai-2.3.0}/spring/websocket/handler.py +0 -0
  279. {springbootai-2.2.5 → springbootai-2.3.0}/spring/websocket/router.py +0 -0
  280. {springbootai-2.2.5 → springbootai-2.3.0}/spring/websocket/session.py +0 -0
  281. {springbootai-2.2.5 → springbootai-2.3.0}/springbootAI.egg-info/dependency_links.txt +0 -0
  282. {springbootai-2.2.5 → springbootai-2.3.0}/springbootAI.egg-info/top_level.txt +0 -0
  283. {springbootai-2.2.5 → springbootai-2.3.0}/sql/seata_undo_log.sql +0 -0
  284. {springbootai-2.2.5 → springbootai-2.3.0}/tests/test_actuator.py +0 -0
  285. {springbootai-2.2.5 → springbootai-2.3.0}/tests/test_ai_declarative_annotations.py +0 -0
  286. {springbootai-2.2.5 → springbootai-2.3.0}/tests/test_ai_module.py +0 -0
  287. {springbootai-2.2.5 → springbootai-2.3.0}/tests/test_annotation_combinations.py +0 -0
  288. {springbootai-2.2.5 → springbootai-2.3.0}/tests/test_annotations_contract.py +0 -0
  289. {springbootai-2.2.5 → springbootai-2.3.0}/tests/test_aop_annotations_full.py +0 -0
  290. {springbootai-2.2.5 → springbootai-2.3.0}/tests/test_audit_time.py +0 -0
  291. {springbootai-2.2.5 → springbootai-2.3.0}/tests/test_bean_utils.py +0 -0
  292. {springbootai-2.2.5 → springbootai-2.3.0}/tests/test_cache_annotations.py +0 -0
  293. {springbootai-2.2.5 → springbootai-2.3.0}/tests/test_cloud_embedded_full.py +0 -0
  294. {springbootai-2.2.5 → springbootai-2.3.0}/tests/test_component_init_error.py +0 -0
  295. {springbootai-2.2.5 → springbootai-2.3.0}/tests/test_conditional_annotations.py +0 -0
  296. {springbootai-2.2.5 → springbootai-2.3.0}/tests/test_config_binding.py +0 -0
  297. {springbootai-2.2.5 → springbootai-2.3.0}/tests/test_config_fixes_185.py +0 -0
  298. {springbootai-2.2.5 → springbootai-2.3.0}/tests/test_connection_resilience.py +0 -0
  299. {springbootai-2.2.5 → springbootai-2.3.0}/tests/test_core_annotations_full.py +0 -0
  300. {springbootai-2.2.5 → springbootai-2.3.0}/tests/test_data_repository.py +0 -0
  301. {springbootai-2.2.5 → springbootai-2.3.0}/tests/test_datasource_routing.py +0 -0
  302. {springbootai-2.2.5 → springbootai-2.3.0}/tests/test_ddl_auto.py +0 -0
  303. {springbootai-2.2.5 → springbootai-2.3.0}/tests/test_declarative_aop_post_authorize_recover.py +0 -0
  304. {springbootai-2.2.5 → springbootai-2.3.0}/tests/test_di_config_event_full.py +0 -0
  305. {springbootai-2.2.5 → springbootai-2.3.0}/tests/test_i18n_module.py +0 -0
  306. {springbootai-2.2.5 → springbootai-2.3.0}/tests/test_jpa_version_transient.py +0 -0
  307. {springbootai-2.2.5 → springbootai-2.3.0}/tests/test_langchain_module.py +0 -0
  308. {springbootai-2.2.5 → springbootai-2.3.0}/tests/test_logging_config.py +0 -0
  309. {springbootai-2.2.5 → springbootai-2.3.0}/tests/test_mcp_module.py +0 -0
  310. {springbootai-2.2.5 → springbootai-2.3.0}/tests/test_new_features.py +0 -0
  311. {springbootai-2.2.5 → springbootai-2.3.0}/tests/test_orm_pymybatis_full.py +0 -0
  312. {springbootai-2.2.5 → springbootai-2.3.0}/tests/test_production_readiness.py +0 -0
  313. {springbootai-2.2.5 → springbootai-2.3.0}/tests/test_pymybatis_contract.py +0 -0
  314. {springbootai-2.2.5 → springbootai-2.3.0}/tests/test_seata_bridge.py +0 -0
  315. {springbootai-2.2.5 → springbootai-2.3.0}/tests/test_security.py +0 -0
  316. {springbootai-2.2.5 → springbootai-2.3.0}/tests/test_security_full.py +0 -0
  317. {springbootai-2.2.5 → springbootai-2.3.0}/tests/test_security_hardening.py +0 -0
  318. {springbootai-2.2.5 → springbootai-2.3.0}/tests/test_select_page.py +0 -0
  319. {springbootai-2.2.5 → springbootai-2.3.0}/tests/test_swagger_module.py +0 -0
  320. {springbootai-2.2.5 → springbootai-2.3.0}/tests/test_test_slicing.py +0 -0
  321. {springbootai-2.2.5 → springbootai-2.3.0}/tests/test_transactional_events.py +0 -0
  322. {springbootai-2.2.5 → springbootai-2.3.0}/tests/test_validation_module.py +0 -0
  323. {springbootai-2.2.5 → springbootai-2.3.0}/tests/test_web_annotations_full.py +0 -0
  324. {springbootai-2.2.5 → springbootai-2.3.0}/tests/test_web_root_mapping.py +0 -0
  325. {springbootai-2.2.5 → springbootai-2.3.0}/tests/test_web_static_files.py +0 -0
  326. {springbootai-2.2.5 → springbootai-2.3.0}/tests/test_websocket_module.py +0 -0
@@ -1,5 +1,74 @@
1
1
  # Changelog
2
2
 
3
+ ## [2.3.0] - 2026-08-15
4
+
5
+ ### 新增
6
+
7
+ - **企业级注解驱动**:新增 10 个注解,将 16 项企业级功能改造为注解驱动模式。标记在 `@SpringBootApplication` 主类上即可启用,注解参数优先于配置文件。
8
+ - `@EnableOAuth2` — 启用 OAuth2 资源服务器(支持 HS256/RS256、issuer/audience/scope 校验)
9
+ - `@EnableCsrf` — 启用 CSRF 防护(Double Submit Cookie 模式)
10
+ - `@EnableDevTools` — 启用开发环境热重载(文件变更自动重启)
11
+ - `@EnableConfigServer` — 启用 Spring Cloud Config 配置中心客户端
12
+ - `@EnableBus` — 启用 Spring Cloud Bus 事件总线
13
+ - `@EnableBatchProcessing` — 启用 Spring Batch 批处理
14
+ - `@EnableDataRest` — 启用 Spring Data REST(自动暴露 Repository 为 CRUD API)
15
+ - `@BatchJob` / `@BatchStep` — 标记批处理作业和步骤
16
+ - `@RepositoryRestResource` — 标记 Repository 为 REST 资源
17
+ - **OAuth2 资源服务器**:新增 `spring/security/oauth2.py`,支持 JWT Access Token 验证,HS256 对称密钥和 RS256 公钥(JWKS)两种算法。
18
+ - **CSRF 防护**:新增 `spring/web/csrf.py`,实现 Double Submit Cookie 模式中间件。
19
+ - **Kafka 支持**:新增 `spring/messaging/kafka.py`,提供 `KafkaClient`(生产者+消费者管理)和 `@KafkaListener`/`KafkaTemplate` 注解。
20
+ - **DevTools 热重载**:新增 `spring/devtools.py`,提供 `FileWatcher`(轮询文件变更)和 `RestartTrigger`(静默期防抖)。
21
+ - **数据库迁移完善**:新增 Undo 回滚迁移(U{version}__{desc}.sql)、迁移锁(MySQL/PostgreSQL/SQLite)、变量替换(${var})、validate 校验方法。
22
+ - **Actuator /heapdump 端点**:返回 tracemalloc 内存分配快照 + GC 统计(JSON 格式),对齐 Spring Boot /actuator/heapdump。
23
+ - **配置元数据**:新增 `spring/config/spring-configuration-metadata.json`,IDE 可读取提供配置自动补全。
24
+ - **项目脚手架**:新增 `spring/cli/scaffold.py`,支持 `springbootai init` 命令创建新项目。
25
+ - **Spring CLI**:新增 `spring/cli/main.py`,提供 `springbootai` 统一命令入口(version/info/list/init/run/docs)。
26
+ - **Starter 机制**:pyproject.toml 新增 `web`/`cloud`/`all` 组合 Starter extras。
27
+ - **Spring Cloud Config**:新增 `spring/cloud/config_center.py`,支持 HTTP 和本地文件后端。
28
+ - **Spring Cloud Bus**:新增 `spring/cloud/bus.py`,支持进程内和 MQ 后端事件总线。
29
+ - **Spring Batch**:新增 `spring/batch/`,支持 Job/Step/Reader/Processor/Writer 组件。
30
+ - **Spring Data REST**:新增 `spring/data/rest.py`,自动生成 Repository CRUD REST 端点。
31
+ - **Spring HATEOAS**:新增 `spring/web/hateoas.py`,包含 Link/EntityModel/CollectionModel/PagedModel。
32
+ - **Sphinx API 文档**:新增 `docs/conf.py` 和 `docs/index.rst`。
33
+
34
+ ### 测试
35
+
36
+ - 新增 7 个测试文件,共 198 个测试用例:
37
+ - `test_kafka.py`(75)、`test_migration.py`(44)、`test_oauth2.py`(21)、`test_csrf.py`(19)、`test_devtools.py`(16)、`test_starter.py`(13)、`test_metadata.py`(10)
38
+ - 新增 `test_new_annotations.py`(37 个注解测试)
39
+ - 完整测试套件 **2821 passed, 11 skipped, 0 failed**
40
+
41
+ ### 文档
42
+
43
+ - 新增 `doc/ENTERPRISE_ANNOTATIONS.md` — 10 个企业级注解完整教程
44
+ - 新增 `doc/MIGRATION_MODULE.md` — 数据库迁移模块文档(10 章节)
45
+ - 新增 `doc/STARTER_MODULE.md` — Starter 机制文档(8 章节)
46
+ - 新增 `doc/CLI_MODULE.md` — CLI 和脚手架文档(10 章节)
47
+ - `doc/MESSAGING_MODULE.md` 追加 Kafka 章节
48
+ - `doc/WEB_MODULE.md` 追加 HATEOAS 章节
49
+ - `doc/CONFIG_BINDING_MODULE.md` 追加配置元数据章节
50
+ - 35 个文件版本号从 2.2.6 更新到 2.3.0
51
+
52
+ ## [2.2.6] - 2026-08-15
53
+
54
+ ### 新增
55
+
56
+ - **Seata AT 数据源代理**:新增 `spring/cloud/seata_at_proxy.py`(500 行),在 ORM 拦截器层自动记录 SQL 的 before/after image,生成 undo_log,全局事务回滚时自动反向恢复数据。支持 MySQL(`%s`) 和 SQLite(`?`) 占位符自动适配。Seata 模式从三模式(local/http/distributed)扩展为四模式(新增 `at`)。
57
+ - **AT 代理测试**:新增 `tests/test_seata_at_proxy.py`(18 项全通过),覆盖 SQL 解析、undo_log CRUD、undo 反向恢复(INSERT→DELETE / UPDATE→UPDATE before / DELETE→INSERT before)、AT 拦截器记录、提交删除 undo_log。
58
+
59
+ ### 重构
60
+
61
+ - **目录整合**:`example_all`、`example_langchain`、`example_langgraph`、`example_mcp`、`test_cloud_app` 五个散落目录合并到 `examples/` 下;`tests_integration`、`tests_performance`、`tests_runtime` 合并到 `tests/integration/`、`tests/performance/`、`tests/runtime/`。`pyproject.toml` 的 `pythonpath` 增加 `examples`,5 个入口脚本修复 `sys.path`。
62
+ - **文档整理**:`REPOSITORY_MODULE.md` 合并到 `ORM_MODULE.md`(减少文档碎片),更新 README 导航表和 3 处引用。
63
+ - **路径引用同步**:CI 4 个 workflow、11 个文档、Dockerfile、benchmark_app.py 中的 example/tests 路径全部更新。
64
+
65
+ ### 文档
66
+
67
+ - `README.md` Seata 边界说明从"⚠️ 有边界"改为"✅ 可用"(3 处)。
68
+ - `doc/CLOUD_MODULE.md` 新增 AT 模式使用指南(工作流程图 + 代码示例 + 限制说明)。
69
+ - `doc/ORM_MODULE.md` 新增"Repository 分页查询"章节(原 REPOSITORY_MODULE.md 内容)。
70
+ - 25 个文件版本号从 2.2.5 更新到 2.2.6。
71
+
3
72
  ## [2.2.5] - 2026-08-14
4
73
 
5
74
  ### 新增
@@ -14,7 +83,6 @@
14
83
  - `doc/ACTUATOR_MODULE.md` 新增第四章(Spring Boot Admin 可视化面板)、第五章(Prometheus + Grafana 工业级监控,含三步接入流程与多 worker 注意事项)、第六章(自定义业务指标)。
15
84
  - `doc/ORM_MODULE.md` 第五章新增"方法 1:@SelectPage 注解(推荐)"小节。
16
85
  - `README.md` 4.8 健康检查表新增 `/actuator/admin`、`/actuator/prometheus`、`/actuator/sysmetrics` 三个端点。
17
- - `doc/EIGHT_MODULES.md` Actuator 模块说明补充"Spring Boot Admin 可视化 + Prometheus 指标"。
18
86
 
19
87
  ### 测试
20
88
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: springbootAI
3
- Version: 2.2.5
3
+ Version: 2.3.0
4
4
  Summary: Spring-style Python framework with Web, ORM, Cloud and AI integrations
5
5
  Author-email: YuConggen <1516933915@qq.com>
6
6
  License-Expression: MIT
@@ -45,6 +45,8 @@ Provides-Extra: redis
45
45
  Requires-Dist: redis==8.1.0; extra == "redis"
46
46
  Provides-Extra: rabbitmq
47
47
  Requires-Dist: pika==1.4.4; extra == "rabbitmq"
48
+ Provides-Extra: kafka
49
+ Requires-Dist: kafka-python==2.0.2; extra == "kafka"
48
50
  Provides-Extra: nacos
49
51
  Requires-Dist: nacos-sdk-python==2.0.11; extra == "nacos"
50
52
  Provides-Extra: prometheus
@@ -61,7 +63,7 @@ Requires-Dist: langchain-core==1.5.4; extra == "ai"
61
63
  Requires-Dist: langchain-classic==1.0.8; extra == "ai"
62
64
  Requires-Dist: langchain-text-splitters==1.1.2; extra == "ai"
63
65
  Requires-Dist: langchain-community==0.4.2; extra == "ai"
64
- Requires-Dist: numpy==2.2.6; extra == "ai"
66
+ Requires-Dist: numpy==2.3.0; extra == "ai"
65
67
  Requires-Dist: pydantic==2.13.4; extra == "ai"
66
68
  Provides-Extra: langchain
67
69
  Requires-Dist: langchain-openai==1.4.2; extra == "langchain"
@@ -69,7 +71,7 @@ Requires-Dist: langchain-core==1.5.4; extra == "langchain"
69
71
  Requires-Dist: langchain-classic==1.0.8; extra == "langchain"
70
72
  Requires-Dist: langchain-text-splitters==1.1.2; extra == "langchain"
71
73
  Requires-Dist: langchain-community==0.4.2; extra == "langchain"
72
- Requires-Dist: numpy==2.2.6; extra == "langchain"
74
+ Requires-Dist: numpy==2.3.0; extra == "langchain"
73
75
  Requires-Dist: pydantic==2.13.4; extra == "langchain"
74
76
  Requires-Dist: faiss-cpu<2,>=1.7.4; extra == "langchain"
75
77
  Requires-Dist: pypdf<6,>=4.0.0; extra == "langchain"
@@ -89,6 +91,32 @@ Requires-Dist: langgraph==1.2.9; extra == "langgraph"
89
91
  Requires-Dist: langgraph-checkpoint-sqlite==3.1.1; extra == "langgraph"
90
92
  Provides-Extra: mcp
91
93
  Requires-Dist: mcp==2.0.0; extra == "mcp"
94
+ Provides-Extra: web
95
+ Requires-Dist: fastapi==0.115.6; extra == "web"
96
+ Requires-Dist: uvicorn==0.34.0; extra == "web"
97
+ Requires-Dist: pydantic==2.13.4; extra == "web"
98
+ Requires-Dist: python-multipart==0.0.20; extra == "web"
99
+ Provides-Extra: cloud
100
+ Requires-Dist: springbootAI[web]; extra == "cloud"
101
+ Requires-Dist: springbootAI[redis]; extra == "cloud"
102
+ Requires-Dist: springbootAI[rabbitmq]; extra == "cloud"
103
+ Requires-Dist: springbootAI[kafka]; extra == "cloud"
104
+ Requires-Dist: httpx==0.28.1; extra == "cloud"
105
+ Provides-Extra: all
106
+ Requires-Dist: springbootAI[web]; extra == "all"
107
+ Requires-Dist: springbootAI[mysql]; extra == "all"
108
+ Requires-Dist: springbootAI[redis]; extra == "all"
109
+ Requires-Dist: springbootAI[rabbitmq]; extra == "all"
110
+ Requires-Dist: springbootAI[kafka]; extra == "all"
111
+ Requires-Dist: springbootAI[prometheus]; extra == "all"
112
+ Requires-Dist: springbootAI[logging]; extra == "all"
113
+ Requires-Dist: springbootAI[excel]; extra == "all"
114
+ Requires-Dist: springbootAI[ai]; extra == "all"
115
+ Requires-Dist: springbootAI[langchain]; extra == "all"
116
+ Requires-Dist: springbootAI[langgraph]; extra == "all"
117
+ Requires-Dist: springbootAI[mcp]; extra == "all"
118
+ Requires-Dist: httpx==0.28.1; extra == "all"
119
+ Requires-Dist: psutil==6.1.1; extra == "all"
92
120
  Provides-Extra: dev
93
121
  Requires-Dist: pytest==9.1.1; extra == "dev"
94
122
  Requires-Dist: pytest-cov==7.1.0; extra == "dev"
@@ -113,7 +141,7 @@ Requires-Dist: langchain-core==1.5.4; extra == "full"
113
141
  Requires-Dist: langchain-classic==1.0.8; extra == "full"
114
142
  Requires-Dist: langchain-text-splitters==1.1.2; extra == "full"
115
143
  Requires-Dist: langchain-community==0.4.2; extra == "full"
116
- Requires-Dist: numpy==2.2.6; extra == "full"
144
+ Requires-Dist: numpy==2.3.0; extra == "full"
117
145
  Requires-Dist: pydantic==2.13.4; extra == "full"
118
146
  Requires-Dist: faiss-cpu<2,>=1.7.4; extra == "full"
119
147
  Requires-Dist: pypdf<6,>=4.0.0; extra == "full"
@@ -134,6 +162,10 @@ Dynamic: license-file
134
162
 
135
163
  # SpringBootAI
136
164
 
165
+ <p align="center">
166
+ <img src="doc/images/hero-banner.png" alt="SpringBootAI 功能总览" width="100%" />
167
+ </p>
168
+
137
169
  [![PyPI](https://img.shields.io/pypi/v/springbootAI)](https://pypi.org/project/springbootAI/)
138
170
  [![Python](https://img.shields.io/pypi/pyversions/springbootAI)](https://pypi.org/project/springbootAI/)
139
171
  [![CI](https://github.com/YUCONGGEN/springbootAI/actions/workflows/ci.yml/badge.svg?branch=master)](https://github.com/YUCONGGEN/springbootAI/actions/workflows/ci.yml)
@@ -151,7 +183,7 @@ SpringBootAI 是一个采用 Spring 风格注解和分层结构的 Python 应用
151
183
  | AI 与编排 | 模型调用、Tools、RAG、Chain、状态图、MCP client/server | LangChain / LangGraph / 官方 MCP SDK |
152
184
  | 生产治理 | 健康检查、Prometheus、限流熔断、追踪、Swagger | prometheus-client / OpenTelemetry / OpenAPI |
153
185
 
154
- 当前版本是 `2.2.1`;支持 Python 3.10、3.11 和 3.12,许可证为 MIT。项目仍标记为 Beta。用于公网高并发、合规敏感或支付/订单/库存等核心系统前,必须完成目标数据库、流量模型、故障恢复和安全基线验证。内嵌 Gateway 适合内部路由,不替代公网 Nginx/Kong/WAF;Seata `distributed` 当前验证的是官方 TC + TCC 回调,不会为 Python 数据库操作自动生成 AT `undo_log`。
186
+ 当前版本是 `2.3.0`;支持 Python 3.10、3.11 和 3.12,许可证为 MIT。项目仍标记为 Beta。用于公网高并发、合规敏感或支付/订单/库存等核心系统前,必须完成目标数据库、流量模型、故障恢复和安全基线验证。内嵌 Gateway 适合内部路由,不替代公网 Nginx/Kong/WAF;Seata `distributed` 对接官方 TC + TCC 回调;`at` 模式通过 ORM 拦截器自动生成 undo_log 实现自动回滚。
155
187
 
156
188
  [新手指南](https://github.com/YUCONGGEN/springbootAI/blob/master/doc/BEGINNER_GUIDE.md) | [全部文档](https://github.com/YUCONGGEN/springbootAI/tree/master/doc) | [变更日志](https://github.com/YUCONGGEN/springbootAI/blob/master/CHANGELOG.md) | [安全报告](https://github.com/YUCONGGEN/springbootAI/blob/master/SECURITY.md) | [发布检查](https://github.com/YUCONGGEN/springbootAI/blob/master/doc/RELEASE_CHECKLIST.md)
157
189
 
@@ -245,21 +277,24 @@ curl http://127.0.0.1:8080/api/hello/Alice
245
277
  | 模块 | 文档 | 安装方式 | 一句话说明 |
246
278
  |------|------|----------|-----------|
247
279
  | ✅ 新手入门 | [BEGINNER_GUIDE.md](https://github.com/YUCONGGEN/springbootAI/blob/master/doc/BEGINNER_GUIDE.md) | 随核心包 | 从零安装、创建项目、运行接口、打开 Swagger |
280
+ | ✅ Web MVC | [WEB_MODULE.md](https://github.com/YUCONGGEN/springbootAI/blob/master/doc/WEB_MODULE.md) | 随核心包 | `@RestController` / 路由映射 / 参数绑定 / 跨域 / 全局异常处理 |
248
281
  | ✅ 常用注解模块 | [ANNOTATION_MODULES.md](https://github.com/YUCONGGEN/springbootAI/blob/master/doc/ANNOTATION_MODULES.md) | 随核心包 | Bean Validation / 条件装配 / 缓存增强 / CSV / `@Version` / `@Transient` |
282
+ | ✅ Bean 生命周期与增强 | [LIFECYCLE_MODULE.md](https://github.com/YUCONGGEN/springbootAI/blob/master/doc/LIFECYCLE_MODULE.md) | 随核心包 | `@PostConstruct` / `@Slf4j` / `@Primary` / `@Profile` / `@AuditLog` / `@FeatureToggle` |
249
283
  | ✅ AOP / 后置鉴权 / 重试恢复 | [AOP_SECURITY_RETRY.md](https://github.com/YUCONGGEN/springbootAI/blob/master/doc/AOP_SECURITY_RETRY.md) | 随核心包 | `@Aspect` 通知 / `@PostAuthorize` / `@Recover`,含小白示例与常见错误 |
284
+ | ✅ 并发与弹性 | [CONCURRENCY_MODULE.md](https://github.com/YUCONGGEN/springbootAI/blob/master/doc/CONCURRENCY_MODULE.md) | 随核心包 | `@Async` / `@Scheduled` / `@RateLimit` / `@CircuitBreaker` / `@Idempotent` / `@Lock` |
250
285
  | 📦 AI(对接大模型) | [AI_MODULE.md](https://github.com/YUCONGGEN/springbootAI/blob/master/doc/AI_MODULE.md) | `pip install springbootAI[ai]` | ChatClient / Advisor / Tools / RAG / Function Calling / 多厂商适配 |
251
286
  | 📦 LangChain | [LANGCHAIN_MODULE.md](https://github.com/YUCONGGEN/springbootAI/blob/master/doc/LANGCHAIN_MODULE.md) | `pip install springbootAI[langchain]` | Chains / Agents / Memory / Retrievers / VectorStores / 30+ 提供商 |
252
287
  | 📦 LangGraph | [LANGGRAPH_MODULE.md](https://github.com/YUCONGGEN/springbootAI/blob/master/doc/LANGGRAPH_MODULE.md) | `pip install springbootAI[langgraph]` | 状态图 / 条件路由 / 人工中断 / 注解式工作流 |
253
288
  | 📦 MCP | [MCP_MODULE.md](https://github.com/YUCONGGEN/springbootAI/blob/master/doc/MCP_MODULE.md) | `pip install springbootAI[mcp]` | MCP Client / Server / Tool / Resource / Prompt / 注解调用 |
254
- | ✅ 内嵌 PyMyBatis ORM | [ORM_MODULE.md](https://github.com/YUCONGGEN/springbootAI/blob/master/doc/ORM_MODULE.md) | 随核心包 | Mapper 注解 / XML Mapper / 分页 / SQL 安全 / DDL 自动建表 |
289
+ | ✅ 内嵌 PyMyBatis ORM | [ORM_MODULE.md](https://github.com/YUCONGGEN/springbootAI/blob/master/doc/ORM_MODULE.md) | 随核心包 | Mapper 注解 / XML Mapper / 分页 / SQL 安全 / DDL 自动建表 / Repository 分页查询 |
255
290
  | ✅ JPA 实体与仓库 | [JPA_MODULE.md](https://github.com/YUCONGGEN/springbootAI/blob/master/doc/JPA_MODULE.md) | 随核心包 | `@Entity` + `@Table` / 字段自动推断 / `@CreateTime` / Repository / DataJpaTest |
256
291
  | ✅ Cloud 微服务 | [CLOUD_MODULE.md](https://github.com/YUCONGGEN/springbootAI/blob/master/doc/CLOUD_MODULE.md) | 随核心包 | 服务注册发现 / 配置刷新 / Feign / Sentinel / Gateway / 分布式事务 |
292
+ | 📦 消息队列 | [MESSAGING_MODULE.md](https://github.com/YUCONGGEN/springbootAI/blob/master/doc/MESSAGING_MODULE.md) | `pip install springbootAI[rabbitmq]` | `@RabbitListener` / `RabbitTemplate` RabbitMQ 消息收发 |
257
293
  | 📦 Excel 读写 | [EXCEL_MODULE.md](https://github.com/YUCONGGEN/springbootAI/blob/master/doc/EXCEL_MODULE.md) | `pip install springbootAI[excel]` | `@ExcelProperty` / `@ExcelIgnore` 注解驱动读写 |
258
294
  | 📦 CSV 读写 | [CSV_MODULE.md](https://github.com/YUCONGGEN/springbootAI/blob/master/doc/CSV_MODULE.md) | `pip install springbootAI[csv]` | `@CsvProperty` / `@CsvIgnore` 注解驱动读写 |
259
295
  | ✅ Swagger 文档 | [SWAGGER_MODULE.md](https://github.com/YUCONGGEN/springbootAI/blob/master/doc/SWAGGER_MODULE.md) | 随核心包 | `@Tag` / `@Operation` 注解驱动 API 文档 |
260
296
  | ✅ 安全 | [SECURITY.md](https://github.com/YUCONGGEN/springbootAI/blob/master/doc/SECURITY.md) | 随核心包 | JWT 生成校验 / 密码加密 / SQL 注入防护 / 访问控制 |
261
297
  | ✅ BeanUtils | [BEAN_UTILS.md](https://github.com/YUCONGGEN/springbootAI/blob/master/doc/BEAN_UTILS.md) | 随核心包 | `copy_properties` / `clone` 属性复制工具 |
262
- | ✅ ① Repository | [REPOSITORY_MODULE.md](https://github.com/YUCONGGEN/springbootAI/blob/master/doc/REPOSITORY_MODULE.md) | 随核心包 | 不用手写SQL的分页查询 |
263
298
  | ✅ ② Actuator | [ACTUATOR_MODULE.md](https://github.com/YUCONGGEN/springbootAI/blob/master/doc/ACTUATOR_MODULE.md) | 随核心包 | 系统健康检查面板 |
264
299
  | ✅ ③ 多数据源 | [DATASOURCE_MODULE.md](https://github.com/YUCONGGEN/springbootAI/blob/master/doc/DATASOURCE_MODULE.md) | 随核心包 | 读写分离 |
265
300
  | ✅ ④ 事务事件 | [TX_EVENT_MODULE.md](https://github.com/YUCONGGEN/springbootAI/blob/master/doc/TX_EVENT_MODULE.md) | 随核心包 | 操作完成后自动发通知 |
@@ -267,6 +302,10 @@ curl http://127.0.0.1:8080/api/hello/Alice
267
302
  | ✅ ⑥ 测试切片 | [TEST_SLICE_MODULE.md](https://github.com/YUCONGGEN/springbootAI/blob/master/doc/TEST_SLICE_MODULE.md) | 随核心包 | 只测试你关心的部分 |
268
303
  | ✅ ⑦ i18n | [I18N_MODULE.md](https://github.com/YUCONGGEN/springbootAI/blob/master/doc/I18N_MODULE.md) | 随核心包 | 中英文自动切换 |
269
304
  | ✅ ⑧ WebSocket | [WEBSOCKET_MODULE.md](https://github.com/YUCONGGEN/springbootAI/blob/master/doc/WEBSOCKET_MODULE.md) | 随核心包 | 像微信一样实时通信 |
305
+ | ✅ 企业级注解驱动 | [ENTERPRISE_ANNOTATIONS.md](https://github.com/YUCONGGEN/springbootAI/blob/master/doc/ENTERPRISE_ANNOTATIONS.md) | 随核心包 | `@EnableOAuth2`/`@EnableCsrf`/`@EnableDevTools`/`@EnableBatchProcessing` 等10个注解 |
306
+ | ✅ 数据库迁移 | [MIGRATION_MODULE.md](https://github.com/YUCONGGEN/springbootAI/blob/master/doc/MIGRATION_MODULE.md) | 随核心包 | Flyway风格版本化迁移/Undo回滚/迁移锁/变量替换 |
307
+ | ✅ Starter机制 | [STARTER_MODULE.md](https://github.com/YUCONGGEN/springbootAI/blob/master/doc/STARTER_MODULE.md) | 随核心包 | `pip install springbootAI[web/cloud/all]` 组合依赖 |
308
+ | ✅ CLI与脚手架 | [CLI_MODULE.md](https://github.com/YUCONGGEN/springbootAI/blob/master/doc/CLI_MODULE.md) | 随核心包 | `springbootai init/run/docs` 命令行工具 |
270
309
  | — AI 与 LangChain 测试 | [AI_LANGCHAIN_TEST_GUIDE.md](https://github.com/YUCONGGEN/springbootAI/blob/master/doc/AI_LANGCHAIN_TEST_GUIDE.md) | — | AI 与 LangChain 测试说明 |
271
310
  | — 测试报告 | [TEST_REPORT.md](https://github.com/YUCONGGEN/springbootAI/blob/master/doc/TEST_REPORT.md) | — | 全量测试用例与覆盖范围 |
272
311
 
@@ -277,10 +316,11 @@ curl http://127.0.0.1:8080/api/hello/Alice
277
316
  ### 🎯 新手推荐阅读顺序
278
317
 
279
318
  1. 先按 [新手入门指南](https://github.com/YUCONGGEN/springbootAI/blob/master/doc/BEGINNER_GUIDE.md) 跑通 `/api/hello/{name}`。
280
- 2. 阅读本页第 4、6、7 章,理解配置、依赖注入和 Controller。
319
+ 2. 阅读本页第 4、6、7 章,理解配置、依赖注入和 Controller;深入学习 Web 注解看 [WEB_MODULE.md](https://github.com/YUCONGGEN/springbootAI/blob/master/doc/WEB_MODULE.md)
281
320
  3. 做数据库 CRUD 时阅读 [ORM_MODULE.md](https://github.com/YUCONGGEN/springbootAI/blob/master/doc/ORM_MODULE.md)。
282
321
  4. 需要输入校验、缓存或条件开关时阅读 [ANNOTATION_MODULES.md](https://github.com/YUCONGGEN/springbootAI/blob/master/doc/ANNOTATION_MODULES.md)。
283
- 5. 最后再按业务需要选择安全、Cloud、AI、LangChain、Excel、WebSocket 等文档。
322
+ 5. 需要异步、定时任务、限流、熔断时阅读 [CONCURRENCY_MODULE.md](https://github.com/YUCONGGEN/springbootAI/blob/master/doc/CONCURRENCY_MODULE.md)。
323
+ 6. 最后再按业务需要选择安全、Cloud、消息队列、AI、LangChain、Excel、WebSocket 等文档。
284
324
 
285
325
  ---
286
326
 
@@ -323,10 +363,10 @@ SpringBootAI 是一个 **Python Web 框架**。它把 Java Spring Boot 的"注
323
363
 
324
364
  | 组件 | 当前版本 |
325
365
  |------|----------|
326
- | `spring` 框架 API | 2.2.1 |
327
- | `spring.orm.pymybatis` | 2.2.1 |
328
- | `spring.ai` AI 模块 | 2.2.1 |
329
- | `spring.langchain` LangChain 模块 | 2.2.1 |
366
+ | `spring` 框架 API | 2.3.0 |
367
+ | `spring.orm.pymybatis` | 2.3.0 |
368
+ | `spring.ai` AI 模块 | 2.3.0 |
369
+ | `spring.langchain` LangChain 模块 | 2.3.0 |
330
370
  | Python | 3.10+ |
331
371
 
332
372
  ### 1.4 适合什么场景
@@ -342,7 +382,7 @@ SpringBootAI 是一个 **Python Web 框架**。它把 Java Spring Boot 的"注
342
382
  - `@Transactional` 支持七种 Spring 传播模式;`REQUIRES_NEW` 和 `NOT_SUPPORTED` 需要连接池有额外可用连接。
343
383
  - Profile 会筛选 `@Profile` Bean,并深度合并同目录的 `application-{profile}.yml`。
344
384
  - Nacos、RabbitMQ、Prometheus 依赖外部服务;Sentinel 限流熔断和 OpenTelemetry 追踪可内嵌运行。
345
- - HTTP 事务模式是持久化补偿协调器,不提供 Seata AT 一致性;`distributed` 模式当前提供真实 Seata TC + TCC 回调,不会自动代理 Python 数据源或生成 `undo_log`。
385
+ - HTTP 事务模式是持久化补偿协调器;`distributed` 模式提供真实 Seata TC + TCC 回调;`at` 模式通过 ORM 拦截器自动记录 undo_log 并在回滚时反向恢复数据。
346
386
  - 限流、分布式锁、幂等和缓存语义依赖 Redis 等后端;核心业务必须选择 fail-closed,不能依赖进程内降级继续提供分布式语义。
347
387
 
348
388
  ### 1.6 注解使用总览
@@ -377,7 +417,7 @@ SpringBootAI 注解会先把元数据放到 `__spring_annotations__`。之后是
377
417
  | Nacos 服务发现 | ✅ 可用 | 服务注册/发现/订阅 |
378
418
  | Sentinel 限流熔断 | ✅ 可用 | 内嵌引擎,QPS 限流、异常比例熔断、热点参数限流,无需 Dashboard |
379
419
  | 分布式追踪 | ✅ 可用 | 原生 OpenTelemetry(W3C traceparent),自动 HTTP/Feign 注入 |
380
- | Seata 分布式事务 | ⚠️ 有边界 | `distributed` 对接真实 Seata TC 并执行 TCC 回调;`http` 仅提供持久化补偿;均不等同 Python AT 数据源代理 |
420
+ | Seata 分布式事务 | 可用 | `distributed` 对接真实 Seata TC 执行 TCC 回调;`at` 模式通过 ORM 拦截器自动记录 undo_log 并反向恢复;`http` 提供持久化补偿 |
381
421
  | API Gateway | ✅ 可用 | 轻量 ASGI/WSGI 网关,路由转发、路径重写、过滤器链、负载均衡 |
382
422
  | Prometheus 监控 | ✅ 可用 | Counter/Gauge/Histogram 指标暴露 |
383
423
  | Feign 声明式 HTTP | ✅ 可用 | 声明式接口、Fallback 降级、自动传播 XID 和 trace 头 |
@@ -482,7 +522,7 @@ python -c "from spring.orm.pymybatis import __version__; print(__version__)"
482
522
 
483
523
  ### 3.5 最小应用
484
524
 
485
- 仓库中的 `example_all`、`example_langchain`、`example_langgraph`、`example_mcp`、`test_cloud_app` 只用于源码参考和回归验证,不会打包进 `springbootAI`。安装后请按下面结构创建自己的应用包。**每个被扫描目录都必须包含 `__init__.py`,并从项目根目录启动。**
525
+ 仓库中的 `examples/example_all`、`examples/example_langchain`、`examples/example_langgraph`、`examples/example_mcp`、`examples/test_cloud_app` 只用于源码参考和回归验证,不会打包进 `springbootAI`。安装后请按下面结构创建自己的应用包。**每个被扫描目录都必须包含 `__init__.py`,并从项目根目录启动。**
486
526
 
487
527
  创建包结构:
488
528
 
@@ -1660,7 +1700,7 @@ curl http://localhost:8080/actuator/health
1660
1700
 
1661
1701
  ## 15. 项目结构
1662
1702
 
1663
- `example_all`、`example_langchain`、`example_langgraph`、`example_mcp`、`test_cloud_app` 是仓库级示例,不属于 `springbootAI` 安装包。实际项目应创建自己的应用包。
1703
+ `examples/example_all`、`examples/example_langchain`、`examples/example_langgraph`、`examples/example_mcp`、`examples/test_cloud_app` 是仓库级示例,不属于 `springbootAI` 安装包。实际项目应创建自己的应用包。
1664
1704
 
1665
1705
  推荐目录结构:
1666
1706
 
@@ -1767,7 +1807,7 @@ python -m pytest -q tests
1767
1807
  .\scripts\run-load-test.ps1 -Profile smoke
1768
1808
  ```
1769
1809
 
1770
- 完整参数和说明见 [性能测试指南](https://github.com/YUCONGGEN/springbootAI/blob/master/tests_performance/README.md)。
1810
+ 完整参数和说明见 [性能测试指南](https://github.com/YUCONGGEN/springbootAI/blob/master/tests/performance/README.md)。
1771
1811
 
1772
1812
  AI、LangChain、LangGraph 和 MCP 已提供独立 workload,并已加入 9 小时 `mixed` 长稳测试。默认使用 Fake 模型和进程内 MCP Server,不访问外部模型、不会产生 Token 费用:
1773
1813
 
@@ -1,5 +1,9 @@
1
1
  # SpringBootAI
2
2
 
3
+ <p align="center">
4
+ <img src="doc/images/hero-banner.png" alt="SpringBootAI 功能总览" width="100%" />
5
+ </p>
6
+
3
7
  [![PyPI](https://img.shields.io/pypi/v/springbootAI)](https://pypi.org/project/springbootAI/)
4
8
  [![Python](https://img.shields.io/pypi/pyversions/springbootAI)](https://pypi.org/project/springbootAI/)
5
9
  [![CI](https://github.com/YUCONGGEN/springbootAI/actions/workflows/ci.yml/badge.svg?branch=master)](https://github.com/YUCONGGEN/springbootAI/actions/workflows/ci.yml)
@@ -17,7 +21,7 @@ SpringBootAI 是一个采用 Spring 风格注解和分层结构的 Python 应用
17
21
  | AI 与编排 | 模型调用、Tools、RAG、Chain、状态图、MCP client/server | LangChain / LangGraph / 官方 MCP SDK |
18
22
  | 生产治理 | 健康检查、Prometheus、限流熔断、追踪、Swagger | prometheus-client / OpenTelemetry / OpenAPI |
19
23
 
20
- 当前版本是 `2.2.1`;支持 Python 3.10、3.11 和 3.12,许可证为 MIT。项目仍标记为 Beta。用于公网高并发、合规敏感或支付/订单/库存等核心系统前,必须完成目标数据库、流量模型、故障恢复和安全基线验证。内嵌 Gateway 适合内部路由,不替代公网 Nginx/Kong/WAF;Seata `distributed` 当前验证的是官方 TC + TCC 回调,不会为 Python 数据库操作自动生成 AT `undo_log`。
24
+ 当前版本是 `2.3.0`;支持 Python 3.10、3.11 和 3.12,许可证为 MIT。项目仍标记为 Beta。用于公网高并发、合规敏感或支付/订单/库存等核心系统前,必须完成目标数据库、流量模型、故障恢复和安全基线验证。内嵌 Gateway 适合内部路由,不替代公网 Nginx/Kong/WAF;Seata `distributed` 对接官方 TC + TCC 回调;`at` 模式通过 ORM 拦截器自动生成 undo_log 实现自动回滚。
21
25
 
22
26
  [新手指南](https://github.com/YUCONGGEN/springbootAI/blob/master/doc/BEGINNER_GUIDE.md) | [全部文档](https://github.com/YUCONGGEN/springbootAI/tree/master/doc) | [变更日志](https://github.com/YUCONGGEN/springbootAI/blob/master/CHANGELOG.md) | [安全报告](https://github.com/YUCONGGEN/springbootAI/blob/master/SECURITY.md) | [发布检查](https://github.com/YUCONGGEN/springbootAI/blob/master/doc/RELEASE_CHECKLIST.md)
23
27
 
@@ -111,21 +115,24 @@ curl http://127.0.0.1:8080/api/hello/Alice
111
115
  | 模块 | 文档 | 安装方式 | 一句话说明 |
112
116
  |------|------|----------|-----------|
113
117
  | ✅ 新手入门 | [BEGINNER_GUIDE.md](https://github.com/YUCONGGEN/springbootAI/blob/master/doc/BEGINNER_GUIDE.md) | 随核心包 | 从零安装、创建项目、运行接口、打开 Swagger |
118
+ | ✅ Web MVC | [WEB_MODULE.md](https://github.com/YUCONGGEN/springbootAI/blob/master/doc/WEB_MODULE.md) | 随核心包 | `@RestController` / 路由映射 / 参数绑定 / 跨域 / 全局异常处理 |
114
119
  | ✅ 常用注解模块 | [ANNOTATION_MODULES.md](https://github.com/YUCONGGEN/springbootAI/blob/master/doc/ANNOTATION_MODULES.md) | 随核心包 | Bean Validation / 条件装配 / 缓存增强 / CSV / `@Version` / `@Transient` |
120
+ | ✅ Bean 生命周期与增强 | [LIFECYCLE_MODULE.md](https://github.com/YUCONGGEN/springbootAI/blob/master/doc/LIFECYCLE_MODULE.md) | 随核心包 | `@PostConstruct` / `@Slf4j` / `@Primary` / `@Profile` / `@AuditLog` / `@FeatureToggle` |
115
121
  | ✅ AOP / 后置鉴权 / 重试恢复 | [AOP_SECURITY_RETRY.md](https://github.com/YUCONGGEN/springbootAI/blob/master/doc/AOP_SECURITY_RETRY.md) | 随核心包 | `@Aspect` 通知 / `@PostAuthorize` / `@Recover`,含小白示例与常见错误 |
122
+ | ✅ 并发与弹性 | [CONCURRENCY_MODULE.md](https://github.com/YUCONGGEN/springbootAI/blob/master/doc/CONCURRENCY_MODULE.md) | 随核心包 | `@Async` / `@Scheduled` / `@RateLimit` / `@CircuitBreaker` / `@Idempotent` / `@Lock` |
116
123
  | 📦 AI(对接大模型) | [AI_MODULE.md](https://github.com/YUCONGGEN/springbootAI/blob/master/doc/AI_MODULE.md) | `pip install springbootAI[ai]` | ChatClient / Advisor / Tools / RAG / Function Calling / 多厂商适配 |
117
124
  | 📦 LangChain | [LANGCHAIN_MODULE.md](https://github.com/YUCONGGEN/springbootAI/blob/master/doc/LANGCHAIN_MODULE.md) | `pip install springbootAI[langchain]` | Chains / Agents / Memory / Retrievers / VectorStores / 30+ 提供商 |
118
125
  | 📦 LangGraph | [LANGGRAPH_MODULE.md](https://github.com/YUCONGGEN/springbootAI/blob/master/doc/LANGGRAPH_MODULE.md) | `pip install springbootAI[langgraph]` | 状态图 / 条件路由 / 人工中断 / 注解式工作流 |
119
126
  | 📦 MCP | [MCP_MODULE.md](https://github.com/YUCONGGEN/springbootAI/blob/master/doc/MCP_MODULE.md) | `pip install springbootAI[mcp]` | MCP Client / Server / Tool / Resource / Prompt / 注解调用 |
120
- | ✅ 内嵌 PyMyBatis ORM | [ORM_MODULE.md](https://github.com/YUCONGGEN/springbootAI/blob/master/doc/ORM_MODULE.md) | 随核心包 | Mapper 注解 / XML Mapper / 分页 / SQL 安全 / DDL 自动建表 |
127
+ | ✅ 内嵌 PyMyBatis ORM | [ORM_MODULE.md](https://github.com/YUCONGGEN/springbootAI/blob/master/doc/ORM_MODULE.md) | 随核心包 | Mapper 注解 / XML Mapper / 分页 / SQL 安全 / DDL 自动建表 / Repository 分页查询 |
121
128
  | ✅ JPA 实体与仓库 | [JPA_MODULE.md](https://github.com/YUCONGGEN/springbootAI/blob/master/doc/JPA_MODULE.md) | 随核心包 | `@Entity` + `@Table` / 字段自动推断 / `@CreateTime` / Repository / DataJpaTest |
122
129
  | ✅ Cloud 微服务 | [CLOUD_MODULE.md](https://github.com/YUCONGGEN/springbootAI/blob/master/doc/CLOUD_MODULE.md) | 随核心包 | 服务注册发现 / 配置刷新 / Feign / Sentinel / Gateway / 分布式事务 |
130
+ | 📦 消息队列 | [MESSAGING_MODULE.md](https://github.com/YUCONGGEN/springbootAI/blob/master/doc/MESSAGING_MODULE.md) | `pip install springbootAI[rabbitmq]` | `@RabbitListener` / `RabbitTemplate` RabbitMQ 消息收发 |
123
131
  | 📦 Excel 读写 | [EXCEL_MODULE.md](https://github.com/YUCONGGEN/springbootAI/blob/master/doc/EXCEL_MODULE.md) | `pip install springbootAI[excel]` | `@ExcelProperty` / `@ExcelIgnore` 注解驱动读写 |
124
132
  | 📦 CSV 读写 | [CSV_MODULE.md](https://github.com/YUCONGGEN/springbootAI/blob/master/doc/CSV_MODULE.md) | `pip install springbootAI[csv]` | `@CsvProperty` / `@CsvIgnore` 注解驱动读写 |
125
133
  | ✅ Swagger 文档 | [SWAGGER_MODULE.md](https://github.com/YUCONGGEN/springbootAI/blob/master/doc/SWAGGER_MODULE.md) | 随核心包 | `@Tag` / `@Operation` 注解驱动 API 文档 |
126
134
  | ✅ 安全 | [SECURITY.md](https://github.com/YUCONGGEN/springbootAI/blob/master/doc/SECURITY.md) | 随核心包 | JWT 生成校验 / 密码加密 / SQL 注入防护 / 访问控制 |
127
135
  | ✅ BeanUtils | [BEAN_UTILS.md](https://github.com/YUCONGGEN/springbootAI/blob/master/doc/BEAN_UTILS.md) | 随核心包 | `copy_properties` / `clone` 属性复制工具 |
128
- | ✅ ① Repository | [REPOSITORY_MODULE.md](https://github.com/YUCONGGEN/springbootAI/blob/master/doc/REPOSITORY_MODULE.md) | 随核心包 | 不用手写SQL的分页查询 |
129
136
  | ✅ ② Actuator | [ACTUATOR_MODULE.md](https://github.com/YUCONGGEN/springbootAI/blob/master/doc/ACTUATOR_MODULE.md) | 随核心包 | 系统健康检查面板 |
130
137
  | ✅ ③ 多数据源 | [DATASOURCE_MODULE.md](https://github.com/YUCONGGEN/springbootAI/blob/master/doc/DATASOURCE_MODULE.md) | 随核心包 | 读写分离 |
131
138
  | ✅ ④ 事务事件 | [TX_EVENT_MODULE.md](https://github.com/YUCONGGEN/springbootAI/blob/master/doc/TX_EVENT_MODULE.md) | 随核心包 | 操作完成后自动发通知 |
@@ -133,6 +140,10 @@ curl http://127.0.0.1:8080/api/hello/Alice
133
140
  | ✅ ⑥ 测试切片 | [TEST_SLICE_MODULE.md](https://github.com/YUCONGGEN/springbootAI/blob/master/doc/TEST_SLICE_MODULE.md) | 随核心包 | 只测试你关心的部分 |
134
141
  | ✅ ⑦ i18n | [I18N_MODULE.md](https://github.com/YUCONGGEN/springbootAI/blob/master/doc/I18N_MODULE.md) | 随核心包 | 中英文自动切换 |
135
142
  | ✅ ⑧ WebSocket | [WEBSOCKET_MODULE.md](https://github.com/YUCONGGEN/springbootAI/blob/master/doc/WEBSOCKET_MODULE.md) | 随核心包 | 像微信一样实时通信 |
143
+ | ✅ 企业级注解驱动 | [ENTERPRISE_ANNOTATIONS.md](https://github.com/YUCONGGEN/springbootAI/blob/master/doc/ENTERPRISE_ANNOTATIONS.md) | 随核心包 | `@EnableOAuth2`/`@EnableCsrf`/`@EnableDevTools`/`@EnableBatchProcessing` 等10个注解 |
144
+ | ✅ 数据库迁移 | [MIGRATION_MODULE.md](https://github.com/YUCONGGEN/springbootAI/blob/master/doc/MIGRATION_MODULE.md) | 随核心包 | Flyway风格版本化迁移/Undo回滚/迁移锁/变量替换 |
145
+ | ✅ Starter机制 | [STARTER_MODULE.md](https://github.com/YUCONGGEN/springbootAI/blob/master/doc/STARTER_MODULE.md) | 随核心包 | `pip install springbootAI[web/cloud/all]` 组合依赖 |
146
+ | ✅ CLI与脚手架 | [CLI_MODULE.md](https://github.com/YUCONGGEN/springbootAI/blob/master/doc/CLI_MODULE.md) | 随核心包 | `springbootai init/run/docs` 命令行工具 |
136
147
  | — AI 与 LangChain 测试 | [AI_LANGCHAIN_TEST_GUIDE.md](https://github.com/YUCONGGEN/springbootAI/blob/master/doc/AI_LANGCHAIN_TEST_GUIDE.md) | — | AI 与 LangChain 测试说明 |
137
148
  | — 测试报告 | [TEST_REPORT.md](https://github.com/YUCONGGEN/springbootAI/blob/master/doc/TEST_REPORT.md) | — | 全量测试用例与覆盖范围 |
138
149
 
@@ -143,10 +154,11 @@ curl http://127.0.0.1:8080/api/hello/Alice
143
154
  ### 🎯 新手推荐阅读顺序
144
155
 
145
156
  1. 先按 [新手入门指南](https://github.com/YUCONGGEN/springbootAI/blob/master/doc/BEGINNER_GUIDE.md) 跑通 `/api/hello/{name}`。
146
- 2. 阅读本页第 4、6、7 章,理解配置、依赖注入和 Controller。
157
+ 2. 阅读本页第 4、6、7 章,理解配置、依赖注入和 Controller;深入学习 Web 注解看 [WEB_MODULE.md](https://github.com/YUCONGGEN/springbootAI/blob/master/doc/WEB_MODULE.md)
147
158
  3. 做数据库 CRUD 时阅读 [ORM_MODULE.md](https://github.com/YUCONGGEN/springbootAI/blob/master/doc/ORM_MODULE.md)。
148
159
  4. 需要输入校验、缓存或条件开关时阅读 [ANNOTATION_MODULES.md](https://github.com/YUCONGGEN/springbootAI/blob/master/doc/ANNOTATION_MODULES.md)。
149
- 5. 最后再按业务需要选择安全、Cloud、AI、LangChain、Excel、WebSocket 等文档。
160
+ 5. 需要异步、定时任务、限流、熔断时阅读 [CONCURRENCY_MODULE.md](https://github.com/YUCONGGEN/springbootAI/blob/master/doc/CONCURRENCY_MODULE.md)。
161
+ 6. 最后再按业务需要选择安全、Cloud、消息队列、AI、LangChain、Excel、WebSocket 等文档。
150
162
 
151
163
  ---
152
164
 
@@ -189,10 +201,10 @@ SpringBootAI 是一个 **Python Web 框架**。它把 Java Spring Boot 的"注
189
201
 
190
202
  | 组件 | 当前版本 |
191
203
  |------|----------|
192
- | `spring` 框架 API | 2.2.1 |
193
- | `spring.orm.pymybatis` | 2.2.1 |
194
- | `spring.ai` AI 模块 | 2.2.1 |
195
- | `spring.langchain` LangChain 模块 | 2.2.1 |
204
+ | `spring` 框架 API | 2.3.0 |
205
+ | `spring.orm.pymybatis` | 2.3.0 |
206
+ | `spring.ai` AI 模块 | 2.3.0 |
207
+ | `spring.langchain` LangChain 模块 | 2.3.0 |
196
208
  | Python | 3.10+ |
197
209
 
198
210
  ### 1.4 适合什么场景
@@ -208,7 +220,7 @@ SpringBootAI 是一个 **Python Web 框架**。它把 Java Spring Boot 的"注
208
220
  - `@Transactional` 支持七种 Spring 传播模式;`REQUIRES_NEW` 和 `NOT_SUPPORTED` 需要连接池有额外可用连接。
209
221
  - Profile 会筛选 `@Profile` Bean,并深度合并同目录的 `application-{profile}.yml`。
210
222
  - Nacos、RabbitMQ、Prometheus 依赖外部服务;Sentinel 限流熔断和 OpenTelemetry 追踪可内嵌运行。
211
- - HTTP 事务模式是持久化补偿协调器,不提供 Seata AT 一致性;`distributed` 模式当前提供真实 Seata TC + TCC 回调,不会自动代理 Python 数据源或生成 `undo_log`。
223
+ - HTTP 事务模式是持久化补偿协调器;`distributed` 模式提供真实 Seata TC + TCC 回调;`at` 模式通过 ORM 拦截器自动记录 undo_log 并在回滚时反向恢复数据。
212
224
  - 限流、分布式锁、幂等和缓存语义依赖 Redis 等后端;核心业务必须选择 fail-closed,不能依赖进程内降级继续提供分布式语义。
213
225
 
214
226
  ### 1.6 注解使用总览
@@ -243,7 +255,7 @@ SpringBootAI 注解会先把元数据放到 `__spring_annotations__`。之后是
243
255
  | Nacos 服务发现 | ✅ 可用 | 服务注册/发现/订阅 |
244
256
  | Sentinel 限流熔断 | ✅ 可用 | 内嵌引擎,QPS 限流、异常比例熔断、热点参数限流,无需 Dashboard |
245
257
  | 分布式追踪 | ✅ 可用 | 原生 OpenTelemetry(W3C traceparent),自动 HTTP/Feign 注入 |
246
- | Seata 分布式事务 | ⚠️ 有边界 | `distributed` 对接真实 Seata TC 并执行 TCC 回调;`http` 仅提供持久化补偿;均不等同 Python AT 数据源代理 |
258
+ | Seata 分布式事务 | 可用 | `distributed` 对接真实 Seata TC 执行 TCC 回调;`at` 模式通过 ORM 拦截器自动记录 undo_log 并反向恢复;`http` 提供持久化补偿 |
247
259
  | API Gateway | ✅ 可用 | 轻量 ASGI/WSGI 网关,路由转发、路径重写、过滤器链、负载均衡 |
248
260
  | Prometheus 监控 | ✅ 可用 | Counter/Gauge/Histogram 指标暴露 |
249
261
  | Feign 声明式 HTTP | ✅ 可用 | 声明式接口、Fallback 降级、自动传播 XID 和 trace 头 |
@@ -348,7 +360,7 @@ python -c "from spring.orm.pymybatis import __version__; print(__version__)"
348
360
 
349
361
  ### 3.5 最小应用
350
362
 
351
- 仓库中的 `example_all`、`example_langchain`、`example_langgraph`、`example_mcp`、`test_cloud_app` 只用于源码参考和回归验证,不会打包进 `springbootAI`。安装后请按下面结构创建自己的应用包。**每个被扫描目录都必须包含 `__init__.py`,并从项目根目录启动。**
363
+ 仓库中的 `examples/example_all`、`examples/example_langchain`、`examples/example_langgraph`、`examples/example_mcp`、`examples/test_cloud_app` 只用于源码参考和回归验证,不会打包进 `springbootAI`。安装后请按下面结构创建自己的应用包。**每个被扫描目录都必须包含 `__init__.py`,并从项目根目录启动。**
352
364
 
353
365
  创建包结构:
354
366
 
@@ -1526,7 +1538,7 @@ curl http://localhost:8080/actuator/health
1526
1538
 
1527
1539
  ## 15. 项目结构
1528
1540
 
1529
- `example_all`、`example_langchain`、`example_langgraph`、`example_mcp`、`test_cloud_app` 是仓库级示例,不属于 `springbootAI` 安装包。实际项目应创建自己的应用包。
1541
+ `examples/example_all`、`examples/example_langchain`、`examples/example_langgraph`、`examples/example_mcp`、`examples/test_cloud_app` 是仓库级示例,不属于 `springbootAI` 安装包。实际项目应创建自己的应用包。
1530
1542
 
1531
1543
  推荐目录结构:
1532
1544
 
@@ -1633,7 +1645,7 @@ python -m pytest -q tests
1633
1645
  .\scripts\run-load-test.ps1 -Profile smoke
1634
1646
  ```
1635
1647
 
1636
- 完整参数和说明见 [性能测试指南](https://github.com/YUCONGGEN/springbootAI/blob/master/tests_performance/README.md)。
1648
+ 完整参数和说明见 [性能测试指南](https://github.com/YUCONGGEN/springbootAI/blob/master/tests/performance/README.md)。
1637
1649
 
1638
1650
  AI、LangChain、LangGraph 和 MCP 已提供独立 workload,并已加入 9 小时 `mixed` 长稳测试。默认使用 Fake 模型和进程内 MCP Server,不访问外部模型、不会产生 Token 费用:
1639
1651
 
@@ -12,7 +12,7 @@ build-backend = "setuptools.build_meta"
12
12
  [project]
13
13
  # 发行名 springbootAI(PyPI 包名,pip install springbootAI);导入包名仍为 spring
14
14
  name = "springbootAI"
15
- version = "2.2.5"
15
+ version = "2.3.0"
16
16
  description = "Spring-style Python framework with Web, ORM, Cloud and AI integrations"
17
17
  readme = "README.md"
18
18
  license = "MIT"
@@ -71,6 +71,7 @@ redis = ["redis==8.1.0"]
71
71
  # 消息队列 - 类似 Spring Boot Starter AMQP
72
72
  # ========================================
73
73
  rabbitmq = ["pika==1.4.4"]
74
+ kafka = ["kafka-python==2.0.2"]
74
75
 
75
76
  # ========================================
76
77
  # 服务发现 - 类似 Spring Cloud Alibaba Nacos
@@ -106,7 +107,7 @@ ai = [
106
107
  "langchain-classic==1.0.8",
107
108
  "langchain-text-splitters==1.1.2",
108
109
  "langchain-community==0.4.2",
109
- "numpy==2.2.6",
110
+ "numpy==2.3.0",
110
111
  "pydantic==2.13.4",
111
112
  ]
112
113
 
@@ -122,7 +123,7 @@ langchain = [
122
123
  "langchain-classic==1.0.8",
123
124
  "langchain-text-splitters==1.1.2",
124
125
  "langchain-community==0.4.2",
125
- "numpy==2.2.6",
126
+ "numpy==2.3.0",
126
127
  "pydantic==2.13.4",
127
128
  # 默认装上的向量库/文档/工具依赖(安全:全部锁定已知安全版本)
128
129
  "faiss-cpu>=1.7.4,<2",
@@ -158,6 +159,40 @@ mcp = [
158
159
  "mcp==2.0.0",
159
160
  ]
160
161
 
162
+ # ========================================
163
+ # 组合 Starter - 类似 Spring Boot Starter Web/Cloud/All
164
+ # 安装:pip install springbootAI[web] / springbootAI[cloud] / springbootAI[all]
165
+ # ========================================
166
+ web = [
167
+ "fastapi==0.115.6",
168
+ "uvicorn==0.34.0",
169
+ "pydantic==2.13.4",
170
+ "python-multipart==0.0.20",
171
+ ]
172
+ cloud = [
173
+ "springbootAI[web]",
174
+ "springbootAI[redis]",
175
+ "springbootAI[rabbitmq]",
176
+ "springbootAI[kafka]",
177
+ "httpx==0.28.1",
178
+ ]
179
+ all = [
180
+ "springbootAI[web]",
181
+ "springbootAI[mysql]",
182
+ "springbootAI[redis]",
183
+ "springbootAI[rabbitmq]",
184
+ "springbootAI[kafka]",
185
+ "springbootAI[prometheus]",
186
+ "springbootAI[logging]",
187
+ "springbootAI[excel]",
188
+ "springbootAI[ai]",
189
+ "springbootAI[langchain]",
190
+ "springbootAI[langgraph]",
191
+ "springbootAI[mcp]",
192
+ "httpx==0.28.1",
193
+ "psutil==6.1.1",
194
+ ]
195
+
161
196
  # ========================================
162
197
  # 开发依赖
163
198
  # ========================================
@@ -196,7 +231,7 @@ full = [
196
231
  "langchain-classic==1.0.8",
197
232
  "langchain-text-splitters==1.1.2",
198
233
  "langchain-community==0.4.2",
199
- "numpy==2.2.6",
234
+ "numpy==2.3.0",
200
235
  "pydantic==2.13.4",
201
236
  # LangChain 模块增强(对齐 springbootAI[langchain])
202
237
  "faiss-cpu>=1.7.4,<2",
@@ -220,7 +255,7 @@ full = [
220
255
  ]
221
256
 
222
257
  [tool.pytest.ini_options]
223
- pythonpath = ["."]
258
+ pythonpath = [".", "examples"]
224
259
  filterwarnings = [
225
260
  # 静默 langchain_classic 弃用告警和 community sunset 告警
226
261
  # 原因:本项目有意锁定 langchain classic (1.x) API,这些是预期内的框架级告警
@@ -253,6 +288,9 @@ Issues = "https://github.com/YUCONGGEN/springbootAI/issues"
253
288
 
254
289
  [project.scripts]
255
290
  springbootai = "spring.main:run_cli"
291
+ # 项目脚手架工具(类似 Spring Initializr),初始化符合 SpringBootAI 风格的新项目
292
+ # 用法:springbootai-init my-project --modules web,orm
293
+ springbootai-init = "spring.cli.scaffold:main"
256
294
 
257
295
  [tool.setuptools.packages.find]
258
296
  include = ["spring*"]
@@ -30,6 +30,7 @@ langchain-text-splitters==1.1.2
30
30
  langchain-community==0.4.2
31
31
 
32
32
  # 向量相似度计算(cosine_similarity 等,未安装时降级内置 math.sqrt 实现)
33
+ # 锁定 2.2.6 以保持 Python 3.10 兼容性(numpy 2.3+ 要求 Python >=3.11)
33
34
  numpy==2.2.6
34
35
 
35
36
  # 数据校验(pydantic v2,OutputParser 结构化输出依赖)
@@ -5,7 +5,7 @@ from .config import *
5
5
  from .utils import *
6
6
  from .main import create_app, run, SpringApplication, run_cli
7
7
 
8
- __version__ = "2.2.1"
8
+ __version__ = "2.3.0"
9
9
  __author__ = "yuconggen"
10
10
  __license__ = "MIT"
11
11