springbootAI 2.3.2__tar.gz → 2.3.3__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 (358) hide show
  1. {springbootai-2.3.2 → springbootai-2.3.3}/CHANGELOG.md +36 -18
  2. {springbootai-2.3.2 → springbootai-2.3.3}/MANIFEST.in +2 -2
  3. {springbootai-2.3.2/springbootAI.egg-info → springbootai-2.3.3}/PKG-INFO +71 -71
  4. {springbootai-2.3.2 → springbootai-2.3.3}/README.md +65 -65
  5. {springbootai-2.3.2 → springbootai-2.3.3}/SECURITY.md +1 -1
  6. {springbootai-2.3.2 → springbootai-2.3.3}/pyproject.toml +57 -57
  7. {springbootai-2.3.2 → springbootai-2.3.3}/requirements-ai.txt +1 -1
  8. {springbootai-2.3.2 → springbootai-2.3.3}/requirements.txt +5 -0
  9. {springbootai-2.3.2 → springbootai-2.3.3/springbootAI.egg-info}/PKG-INFO +71 -71
  10. springbootai-2.3.3/springbootAI.egg-info/SOURCES.txt +339 -0
  11. springbootai-2.3.3/springbootAI.egg-info/entry_points.txt +3 -0
  12. {springbootai-2.3.2 → springbootai-2.3.3}/springbootAI.egg-info/requires.txt +5 -5
  13. springbootai-2.3.3/springbootAI.egg-info/top_level.txt +1 -0
  14. springbootai-2.3.3/springbootai/__init__.py +179 -0
  15. {springbootai-2.3.2/spring → springbootai-2.3.3/springbootai}/ai/__init__.py +13 -13
  16. {springbootai-2.3.2/spring → springbootai-2.3.3/springbootai}/ai/advisors.py +3 -3
  17. {springbootai-2.3.2/spring → springbootai-2.3.3/springbootai}/ai/annotations.py +3 -3
  18. {springbootai-2.3.2/spring → springbootai-2.3.3/springbootai}/ai/autoconfig.py +23 -23
  19. {springbootai-2.3.2/spring → springbootai-2.3.3/springbootai}/ai/core.py +2 -2
  20. {springbootai-2.3.2/spring → springbootai-2.3.3/springbootai}/ai/memory.py +1 -1
  21. {springbootai-2.3.2/spring → springbootai-2.3.3/springbootai}/ai/observability.py +2 -2
  22. {springbootai-2.3.2/spring → springbootai-2.3.3/springbootai}/ai/providers.py +6 -6
  23. {springbootai-2.3.2/spring → springbootai-2.3.3/springbootai}/ai/resilience.py +11 -11
  24. {springbootai-2.3.2/spring → springbootai-2.3.3/springbootai}/ai/vectorstore.py +1 -1
  25. {springbootai-2.3.2/spring → springbootai-2.3.3/springbootai}/annotations/__init__.py +10 -1
  26. {springbootai-2.3.2/spring → springbootai-2.3.3/springbootai}/annotations/cache.py +2 -2
  27. {springbootai-2.3.2/spring → springbootai-2.3.3/springbootai}/annotations/cloud.py +2 -2
  28. {springbootai-2.3.2/spring → springbootai-2.3.3/springbootai}/annotations/conditional.py +3 -3
  29. {springbootai-2.3.2/spring → springbootai-2.3.3/springbootai}/annotations/core.py +38 -2
  30. {springbootai-2.3.2/spring → springbootai-2.3.3/springbootai}/annotations/enterprise.py +6 -6
  31. {springbootai-2.3.2/spring → springbootai-2.3.3/springbootai}/annotations/langchain.py +2 -2
  32. {springbootai-2.3.2/spring → springbootai-2.3.3/springbootai}/annotations/langgraph.py +2 -2
  33. springbootai-2.3.3/springbootai/annotations/lombok.py +300 -0
  34. {springbootai-2.3.2/spring → springbootai-2.3.3/springbootai}/annotations/messaging.py +5 -5
  35. {springbootai-2.3.2/spring → springbootai-2.3.3/springbootai}/annotations/security.py +1 -1
  36. {springbootai-2.3.2/spring → springbootai-2.3.3/springbootai}/aop/aspect.py +7 -6
  37. {springbootai-2.3.2/spring → springbootai-2.3.3/springbootai}/aop/cloud_aop.py +5 -5
  38. {springbootai-2.3.2/spring → springbootai-2.3.3/springbootai}/aop/comprehensive_aop.py +5 -5
  39. {springbootai-2.3.2/spring → springbootai-2.3.3/springbootai}/aop/proxy_factory.py +1 -1
  40. {springbootai-2.3.2/spring → springbootai-2.3.3/springbootai}/batch/__init__.py +1 -1
  41. {springbootai-2.3.2/spring → springbootai-2.3.3/springbootai}/cli/__init__.py +4 -4
  42. {springbootai-2.3.2/spring → springbootai-2.3.3/springbootai}/cli/main.py +5 -5
  43. {springbootai-2.3.2/spring → springbootai-2.3.3/springbootai}/cli/scaffold.py +13 -13
  44. {springbootai-2.3.2/spring → springbootai-2.3.3/springbootai}/cloud/__init__.py +20 -14
  45. {springbootai-2.3.2/spring → springbootai-2.3.3/springbootai}/cloud/bus.py +3 -3
  46. {springbootai-2.3.2/spring → springbootai-2.3.3/springbootai}/cloud/config_center.py +4 -4
  47. {springbootai-2.3.2/spring → springbootai-2.3.3/springbootai}/cloud/feign.py +4 -4
  48. {springbootai-2.3.2/spring → springbootai-2.3.3/springbootai}/cloud/gateway.py +3 -3
  49. {springbootai-2.3.2/spring → springbootai-2.3.3/springbootai}/cloud/load_balancer.py +1 -1
  50. springbootai-2.3.3/springbootai/cloud/nacos_config.py +276 -0
  51. {springbootai-2.3.2/spring → springbootai-2.3.3/springbootai}/cloud/seata.py +3 -3
  52. {springbootai-2.3.2/spring → springbootai-2.3.3/springbootai}/cloud/seata_at_proxy.py +2 -2
  53. {springbootai-2.3.2/spring → springbootai-2.3.3/springbootai}/config/binding.py +5 -5
  54. {springbootai-2.3.2/spring → springbootai-2.3.3/springbootai}/config/config_loader.py +145 -19
  55. {springbootai-2.3.2/spring → springbootai-2.3.3/springbootai}/config/spring-configuration-metadata.json +5 -0
  56. {springbootai-2.3.2/spring → springbootai-2.3.3/springbootai}/context/application_context.py +27 -23
  57. {springbootai-2.3.2/spring → springbootai-2.3.3/springbootai}/context/bean_definition.py +1 -1
  58. {springbootai-2.3.2/spring → springbootai-2.3.3/springbootai}/context/bean_factory.py +22 -22
  59. {springbootai-2.3.2/spring → springbootai-2.3.3/springbootai}/context/scanner.py +1 -1
  60. springbootai-2.3.3/springbootai/core/__init__.py +3 -0
  61. {springbootai-2.3.2/spring → springbootai-2.3.3/springbootai}/csv/__init__.py +4 -4
  62. {springbootai-2.3.2/spring → springbootai-2.3.3/springbootai}/csv/annotations.py +2 -2
  63. {springbootai-2.3.2/spring → springbootai-2.3.3/springbootai}/csv/converters.py +4 -4
  64. {springbootai-2.3.2/spring → springbootai-2.3.3/springbootai}/csv/exceptions.py +1 -1
  65. {springbootai-2.3.2/spring → springbootai-2.3.3/springbootai}/csv/reader.py +1 -1
  66. {springbootai-2.3.2/spring → springbootai-2.3.3/springbootai}/csv/writer.py +1 -1
  67. {springbootai-2.3.2/spring → springbootai-2.3.3/springbootai}/data/__init__.py +7 -7
  68. {springbootai-2.3.2/spring → springbootai-2.3.3/springbootai}/data/repository.py +3 -3
  69. {springbootai-2.3.2/spring → springbootai-2.3.3/springbootai}/data/rest.py +4 -4
  70. {springbootai-2.3.2/spring → springbootai-2.3.3/springbootai}/datasource/__init__.py +3 -3
  71. {springbootai-2.3.2/spring → springbootai-2.3.3/springbootai}/datasource/annotations.py +8 -3
  72. {springbootai-2.3.2/spring → springbootai-2.3.3/springbootai}/event/__init__.py +1 -1
  73. {springbootai-2.3.2/spring → springbootai-2.3.3/springbootai}/event/publisher.py +1 -1
  74. {springbootai-2.3.2/spring → springbootai-2.3.3/springbootai}/excel/__init__.py +1 -1
  75. {springbootai-2.3.2/spring → springbootai-2.3.3/springbootai}/excel/annotations.py +1 -1
  76. {springbootai-2.3.2/spring → springbootai-2.3.3/springbootai}/i18n/__init__.py +4 -4
  77. {springbootai-2.3.2/spring → springbootai-2.3.3/springbootai}/i18n/auto_config.py +4 -4
  78. {springbootai-2.3.2/spring → springbootai-2.3.3/springbootai}/i18n/holder.py +2 -2
  79. {springbootai-2.3.2/spring → springbootai-2.3.3/springbootai}/langchain/__init__.py +21 -21
  80. {springbootai-2.3.2/spring → springbootai-2.3.3/springbootai}/langchain/adapters.py +335 -335
  81. springbootai-2.3.3/springbootai/langchain/agents/__init__.py +4 -0
  82. {springbootai-2.3.2/spring → springbootai-2.3.3/springbootai}/langchain/agents/services.py +1 -1
  83. {springbootai-2.3.2/spring → springbootai-2.3.3/springbootai}/langchain/annotations.py +1 -1
  84. {springbootai-2.3.2/spring → springbootai-2.3.3/springbootai}/langchain/autoconfig.py +28 -28
  85. springbootai-2.3.3/springbootai/langchain/callbacks/__init__.py +4 -0
  86. springbootai-2.3.3/springbootai/langchain/chains/__init__.py +4 -0
  87. {springbootai-2.3.2/spring → springbootai-2.3.3/springbootai}/langchain/chains/services.py +5 -5
  88. {springbootai-2.3.2/spring → springbootai-2.3.3/springbootai}/langchain/core.py +19 -19
  89. springbootai-2.3.3/springbootai/langchain/indexes/__init__.py +4 -0
  90. {springbootai-2.3.2/spring → springbootai-2.3.3/springbootai}/langchain/indexes/index.py +2 -2
  91. springbootai-2.3.3/springbootai/langchain/loaders/__init__.py +4 -0
  92. springbootai-2.3.3/springbootai/langchain/memory/__init__.py +4 -0
  93. springbootai-2.3.3/springbootai/langchain/parsers/__init__.py +4 -0
  94. {springbootai-2.3.2/spring → springbootai-2.3.3/springbootai}/langchain/parsers/parsers.py +84 -84
  95. {springbootai-2.3.2/spring → springbootai-2.3.3/springbootai}/langchain/partners.py +2 -2
  96. springbootai-2.3.3/springbootai/langchain/prompts/__init__.py +4 -0
  97. springbootai-2.3.3/springbootai/langchain/retrievers/__init__.py +4 -0
  98. springbootai-2.3.3/springbootai/langchain/tools/__init__.py +4 -0
  99. {springbootai-2.3.2/spring → springbootai-2.3.3/springbootai}/langchain/tools/tools.py +1 -1
  100. springbootai-2.3.3/springbootai/langchain/utilities/__init__.py +4 -0
  101. springbootai-2.3.3/springbootai/langchain/vectorstores/__init__.py +4 -0
  102. {springbootai-2.3.2/spring → springbootai-2.3.3/springbootai}/langchain/vectorstores/stores.py +4 -4
  103. {springbootai-2.3.2/spring → springbootai-2.3.3/springbootai}/langgraph/__init__.py +7 -7
  104. {springbootai-2.3.2/spring → springbootai-2.3.3/springbootai}/langgraph/annotation_runtime.py +5 -5
  105. {springbootai-2.3.2/spring → springbootai-2.3.3/springbootai}/langgraph/annotations.py +1 -1
  106. {springbootai-2.3.2/spring → springbootai-2.3.3/springbootai}/langgraph/autoconfig.py +10 -10
  107. {springbootai-2.3.2/spring → springbootai-2.3.3/springbootai}/langgraph/checkpoint.py +1 -1
  108. {springbootai-2.3.2/spring → springbootai-2.3.3/springbootai}/langgraph/config.py +3 -3
  109. {springbootai-2.3.2/spring → springbootai-2.3.3/springbootai}/langgraph/runtime.py +4 -4
  110. {springbootai-2.3.2/spring → springbootai-2.3.3/springbootai}/logging/loguru_logger.py +134 -32
  111. {springbootai-2.3.2/spring → springbootai-2.3.3/springbootai}/main.py +105 -50
  112. {springbootai-2.3.2/spring → springbootai-2.3.3/springbootai}/mcp/__init__.py +6 -6
  113. {springbootai-2.3.2/spring → springbootai-2.3.3/springbootai}/mcp/annotation_runtime.py +5 -5
  114. {springbootai-2.3.2/spring → springbootai-2.3.3/springbootai}/mcp/annotations.py +5 -5
  115. {springbootai-2.3.2/spring → springbootai-2.3.3/springbootai}/mcp/autoconfig.py +11 -11
  116. {springbootai-2.3.2/spring → springbootai-2.3.3/springbootai}/mcp/client.py +3 -3
  117. {springbootai-2.3.2/spring → springbootai-2.3.3/springbootai}/mcp/config.py +3 -3
  118. {springbootai-2.3.2/spring → springbootai-2.3.3/springbootai}/mcp/server.py +4 -4
  119. springbootai-2.3.3/springbootai/monitoring/admin_client.py +77 -0
  120. {springbootai-2.3.2/spring → springbootai-2.3.3/springbootai}/orm/__init__.py +22 -18
  121. {springbootai-2.3.2/spring → springbootai-2.3.3/springbootai}/orm/ddl_auto.py +33 -3
  122. {springbootai-2.3.2/spring → springbootai-2.3.3/springbootai}/orm/mybatis_integration.py +6 -6
  123. {springbootai-2.3.2/spring → springbootai-2.3.3/springbootai}/orm/pymybatis/__init__.py +1 -1
  124. {springbootai-2.3.2/spring → springbootai-2.3.3/springbootai}/orm/pymybatis/mapper/mapper.py +11 -1
  125. {springbootai-2.3.2/spring → springbootai-2.3.3/springbootai}/orm/pymybatis/version.py +1 -1
  126. {springbootai-2.3.2/spring → springbootai-2.3.3/springbootai}/retry/__init__.py +1 -1
  127. {springbootai-2.3.2/spring → springbootai-2.3.3/springbootai}/retry/recovery.py +1 -1
  128. {springbootai-2.3.2/spring → springbootai-2.3.3/springbootai}/retry/retry_decorator.py +2 -2
  129. {springbootai-2.3.2/spring → springbootai-2.3.3/springbootai}/security/jwt_utils.py +31 -8
  130. {springbootai-2.3.2/spring → springbootai-2.3.3/springbootai}/security/oauth2.py +2 -2
  131. {springbootai-2.3.2/spring → springbootai-2.3.3/springbootai}/security/replay_protection.py +1 -1
  132. {springbootai-2.3.2/spring → springbootai-2.3.3/springbootai}/security/security_aop.py +2 -2
  133. {springbootai-2.3.2/spring → springbootai-2.3.3/springbootai}/test/__init__.py +3 -3
  134. {springbootai-2.3.2/spring → springbootai-2.3.3/springbootai}/test/slicing.py +9 -9
  135. {springbootai-2.3.2/spring → springbootai-2.3.3/springbootai}/tx/__init__.py +2 -2
  136. {springbootai-2.3.2/spring → springbootai-2.3.3/springbootai}/tx/events.py +1 -1
  137. {springbootai-2.3.2/spring → springbootai-2.3.3/springbootai}/utils/banner.py +4 -4
  138. {springbootai-2.3.2/spring → springbootai-2.3.3/springbootai}/utils/logger.py +13 -28
  139. {springbootai-2.3.2/spring → springbootai-2.3.3/springbootai}/validation/__init__.py +1 -1
  140. {springbootai-2.3.2/spring → springbootai-2.3.3/springbootai}/validation/aop.py +4 -4
  141. {springbootai-2.3.2/spring → springbootai-2.3.3/springbootai}/validation/constraints.py +1 -1
  142. {springbootai-2.3.2/spring → springbootai-2.3.3/springbootai}/validation/validator.py +1 -1
  143. {springbootai-2.3.2/spring → springbootai-2.3.3/springbootai}/web/actuator.py +451 -66
  144. {springbootai-2.3.2/spring → springbootai-2.3.3/springbootai}/web/csrf.py +1 -1
  145. {springbootai-2.3.2/spring → springbootai-2.3.3/springbootai}/web/exception_handler.py +1 -1
  146. {springbootai-2.3.2/spring → springbootai-2.3.3/springbootai}/web/hateoas.py +4 -4
  147. {springbootai-2.3.2/spring → springbootai-2.3.3/springbootai}/web/health.py +7 -18
  148. springbootai-2.3.3/springbootai/web/request_metrics.py +283 -0
  149. {springbootai-2.3.2/spring → springbootai-2.3.3/springbootai}/web/swagger.py +5 -5
  150. {springbootai-2.3.2/spring → springbootai-2.3.3/springbootai}/web/web_context.py +58 -17
  151. {springbootai-2.3.2/spring → springbootai-2.3.3/springbootai}/websocket/__init__.py +2 -2
  152. {springbootai-2.3.2/spring → springbootai-2.3.3/springbootai}/websocket/annotations.py +1 -1
  153. {springbootai-2.3.2/spring → springbootai-2.3.3/springbootai}/websocket/handler.py +1 -1
  154. {springbootai-2.3.2 → springbootai-2.3.3}/tests/test_actuator.py +11 -11
  155. {springbootai-2.3.2 → springbootai-2.3.3}/tests/test_actuator_prometheus_admin.py +104 -2
  156. {springbootai-2.3.2 → springbootai-2.3.3}/tests/test_ai_comprehensive.py +93 -93
  157. {springbootai-2.3.2 → springbootai-2.3.3}/tests/test_ai_declarative_annotations.py +2 -2
  158. {springbootai-2.3.2 → springbootai-2.3.3}/tests/test_ai_module.py +54 -54
  159. {springbootai-2.3.2 → springbootai-2.3.3}/tests/test_annotation_combinations.py +4 -4
  160. {springbootai-2.3.2 → springbootai-2.3.3}/tests/test_annotations_contract.py +12 -12
  161. {springbootai-2.3.2 → springbootai-2.3.3}/tests/test_aop_annotations_full.py +2 -2
  162. {springbootai-2.3.2 → springbootai-2.3.3}/tests/test_audit_time.py +2 -2
  163. {springbootai-2.3.2 → springbootai-2.3.3}/tests/test_batch.py +1 -1
  164. {springbootai-2.3.2 → springbootai-2.3.3}/tests/test_bean_utils.py +5 -5
  165. {springbootai-2.3.2 → springbootai-2.3.3}/tests/test_bus.py +1 -1
  166. {springbootai-2.3.2 → springbootai-2.3.3}/tests/test_cache_annotations.py +4 -4
  167. {springbootai-2.3.2 → springbootai-2.3.3}/tests/test_cli.py +6 -6
  168. {springbootai-2.3.2 → springbootai-2.3.3}/tests/test_cloud_embedded_full.py +8 -8
  169. {springbootai-2.3.2 → springbootai-2.3.3}/tests/test_component_init_error.py +1 -1
  170. {springbootai-2.3.2 → springbootai-2.3.3}/tests/test_compositional_annotations.py +7 -7
  171. {springbootai-2.3.2 → springbootai-2.3.3}/tests/test_conditional_annotations.py +5 -5
  172. {springbootai-2.3.2 → springbootai-2.3.3}/tests/test_config_binding.py +13 -13
  173. {springbootai-2.3.2 → springbootai-2.3.3}/tests/test_config_center.py +1 -1
  174. {springbootai-2.3.2 → springbootai-2.3.3}/tests/test_config_fixes_185.py +55 -55
  175. {springbootai-2.3.2 → springbootai-2.3.3}/tests/test_connection_resilience.py +2 -2
  176. springbootai-2.3.3/tests/test_core.py +262 -0
  177. {springbootai-2.3.2 → springbootai-2.3.3}/tests/test_core_annotations_full.py +1 -1
  178. {springbootai-2.3.2 → springbootai-2.3.3}/tests/test_csrf.py +3 -3
  179. {springbootai-2.3.2 → springbootai-2.3.3}/tests/test_csv_module.py +8 -8
  180. {springbootai-2.3.2 → springbootai-2.3.3}/tests/test_data_repository.py +4 -4
  181. {springbootai-2.3.2 → springbootai-2.3.3}/tests/test_data_rest.py +2 -2
  182. {springbootai-2.3.2 → springbootai-2.3.3}/tests/test_datasource_routing.py +6 -6
  183. {springbootai-2.3.2 → springbootai-2.3.3}/tests/test_ddl_auto.py +8 -8
  184. {springbootai-2.3.2 → springbootai-2.3.3}/tests/test_declarative_aop_post_authorize_recover.py +9 -9
  185. {springbootai-2.3.2 → springbootai-2.3.3}/tests/test_devtools.py +2 -2
  186. {springbootai-2.3.2 → springbootai-2.3.3}/tests/test_di_config_event_full.py +6 -6
  187. {springbootai-2.3.2 → springbootai-2.3.3}/tests/test_excel_module.py +9 -9
  188. {springbootai-2.3.2 → springbootai-2.3.3}/tests/test_hateoas.py +1 -1
  189. {springbootai-2.3.2 → springbootai-2.3.3}/tests/test_i18n_module.py +2 -2
  190. {springbootai-2.3.2 → springbootai-2.3.3}/tests/test_jpa_version_transient.py +2 -2
  191. {springbootai-2.3.2 → springbootai-2.3.3}/tests/test_kafka.py +4 -4
  192. {springbootai-2.3.2 → springbootai-2.3.3}/tests/test_langchain_comprehensive.py +78 -78
  193. {springbootai-2.3.2 → springbootai-2.3.3}/tests/test_langchain_ext.py +63 -63
  194. {springbootai-2.3.2 → springbootai-2.3.3}/tests/test_langchain_module.py +20 -20
  195. {springbootai-2.3.2 → springbootai-2.3.3}/tests/test_langgraph_comprehensive.py +6 -6
  196. {springbootai-2.3.2 → springbootai-2.3.3}/tests/test_langgraph_module.py +2 -2
  197. {springbootai-2.3.2 → springbootai-2.3.3}/tests/test_logging_config.py +193 -2
  198. springbootai-2.3.3/tests/test_lombok_annotations.py +93 -0
  199. {springbootai-2.3.2 → springbootai-2.3.3}/tests/test_mcp_module.py +5 -5
  200. {springbootai-2.3.2 → springbootai-2.3.3}/tests/test_metadata.py +4 -3
  201. {springbootai-2.3.2 → springbootai-2.3.3}/tests/test_migration.py +2 -2
  202. springbootai-2.3.3/tests/test_nacos_config.py +110 -0
  203. {springbootai-2.3.2 → springbootai-2.3.3}/tests/test_new_annotations.py +6 -6
  204. {springbootai-2.3.2 → springbootai-2.3.3}/tests/test_new_features.py +29 -29
  205. {springbootai-2.3.2 → springbootai-2.3.3}/tests/test_oauth2.py +5 -5
  206. {springbootai-2.3.2 → springbootai-2.3.3}/tests/test_orm_pymybatis_full.py +3 -3
  207. {springbootai-2.3.2 → springbootai-2.3.3}/tests/test_production_readiness.py +35 -35
  208. {springbootai-2.3.2 → springbootai-2.3.3}/tests/test_pymybatis_configuration_hardening.py +4 -4
  209. {springbootai-2.3.2 → springbootai-2.3.3}/tests/test_pymybatis_contract.py +24 -7
  210. springbootai-2.3.3/tests/test_request_metrics.py +100 -0
  211. springbootai-2.3.3/tests/test_retry.py +449 -0
  212. {springbootai-2.3.2 → springbootai-2.3.3}/tests/test_scaffold_hardening.py +8 -8
  213. springbootai-2.3.3/tests/test_scheduling.py +251 -0
  214. {springbootai-2.3.2 → springbootai-2.3.3}/tests/test_seata_at_proxy.py +1 -1
  215. {springbootai-2.3.2 → springbootai-2.3.3}/tests/test_seata_bridge.py +5 -5
  216. {springbootai-2.3.2 → springbootai-2.3.3}/tests/test_seata_durable_store.py +1 -1
  217. {springbootai-2.3.2 → springbootai-2.3.3}/tests/test_security.py +15 -15
  218. {springbootai-2.3.2 → springbootai-2.3.3}/tests/test_security_full.py +21 -5
  219. {springbootai-2.3.2 → springbootai-2.3.3}/tests/test_security_hardening.py +8 -8
  220. {springbootai-2.3.2 → springbootai-2.3.3}/tests/test_select_page.py +3 -3
  221. {springbootai-2.3.2 → springbootai-2.3.3}/tests/test_startup_lifecycle.py +37 -37
  222. {springbootai-2.3.2 → springbootai-2.3.3}/tests/test_swagger_module.py +7 -7
  223. {springbootai-2.3.2 → springbootai-2.3.3}/tests/test_test_slicing.py +6 -6
  224. springbootai-2.3.3/tests/test_tracing.py +136 -0
  225. {springbootai-2.3.2 → springbootai-2.3.3}/tests/test_transactional_events.py +3 -3
  226. {springbootai-2.3.2 → springbootai-2.3.3}/tests/test_validation_module.py +5 -5
  227. {springbootai-2.3.2 → springbootai-2.3.3}/tests/test_web_annotations_full.py +1 -1
  228. {springbootai-2.3.2 → springbootai-2.3.3}/tests/test_web_root_mapping.py +2 -2
  229. springbootai-2.3.3/tests/test_web_security_responses.py +29 -0
  230. {springbootai-2.3.2 → springbootai-2.3.3}/tests/test_web_static_files.py +1 -1
  231. {springbootai-2.3.2 → springbootai-2.3.3}/tests/test_websocket_module.py +1 -1
  232. springbootai-2.3.2/spring/__init__.py +0 -66
  233. springbootai-2.3.2/spring/core/__init__.py +0 -3
  234. springbootai-2.3.2/spring/langchain/agents/__init__.py +0 -4
  235. springbootai-2.3.2/spring/langchain/callbacks/__init__.py +0 -4
  236. springbootai-2.3.2/spring/langchain/chains/__init__.py +0 -4
  237. springbootai-2.3.2/spring/langchain/indexes/__init__.py +0 -4
  238. springbootai-2.3.2/spring/langchain/loaders/__init__.py +0 -4
  239. springbootai-2.3.2/spring/langchain/memory/__init__.py +0 -4
  240. springbootai-2.3.2/spring/langchain/parsers/__init__.py +0 -4
  241. springbootai-2.3.2/spring/langchain/prompts/__init__.py +0 -4
  242. springbootai-2.3.2/spring/langchain/retrievers/__init__.py +0 -4
  243. springbootai-2.3.2/spring/langchain/tools/__init__.py +0 -4
  244. springbootai-2.3.2/spring/langchain/utilities/__init__.py +0 -4
  245. springbootai-2.3.2/spring/langchain/vectorstores/__init__.py +0 -4
  246. springbootai-2.3.2/springbootAI.egg-info/SOURCES.txt +0 -327
  247. springbootai-2.3.2/springbootAI.egg-info/entry_points.txt +0 -3
  248. springbootai-2.3.2/springbootAI.egg-info/top_level.txt +0 -1
  249. {springbootai-2.3.2 → springbootai-2.3.3}/LICENSE +0 -0
  250. {springbootai-2.3.2 → springbootai-2.3.3}/requirements-langgraph.txt +0 -0
  251. {springbootai-2.3.2 → springbootai-2.3.3}/requirements-mcp.txt +0 -0
  252. {springbootai-2.3.2 → springbootai-2.3.3}/setup.cfg +0 -0
  253. {springbootai-2.3.2 → springbootai-2.3.3}/setup.py +0 -0
  254. {springbootai-2.3.2 → springbootai-2.3.3}/springbootAI.egg-info/dependency_links.txt +0 -0
  255. {springbootai-2.3.2/spring → springbootai-2.3.3/springbootai}/ai/etl.py +0 -0
  256. {springbootai-2.3.2/spring → springbootai-2.3.3/springbootai}/ai/tools.py +0 -0
  257. {springbootai-2.3.2/spring → springbootai-2.3.3/springbootai}/annotations/batch.py +0 -0
  258. {springbootai-2.3.2/spring → springbootai-2.3.3/springbootai}/annotations/data.py +0 -0
  259. {springbootai-2.3.2/spring → springbootai-2.3.3/springbootai}/aop/__init__.py +0 -0
  260. {springbootai-2.3.2/spring → springbootai-2.3.3/springbootai}/aop/method_interceptor.py +0 -0
  261. {springbootai-2.3.2/spring → springbootai-2.3.3/springbootai}/cloud/discovery.py +0 -0
  262. {springbootai-2.3.2/spring → springbootai-2.3.3/springbootai}/cloud/seata_bridge.py +0 -0
  263. {springbootai-2.3.2/spring → springbootai-2.3.3/springbootai}/cloud/sentinel.py +0 -0
  264. {springbootai-2.3.2/spring → springbootai-2.3.3/springbootai}/cloud/tracer.py +0 -0
  265. {springbootai-2.3.2/spring → springbootai-2.3.3/springbootai}/cloud/transaction_store.py +0 -0
  266. {springbootai-2.3.2/spring → springbootai-2.3.3/springbootai}/config/__init__.py +0 -0
  267. {springbootai-2.3.2/spring → springbootai-2.3.3/springbootai}/context/__init__.py +0 -0
  268. {springbootai-2.3.2/spring → springbootai-2.3.3/springbootai}/context/registry.py +0 -0
  269. {springbootai-2.3.2/spring → springbootai-2.3.3/springbootai}/core/graceful_shutdown.py +0 -0
  270. {springbootai-2.3.2/spring → springbootai-2.3.3/springbootai}/core/typing_utils.py +0 -0
  271. {springbootai-2.3.2/spring → springbootai-2.3.3/springbootai}/csv/easy_csv.py +0 -0
  272. {springbootai-2.3.2/spring → springbootai-2.3.3/springbootai}/data/page.py +0 -0
  273. {springbootai-2.3.2/spring → springbootai-2.3.3/springbootai}/data/specification.py +0 -0
  274. {springbootai-2.3.2/spring → springbootai-2.3.3/springbootai}/datasource/context.py +0 -0
  275. {springbootai-2.3.2/spring → springbootai-2.3.3/springbootai}/datasource/dynamic.py +0 -0
  276. {springbootai-2.3.2/spring → springbootai-2.3.3/springbootai}/devtools.py +0 -0
  277. {springbootai-2.3.2/spring → springbootai-2.3.3/springbootai}/excel/converters.py +0 -0
  278. {springbootai-2.3.2/spring → springbootai-2.3.3/springbootai}/excel/easy_excel.py +0 -0
  279. {springbootai-2.3.2/spring → springbootai-2.3.3/springbootai}/excel/exceptions.py +0 -0
  280. {springbootai-2.3.2/spring → springbootai-2.3.3/springbootai}/excel/reader.py +0 -0
  281. {springbootai-2.3.2/spring → springbootai-2.3.3/springbootai}/excel/style.py +0 -0
  282. {springbootai-2.3.2/spring → springbootai-2.3.3/springbootai}/excel/writer.py +0 -0
  283. {springbootai-2.3.2/spring → springbootai-2.3.3/springbootai}/i18n/accessor.py +0 -0
  284. {springbootai-2.3.2/spring → springbootai-2.3.3/springbootai}/i18n/locale.py +0 -0
  285. {springbootai-2.3.2/spring → springbootai-2.3.3/springbootai}/i18n/locale_resolver.py +0 -0
  286. {springbootai-2.3.2/spring → springbootai-2.3.3/springbootai}/i18n/message_source.py +0 -0
  287. {springbootai-2.3.2/spring → springbootai-2.3.3/springbootai}/i18n/middleware.py +0 -0
  288. {springbootai-2.3.2/spring → springbootai-2.3.3/springbootai}/i18n/properties.py +0 -0
  289. {springbootai-2.3.2/spring → springbootai-2.3.3/springbootai}/i18n/sources.py +0 -0
  290. {springbootai-2.3.2/spring → springbootai-2.3.3/springbootai}/langchain/callbacks/handlers.py +0 -0
  291. {springbootai-2.3.2/spring → springbootai-2.3.3/springbootai}/langchain/loaders/loaders.py +0 -0
  292. {springbootai-2.3.2/spring → springbootai-2.3.3/springbootai}/langchain/memory/memory.py +0 -0
  293. {springbootai-2.3.2/spring → springbootai-2.3.3/springbootai}/langchain/prompts/templates.py +0 -0
  294. {springbootai-2.3.2/spring → springbootai-2.3.3/springbootai}/langchain/retrievers/retrievers.py +0 -0
  295. {springbootai-2.3.2/spring → springbootai-2.3.3/springbootai}/langchain/utilities/utils.py +0 -0
  296. {springbootai-2.3.2/spring → springbootai-2.3.3/springbootai}/logging/__init__.py +0 -0
  297. {springbootai-2.3.2/spring → springbootai-2.3.3/springbootai}/messaging/__init__.py +0 -0
  298. {springbootai-2.3.2/spring → springbootai-2.3.3/springbootai}/messaging/kafka.py +0 -0
  299. {springbootai-2.3.2/spring → springbootai-2.3.3/springbootai}/messaging/rabbitmq.py +0 -0
  300. {springbootai-2.3.2/spring → springbootai-2.3.3/springbootai}/monitoring/__init__.py +0 -0
  301. {springbootai-2.3.2/spring → springbootai-2.3.3/springbootai}/monitoring/prometheus.py +0 -0
  302. {springbootai-2.3.2/spring → springbootai-2.3.3/springbootai}/orm/database.py +0 -0
  303. {springbootai-2.3.2/spring → springbootai-2.3.3/springbootai}/orm/migration.py +0 -0
  304. {springbootai-2.3.2/spring → springbootai-2.3.3/springbootai}/orm/pymybatis/annotations/__init__.py +0 -0
  305. {springbootai-2.3.2/spring → springbootai-2.3.3/springbootai}/orm/pymybatis/annotations/annotations.py +0 -0
  306. {springbootai-2.3.2/spring → springbootai-2.3.3/springbootai}/orm/pymybatis/cache/__init__.py +0 -0
  307. {springbootai-2.3.2/spring → springbootai-2.3.3/springbootai}/orm/pymybatis/cache/cache.py +0 -0
  308. {springbootai-2.3.2/spring → springbootai-2.3.3/springbootai}/orm/pymybatis/cache/redis_cache.py +0 -0
  309. {springbootai-2.3.2/spring → springbootai-2.3.3/springbootai}/orm/pymybatis/circuit_breaker/__init__.py +0 -0
  310. {springbootai-2.3.2/spring → springbootai-2.3.3/springbootai}/orm/pymybatis/circuit_breaker/circuit_breaker.py +0 -0
  311. {springbootai-2.3.2/spring → springbootai-2.3.3/springbootai}/orm/pymybatis/configuration.py +0 -0
  312. {springbootai-2.3.2/spring → springbootai-2.3.3/springbootai}/orm/pymybatis/core/__init__.py +0 -0
  313. {springbootai-2.3.2/spring → springbootai-2.3.3/springbootai}/orm/pymybatis/core/sql_session.py +0 -0
  314. {springbootai-2.3.2/spring → springbootai-2.3.3/springbootai}/orm/pymybatis/core/sql_session_factory.py +0 -0
  315. {springbootai-2.3.2/spring → springbootai-2.3.3/springbootai}/orm/pymybatis/dialect/__init__.py +0 -0
  316. {springbootai-2.3.2/spring → springbootai-2.3.3/springbootai}/orm/pymybatis/dialect/dialect.py +0 -0
  317. {springbootai-2.3.2/spring → springbootai-2.3.3/springbootai}/orm/pymybatis/dynamic_sql/__init__.py +0 -0
  318. {springbootai-2.3.2/spring → springbootai-2.3.3/springbootai}/orm/pymybatis/dynamic_sql/dynamic_sql.py +0 -0
  319. {springbootai-2.3.2/spring → springbootai-2.3.3/springbootai}/orm/pymybatis/interceptor/__init__.py +0 -0
  320. {springbootai-2.3.2/spring → springbootai-2.3.3/springbootai}/orm/pymybatis/interceptor/interceptor.py +0 -0
  321. {springbootai-2.3.2/spring → springbootai-2.3.3/springbootai}/orm/pymybatis/mapper/__init__.py +0 -0
  322. {springbootai-2.3.2/spring → springbootai-2.3.3/springbootai}/orm/pymybatis/metrics/__init__.py +0 -0
  323. {springbootai-2.3.2/spring → springbootai-2.3.3/springbootai}/orm/pymybatis/metrics/metrics.py +0 -0
  324. {springbootai-2.3.2/spring → springbootai-2.3.3/springbootai}/orm/pymybatis/pool/__init__.py +0 -0
  325. {springbootai-2.3.2/spring → springbootai-2.3.3/springbootai}/orm/pymybatis/pool/connection_pool.py +0 -0
  326. {springbootai-2.3.2/spring → springbootai-2.3.3/springbootai}/orm/pymybatis/security/__init__.py +0 -0
  327. {springbootai-2.3.2/spring → springbootai-2.3.3/springbootai}/orm/pymybatis/security/access_control.py +0 -0
  328. {springbootai-2.3.2/spring → springbootai-2.3.3/springbootai}/orm/pymybatis/security/password_encoder.py +0 -0
  329. {springbootai-2.3.2/spring → springbootai-2.3.3/springbootai}/orm/pymybatis/security/sensitive_data_masker.py +0 -0
  330. {springbootai-2.3.2/spring → springbootai-2.3.3/springbootai}/orm/pymybatis/security/sql_injection_detector.py +0 -0
  331. {springbootai-2.3.2/spring → springbootai-2.3.3/springbootai}/orm/pymybatis/transaction/__init__.py +0 -0
  332. {springbootai-2.3.2/spring → springbootai-2.3.3/springbootai}/orm/pymybatis/transaction/transaction.py +0 -0
  333. {springbootai-2.3.2/spring → springbootai-2.3.3/springbootai}/orm/pymybatis/type_handler/__init__.py +0 -0
  334. {springbootai-2.3.2/spring → springbootai-2.3.3/springbootai}/orm/pymybatis/type_handler/type_handler.py +0 -0
  335. {springbootai-2.3.2/spring → springbootai-2.3.3/springbootai}/orm/pymybatis/xml_parser/__init__.py +0 -0
  336. {springbootai-2.3.2/spring → springbootai-2.3.3/springbootai}/orm/pymybatis/xml_parser/xml_parser.py +0 -0
  337. {springbootai-2.3.2/spring → springbootai-2.3.3/springbootai}/retry/retry_annotations.py +0 -0
  338. {springbootai-2.3.2/spring → springbootai-2.3.3/springbootai}/scheduling/__init__.py +0 -0
  339. {springbootai-2.3.2/spring → springbootai-2.3.3/springbootai}/scheduling/scheduler.py +0 -0
  340. {springbootai-2.3.2/spring → springbootai-2.3.3/springbootai}/security/__init__.py +0 -0
  341. {springbootai-2.3.2/spring → springbootai-2.3.3/springbootai}/security/secret_manager.py +0 -0
  342. {springbootai-2.3.2/spring → springbootai-2.3.3/springbootai}/security/security_context.py +0 -0
  343. {springbootai-2.3.2/spring → springbootai-2.3.3/springbootai}/tracing/__init__.py +0 -0
  344. {springbootai-2.3.2/spring → springbootai-2.3.3/springbootai}/tracing/skywalking.py +0 -0
  345. {springbootai-2.3.2/spring → springbootai-2.3.3/springbootai}/tx/synchronization.py +0 -0
  346. {springbootai-2.3.2/spring → springbootai-2.3.3/springbootai}/utils/__init__.py +0 -0
  347. {springbootai-2.3.2/spring → springbootai-2.3.3/springbootai}/utils/bean_utils.py +0 -0
  348. {springbootai-2.3.2/spring → springbootai-2.3.3/springbootai}/utils/redis_client.py +0 -0
  349. {springbootai-2.3.2/spring → springbootai-2.3.3/springbootai}/validation/exceptions.py +0 -0
  350. {springbootai-2.3.2/spring → springbootai-2.3.3/springbootai}/web/__init__.py +0 -0
  351. {springbootai-2.3.2/spring → springbootai-2.3.3/springbootai}/web/interceptor.py +0 -0
  352. {springbootai-2.3.2/spring → springbootai-2.3.3/springbootai}/web/result.py +0 -0
  353. {springbootai-2.3.2/spring → springbootai-2.3.3/springbootai}/websocket/broker.py +0 -0
  354. {springbootai-2.3.2/spring → springbootai-2.3.3/springbootai}/websocket/exceptions.py +0 -0
  355. {springbootai-2.3.2/spring → springbootai-2.3.3/springbootai}/websocket/router.py +0 -0
  356. {springbootai-2.3.2/spring → springbootai-2.3.3/springbootai}/websocket/session.py +0 -0
  357. {springbootai-2.3.2 → springbootai-2.3.3}/sql/seata_undo_log.sql +0 -0
  358. {springbootai-2.3.2 → springbootai-2.3.3}/tests/test_starter.py +0 -0
@@ -1,5 +1,20 @@
1
1
  # Changelog
2
2
 
3
+ ## [2.3.3] - 2026-08-18
4
+
5
+ ### 测试补充与文档完善
6
+
7
+ - 补充单元测试覆盖核心模块:新增 `test_core.py`(22个,覆盖 typing_utils/graceful_shutdown)、`test_retry.py`(29个,覆盖 Backoff/Retryable/@retry/recovery)、`test_scheduling.py`(18个,覆盖 cron解析/调度器)、`test_tracing.py`(17个,覆盖 LocalSpan/SkyWalkingTracer 降级)共86个测试用例
8
+ - 文档中文化:将 `doc/LOMBOK_MODULE.md` 等英文文档完整翻译为中文
9
+ - 安全加固:生产环境配置校验强化;取消 GitHub Actions 定时测试触发
10
+ - 完整测试套件 2964+ 个测试通过
11
+
12
+ ## [2.3.2] - 2026-08-16
13
+
14
+ ### 文档与打包修正
15
+
16
+ - 统一框架、文档和构建元数据版本;修正测试目录、可选依赖和生产 Profile 示例。
17
+
3
18
  ## [2.3.0] - 2026-08-15
4
19
 
5
20
  ### 新增
@@ -14,21 +29,21 @@
14
29
  - `@EnableDataRest` — 启用 Spring Data REST(自动暴露 Repository 为 CRUD API)
15
30
  - `@BatchJob` / `@BatchStep` — 标记批处理作业和步骤
16
31
  - `@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`(静默期防抖)。
32
+ - **OAuth2 资源服务器**:新增 `springbootai/security/oauth2.py`,支持 JWT Access Token 验证,HS256 对称密钥和 RS256 公钥(JWKS)两种算法。
33
+ - **CSRF 防护**:新增 `springbootai/web/csrf.py`,实现 Double Submit Cookie 模式中间件。
34
+ - **Kafka 支持**:新增 `springbootai/messaging/kafka.py`,提供 `KafkaClient`(生产者+消费者管理)和 `@KafkaListener`/`KafkaTemplate` 注解。
35
+ - **DevTools 热重载**:新增 `springbootai/devtools.py`,提供 `FileWatcher`(轮询文件变更)和 `RestartTrigger`(静默期防抖)。
21
36
  - **数据库迁移完善**:新增 Undo 回滚迁移(U{version}__{desc}.sql)、迁移锁(MySQL/PostgreSQL/SQLite)、变量替换(${var})、validate 校验方法。
22
37
  - **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)。
38
+ - **配置元数据**:新增 `springbootai/config/spring-configuration-metadata.json`,IDE 可读取提供配置自动补全。
39
+ - **项目脚手架**:新增 `springbootai/cli/scaffold.py`,支持 `springbootai init` 命令创建新项目。
40
+ - **Spring CLI**:新增 `springbootai/cli/main.py`,提供 `springbootai` 统一命令入口(version/info/list/init/run/docs)。
26
41
  - **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。
42
+ - **Spring Cloud Config**:新增 `springbootai/cloud/config_center.py`,支持 HTTP 和本地文件后端。
43
+ - **Spring Cloud Bus**:新增 `springbootai/cloud/bus.py`,支持进程内和 MQ 后端事件总线。
44
+ - **Spring Batch**:新增 `springbootai/batch/`,支持 Job/Step/Reader/Processor/Writer 组件。
45
+ - **Spring Data REST**:新增 `springbootai/data/rest.py`,自动生成 Repository CRUD REST 端点。
46
+ - **Spring HATEOAS**:新增 `springbootai/web/hateoas.py`,包含 Link/EntityModel/CollectionModel/PagedModel。
32
47
  - **Sphinx API 文档**:新增 `docs/conf.py` 和 `docs/index.rst`。
33
48
 
34
49
  ### 测试
@@ -53,7 +68,7 @@
53
68
 
54
69
  ### 新增
55
70
 
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`)。
71
+ - **Seata AT 数据源代理**:新增 `springbootai/cloud/seata_at_proxy.py`(500 行),在 ORM 拦截器层自动记录 SQL 的 before/after image,生成 undo_log,全局事务回滚时自动反向恢复数据。支持 MySQL(`%s`) 和 SQLite(`?`) 占位符自动适配。Seata 模式从三模式(local/http/distributed)扩展为四模式(新增 `at`)。
57
72
  - **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
73
 
59
74
  ### 重构
@@ -102,9 +117,12 @@
102
117
  ### 新增
103
118
 
104
119
  - ORM 实体字段自动推断:类型注解无需显式 `= Column(...)` 赋值,对齐 Java JPA 字段自动映射。
105
- - `name: str` → 自动创建 `Column()`(无默认值,仅记录类型)
106
- - `name: str = ""` → 自动创建 `Column(default="")`(赋值即为默认值)
107
- - `name: int = 0` → 自动创建 `Column(default=0)`
120
+ -
121
+ ame: str` → 自动创建 `Column()`(无默认值,仅记录类型)
122
+ -
123
+ ame: str = ""` → 自动创建 `Column(default="")`(赋值即为默认值)
124
+ -
125
+ ame: int = 0` → 自动创建 `Column(default=0)`
108
126
  - 已有 `Column()`/`Id()`/`CreateTime()` 等描述符的字段保留不覆盖
109
127
  - 以 `_` 开头的私有字段自动跳过
110
128
 
@@ -179,9 +197,9 @@
179
197
 
180
198
  ### 新增
181
199
 
182
- - 新增独立 `spring.langgraph` 模块,锁定 `langgraph==1.2.9`,提供状态图、条件路由、人工中断、恢复、流式调用和注解式工作流。
200
+ - 新增独立 `springbootai.langgraph` 模块,锁定 `langgraph==1.2.9`,提供状态图、条件路由、人工中断、恢复、流式调用和注解式工作流。
183
201
  - 新增官方 SQLite checkpointer 安全工厂;关闭 pickle fallback、限制反序列化类型,并验证连接关闭后重新打开仍能恢复流程。
184
- - 新增 `spring.mcp` 客户端和服务端,基于官方 MCP Python SDK,支持 Tool、Resource、Prompt 及注解调用。
202
+ - 新增 `springbootai.mcp` 客户端和服务端,基于官方 MCP Python SDK,支持 Tool、Resource、Prompt 及注解调用。
185
203
  - 新增 LangChain 和 LangGraph 注解 API;注解只负责声明,执行继续委托官方框架。
186
204
  - 压测新增 AI、LangChain、LangGraph、MCP workload,并纳入 9 小时 mixed 稳定性脚本。
187
205
  - CI 新增真实 MySQL、Redis、RabbitMQ、Nacos、Seata TCC 集成测试和依赖停机测试。
@@ -8,10 +8,10 @@ include requirements-langgraph.txt
8
8
  include requirements-mcp.txt
9
9
  include pyproject.toml
10
10
 
11
- graft spring
11
+ graft springbootai
12
12
  graft sql
13
13
 
14
- # 排除开发/构建产物
14
+ # 鎺掗櫎寮€鍙?鏋勫缓浜х墿
15
15
  global-exclude __pycache__
16
16
  global-exclude *.pyc
17
17
  global-exclude *.pyo
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: springbootAI
3
- Version: 2.3.2
3
+ Version: 2.3.3
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
@@ -63,7 +63,7 @@ Requires-Dist: langchain-core==1.5.4; extra == "ai"
63
63
  Requires-Dist: langchain-classic==1.0.8; extra == "ai"
64
64
  Requires-Dist: langchain-text-splitters==1.1.2; extra == "ai"
65
65
  Requires-Dist: langchain-community==0.4.2; extra == "ai"
66
- Requires-Dist: numpy==2.3.0; extra == "ai"
66
+ Requires-Dist: numpy==2.2.6; extra == "ai"
67
67
  Requires-Dist: pydantic==2.13.4; extra == "ai"
68
68
  Provides-Extra: langchain
69
69
  Requires-Dist: langchain-openai==1.4.2; extra == "langchain"
@@ -71,7 +71,7 @@ Requires-Dist: langchain-core==1.5.4; extra == "langchain"
71
71
  Requires-Dist: langchain-classic==1.0.8; extra == "langchain"
72
72
  Requires-Dist: langchain-text-splitters==1.1.2; extra == "langchain"
73
73
  Requires-Dist: langchain-community==0.4.2; extra == "langchain"
74
- Requires-Dist: numpy==2.3.0; extra == "langchain"
74
+ Requires-Dist: numpy==2.2.6; extra == "langchain"
75
75
  Requires-Dist: pydantic==2.13.4; extra == "langchain"
76
76
  Requires-Dist: faiss-cpu<2,>=1.7.4; extra == "langchain"
77
77
  Requires-Dist: pypdf<6,>=4.0.0; extra == "langchain"
@@ -92,8 +92,8 @@ Requires-Dist: langgraph-checkpoint-sqlite==3.1.1; extra == "langgraph"
92
92
  Provides-Extra: mcp
93
93
  Requires-Dist: mcp==2.0.0; extra == "mcp"
94
94
  Provides-Extra: web
95
- Requires-Dist: fastapi==0.115.6; extra == "web"
96
- Requires-Dist: uvicorn==0.34.0; extra == "web"
95
+ Requires-Dist: fastapi==0.141.1; extra == "web"
96
+ Requires-Dist: uvicorn==0.39.0; extra == "web"
97
97
  Requires-Dist: pydantic==2.13.4; extra == "web"
98
98
  Requires-Dist: python-multipart==0.0.20; extra == "web"
99
99
  Provides-Extra: cloud
@@ -141,7 +141,7 @@ Requires-Dist: langchain-core==1.5.4; extra == "full"
141
141
  Requires-Dist: langchain-classic==1.0.8; extra == "full"
142
142
  Requires-Dist: langchain-text-splitters==1.1.2; extra == "full"
143
143
  Requires-Dist: langchain-community==0.4.2; extra == "full"
144
- Requires-Dist: numpy==2.3.0; extra == "full"
144
+ Requires-Dist: numpy==2.2.6; extra == "full"
145
145
  Requires-Dist: pydantic==2.13.4; extra == "full"
146
146
  Requires-Dist: faiss-cpu<2,>=1.7.4; extra == "full"
147
147
  Requires-Dist: pypdf<6,>=4.0.0; extra == "full"
@@ -183,7 +183,7 @@ SpringBootAI 是一个采用 Spring 风格注解和分层结构的 Python 应用
183
183
  | AI 与编排 | 模型调用、Tools、RAG、Chain、状态图、MCP client/server | LangChain / LangGraph / 官方 MCP SDK |
184
184
  | 生产治理 | 健康检查、Prometheus、限流熔断、追踪、Swagger | prometheus-client / OpenTelemetry / OpenAPI |
185
185
 
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 实现自动回滚。
186
+ 当前版本是 `2.3.2`;支持 Python 3.10、3.11 和 3.12,许可证为 MIT。项目仍标记为 Beta。用于公网高并发、合规敏感或支付/订单/库存等核心系统前,必须完成目标数据库、流量模型、故障恢复和安全基线验证。内嵌 Gateway 适合内部路由,不替代公网 Nginx/Kong/WAF;Seata `distributed` 对接官方 TC + TCC 回调;`at` 模式通过 ORM 拦截器自动生成 undo_log 实现自动回滚。
187
187
 
188
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)
189
189
 
@@ -210,8 +210,8 @@ Linux/macOS 激活命令是 `source .venv/bin/activate`,其余 Python 命令
210
210
  创建 `demo/Application.py`:
211
211
 
212
212
  ```python
213
- from spring.annotations import SpringBootApplication
214
- from spring.main import run
213
+ from springbootai.annotations import SpringBootApplication
214
+ from springbootai.main import run
215
215
 
216
216
 
217
217
  @SpringBootApplication(scan_base_packages=["demo"])
@@ -226,8 +226,8 @@ if __name__ == "__main__":
226
226
  创建 `demo/controller/HelloController.py`:
227
227
 
228
228
  ```python
229
- from spring.annotations import GetMapping, RequestMapping, RestController
230
- from spring.web.swagger import Operation, Tag
229
+ from springbootai.annotations import GetMapping, RequestMapping, RestController
230
+ from springbootai.web.swagger import Operation, Tag
231
231
 
232
232
 
233
233
  @Tag(name="入门接口", description="确认应用已经正常运行")
@@ -288,10 +288,11 @@ curl http://127.0.0.1:8080/api/hello/Alice
288
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 / 注解调用 |
289
289
  | ✅ 内嵌 PyMyBatis ORM | [ORM_MODULE.md](https://github.com/YUCONGGEN/springbootAI/blob/master/doc/ORM_MODULE.md) | 随核心包 | Mapper 注解 / XML Mapper / 分页 / SQL 安全 / DDL 自动建表 / Repository 分页查询 |
290
290
  | ✅ JPA 实体与仓库 | [JPA_MODULE.md](https://github.com/YUCONGGEN/springbootAI/blob/master/doc/JPA_MODULE.md) | 随核心包 | `@Entity` + `@Table` / 字段自动推断 / `@CreateTime` / Repository / DataJpaTest |
291
+ | ✅ Lombok 模型注解 | [LOMBOK_MODULE.md](https://github.com/YUCONGGEN/springbootAI/blob/master/doc/LOMBOK_MODULE.md) | 随核心包 | `@Data` / `@Get` / `@Set` / `@ToString` 消除模型样板代码 |
291
292
  | ✅ Cloud 微服务 | [CLOUD_MODULE.md](https://github.com/YUCONGGEN/springbootAI/blob/master/doc/CLOUD_MODULE.md) | 随核心包 | 服务注册发现 / 配置刷新 / Feign / Sentinel / Gateway / 分布式事务 |
292
293
  | 📦 消息队列 | [MESSAGING_MODULE.md](https://github.com/YUCONGGEN/springbootAI/blob/master/doc/MESSAGING_MODULE.md) | `pip install springbootAI[rabbitmq]` | `@RabbitListener` / `RabbitTemplate` RabbitMQ 消息收发 |
293
294
  | 📦 Excel 读写 | [EXCEL_MODULE.md](https://github.com/YUCONGGEN/springbootAI/blob/master/doc/EXCEL_MODULE.md) | `pip install springbootAI[excel]` | `@ExcelProperty` / `@ExcelIgnore` 注解驱动读写 |
294
- | 📦 CSV 读写 | [CSV_MODULE.md](https://github.com/YUCONGGEN/springbootAI/blob/master/doc/CSV_MODULE.md) | `pip install springbootAI[csv]` | `@CsvProperty` / `@CsvIgnore` 注解驱动读写 |
295
+ | CSV 读写 | [CSV_MODULE.md](https://github.com/YUCONGGEN/springbootAI/blob/master/doc/CSV_MODULE.md) | 随核心包(Python 标准库 `csv`) | `@CsvProperty` / `@CsvIgnore` 注解驱动读写 |
295
296
  | ✅ Swagger 文档 | [SWAGGER_MODULE.md](https://github.com/YUCONGGEN/springbootAI/blob/master/doc/SWAGGER_MODULE.md) | 随核心包 | `@Tag` / `@Operation` 注解驱动 API 文档 |
296
297
  | ✅ 安全 | [SECURITY.md](https://github.com/YUCONGGEN/springbootAI/blob/master/doc/SECURITY.md) | 随核心包 | JWT 生成校验 / 密码加密 / SQL 注入防护 / 访问控制 |
297
298
  | ✅ BeanUtils | [BEAN_UTILS.md](https://github.com/YUCONGGEN/springbootAI/blob/master/doc/BEAN_UTILS.md) | 随核心包 | `copy_properties` / `clone` 属性复制工具 |
@@ -363,10 +364,10 @@ SpringBootAI 是一个 **Python Web 框架**。它把 Java Spring Boot 的"注
363
364
 
364
365
  | 组件 | 当前版本 |
365
366
  |------|----------|
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 |
367
+ | `springbootai` 框架 API | 2.3.2 |
368
+ | `springbootai.orm.pymybatis` | 2.3.2 |
369
+ | `springbootai.ai` AI 模块 | 2.3.2 |
370
+ | `springbootai.langchain` LangChain 模块 | 2.3.2 |
370
371
  | Python | 3.10+ |
371
372
 
372
373
  ### 1.4 适合什么场景
@@ -464,7 +465,7 @@ python -m pip install springbootAI
464
465
 
465
466
  只有准备修改框架源码的贡献者,才需要先 `git clone`,进入仓库后执行 `python -m pip install -e .`。
466
467
 
467
- 核心依赖包含 FastAPI、Uvicorn、PyYAML、python-dotenv、DBUtils、PyJWT、cryptography、bcrypt 和 Pydantic。**核心安装已包含内嵌 `spring.orm.pymybatis`,使用 Mapper 模式不需要再安装独立 `pymybatis`。**
468
+ 核心依赖包含 FastAPI、Uvicorn、PyYAML、python-dotenv、DBUtils、PyJWT、cryptography、bcrypt 和 Pydantic。**核心安装已包含内嵌 `springbootai.orm.pymybatis`,使用 Mapper 模式不需要再安装独立 `pymybatis`。**
468
469
 
469
470
  ### 3.3 可选 extras
470
471
 
@@ -484,7 +485,6 @@ python -m pip install "springbootAI[mcp]"
484
485
  ```bash
485
486
  python -m pip install -e ".[mysql]" # PyMySQL
486
487
  python -m pip install -e ".[postgresql]" # psycopg2-binary
487
- python -m pip install -e ".[oracle]" # cx-Oracle
488
488
  python -m pip install -e ".[sqlalchemy]" # SQLAlchemy 模式
489
489
  python -m pip install -e ".[redis]" # Redis 能力
490
490
  python -m pip install -e ".[ast]" # sqlglot AST 校验
@@ -516,8 +516,8 @@ pip install langchain-chroma # Chroma 向量库
516
516
  ### 3.4 验证安装
517
517
 
518
518
  ```bash
519
- python -c "import spring; print(spring.__version__)"
520
- python -c "from spring.orm.pymybatis import __version__; print(__version__)"
519
+ python -c "import springbootai; print(springbootai.__version__)"
520
+ python -c "from springbootai.orm.pymybatis import __version__; print(__version__)"
521
521
  ```
522
522
 
523
523
  ### 3.5 最小应用
@@ -539,8 +539,8 @@ demo/
539
539
  创建 `demo/Application.py`:
540
540
 
541
541
  ```python
542
- from spring.annotations import SpringBootApplication
543
- from spring.main import run
542
+ from springbootai.annotations import SpringBootApplication
543
+ from springbootai.main import run
544
544
 
545
545
 
546
546
  @SpringBootApplication(scan_base_packages=["demo"])
@@ -555,7 +555,7 @@ if __name__ == "__main__":
555
555
  创建 `demo/controller/HelloController.py`:
556
556
 
557
557
  ```python
558
- from spring.annotations import GetMapping, RequestMapping, RestController
558
+ from springbootai.annotations import GetMapping, RequestMapping, RestController
559
559
 
560
560
 
561
561
  @RequestMapping("/api")
@@ -614,7 +614,7 @@ curl http://127.0.0.1:8080/actuator/info
614
614
 
615
615
  ```python
616
616
  # asgi.py
617
- from spring.main import create_app
617
+ from springbootai.main import create_app
618
618
  from demo.Application import Application
619
619
 
620
620
  app = create_app(Application)
@@ -685,7 +685,7 @@ database:
685
685
  ### 4.5 在代码里读配置
686
686
 
687
687
  ```python
688
- from spring.config import ConfigLoader
688
+ from springbootai.config import ConfigLoader
689
689
 
690
690
  loader = ConfigLoader("./myapp/application.yml")
691
691
  port = loader.get("server.port", 8080)
@@ -698,7 +698,7 @@ snapshot = loader.get_config()
698
698
  ### 4.6 Profile 的真实行为
699
699
 
700
700
  ```python
701
- from spring.annotations import Profile, Service
701
+ from springbootai.annotations import Profile, Service
702
702
 
703
703
 
704
704
  @Profile("dev")
@@ -760,7 +760,7 @@ Profile 用于 Bean 过滤和生产安全校验。多环境配置可使用以下
760
760
  | scan_base_packages | List[str] | None | 扫描的基础包路径 |
761
761
 
762
762
  ```python
763
- from spring.annotations import SpringBootApplication
763
+ from springbootai.annotations import SpringBootApplication
764
764
 
765
765
  @SpringBootApplication(scan_base_packages=["com.example.service", "com.example.controller"])
766
766
  class Application:
@@ -774,7 +774,7 @@ class Application:
774
774
  #### @Component / @Service / @Repository
775
775
 
776
776
  ```python
777
- from spring.annotations import Component, Service, Repository
777
+ from springbootai.annotations import Component, Service, Repository
778
778
 
779
779
  @Component
780
780
  class EmailUtil:
@@ -795,7 +795,7 @@ class UserRepository:
795
795
  #### @Autowired
796
796
 
797
797
  ```python
798
- from spring.annotations import Service, Autowired
798
+ from springbootai.annotations import Service, Autowired
799
799
 
800
800
  @Service
801
801
  class UserService:
@@ -818,7 +818,7 @@ class UserService:
818
818
  `@RestController` 组合了 `@Controller` 和 `@ResponseBody`,返回值自动序列化为 JSON。
819
819
 
820
820
  ```python
821
- from spring.annotations import RestController, GetMapping
821
+ from springbootai.annotations import RestController, GetMapping
822
822
 
823
823
  @RestController
824
824
  class UserController:
@@ -830,7 +830,7 @@ class UserController:
830
830
  #### @RequestMapping / @GetMapping / @PostMapping / @PutMapping / @PatchMapping / @DeleteMapping
831
831
 
832
832
  ```python
833
- from spring.annotations import RestController, GetMapping, PostMapping, PutMapping, PatchMapping, DeleteMapping
833
+ from springbootai.annotations import RestController, GetMapping, PostMapping, PutMapping, PatchMapping, DeleteMapping
834
834
 
835
835
  @RestController
836
836
  class UserController:
@@ -858,9 +858,9 @@ class UserController:
858
858
  #### @ControllerAdvice / @ExceptionHandler
859
859
 
860
860
  ```python
861
- from spring.annotations import ControllerAdvice, ExceptionHandler
861
+ from springbootai.annotations import ControllerAdvice, ExceptionHandler
862
862
 
863
- @ControllerAdvice
863
+ @ControllerAdvice()
864
864
  class GlobalExceptionHandler:
865
865
  @ExceptionHandler(ValueError, TypeError)
866
866
  def handle_validation_error(self, e: Exception):
@@ -891,7 +891,7 @@ class GlobalExceptionHandler:
891
891
  ### 5.5 配置与属性注解
892
892
 
893
893
  ```python
894
- from spring.annotations import Configuration, Bean, Service, Value, ConfigurationProperties, Component
894
+ from springbootai.annotations import Configuration, Bean, Service, Value, ConfigurationProperties, Component
895
895
 
896
896
  @Configuration
897
897
  class AppConfig:
@@ -906,7 +906,7 @@ class AppService:
906
906
  self.app_name = value
907
907
 
908
908
  @Component
909
- @ConfigurationProperties(prefix="spring.datasource")
909
+ @ConfigurationProperties(prefix="springbootai.datasource")
910
910
  class DataSourceProperties:
911
911
  def __init__(self):
912
912
  self.url = ""
@@ -917,7 +917,7 @@ class DataSourceProperties:
917
917
  ### 5.6 日志与生命周期
918
918
 
919
919
  ```python
920
- from spring.annotations import Service, Slf4j, PostConstruct, PreDestroy
920
+ from springbootai.annotations import Service, Slf4j, PostConstruct, PreDestroy
921
921
 
922
922
  @Service
923
923
  @Slf4j # 自动创建 self.logger
@@ -941,8 +941,8 @@ class InitService:
941
941
  ### 5.7 应用事件
942
942
 
943
943
  ```python
944
- from spring.annotations import ApplicationEvent, Autowired, EventListener, Service
945
- from spring.event import ApplicationEventPublisher
944
+ from springbootai.annotations import ApplicationEvent, Autowired, EventListener, Service
945
+ from springbootai.event import ApplicationEventPublisher
946
946
 
947
947
 
948
948
  class UserCreatedEvent(ApplicationEvent):
@@ -975,7 +975,7 @@ class UserService:
975
975
  **解决什么问题**:限制接口被调用的频率,防止被刷爆。
976
976
 
977
977
  ```python
978
- from spring.annotations import RateLimit, Service
978
+ from springbootai.annotations import RateLimit, Service
979
979
 
980
980
  @Service
981
981
  class OrderService:
@@ -995,7 +995,7 @@ class OrderService:
995
995
  **解决什么问题**:当某个方法持续失败时,暂时停止调用它("熔断"),等一段时间后再试。
996
996
 
997
997
  ```python
998
- from spring.annotations import CircuitBreaker, Service
998
+ from springbootai.annotations import CircuitBreaker, Service
999
999
 
1000
1000
  @Service
1001
1001
  class PaymentService:
@@ -1014,7 +1014,7 @@ class PaymentService:
1014
1014
  **解决什么问题**:用户手抖点了两次"下单",保证只有一次生效。
1015
1015
 
1016
1016
  ```python
1017
- from spring.annotations import Idempotent, Service
1017
+ from springbootai.annotations import Idempotent, Service
1018
1018
 
1019
1019
  @Service
1020
1020
  class OrderService:
@@ -1030,8 +1030,8 @@ class OrderService:
1030
1030
  ### 5.9 事务、缓存、任务与异步注解
1031
1031
 
1032
1032
  ```python
1033
- from spring.annotations import Service, Transactional, Cacheable, Retryable, Async, Scheduled
1034
- from spring.retry.retry_annotations import Backoff
1033
+ from springbootai.annotations import Service, Transactional, Cacheable, Retryable, Async, Scheduled
1034
+ from springbootai.retry.retry_annotations import Backoff
1035
1035
 
1036
1036
  @Service
1037
1037
  class OrderService:
@@ -1133,7 +1133,7 @@ def create(self, order_id: str, amount: float):
1133
1133
  ### 6.2 构造器注入(推荐方式)
1134
1134
 
1135
1135
  ```python
1136
- from spring.annotations import Autowired, Service
1136
+ from springbootai.annotations import Autowired, Service
1137
1137
 
1138
1138
 
1139
1139
  @Service
@@ -1158,7 +1158,7 @@ class UserService:
1158
1158
  ### 6.4 配置类和 @Bean
1159
1159
 
1160
1160
  ```python
1161
- from spring.annotations import Bean, Configuration
1161
+ from springbootai.annotations import Bean, Configuration
1162
1162
 
1163
1163
 
1164
1164
  @Configuration
@@ -1172,7 +1172,7 @@ class AppConfig:
1172
1172
  ### 6.5 生命周期
1173
1173
 
1174
1174
  ```python
1175
- from spring.annotations import Component, PostConstruct, PreDestroy
1175
+ from springbootai.annotations import Component, PostConstruct, PreDestroy
1176
1176
 
1177
1177
 
1178
1178
  @Component
@@ -1201,7 +1201,7 @@ class ResourceHolder:
1201
1201
  ### 7.1 类和方法映射
1202
1202
 
1203
1203
  ```python
1204
- from spring.annotations import (
1204
+ from springbootai.annotations import (
1205
1205
  DeleteMapping, GetMapping, PatchMapping, PostMapping, PutMapping,
1206
1206
  RequestMapping, RestController,
1207
1207
  )
@@ -1236,7 +1236,7 @@ class UserController:
1236
1236
  ### 7.2 统一返回值
1237
1237
 
1238
1238
  ```python
1239
- from spring.web import Result
1239
+ from springbootai.web import Result
1240
1240
 
1241
1241
  return Result.success({"id": 1}, message="创建成功")
1242
1242
  return Result.bad_request("姓名不能为空")
@@ -1246,12 +1246,12 @@ return Result.not_found("用户不存在")
1246
1246
  ### 7.3 全局异常处理 & CORS & 拦截器
1247
1247
 
1248
1248
  ```python
1249
- from spring.annotations import ControllerAdvice, ExceptionHandler, Component
1250
- from spring.web import Result
1251
- from spring.web.interceptor import HandlerInterceptor
1249
+ from springbootai.annotations import ControllerAdvice, ExceptionHandler, Component
1250
+ from springbootai.web import Result
1251
+ from springbootai.web.interceptor import HandlerInterceptor
1252
1252
 
1253
1253
 
1254
- @ControllerAdvice
1254
+ @ControllerAdvice()
1255
1255
  class GlobalExceptionHandler:
1256
1256
  @ExceptionHandler(ValueError)
1257
1257
  def handle_value_error(self, error: ValueError):
@@ -1292,7 +1292,7 @@ server:
1292
1292
  ### 9.1 Service 事务
1293
1293
 
1294
1294
  ```python
1295
- from spring.annotations import Autowired, Service, Transactional
1295
+ from springbootai.annotations import Autowired, Service, Transactional
1296
1296
 
1297
1297
 
1298
1298
  @Service
@@ -1354,7 +1354,7 @@ jwt:
1354
1354
  ### 10.2 access/refresh token
1355
1355
 
1356
1356
  ```python
1357
- from spring.security.jwt_utils import JwtUtils, jwt_utils
1357
+ from springbootai.security.jwt_utils import JwtUtils, jwt_utils
1358
1358
 
1359
1359
  access = jwt_utils.generate_token({"sub": "user-1"})
1360
1360
  refresh = jwt_utils.generate_refresh_token({"sub": "user-1"})
@@ -1367,7 +1367,7 @@ new_access = jwt_utils.refresh_token(refresh)
1367
1367
  ### 10.3 方法权限
1368
1368
 
1369
1369
  ```python
1370
- from spring.annotations import Authenticate, GetMapping, PreAuthorize, RequestMapping, RestController
1370
+ from springbootai.annotations import Authenticate, GetMapping, PreAuthorize, RequestMapping, RestController
1371
1371
 
1372
1372
 
1373
1373
  @RestController
@@ -1384,7 +1384,7 @@ class AdminController:
1384
1384
 
1385
1385
  ### 10.4 安全基线
1386
1386
 
1387
- - `SPRING_PROFILES_ACTIVE=production` + `STARTUP_FAIL_FAST=true`
1387
+ - `SPRING_PROFILES_ACTIVE=prod` + `STARTUP_FAIL_FAST=true`
1388
1388
  - `JWT_SECRET_KEY` 使用至少 32 字符的随机密钥
1389
1389
  - `CORS_ALLOW_CREDENTIALS=true` 时不能用 `*` 来源
1390
1390
  - SQL 值始终使用 `#{name}` 参数绑定
@@ -1396,7 +1396,7 @@ class AdminController:
1396
1396
  ### 11.1 @Cacheable
1397
1397
 
1398
1398
  ```python
1399
- from spring.annotations import Service, Cacheable
1399
+ from springbootai.annotations import Service, Cacheable
1400
1400
 
1401
1401
  @Service
1402
1402
  class UserService:
@@ -1410,8 +1410,8 @@ class UserService:
1410
1410
  ### 11.2 @Retryable
1411
1411
 
1412
1412
  ```python
1413
- from spring.annotations import Retryable
1414
- from spring.retry.retry_annotations import Backoff
1413
+ from springbootai.annotations import Retryable
1414
+ from springbootai.retry.retry_annotations import Backoff
1415
1415
 
1416
1416
  @Retryable(value=(ConnectionError,), max_retries=3, backoff=Backoff(delay=1000, multiplier=2.0))
1417
1417
  def call_remote(self):
@@ -1423,7 +1423,7 @@ def call_remote(self):
1423
1423
  重试耗尽后可以使用 `@Recover`:
1424
1424
 
1425
1425
  ```python
1426
- from spring.annotations import Recover, Retryable
1426
+ from springbootai.annotations import Recover, Retryable
1427
1427
 
1428
1428
  @Retryable(value=(ConnectionError,), max_attempts=3, backoff=200)
1429
1429
  def call_remote(self, key):
@@ -1439,7 +1439,7 @@ def recover_remote(self, error, key):
1439
1439
  ### 11.3 @Async & @Scheduled
1440
1440
 
1441
1441
  ```python
1442
- from spring.annotations import Service, Async, Scheduled
1442
+ from springbootai.annotations import Service, Async, Scheduled
1443
1443
 
1444
1444
  @Service
1445
1445
  class EmailService:
@@ -1480,14 +1480,14 @@ class CleanupJob:
1480
1480
 
1481
1481
  > 完整文档:[LANGCHAIN_MODULE.md](https://github.com/YUCONGGEN/springbootAI/blob/master/doc/LANGCHAIN_MODULE.md)。安装:`pip install springbootAI[langchain]`。
1482
1482
  >
1483
- > 封装 langchain classic 全套:Chains / Agents(6 种) / Memory / Retrievers / VectorStores / Parsers / Loaders + 30+ 提供商。双向适配器复用 `spring.ai` 的模型 Bean。
1483
+ > 封装 langchain classic 全套:Chains / Agents(6 种) / Memory / Retrievers / VectorStores / Parsers / Loaders + 30+ 提供商。双向适配器复用 `springbootai.ai` 的模型 Bean。
1484
1484
 
1485
1485
  **最小示例**(无需 API Key):
1486
1486
 
1487
1487
  ```python
1488
- from spring.context.registry import BeanRegistry
1489
- from spring.ai.autoconfig import configure_ai
1490
- from spring.langchain.autoconfig import configure_langchain
1488
+ from springbootai.context.registry import BeanRegistry
1489
+ from springbootai.ai.autoconfig import configure_ai
1490
+ from springbootai.langchain.autoconfig import configure_langchain
1491
1491
 
1492
1492
  registry = BeanRegistry()
1493
1493
  configure_ai(registry=registry)
@@ -1539,7 +1539,7 @@ print(chain.run_llm_chain("回答: {q}", q="你好"))
1539
1539
  **推荐构造器注入**:
1540
1540
 
1541
1541
  ```python
1542
- from spring.annotations import Autowired, Service
1542
+ from springbootai.annotations import Autowired, Service
1543
1543
 
1544
1544
  @Service
1545
1545
  class UserService:
@@ -1575,7 +1575,7 @@ Python:
1575
1575
  ```python
1576
1576
  from dataclasses import dataclass
1577
1577
  from typing import Optional
1578
- from spring.orm import Mapper, Param, Select
1578
+ from springbootai.orm import Mapper, Param, Select
1579
1579
 
1580
1580
 
1581
1581
  @dataclass
@@ -1596,7 +1596,7 @@ class UserMapper:
1596
1596
  | Java | SpringBootAI | 说明 |
1597
1597
  |---|---|---|
1598
1598
  | `@EnableDiscoveryClient` + Nacos | `@EnableDiscoveryClient` + `discovery` 配置 | 需部署 Nacos 并做集成测试 |
1599
- | `@FeignClient` | 同名 + `spring.cloud.feign` | 不兼容 Java interface proxy |
1599
+ | `@FeignClient` | 同名 + `springbootai.cloud.feign` | 不兼容 Java interface proxy |
1600
1600
  | `@SentinelResource` | 同名 | 已内嵌引擎,无需 Dashboard |
1601
1601
  | JPA `hibernate.ddl-auto` | `@entity` + `ddl-auto` 配置 | 支持 create/update/validate/create-drop |
1602
1602
 
@@ -1664,7 +1664,7 @@ database:
1664
1664
 
1665
1665
  **生产启动**:
1666
1666
  ```bash
1667
- export SPRING_PROFILES_ACTIVE=production
1667
+ export SPRING_PROFILES_ACTIVE=prod
1668
1668
  export JWT_SECRET_KEY="使用密钥管理系统注入至少32字符的随机值"
1669
1669
  export STARTUP_FAIL_FAST=true
1670
1670
  uvicorn myapp.asgi:app --host 0.0.0.0 --port 8080 --workers 4
@@ -1772,7 +1772,7 @@ python -m pytest -q tests
1772
1772
 
1773
1773
  ### 17.5 生产启动拒绝 JWT
1774
1774
 
1775
- 设置 `SPRING_PROFILES_ACTIVE=production`、`STARTUP_FAIL_FAST=true`、`JWT_SECRET_KEY=<至少32字符随机密钥>`。
1775
+ 设置 `SPRING_PROFILES_ACTIVE=prod`、`STARTUP_FAIL_FAST=true`、`JWT_SECRET_KEY=<至少32字符随机密钥>`。
1776
1776
 
1777
1777
  ### 17.6 Nacos / PATCH / 配置同步排错
1778
1778
 
@@ -1961,7 +1961,7 @@ pip install springbootAI[langgraph]
1961
1961
  pip install -r requirements-langgraph.txt
1962
1962
  ```
1963
1963
 
1964
- 完整的小白入门、配置说明、`spring.ai` 模型复用、持久化 checkpointer、异步调用和测试命令请阅读 [LANGGRAPH_MODULE.md](https://github.com/YUCONGGEN/springbootAI/blob/master/doc/LANGGRAPH_MODULE.md)。可选依赖已包含官方 SQLite checkpointer,适合本地单进程恢复测试;多 worker 生产环境必须注入共享数据库后端。无 LangGraph 依赖时保持 `spring.langgraph.enabled=false`,不会影响其他模块。
1964
+ 完整的小白入门、配置说明、`springbootai.ai` 模型复用、持久化 checkpointer、异步调用和测试命令请阅读 [LANGGRAPH_MODULE.md](https://github.com/YUCONGGEN/springbootAI/blob/master/doc/LANGGRAPH_MODULE.md)。可选依赖已包含官方 SQLite checkpointer,适合本地单进程恢复测试;多 worker 生产环境必须注入共享数据库后端。无 LangGraph 依赖时保持 `springbootai.langgraph.enabled=false`,不会影响其他模块。
1965
1965
 
1966
1966
  ## MCP 客户端与服务端
1967
1967