springbootAI 2.3.7__tar.gz → 2.3.9__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.
- {springbootai-2.3.7 → springbootai-2.3.9}/CHANGELOG.md +19 -0
- {springbootai-2.3.7/springbootAI.egg-info → springbootai-2.3.9}/PKG-INFO +62 -78
- {springbootai-2.3.7 → springbootai-2.3.9}/README.md +61 -77
- {springbootai-2.3.7 → springbootai-2.3.9}/pyproject.toml +2 -1
- {springbootai-2.3.7 → springbootai-2.3.9/springbootAI.egg-info}/PKG-INFO +62 -78
- {springbootai-2.3.7 → springbootai-2.3.9}/springbootAI.egg-info/SOURCES.txt +11 -0
- {springbootai-2.3.7 → springbootai-2.3.9}/springbootai/__init__.py +1 -1
- {springbootai-2.3.7 → springbootai-2.3.9}/springbootai/ai/__init__.py +15 -7
- {springbootai-2.3.7 → springbootai-2.3.9}/springbootai/ai/advisors.py +55 -10
- {springbootai-2.3.7 → springbootai-2.3.9}/springbootai/ai/annotation_runtime.py +304 -43
- {springbootai-2.3.7 → springbootai-2.3.9}/springbootai/ai/annotations.py +20 -3
- {springbootai-2.3.7 → springbootai-2.3.9}/springbootai/ai/autoconfig.py +53 -4
- {springbootai-2.3.7 → springbootai-2.3.9}/springbootai/ai/core.py +154 -30
- {springbootai-2.3.7 → springbootai-2.3.9}/springbootai/ai/etl.py +73 -12
- {springbootai-2.3.7 → springbootai-2.3.9}/springbootai/ai/memory.py +50 -26
- springbootai-2.3.9/springbootai/ai/providers.py +1521 -0
- {springbootai-2.3.7 → springbootai-2.3.9}/springbootai/ai/resilience.py +22 -9
- {springbootai-2.3.7 → springbootai-2.3.9}/springbootai/ai/tools.py +100 -10
- {springbootai-2.3.7 → springbootai-2.3.9}/springbootai/ai/vectorstore.py +41 -3
- {springbootai-2.3.7 → springbootai-2.3.9}/springbootai/annotations/core.py +4 -1
- {springbootai-2.3.7 → springbootai-2.3.9}/springbootai/cli/scaffold.py +40 -4
- {springbootai-2.3.7 → springbootai-2.3.9}/springbootai/cloud/__init__.py +4 -1
- {springbootai-2.3.7 → springbootai-2.3.9}/springbootai/cloud/bus.py +64 -12
- springbootai-2.3.9/springbootai/cloud/config_center.py +633 -0
- {springbootai-2.3.7 → springbootai-2.3.9}/springbootai/cloud/discovery.py +213 -58
- springbootai-2.3.9/springbootai/cloud/feign.py +608 -0
- springbootai-2.3.9/springbootai/cloud/gateway.py +880 -0
- {springbootai-2.3.7 → springbootai-2.3.9}/springbootai/cloud/nacos_config.py +158 -88
- {springbootai-2.3.7 → springbootai-2.3.9}/springbootai/cloud/seata.py +176 -47
- {springbootai-2.3.7 → springbootai-2.3.9}/springbootai/config/__init__.py +4 -0
- {springbootai-2.3.7 → springbootai-2.3.9}/springbootai/config/config_loader.py +400 -48
- springbootai-2.3.9/springbootai/config/config_monitor.py +248 -0
- {springbootai-2.3.7 → springbootai-2.3.9}/springbootai/config/spring-configuration-metadata.json +25 -1
- {springbootai-2.3.7 → springbootai-2.3.9}/springbootai/csv/__init__.py +1 -1
- {springbootai-2.3.7 → springbootai-2.3.9}/springbootai/data/__init__.py +1 -1
- {springbootai-2.3.7 → springbootai-2.3.9}/springbootai/datasource/__init__.py +1 -1
- springbootai-2.3.9/springbootai/devtools.py +243 -0
- {springbootai-2.3.7 → springbootai-2.3.9}/springbootai/excel/__init__.py +1 -1
- {springbootai-2.3.7 → springbootai-2.3.9}/springbootai/i18n/__init__.py +1 -1
- {springbootai-2.3.7 → springbootai-2.3.9}/springbootai/langchain/__init__.py +1 -1
- {springbootai-2.3.7 → springbootai-2.3.9}/springbootai/langchain/autoconfig.py +92 -1
- springbootai-2.3.9/springbootai/logging/__init__.py +13 -0
- springbootai-2.3.9/springbootai/logging/context.py +213 -0
- {springbootai-2.3.7 → springbootai-2.3.9}/springbootai/logging/loguru_logger.py +107 -13
- {springbootai-2.3.7 → springbootai-2.3.9}/springbootai/main.py +163 -46
- {springbootai-2.3.7 → springbootai-2.3.9}/springbootai/mcp/client.py +50 -14
- {springbootai-2.3.7 → springbootai-2.3.9}/springbootai/mcp/config.py +4 -2
- {springbootai-2.3.7 → springbootai-2.3.9}/springbootai/messaging/rabbitmq.py +172 -4
- springbootai-2.3.9/springbootai/monitoring/admin_client.py +266 -0
- {springbootai-2.3.7 → springbootai-2.3.9}/springbootai/orm/pymybatis/__init__.py +1 -1
- {springbootai-2.3.7 → springbootai-2.3.9}/springbootai/orm/pymybatis/version.py +1 -1
- {springbootai-2.3.7 → springbootai-2.3.9}/springbootai/test/__init__.py +1 -1
- {springbootai-2.3.7 → springbootai-2.3.9}/springbootai/tracing/skywalking.py +72 -27
- {springbootai-2.3.7 → springbootai-2.3.9}/springbootai/tx/__init__.py +1 -1
- {springbootai-2.3.7 → springbootai-2.3.9}/springbootai/utils/banner.py +2 -2
- {springbootai-2.3.7 → springbootai-2.3.9}/springbootai/utils/redis_client.py +33 -9
- {springbootai-2.3.7 → springbootai-2.3.9}/springbootai/validation/__init__.py +1 -1
- {springbootai-2.3.7 → springbootai-2.3.9}/springbootai/web/actuator.py +72 -3
- {springbootai-2.3.7 → springbootai-2.3.9}/springbootai/web/request_metrics.py +21 -5
- {springbootai-2.3.7 → springbootai-2.3.9}/springbootai/web/swagger.py +1 -1
- {springbootai-2.3.7 → springbootai-2.3.9}/springbootai/web/web_context.py +73 -12
- {springbootai-2.3.7 → springbootai-2.3.9}/springbootai/websocket/__init__.py +1 -1
- springbootai-2.3.9/tests/test_ai_annotations.py +201 -0
- {springbootai-2.3.7 → springbootai-2.3.9}/tests/test_ai_comprehensive.py +9 -5
- springbootai-2.3.9/tests/test_ai_enterprise_hardening.py +349 -0
- {springbootai-2.3.7 → springbootai-2.3.9}/tests/test_ai_module.py +7 -8
- springbootai-2.3.9/tests/test_ai_stream_hardening.py +461 -0
- springbootai-2.3.9/tests/test_cloud_log_safety.py +260 -0
- springbootai-2.3.9/tests/test_config_admin_hardening.py +207 -0
- {springbootai-2.3.7 → springbootai-2.3.9}/tests/test_config_center.py +25 -0
- springbootai-2.3.9/tests/test_config_center_hardening.py +84 -0
- {springbootai-2.3.7 → springbootai-2.3.9}/tests/test_config_fixes_185.py +19 -0
- springbootai-2.3.9/tests/test_config_monitor.py +52 -0
- springbootai-2.3.9/tests/test_devtools_lifecycle_hardening.py +193 -0
- springbootai-2.3.9/tests/test_io_http_logging_hardening.py +847 -0
- {springbootai-2.3.7 → springbootai-2.3.9}/tests/test_langchain_module.py +14 -0
- {springbootai-2.3.7 → springbootai-2.3.9}/tests/test_nacos_config.py +35 -0
- springbootai-2.3.9/tests/test_optional_component_timeouts.py +110 -0
- {springbootai-2.3.7 → springbootai-2.3.9}/tests/test_runtime_configuration_fixes.py +22 -0
- {springbootai-2.3.7 → springbootai-2.3.9}/tests/test_tracing.py +3 -6
- springbootai-2.3.7/springbootai/ai/providers.py +0 -881
- springbootai-2.3.7/springbootai/cloud/config_center.py +0 -393
- springbootai-2.3.7/springbootai/cloud/feign.py +0 -469
- springbootai-2.3.7/springbootai/cloud/gateway.py +0 -542
- springbootai-2.3.7/springbootai/devtools.py +0 -153
- springbootai-2.3.7/springbootai/logging/__init__.py +0 -1
- springbootai-2.3.7/springbootai/monitoring/admin_client.py +0 -77
- springbootai-2.3.7/tests/test_ai_annotations.py +0 -100
- {springbootai-2.3.7 → springbootai-2.3.9}/LICENSE +0 -0
- {springbootai-2.3.7 → springbootai-2.3.9}/MANIFEST.in +0 -0
- {springbootai-2.3.7 → springbootai-2.3.9}/SECURITY.md +0 -0
- {springbootai-2.3.7 → springbootai-2.3.9}/requirements-ai.txt +0 -0
- {springbootai-2.3.7 → springbootai-2.3.9}/requirements-langgraph.txt +0 -0
- {springbootai-2.3.7 → springbootai-2.3.9}/requirements-mcp.txt +0 -0
- {springbootai-2.3.7 → springbootai-2.3.9}/requirements.txt +0 -0
- {springbootai-2.3.7 → springbootai-2.3.9}/setup.cfg +0 -0
- {springbootai-2.3.7 → springbootai-2.3.9}/setup.py +0 -0
- {springbootai-2.3.7 → springbootai-2.3.9}/springbootAI.egg-info/dependency_links.txt +0 -0
- {springbootai-2.3.7 → springbootai-2.3.9}/springbootAI.egg-info/entry_points.txt +0 -0
- {springbootai-2.3.7 → springbootai-2.3.9}/springbootAI.egg-info/requires.txt +0 -0
- {springbootai-2.3.7 → springbootai-2.3.9}/springbootAI.egg-info/top_level.txt +0 -0
- {springbootai-2.3.7 → springbootai-2.3.9}/springbootai/ai/observability.py +0 -0
- {springbootai-2.3.7 → springbootai-2.3.9}/springbootai/annotations/__init__.py +0 -0
- {springbootai-2.3.7 → springbootai-2.3.9}/springbootai/annotations/batch.py +0 -0
- {springbootai-2.3.7 → springbootai-2.3.9}/springbootai/annotations/cache.py +0 -0
- {springbootai-2.3.7 → springbootai-2.3.9}/springbootai/annotations/cloud.py +0 -0
- {springbootai-2.3.7 → springbootai-2.3.9}/springbootai/annotations/conditional.py +0 -0
- {springbootai-2.3.7 → springbootai-2.3.9}/springbootai/annotations/data.py +0 -0
- {springbootai-2.3.7 → springbootai-2.3.9}/springbootai/annotations/enterprise.py +0 -0
- {springbootai-2.3.7 → springbootai-2.3.9}/springbootai/annotations/langchain.py +0 -0
- {springbootai-2.3.7 → springbootai-2.3.9}/springbootai/annotations/langgraph.py +0 -0
- {springbootai-2.3.7 → springbootai-2.3.9}/springbootai/annotations/lombok.py +0 -0
- {springbootai-2.3.7 → springbootai-2.3.9}/springbootai/annotations/messaging.py +0 -0
- {springbootai-2.3.7 → springbootai-2.3.9}/springbootai/annotations/security.py +0 -0
- {springbootai-2.3.7 → springbootai-2.3.9}/springbootai/aop/__init__.py +0 -0
- {springbootai-2.3.7 → springbootai-2.3.9}/springbootai/aop/aspect.py +0 -0
- {springbootai-2.3.7 → springbootai-2.3.9}/springbootai/aop/cloud_aop.py +0 -0
- {springbootai-2.3.7 → springbootai-2.3.9}/springbootai/aop/comprehensive_aop.py +0 -0
- {springbootai-2.3.7 → springbootai-2.3.9}/springbootai/aop/method_interceptor.py +0 -0
- {springbootai-2.3.7 → springbootai-2.3.9}/springbootai/aop/proxy_factory.py +0 -0
- {springbootai-2.3.7 → springbootai-2.3.9}/springbootai/batch/__init__.py +0 -0
- {springbootai-2.3.7 → springbootai-2.3.9}/springbootai/cli/__init__.py +0 -0
- {springbootai-2.3.7 → springbootai-2.3.9}/springbootai/cli/main.py +0 -0
- {springbootai-2.3.7 → springbootai-2.3.9}/springbootai/cloud/load_balancer.py +0 -0
- {springbootai-2.3.7 → springbootai-2.3.9}/springbootai/cloud/seata_at_proxy.py +0 -0
- {springbootai-2.3.7 → springbootai-2.3.9}/springbootai/cloud/seata_bridge.py +0 -0
- {springbootai-2.3.7 → springbootai-2.3.9}/springbootai/cloud/sentinel.py +0 -0
- {springbootai-2.3.7 → springbootai-2.3.9}/springbootai/cloud/tracer.py +0 -0
- {springbootai-2.3.7 → springbootai-2.3.9}/springbootai/cloud/transaction_store.py +0 -0
- {springbootai-2.3.7 → springbootai-2.3.9}/springbootai/config/binding.py +0 -0
- {springbootai-2.3.7 → springbootai-2.3.9}/springbootai/context/__init__.py +0 -0
- {springbootai-2.3.7 → springbootai-2.3.9}/springbootai/context/application_context.py +0 -0
- {springbootai-2.3.7 → springbootai-2.3.9}/springbootai/context/bean_definition.py +0 -0
- {springbootai-2.3.7 → springbootai-2.3.9}/springbootai/context/bean_factory.py +0 -0
- {springbootai-2.3.7 → springbootai-2.3.9}/springbootai/context/lifecycle.py +0 -0
- {springbootai-2.3.7 → springbootai-2.3.9}/springbootai/context/registry.py +0 -0
- {springbootai-2.3.7 → springbootai-2.3.9}/springbootai/context/scanner.py +0 -0
- {springbootai-2.3.7 → springbootai-2.3.9}/springbootai/core/__init__.py +0 -0
- {springbootai-2.3.7 → springbootai-2.3.9}/springbootai/core/graceful_shutdown.py +0 -0
- {springbootai-2.3.7 → springbootai-2.3.9}/springbootai/core/typing_utils.py +0 -0
- {springbootai-2.3.7 → springbootai-2.3.9}/springbootai/csv/annotations.py +0 -0
- {springbootai-2.3.7 → springbootai-2.3.9}/springbootai/csv/converters.py +0 -0
- {springbootai-2.3.7 → springbootai-2.3.9}/springbootai/csv/easy_csv.py +0 -0
- {springbootai-2.3.7 → springbootai-2.3.9}/springbootai/csv/exceptions.py +0 -0
- {springbootai-2.3.7 → springbootai-2.3.9}/springbootai/csv/reader.py +0 -0
- {springbootai-2.3.7 → springbootai-2.3.9}/springbootai/csv/writer.py +0 -0
- {springbootai-2.3.7 → springbootai-2.3.9}/springbootai/data/page.py +0 -0
- {springbootai-2.3.7 → springbootai-2.3.9}/springbootai/data/repository.py +0 -0
- {springbootai-2.3.7 → springbootai-2.3.9}/springbootai/data/rest.py +0 -0
- {springbootai-2.3.7 → springbootai-2.3.9}/springbootai/data/specification.py +0 -0
- {springbootai-2.3.7 → springbootai-2.3.9}/springbootai/datasource/annotations.py +0 -0
- {springbootai-2.3.7 → springbootai-2.3.9}/springbootai/datasource/context.py +0 -0
- {springbootai-2.3.7 → springbootai-2.3.9}/springbootai/datasource/dynamic.py +0 -0
- {springbootai-2.3.7 → springbootai-2.3.9}/springbootai/event/__init__.py +0 -0
- {springbootai-2.3.7 → springbootai-2.3.9}/springbootai/event/publisher.py +0 -0
- {springbootai-2.3.7 → springbootai-2.3.9}/springbootai/excel/annotations.py +0 -0
- {springbootai-2.3.7 → springbootai-2.3.9}/springbootai/excel/converters.py +0 -0
- {springbootai-2.3.7 → springbootai-2.3.9}/springbootai/excel/easy_excel.py +0 -0
- {springbootai-2.3.7 → springbootai-2.3.9}/springbootai/excel/exceptions.py +0 -0
- {springbootai-2.3.7 → springbootai-2.3.9}/springbootai/excel/reader.py +0 -0
- {springbootai-2.3.7 → springbootai-2.3.9}/springbootai/excel/style.py +0 -0
- {springbootai-2.3.7 → springbootai-2.3.9}/springbootai/excel/writer.py +0 -0
- {springbootai-2.3.7 → springbootai-2.3.9}/springbootai/i18n/accessor.py +0 -0
- {springbootai-2.3.7 → springbootai-2.3.9}/springbootai/i18n/auto_config.py +0 -0
- {springbootai-2.3.7 → springbootai-2.3.9}/springbootai/i18n/holder.py +0 -0
- {springbootai-2.3.7 → springbootai-2.3.9}/springbootai/i18n/locale.py +0 -0
- {springbootai-2.3.7 → springbootai-2.3.9}/springbootai/i18n/locale_resolver.py +0 -0
- {springbootai-2.3.7 → springbootai-2.3.9}/springbootai/i18n/message_source.py +0 -0
- {springbootai-2.3.7 → springbootai-2.3.9}/springbootai/i18n/middleware.py +0 -0
- {springbootai-2.3.7 → springbootai-2.3.9}/springbootai/i18n/properties.py +0 -0
- {springbootai-2.3.7 → springbootai-2.3.9}/springbootai/i18n/sources.py +0 -0
- {springbootai-2.3.7 → springbootai-2.3.9}/springbootai/langchain/adapters.py +0 -0
- {springbootai-2.3.7 → springbootai-2.3.9}/springbootai/langchain/agents/__init__.py +0 -0
- {springbootai-2.3.7 → springbootai-2.3.9}/springbootai/langchain/agents/services.py +0 -0
- {springbootai-2.3.7 → springbootai-2.3.9}/springbootai/langchain/annotations.py +0 -0
- {springbootai-2.3.7 → springbootai-2.3.9}/springbootai/langchain/callbacks/__init__.py +0 -0
- {springbootai-2.3.7 → springbootai-2.3.9}/springbootai/langchain/callbacks/handlers.py +0 -0
- {springbootai-2.3.7 → springbootai-2.3.9}/springbootai/langchain/chains/__init__.py +0 -0
- {springbootai-2.3.7 → springbootai-2.3.9}/springbootai/langchain/chains/services.py +0 -0
- {springbootai-2.3.7 → springbootai-2.3.9}/springbootai/langchain/core.py +0 -0
- {springbootai-2.3.7 → springbootai-2.3.9}/springbootai/langchain/indexes/__init__.py +0 -0
- {springbootai-2.3.7 → springbootai-2.3.9}/springbootai/langchain/indexes/index.py +0 -0
- {springbootai-2.3.7 → springbootai-2.3.9}/springbootai/langchain/loaders/__init__.py +0 -0
- {springbootai-2.3.7 → springbootai-2.3.9}/springbootai/langchain/loaders/loaders.py +0 -0
- {springbootai-2.3.7 → springbootai-2.3.9}/springbootai/langchain/memory/__init__.py +0 -0
- {springbootai-2.3.7 → springbootai-2.3.9}/springbootai/langchain/memory/memory.py +0 -0
- {springbootai-2.3.7 → springbootai-2.3.9}/springbootai/langchain/parsers/__init__.py +0 -0
- {springbootai-2.3.7 → springbootai-2.3.9}/springbootai/langchain/parsers/parsers.py +0 -0
- {springbootai-2.3.7 → springbootai-2.3.9}/springbootai/langchain/partners.py +0 -0
- {springbootai-2.3.7 → springbootai-2.3.9}/springbootai/langchain/prompts/__init__.py +0 -0
- {springbootai-2.3.7 → springbootai-2.3.9}/springbootai/langchain/prompts/templates.py +0 -0
- {springbootai-2.3.7 → springbootai-2.3.9}/springbootai/langchain/retrievers/__init__.py +0 -0
- {springbootai-2.3.7 → springbootai-2.3.9}/springbootai/langchain/retrievers/retrievers.py +0 -0
- {springbootai-2.3.7 → springbootai-2.3.9}/springbootai/langchain/tools/__init__.py +0 -0
- {springbootai-2.3.7 → springbootai-2.3.9}/springbootai/langchain/tools/tools.py +0 -0
- {springbootai-2.3.7 → springbootai-2.3.9}/springbootai/langchain/utilities/__init__.py +0 -0
- {springbootai-2.3.7 → springbootai-2.3.9}/springbootai/langchain/utilities/utils.py +0 -0
- {springbootai-2.3.7 → springbootai-2.3.9}/springbootai/langchain/vectorstores/__init__.py +0 -0
- {springbootai-2.3.7 → springbootai-2.3.9}/springbootai/langchain/vectorstores/stores.py +0 -0
- {springbootai-2.3.7 → springbootai-2.3.9}/springbootai/langgraph/__init__.py +0 -0
- {springbootai-2.3.7 → springbootai-2.3.9}/springbootai/langgraph/annotation_runtime.py +0 -0
- {springbootai-2.3.7 → springbootai-2.3.9}/springbootai/langgraph/annotations.py +0 -0
- {springbootai-2.3.7 → springbootai-2.3.9}/springbootai/langgraph/autoconfig.py +0 -0
- {springbootai-2.3.7 → springbootai-2.3.9}/springbootai/langgraph/checkpoint.py +0 -0
- {springbootai-2.3.7 → springbootai-2.3.9}/springbootai/langgraph/config.py +0 -0
- {springbootai-2.3.7 → springbootai-2.3.9}/springbootai/langgraph/runtime.py +0 -0
- {springbootai-2.3.7 → springbootai-2.3.9}/springbootai/mcp/__init__.py +0 -0
- {springbootai-2.3.7 → springbootai-2.3.9}/springbootai/mcp/annotation_runtime.py +0 -0
- {springbootai-2.3.7 → springbootai-2.3.9}/springbootai/mcp/annotations.py +0 -0
- {springbootai-2.3.7 → springbootai-2.3.9}/springbootai/mcp/autoconfig.py +0 -0
- {springbootai-2.3.7 → springbootai-2.3.9}/springbootai/mcp/server.py +0 -0
- {springbootai-2.3.7 → springbootai-2.3.9}/springbootai/messaging/__init__.py +0 -0
- {springbootai-2.3.7 → springbootai-2.3.9}/springbootai/messaging/kafka.py +0 -0
- {springbootai-2.3.7 → springbootai-2.3.9}/springbootai/monitoring/__init__.py +0 -0
- {springbootai-2.3.7 → springbootai-2.3.9}/springbootai/monitoring/prometheus.py +0 -0
- {springbootai-2.3.7 → springbootai-2.3.9}/springbootai/orm/__init__.py +0 -0
- {springbootai-2.3.7 → springbootai-2.3.9}/springbootai/orm/database.py +0 -0
- {springbootai-2.3.7 → springbootai-2.3.9}/springbootai/orm/ddl_auto.py +0 -0
- {springbootai-2.3.7 → springbootai-2.3.9}/springbootai/orm/migration.py +0 -0
- {springbootai-2.3.7 → springbootai-2.3.9}/springbootai/orm/mybatis_integration.py +0 -0
- {springbootai-2.3.7 → springbootai-2.3.9}/springbootai/orm/pymybatis/annotations/__init__.py +0 -0
- {springbootai-2.3.7 → springbootai-2.3.9}/springbootai/orm/pymybatis/annotations/annotations.py +0 -0
- {springbootai-2.3.7 → springbootai-2.3.9}/springbootai/orm/pymybatis/cache/__init__.py +0 -0
- {springbootai-2.3.7 → springbootai-2.3.9}/springbootai/orm/pymybatis/cache/cache.py +0 -0
- {springbootai-2.3.7 → springbootai-2.3.9}/springbootai/orm/pymybatis/cache/redis_cache.py +0 -0
- {springbootai-2.3.7 → springbootai-2.3.9}/springbootai/orm/pymybatis/circuit_breaker/__init__.py +0 -0
- {springbootai-2.3.7 → springbootai-2.3.9}/springbootai/orm/pymybatis/circuit_breaker/circuit_breaker.py +0 -0
- {springbootai-2.3.7 → springbootai-2.3.9}/springbootai/orm/pymybatis/configuration.py +0 -0
- {springbootai-2.3.7 → springbootai-2.3.9}/springbootai/orm/pymybatis/core/__init__.py +0 -0
- {springbootai-2.3.7 → springbootai-2.3.9}/springbootai/orm/pymybatis/core/sql_session.py +0 -0
- {springbootai-2.3.7 → springbootai-2.3.9}/springbootai/orm/pymybatis/core/sql_session_factory.py +0 -0
- {springbootai-2.3.7 → springbootai-2.3.9}/springbootai/orm/pymybatis/dialect/__init__.py +0 -0
- {springbootai-2.3.7 → springbootai-2.3.9}/springbootai/orm/pymybatis/dialect/dialect.py +0 -0
- {springbootai-2.3.7 → springbootai-2.3.9}/springbootai/orm/pymybatis/dynamic_sql/__init__.py +0 -0
- {springbootai-2.3.7 → springbootai-2.3.9}/springbootai/orm/pymybatis/dynamic_sql/dynamic_sql.py +0 -0
- {springbootai-2.3.7 → springbootai-2.3.9}/springbootai/orm/pymybatis/interceptor/__init__.py +0 -0
- {springbootai-2.3.7 → springbootai-2.3.9}/springbootai/orm/pymybatis/interceptor/interceptor.py +0 -0
- {springbootai-2.3.7 → springbootai-2.3.9}/springbootai/orm/pymybatis/mapper/__init__.py +0 -0
- {springbootai-2.3.7 → springbootai-2.3.9}/springbootai/orm/pymybatis/mapper/mapper.py +0 -0
- {springbootai-2.3.7 → springbootai-2.3.9}/springbootai/orm/pymybatis/metrics/__init__.py +0 -0
- {springbootai-2.3.7 → springbootai-2.3.9}/springbootai/orm/pymybatis/metrics/metrics.py +0 -0
- {springbootai-2.3.7 → springbootai-2.3.9}/springbootai/orm/pymybatis/pool/__init__.py +0 -0
- {springbootai-2.3.7 → springbootai-2.3.9}/springbootai/orm/pymybatis/pool/connection_pool.py +0 -0
- {springbootai-2.3.7 → springbootai-2.3.9}/springbootai/orm/pymybatis/security/__init__.py +0 -0
- {springbootai-2.3.7 → springbootai-2.3.9}/springbootai/orm/pymybatis/security/access_control.py +0 -0
- {springbootai-2.3.7 → springbootai-2.3.9}/springbootai/orm/pymybatis/security/password_encoder.py +0 -0
- {springbootai-2.3.7 → springbootai-2.3.9}/springbootai/orm/pymybatis/security/sensitive_data_masker.py +0 -0
- {springbootai-2.3.7 → springbootai-2.3.9}/springbootai/orm/pymybatis/security/sql_injection_detector.py +0 -0
- {springbootai-2.3.7 → springbootai-2.3.9}/springbootai/orm/pymybatis/transaction/__init__.py +0 -0
- {springbootai-2.3.7 → springbootai-2.3.9}/springbootai/orm/pymybatis/transaction/transaction.py +0 -0
- {springbootai-2.3.7 → springbootai-2.3.9}/springbootai/orm/pymybatis/type_handler/__init__.py +0 -0
- {springbootai-2.3.7 → springbootai-2.3.9}/springbootai/orm/pymybatis/type_handler/type_handler.py +0 -0
- {springbootai-2.3.7 → springbootai-2.3.9}/springbootai/orm/pymybatis/xml_parser/__init__.py +0 -0
- {springbootai-2.3.7 → springbootai-2.3.9}/springbootai/orm/pymybatis/xml_parser/xml_parser.py +0 -0
- {springbootai-2.3.7 → springbootai-2.3.9}/springbootai/retry/__init__.py +0 -0
- {springbootai-2.3.7 → springbootai-2.3.9}/springbootai/retry/recovery.py +0 -0
- {springbootai-2.3.7 → springbootai-2.3.9}/springbootai/retry/retry_annotations.py +0 -0
- {springbootai-2.3.7 → springbootai-2.3.9}/springbootai/retry/retry_decorator.py +0 -0
- {springbootai-2.3.7 → springbootai-2.3.9}/springbootai/scheduling/__init__.py +0 -0
- {springbootai-2.3.7 → springbootai-2.3.9}/springbootai/scheduling/scheduler.py +0 -0
- {springbootai-2.3.7 → springbootai-2.3.9}/springbootai/security/__init__.py +0 -0
- {springbootai-2.3.7 → springbootai-2.3.9}/springbootai/security/jwt_utils.py +0 -0
- {springbootai-2.3.7 → springbootai-2.3.9}/springbootai/security/oauth2.py +0 -0
- {springbootai-2.3.7 → springbootai-2.3.9}/springbootai/security/replay_protection.py +0 -0
- {springbootai-2.3.7 → springbootai-2.3.9}/springbootai/security/secret_manager.py +0 -0
- {springbootai-2.3.7 → springbootai-2.3.9}/springbootai/security/security_aop.py +0 -0
- {springbootai-2.3.7 → springbootai-2.3.9}/springbootai/security/security_context.py +0 -0
- {springbootai-2.3.7 → springbootai-2.3.9}/springbootai/test/slicing.py +0 -0
- {springbootai-2.3.7 → springbootai-2.3.9}/springbootai/tracing/__init__.py +0 -0
- {springbootai-2.3.7 → springbootai-2.3.9}/springbootai/tx/events.py +0 -0
- {springbootai-2.3.7 → springbootai-2.3.9}/springbootai/tx/synchronization.py +0 -0
- {springbootai-2.3.7 → springbootai-2.3.9}/springbootai/utils/__init__.py +0 -0
- {springbootai-2.3.7 → springbootai-2.3.9}/springbootai/utils/bean_utils.py +0 -0
- {springbootai-2.3.7 → springbootai-2.3.9}/springbootai/utils/logger.py +0 -0
- {springbootai-2.3.7 → springbootai-2.3.9}/springbootai/validation/aop.py +0 -0
- {springbootai-2.3.7 → springbootai-2.3.9}/springbootai/validation/constraints.py +0 -0
- {springbootai-2.3.7 → springbootai-2.3.9}/springbootai/validation/exceptions.py +0 -0
- {springbootai-2.3.7 → springbootai-2.3.9}/springbootai/validation/validator.py +0 -0
- {springbootai-2.3.7 → springbootai-2.3.9}/springbootai/web/__init__.py +0 -0
- {springbootai-2.3.7 → springbootai-2.3.9}/springbootai/web/csrf.py +0 -0
- {springbootai-2.3.7 → springbootai-2.3.9}/springbootai/web/exception_handler.py +0 -0
- {springbootai-2.3.7 → springbootai-2.3.9}/springbootai/web/hateoas.py +0 -0
- {springbootai-2.3.7 → springbootai-2.3.9}/springbootai/web/health.py +0 -0
- {springbootai-2.3.7 → springbootai-2.3.9}/springbootai/web/interceptor.py +0 -0
- {springbootai-2.3.7 → springbootai-2.3.9}/springbootai/web/result.py +0 -0
- {springbootai-2.3.7 → springbootai-2.3.9}/springbootai/websocket/annotations.py +0 -0
- {springbootai-2.3.7 → springbootai-2.3.9}/springbootai/websocket/broker.py +0 -0
- {springbootai-2.3.7 → springbootai-2.3.9}/springbootai/websocket/exceptions.py +0 -0
- {springbootai-2.3.7 → springbootai-2.3.9}/springbootai/websocket/handler.py +0 -0
- {springbootai-2.3.7 → springbootai-2.3.9}/springbootai/websocket/router.py +0 -0
- {springbootai-2.3.7 → springbootai-2.3.9}/springbootai/websocket/session.py +0 -0
- {springbootai-2.3.7 → springbootai-2.3.9}/sql/seata_undo_log.sql +0 -0
- {springbootai-2.3.7 → springbootai-2.3.9}/tests/test_actuator.py +0 -0
- {springbootai-2.3.7 → springbootai-2.3.9}/tests/test_actuator_prometheus_admin.py +0 -0
- {springbootai-2.3.7 → springbootai-2.3.9}/tests/test_ai_declarative_annotations.py +0 -0
- {springbootai-2.3.7 → springbootai-2.3.9}/tests/test_annotation_combinations.py +0 -0
- {springbootai-2.3.7 → springbootai-2.3.9}/tests/test_annotations_contract.py +0 -0
- {springbootai-2.3.7 → springbootai-2.3.9}/tests/test_aop_annotations_full.py +0 -0
- {springbootai-2.3.7 → springbootai-2.3.9}/tests/test_aop_pointcut_enhancements.py +0 -0
- {springbootai-2.3.7 → springbootai-2.3.9}/tests/test_audit_time.py +0 -0
- {springbootai-2.3.7 → springbootai-2.3.9}/tests/test_batch.py +0 -0
- {springbootai-2.3.7 → springbootai-2.3.9}/tests/test_bean_utils.py +0 -0
- {springbootai-2.3.7 → springbootai-2.3.9}/tests/test_bus.py +0 -0
- {springbootai-2.3.7 → springbootai-2.3.9}/tests/test_cache_annotations.py +0 -0
- {springbootai-2.3.7 → springbootai-2.3.9}/tests/test_cli.py +0 -0
- {springbootai-2.3.7 → springbootai-2.3.9}/tests/test_cloud_embedded_full.py +0 -0
- {springbootai-2.3.7 → springbootai-2.3.9}/tests/test_component_init_error.py +0 -0
- {springbootai-2.3.7 → springbootai-2.3.9}/tests/test_compositional_annotations.py +0 -0
- {springbootai-2.3.7 → springbootai-2.3.9}/tests/test_conditional_annotations.py +0 -0
- {springbootai-2.3.7 → springbootai-2.3.9}/tests/test_config_binding.py +0 -0
- {springbootai-2.3.7 → springbootai-2.3.9}/tests/test_connection_resilience.py +0 -0
- {springbootai-2.3.7 → springbootai-2.3.9}/tests/test_core.py +0 -0
- {springbootai-2.3.7 → springbootai-2.3.9}/tests/test_core_annotations_full.py +0 -0
- {springbootai-2.3.7 → springbootai-2.3.9}/tests/test_csrf.py +0 -0
- {springbootai-2.3.7 → springbootai-2.3.9}/tests/test_csv_module.py +0 -0
- {springbootai-2.3.7 → springbootai-2.3.9}/tests/test_data_repository.py +0 -0
- {springbootai-2.3.7 → springbootai-2.3.9}/tests/test_data_rest.py +0 -0
- {springbootai-2.3.7 → springbootai-2.3.9}/tests/test_datasource_routing.py +0 -0
- {springbootai-2.3.7 → springbootai-2.3.9}/tests/test_ddl_auto.py +0 -0
- {springbootai-2.3.7 → springbootai-2.3.9}/tests/test_declarative_aop_post_authorize_recover.py +0 -0
- {springbootai-2.3.7 → springbootai-2.3.9}/tests/test_devtools.py +0 -0
- {springbootai-2.3.7 → springbootai-2.3.9}/tests/test_di_config_event_full.py +0 -0
- {springbootai-2.3.7 → springbootai-2.3.9}/tests/test_excel_module.py +0 -0
- {springbootai-2.3.7 → springbootai-2.3.9}/tests/test_hateoas.py +0 -0
- {springbootai-2.3.7 → springbootai-2.3.9}/tests/test_i18n_module.py +0 -0
- {springbootai-2.3.7 → springbootai-2.3.9}/tests/test_ioc_lifecycle_enhancements.py +0 -0
- {springbootai-2.3.7 → springbootai-2.3.9}/tests/test_jpa_version_transient.py +0 -0
- {springbootai-2.3.7 → springbootai-2.3.9}/tests/test_kafka.py +0 -0
- {springbootai-2.3.7 → springbootai-2.3.9}/tests/test_langchain_comprehensive.py +0 -0
- {springbootai-2.3.7 → springbootai-2.3.9}/tests/test_langchain_ext.py +0 -0
- {springbootai-2.3.7 → springbootai-2.3.9}/tests/test_langgraph_comprehensive.py +0 -0
- {springbootai-2.3.7 → springbootai-2.3.9}/tests/test_langgraph_module.py +0 -0
- {springbootai-2.3.7 → springbootai-2.3.9}/tests/test_logging_config.py +0 -0
- {springbootai-2.3.7 → springbootai-2.3.9}/tests/test_lombok_annotations.py +0 -0
- {springbootai-2.3.7 → springbootai-2.3.9}/tests/test_mcp_module.py +0 -0
- {springbootai-2.3.7 → springbootai-2.3.9}/tests/test_metadata.py +0 -0
- {springbootai-2.3.7 → springbootai-2.3.9}/tests/test_migration.py +0 -0
- {springbootai-2.3.7 → springbootai-2.3.9}/tests/test_new_annotations.py +0 -0
- {springbootai-2.3.7 → springbootai-2.3.9}/tests/test_new_features.py +0 -0
- {springbootai-2.3.7 → springbootai-2.3.9}/tests/test_oauth2.py +0 -0
- {springbootai-2.3.7 → springbootai-2.3.9}/tests/test_orm_pymybatis_full.py +0 -0
- {springbootai-2.3.7 → springbootai-2.3.9}/tests/test_production_readiness.py +0 -0
- {springbootai-2.3.7 → springbootai-2.3.9}/tests/test_pymybatis_configuration_hardening.py +0 -0
- {springbootai-2.3.7 → springbootai-2.3.9}/tests/test_pymybatis_contract.py +0 -0
- {springbootai-2.3.7 → springbootai-2.3.9}/tests/test_request_metrics.py +0 -0
- {springbootai-2.3.7 → springbootai-2.3.9}/tests/test_retry.py +0 -0
- {springbootai-2.3.7 → springbootai-2.3.9}/tests/test_scaffold_hardening.py +0 -0
- {springbootai-2.3.7 → springbootai-2.3.9}/tests/test_scheduling.py +0 -0
- {springbootai-2.3.7 → springbootai-2.3.9}/tests/test_seata_at_proxy.py +0 -0
- {springbootai-2.3.7 → springbootai-2.3.9}/tests/test_seata_bridge.py +0 -0
- {springbootai-2.3.7 → springbootai-2.3.9}/tests/test_seata_durable_store.py +0 -0
- {springbootai-2.3.7 → springbootai-2.3.9}/tests/test_security.py +0 -0
- {springbootai-2.3.7 → springbootai-2.3.9}/tests/test_security_full.py +0 -0
- {springbootai-2.3.7 → springbootai-2.3.9}/tests/test_security_hardening.py +0 -0
- {springbootai-2.3.7 → springbootai-2.3.9}/tests/test_select_page.py +0 -0
- {springbootai-2.3.7 → springbootai-2.3.9}/tests/test_starter.py +0 -0
- {springbootai-2.3.7 → springbootai-2.3.9}/tests/test_startup_lifecycle.py +0 -0
- {springbootai-2.3.7 → springbootai-2.3.9}/tests/test_swagger_module.py +0 -0
- {springbootai-2.3.7 → springbootai-2.3.9}/tests/test_test_slicing.py +0 -0
- {springbootai-2.3.7 → springbootai-2.3.9}/tests/test_transactional_events.py +0 -0
- {springbootai-2.3.7 → springbootai-2.3.9}/tests/test_validation_module.py +0 -0
- {springbootai-2.3.7 → springbootai-2.3.9}/tests/test_web_annotations_full.py +0 -0
- {springbootai-2.3.7 → springbootai-2.3.9}/tests/test_web_file_upload.py +0 -0
- {springbootai-2.3.7 → springbootai-2.3.9}/tests/test_web_root_mapping.py +0 -0
- {springbootai-2.3.7 → springbootai-2.3.9}/tests/test_web_security_responses.py +0 -0
- {springbootai-2.3.7 → springbootai-2.3.9}/tests/test_web_static_files.py +0 -0
- {springbootai-2.3.7 → springbootai-2.3.9}/tests/test_websocket_module.py +0 -0
|
@@ -1,5 +1,24 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [2.3.9] - 2026-08-28
|
|
4
|
+
|
|
5
|
+
- 加固 OpenAI 兼容接口与 Ollama 的同步/异步流式协议:校验终止帧、错误信封和畸形响应,限制事件与响应大小,并完善超时、有限重试、重定向拒绝及 SDK 重试边界。
|
|
6
|
+
- 修复 AI 异步流阻塞事件循环、请求参数覆盖受保护字段、输出 Token 上限绕过、工具调用闭环和多租户 Memory/RAG 隔离等问题。
|
|
7
|
+
- 加固 Feign、Gateway、Config Center、Admin 与 Discovery:正确释放响应、执行路由谓词和过滤器、过滤逐跳头、传播请求 ID,并增加路径、响应大小、故障回退与生命周期保护。
|
|
8
|
+
- 新增统一日志脱敏和日志注入防护,覆盖异常链、Bearer/Basic/Cookie、云事件、Nacos、Seata 与 SkyWalking,避免敏感负载进入日志或健康响应。
|
|
9
|
+
- 修复原子脚手架写入、TextReader 文件边界、DevTools 停止/重启语义、SkyWalking 显式初始化和 Banner 版本读取错误。
|
|
10
|
+
- 新增企业加固回归测试;完整测试结果为 3170 passed、11 skipped、0 failed,Bandit 中高危扫描为 0。
|
|
11
|
+
|
|
12
|
+
## [2.3.8] - 2026-08-24
|
|
13
|
+
|
|
14
|
+
- 修复配置加载的原子性与数据库 URL 优先级:请求监控不再误落到根目录 `test.db`,SQLite 运行目录会自动创建,显式 URL/驱动/数据库名称按统一优先级生效。
|
|
15
|
+
- 新增可选配置监控(默认关闭),兼容 YAML、环境变量和 Nacos,提供脱敏历史、变更键、来源、耗时与成功/失败信息,并接入 Actuator/Admin 面板。
|
|
16
|
+
- 修复 Nacos 热更新失败后不重试、客户端状态污染和 Web/Actuator/请求监控配置不刷新的问题;热更新现在安全重绑运行时配置。
|
|
17
|
+
- 修复默认 profile 占位符未参与 profile 文件选择的问题,支持自动加载 `application-default.yml`;同时限制 Nacos 请求超时(最多 120 秒)和热刷新间隔(最多 1 小时)。
|
|
18
|
+
- 为 Nacos 服务发现与 RabbitMQ 增加有限连接/请求超时和重试上限,未配置或服务不可用时不会无限阻塞启动;补充 MCP 本机代理兼容、Redis 单次探测和 AI Cache 并发/容量保护。
|
|
19
|
+
- 加固 Spring Cloud Config 可选客户端:容忍空/错误配置层级,限制 timeout、重试次数与退避间隔,避免配置中心异常反向拖垮启动。
|
|
20
|
+
- 补充条件装配注解示例、可选组件超时回归测试,并同步配置元数据与模块文档。
|
|
21
|
+
|
|
3
22
|
## [2.3.7] - 2026-08-20
|
|
4
23
|
|
|
5
24
|
### PyPI 项目说明修正
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: springbootAI
|
|
3
|
-
Version: 2.3.
|
|
3
|
+
Version: 2.3.9
|
|
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
|
|
@@ -187,7 +187,7 @@ SpringBootAI 已提供配套的在线考试认证平台,学习者、团队成
|
|
|
187
187
|
|
|
188
188
|
建议的认证准备流程:
|
|
189
189
|
|
|
190
|
-
1. 先按 README 中的“
|
|
190
|
+
1. 先按 README 中的“1 分钟跑通第一个接口”完成本地环境搭建,确认能够创建应用、启动服务并访问 Swagger。
|
|
191
191
|
2. 阅读 [新手指南](https://github.com/YUCONGGEN/springbootAI/blob/master/doc/BEGINNER_GUIDE.md),理解 `@SpringBootApplication`、`@RestController`、`@Service`、`@Autowired`、配置文件和依赖注入的基本用法。
|
|
192
192
|
3. 根据实际使用方向阅读模块文档,例如 Web MVC、ORM、事务、缓存、安全、配置绑定、测试切片、AI、LangChain、LangGraph、MCP 和 Cloud 微服务等。
|
|
193
193
|
4. 运行示例或编写一个小型业务接口,至少覆盖 Controller、Service、配置读取、异常处理、Swagger 文档和数据访问中的若干能力。
|
|
@@ -216,90 +216,40 @@ SpringBootAI 是一个采用 Spring 风格注解和分层结构的 Python 应用
|
|
|
216
216
|
| AI 与编排 | 模型调用、Tools、RAG、Chain、状态图、MCP client/server | LangChain / LangGraph / 官方 MCP SDK |
|
|
217
217
|
| 生产治理 | 健康检查、Prometheus、限流熔断、追踪、Swagger | prometheus-client / OpenTelemetry / OpenAPI |
|
|
218
218
|
|
|
219
|
-
当前版本是 `2.3.
|
|
219
|
+
当前版本是 `2.3.9`;支持 Python 3.10、3.11 和 3.12,许可证为 MIT。项目仍标记为 Beta。用于公网高并发、合规敏感或支付/订单/库存等核心系统前,必须完成目标数据库、流量模型、故障恢复和安全基线验证。内嵌 Gateway 适合内部路由,不替代公网 Nginx/Kong/WAF;Seata `distributed` 对接官方 TC + TCC 回调;`at` 模式通过 ORM 拦截器自动生成 undo_log 实现自动回滚。
|
|
220
220
|
|
|
221
221
|
[新手指南](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)
|
|
222
222
|
|
|
223
|
-
##
|
|
223
|
+
## 1 分钟跑通第一个接口
|
|
224
224
|
|
|
225
|
-
|
|
225
|
+
已安装 Python 3.10、3.11 或 3.12 时,直接执行下面五条命令。示例不需要数据库、Redis、Docker 或大模型 API Key:
|
|
226
226
|
|
|
227
227
|
```powershell
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
python
|
|
233
|
-
python -m pip install springbootAI
|
|
234
|
-
|
|
235
|
-
mkdir demo
|
|
236
|
-
mkdir demo\controller
|
|
237
|
-
New-Item demo\__init__.py -ItemType File
|
|
238
|
-
New-Item demo\controller\__init__.py -ItemType File
|
|
239
|
-
```
|
|
240
|
-
|
|
241
|
-
Linux/macOS 激活命令是 `source .venv/bin/activate`,其余 Python 命令相同。
|
|
242
|
-
|
|
243
|
-
创建 `demo/Application.py`:
|
|
244
|
-
|
|
245
|
-
```python
|
|
246
|
-
from springbootai.annotations import SpringBootApplication
|
|
247
|
-
from springbootai.main import run
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
@SpringBootApplication(scan_base_packages=["demo"])
|
|
251
|
-
class Application:
|
|
252
|
-
pass
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
if __name__ == "__main__":
|
|
256
|
-
run(Application)
|
|
257
|
-
```
|
|
258
|
-
|
|
259
|
-
创建 `demo/controller/HelloController.py`:
|
|
260
|
-
|
|
261
|
-
```python
|
|
262
|
-
from springbootai.annotations import GetMapping, RequestMapping, RestController
|
|
263
|
-
from springbootai.web.swagger import Operation, Tag
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
@Tag(name="入门接口", description="确认应用已经正常运行")
|
|
267
|
-
@RequestMapping("/api")
|
|
268
|
-
@RestController
|
|
269
|
-
class HelloController:
|
|
270
|
-
@Operation(summary="打招呼")
|
|
271
|
-
@GetMapping("/hello/{name}")
|
|
272
|
-
def hello(self, name: str):
|
|
273
|
-
return {"message": f"Hello, {name}"}
|
|
228
|
+
python -m pip install --upgrade springbootAI
|
|
229
|
+
springbootai init demo --modules web --no-docker --non-interactive
|
|
230
|
+
cd demo
|
|
231
|
+
python -m pip install -r requirements.txt
|
|
232
|
+
python Application.py
|
|
274
233
|
```
|
|
275
234
|
|
|
276
|
-
|
|
235
|
+
`springbootai init demo` 会自动创建 `demo` 项目目录、启动类、配置文件和 Hello 示例接口。`--non-interactive` 表示直接使用默认配置,不进入问答;`--no-docker` 表示本次不生成 Docker 文件。
|
|
277
236
|
|
|
278
|
-
|
|
279
|
-
server:
|
|
280
|
-
host: 127.0.0.1
|
|
281
|
-
port: 8080
|
|
237
|
+
看到下面的输出就说明启动成功:
|
|
282
238
|
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
redis:
|
|
287
|
-
enabled: false
|
|
239
|
+
```text
|
|
240
|
+
Uvicorn running on http://0.0.0.0:8000 (Press CTRL+C to quit)
|
|
288
241
|
```
|
|
289
242
|
|
|
290
|
-
|
|
243
|
+
保持服务运行,另开终端验证:
|
|
291
244
|
|
|
292
245
|
```powershell
|
|
293
|
-
|
|
246
|
+
curl http://127.0.0.1:8000/api/hello/Alice
|
|
247
|
+
curl http://127.0.0.1:8000/actuator/health/liveness
|
|
294
248
|
```
|
|
295
249
|
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
```powershell
|
|
299
|
-
curl http://127.0.0.1:8080/api/hello/Alice
|
|
300
|
-
```
|
|
250
|
+
第一个请求的返回数据中会包含 `"message":"Hello, Alice!"`,健康检查会返回 `"status":"UP"`。浏览器访问 `http://127.0.0.1:8000/docs` 可以直接查看并测试 Swagger 接口。
|
|
301
251
|
|
|
302
|
-
|
|
252
|
+
生成的业务代码位于 `demo/src/demo/`,主配置文件位于 `demo/config/application.yml`。完整参数见 [CLI 模块指南](https://github.com/YUCONGGEN/springbootAI/blob/master/doc/CLI_MODULE.md),遇到启动问题时按[新手入门指南](https://github.com/YUCONGGEN/springbootAI/blob/master/doc/BEGINNER_GUIDE.md)排查。
|
|
303
253
|
|
|
304
254
|
---
|
|
305
255
|
|
|
@@ -397,10 +347,10 @@ SpringBootAI 是一个 **Python Web 框架**。它把 Java Spring Boot 的"注
|
|
|
397
347
|
|
|
398
348
|
| 组件 | 当前版本 |
|
|
399
349
|
|------|----------|
|
|
400
|
-
| `springbootai` 框架 API | 2.3.
|
|
401
|
-
| `springbootai.orm.pymybatis` | 2.3.
|
|
402
|
-
| `springbootai.ai` AI 模块 | 2.3.
|
|
403
|
-
| `springbootai.langchain` LangChain 模块 | 2.3.
|
|
350
|
+
| `springbootai` 框架 API | 2.3.9 |
|
|
351
|
+
| `springbootai.orm.pymybatis` | 2.3.9 |
|
|
352
|
+
| `springbootai.ai` AI 模块 | 2.3.9 |
|
|
353
|
+
| `springbootai.langchain` LangChain 模块 | 2.3.9 |
|
|
404
354
|
| Python | 3.10+ |
|
|
405
355
|
|
|
406
356
|
### 1.4 适合什么场景
|
|
@@ -765,14 +715,30 @@ Profile 用于 Bean 过滤和生产安全校验。多环境配置可使用以下
|
|
|
765
715
|
| `/actuator/admin` | **Spring Boot Admin 风格可视化面板**(浏览器打开即用,每 30 秒自动刷新) |
|
|
766
716
|
| `/actuator/prometheus` | **Prometheus 文本格式指标**(供 Prometheus Server 抓取) |
|
|
767
717
|
| `/actuator/sysmetrics` | **进程级系统指标**(RSS/CPU/线程/FD,供 Admin 面板 JS 调用) |
|
|
718
|
+
| `/actuator/config-monitor` | 配置加载与 Nacos 热刷新历史(`management.config-monitor.enabled=true` 后启用,默认关闭) |
|
|
768
719
|
|
|
769
|
-
`database.enabled: false` 时数据库状态为 `DISABLED
|
|
720
|
+
`database.enabled: false` 时数据库状态为 `DISABLED`,不会创建数据库文件。
|
|
721
|
+
|
|
722
|
+
配置监控默认关闭。需要排查配置来源或热更新时,可在 YAML、环境变量或 Nacos 中设置:
|
|
723
|
+
|
|
724
|
+
```yaml
|
|
725
|
+
management:
|
|
726
|
+
config-monitor:
|
|
727
|
+
enabled: true
|
|
728
|
+
include-values: false # 生产环境建议保持 false
|
|
729
|
+
history-size: 100
|
|
730
|
+
refresh-events: true
|
|
731
|
+
```
|
|
732
|
+
|
|
733
|
+
开启后访问受 Actuator 鉴权保护的 `/actuator/config-monitor`,或直接查看 Admin
|
|
734
|
+
面板中的“配置刷新监控”卡片。关闭时不保留历史,也不读取配置值。
|
|
770
735
|
|
|
771
736
|
> 详见 [ACTUATOR_MODULE.md](https://github.com/YUCONGGEN/springbootAI/blob/master/doc/ACTUATOR_MODULE.md) 第四章(Spring Boot Admin 面板)与第五章(Prometheus + Grafana 工业级监控)。
|
|
772
737
|
|
|
773
738
|
> **⚠️ 新手常见错误**:
|
|
774
|
-
> - ❌ 错误:"
|
|
775
|
-
> - ✅
|
|
739
|
+
> - ❌ 错误:"我改了本地 YAML,重新请求接口怎么没生效?"
|
|
740
|
+
> - ✅ 正解:本地 YAML 是启动时读取的,修改后需要重启应用;Nacos 配置只有在启用
|
|
741
|
+
> `NACOS_CONFIG_ENABLED=true` 且 `refresh-enabled=true` 时才会按轮询间隔热刷新。
|
|
776
742
|
|
|
777
743
|
---
|
|
778
744
|
|
|
@@ -971,6 +937,16 @@ class InitService:
|
|
|
971
937
|
self.connection.close()
|
|
972
938
|
```
|
|
973
939
|
|
|
940
|
+
每个 HTTP 请求都会获得 `X-Request-ID`(可通过
|
|
941
|
+
`server.request-id.header` 修改),该值会写回响应并自动进入框架日志,Feign
|
|
942
|
+
和 Gateway 也会向下游透传。日志会遮蔽 Bearer Token、API Key、密码、Cookie
|
|
943
|
+
等常见敏感字段;`logging.diagnose` 默认关闭,避免异常帧局部变量泄密。
|
|
944
|
+
|
|
945
|
+
声明式 Feign 客户端默认复用连接池,对幂等请求执行有限退避重试,并支持连接/
|
|
946
|
+
读取超时与响应大小限制。直接读取 RAG 文本文件时建议使用
|
|
947
|
+
`TextReader.from_file(path, max_bytes=...)`,文件不存在或超限会明确失败,不会把
|
|
948
|
+
错误路径误当成内联文本。
|
|
949
|
+
|
|
974
950
|
### 5.7 应用事件
|
|
975
951
|
|
|
976
952
|
```python
|
|
@@ -1715,9 +1691,13 @@ gunicorn -w 4 -k uvicorn.workers.UvicornWorker -b 0.0.0.0:8080 myapp.asgi:app
|
|
|
1715
1691
|
|---------|------|--------|
|
|
1716
1692
|
| `SERVER_PORT` | 服务端口 | 8080 |
|
|
1717
1693
|
| `JWT_SECRET_KEY` | JWT 密钥 | spring-python-secret-key-change-in-production |
|
|
1718
|
-
| `DB_URL` | 数据库连接 URL | sqlite:///./
|
|
1694
|
+
| `DB_URL` | 数据库连接 URL | 未设置时使用 `sqlite:///./runtime/springbootai.db` |
|
|
1719
1695
|
| `REDIS_HOST` / `REDIS_PORT` / `REDIS_PASSWORD` | Redis 连接 | localhost/6379/空 |
|
|
1720
1696
|
| `NACOS_SERVER` | Nacos 地址 | localhost:8848 |
|
|
1697
|
+
| `NACOS_TIMEOUT` / `DISCOVERY_TIMEOUT` | Nacos 服务发现单次 HTTP 超时(秒) | 3(最大60) |
|
|
1698
|
+
| `RABBITMQ_CONNECTION_TIMEOUT` | RabbitMQ 建连默认超时(秒) | 5 |
|
|
1699
|
+
| `RABBITMQ_SOCKET_TIMEOUT` / `RABBITMQ_STACK_TIMEOUT` | RabbitMQ TCP/AMQP 握手超时(秒) | 5/5 |
|
|
1700
|
+
| `RABBITMQ_CONNECTION_ATTEMPTS` | RabbitMQ 建连尝试次数 | 1 |
|
|
1721
1701
|
| `SPRING_DISABLE_DOCKER_IP_DETECT` | 禁用容器 IP 检测 | 0 |
|
|
1722
1702
|
|
|
1723
1703
|
### 14.5 验证部署 & 故障排查
|
|
@@ -1925,9 +1905,13 @@ export LOG_DIR=logs
|
|
|
1925
1905
|
|
|
1926
1906
|
# AI 模块
|
|
1927
1907
|
export AI_PROVIDER=openai
|
|
1928
|
-
export AI_ALLOW_FAKE=
|
|
1908
|
+
export AI_ALLOW_FAKE=false
|
|
1929
1909
|
export OPENAI_API_KEY=sk-xxx
|
|
1930
1910
|
export OPENAI_CHAT_MODEL=gpt-4o-mini
|
|
1911
|
+
export AI_REQUEST_TIMEOUT_SECONDS=60
|
|
1912
|
+
export AI_MAX_OUTPUT_TOKENS=4096
|
|
1913
|
+
export AI_MAX_TOTAL_TOKENS=100000
|
|
1914
|
+
export AI_MAX_TOOL_ITERATIONS=5
|
|
1931
1915
|
export OLLAMA_BASE_URL=http://localhost:11434
|
|
1932
1916
|
export OLLAMA_CHAT_MODEL=llama3
|
|
1933
1917
|
|
|
@@ -25,7 +25,7 @@ SpringBootAI 已提供配套的在线考试认证平台,学习者、团队成
|
|
|
25
25
|
|
|
26
26
|
建议的认证准备流程:
|
|
27
27
|
|
|
28
|
-
1. 先按 README 中的“
|
|
28
|
+
1. 先按 README 中的“1 分钟跑通第一个接口”完成本地环境搭建,确认能够创建应用、启动服务并访问 Swagger。
|
|
29
29
|
2. 阅读 [新手指南](https://github.com/YUCONGGEN/springbootAI/blob/master/doc/BEGINNER_GUIDE.md),理解 `@SpringBootApplication`、`@RestController`、`@Service`、`@Autowired`、配置文件和依赖注入的基本用法。
|
|
30
30
|
3. 根据实际使用方向阅读模块文档,例如 Web MVC、ORM、事务、缓存、安全、配置绑定、测试切片、AI、LangChain、LangGraph、MCP 和 Cloud 微服务等。
|
|
31
31
|
4. 运行示例或编写一个小型业务接口,至少覆盖 Controller、Service、配置读取、异常处理、Swagger 文档和数据访问中的若干能力。
|
|
@@ -54,90 +54,40 @@ SpringBootAI 是一个采用 Spring 风格注解和分层结构的 Python 应用
|
|
|
54
54
|
| AI 与编排 | 模型调用、Tools、RAG、Chain、状态图、MCP client/server | LangChain / LangGraph / 官方 MCP SDK |
|
|
55
55
|
| 生产治理 | 健康检查、Prometheus、限流熔断、追踪、Swagger | prometheus-client / OpenTelemetry / OpenAPI |
|
|
56
56
|
|
|
57
|
-
当前版本是 `2.3.
|
|
57
|
+
当前版本是 `2.3.9`;支持 Python 3.10、3.11 和 3.12,许可证为 MIT。项目仍标记为 Beta。用于公网高并发、合规敏感或支付/订单/库存等核心系统前,必须完成目标数据库、流量模型、故障恢复和安全基线验证。内嵌 Gateway 适合内部路由,不替代公网 Nginx/Kong/WAF;Seata `distributed` 对接官方 TC + TCC 回调;`at` 模式通过 ORM 拦截器自动生成 undo_log 实现自动回滚。
|
|
58
58
|
|
|
59
59
|
[新手指南](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)
|
|
60
60
|
|
|
61
|
-
##
|
|
61
|
+
## 1 分钟跑通第一个接口
|
|
62
62
|
|
|
63
|
-
|
|
63
|
+
已安装 Python 3.10、3.11 或 3.12 时,直接执行下面五条命令。示例不需要数据库、Redis、Docker 或大模型 API Key:
|
|
64
64
|
|
|
65
65
|
```powershell
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
python
|
|
71
|
-
python -m pip install springbootAI
|
|
72
|
-
|
|
73
|
-
mkdir demo
|
|
74
|
-
mkdir demo\controller
|
|
75
|
-
New-Item demo\__init__.py -ItemType File
|
|
76
|
-
New-Item demo\controller\__init__.py -ItemType File
|
|
77
|
-
```
|
|
78
|
-
|
|
79
|
-
Linux/macOS 激活命令是 `source .venv/bin/activate`,其余 Python 命令相同。
|
|
80
|
-
|
|
81
|
-
创建 `demo/Application.py`:
|
|
82
|
-
|
|
83
|
-
```python
|
|
84
|
-
from springbootai.annotations import SpringBootApplication
|
|
85
|
-
from springbootai.main import run
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
@SpringBootApplication(scan_base_packages=["demo"])
|
|
89
|
-
class Application:
|
|
90
|
-
pass
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
if __name__ == "__main__":
|
|
94
|
-
run(Application)
|
|
95
|
-
```
|
|
96
|
-
|
|
97
|
-
创建 `demo/controller/HelloController.py`:
|
|
98
|
-
|
|
99
|
-
```python
|
|
100
|
-
from springbootai.annotations import GetMapping, RequestMapping, RestController
|
|
101
|
-
from springbootai.web.swagger import Operation, Tag
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
@Tag(name="入门接口", description="确认应用已经正常运行")
|
|
105
|
-
@RequestMapping("/api")
|
|
106
|
-
@RestController
|
|
107
|
-
class HelloController:
|
|
108
|
-
@Operation(summary="打招呼")
|
|
109
|
-
@GetMapping("/hello/{name}")
|
|
110
|
-
def hello(self, name: str):
|
|
111
|
-
return {"message": f"Hello, {name}"}
|
|
66
|
+
python -m pip install --upgrade springbootAI
|
|
67
|
+
springbootai init demo --modules web --no-docker --non-interactive
|
|
68
|
+
cd demo
|
|
69
|
+
python -m pip install -r requirements.txt
|
|
70
|
+
python Application.py
|
|
112
71
|
```
|
|
113
72
|
|
|
114
|
-
|
|
73
|
+
`springbootai init demo` 会自动创建 `demo` 项目目录、启动类、配置文件和 Hello 示例接口。`--non-interactive` 表示直接使用默认配置,不进入问答;`--no-docker` 表示本次不生成 Docker 文件。
|
|
115
74
|
|
|
116
|
-
|
|
117
|
-
server:
|
|
118
|
-
host: 127.0.0.1
|
|
119
|
-
port: 8080
|
|
75
|
+
看到下面的输出就说明启动成功:
|
|
120
76
|
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
redis:
|
|
125
|
-
enabled: false
|
|
77
|
+
```text
|
|
78
|
+
Uvicorn running on http://0.0.0.0:8000 (Press CTRL+C to quit)
|
|
126
79
|
```
|
|
127
80
|
|
|
128
|
-
|
|
81
|
+
保持服务运行,另开终端验证:
|
|
129
82
|
|
|
130
83
|
```powershell
|
|
131
|
-
|
|
84
|
+
curl http://127.0.0.1:8000/api/hello/Alice
|
|
85
|
+
curl http://127.0.0.1:8000/actuator/health/liveness
|
|
132
86
|
```
|
|
133
87
|
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
```powershell
|
|
137
|
-
curl http://127.0.0.1:8080/api/hello/Alice
|
|
138
|
-
```
|
|
88
|
+
第一个请求的返回数据中会包含 `"message":"Hello, Alice!"`,健康检查会返回 `"status":"UP"`。浏览器访问 `http://127.0.0.1:8000/docs` 可以直接查看并测试 Swagger 接口。
|
|
139
89
|
|
|
140
|
-
|
|
90
|
+
生成的业务代码位于 `demo/src/demo/`,主配置文件位于 `demo/config/application.yml`。完整参数见 [CLI 模块指南](https://github.com/YUCONGGEN/springbootAI/blob/master/doc/CLI_MODULE.md),遇到启动问题时按[新手入门指南](https://github.com/YUCONGGEN/springbootAI/blob/master/doc/BEGINNER_GUIDE.md)排查。
|
|
141
91
|
|
|
142
92
|
---
|
|
143
93
|
|
|
@@ -235,10 +185,10 @@ SpringBootAI 是一个 **Python Web 框架**。它把 Java Spring Boot 的"注
|
|
|
235
185
|
|
|
236
186
|
| 组件 | 当前版本 |
|
|
237
187
|
|------|----------|
|
|
238
|
-
| `springbootai` 框架 API | 2.3.
|
|
239
|
-
| `springbootai.orm.pymybatis` | 2.3.
|
|
240
|
-
| `springbootai.ai` AI 模块 | 2.3.
|
|
241
|
-
| `springbootai.langchain` LangChain 模块 | 2.3.
|
|
188
|
+
| `springbootai` 框架 API | 2.3.9 |
|
|
189
|
+
| `springbootai.orm.pymybatis` | 2.3.9 |
|
|
190
|
+
| `springbootai.ai` AI 模块 | 2.3.9 |
|
|
191
|
+
| `springbootai.langchain` LangChain 模块 | 2.3.9 |
|
|
242
192
|
| Python | 3.10+ |
|
|
243
193
|
|
|
244
194
|
### 1.4 适合什么场景
|
|
@@ -603,14 +553,30 @@ Profile 用于 Bean 过滤和生产安全校验。多环境配置可使用以下
|
|
|
603
553
|
| `/actuator/admin` | **Spring Boot Admin 风格可视化面板**(浏览器打开即用,每 30 秒自动刷新) |
|
|
604
554
|
| `/actuator/prometheus` | **Prometheus 文本格式指标**(供 Prometheus Server 抓取) |
|
|
605
555
|
| `/actuator/sysmetrics` | **进程级系统指标**(RSS/CPU/线程/FD,供 Admin 面板 JS 调用) |
|
|
556
|
+
| `/actuator/config-monitor` | 配置加载与 Nacos 热刷新历史(`management.config-monitor.enabled=true` 后启用,默认关闭) |
|
|
606
557
|
|
|
607
|
-
`database.enabled: false` 时数据库状态为 `DISABLED
|
|
558
|
+
`database.enabled: false` 时数据库状态为 `DISABLED`,不会创建数据库文件。
|
|
559
|
+
|
|
560
|
+
配置监控默认关闭。需要排查配置来源或热更新时,可在 YAML、环境变量或 Nacos 中设置:
|
|
561
|
+
|
|
562
|
+
```yaml
|
|
563
|
+
management:
|
|
564
|
+
config-monitor:
|
|
565
|
+
enabled: true
|
|
566
|
+
include-values: false # 生产环境建议保持 false
|
|
567
|
+
history-size: 100
|
|
568
|
+
refresh-events: true
|
|
569
|
+
```
|
|
570
|
+
|
|
571
|
+
开启后访问受 Actuator 鉴权保护的 `/actuator/config-monitor`,或直接查看 Admin
|
|
572
|
+
面板中的“配置刷新监控”卡片。关闭时不保留历史,也不读取配置值。
|
|
608
573
|
|
|
609
574
|
> 详见 [ACTUATOR_MODULE.md](https://github.com/YUCONGGEN/springbootAI/blob/master/doc/ACTUATOR_MODULE.md) 第四章(Spring Boot Admin 面板)与第五章(Prometheus + Grafana 工业级监控)。
|
|
610
575
|
|
|
611
576
|
> **⚠️ 新手常见错误**:
|
|
612
|
-
> - ❌ 错误:"
|
|
613
|
-
> - ✅
|
|
577
|
+
> - ❌ 错误:"我改了本地 YAML,重新请求接口怎么没生效?"
|
|
578
|
+
> - ✅ 正解:本地 YAML 是启动时读取的,修改后需要重启应用;Nacos 配置只有在启用
|
|
579
|
+
> `NACOS_CONFIG_ENABLED=true` 且 `refresh-enabled=true` 时才会按轮询间隔热刷新。
|
|
614
580
|
|
|
615
581
|
---
|
|
616
582
|
|
|
@@ -809,6 +775,16 @@ class InitService:
|
|
|
809
775
|
self.connection.close()
|
|
810
776
|
```
|
|
811
777
|
|
|
778
|
+
每个 HTTP 请求都会获得 `X-Request-ID`(可通过
|
|
779
|
+
`server.request-id.header` 修改),该值会写回响应并自动进入框架日志,Feign
|
|
780
|
+
和 Gateway 也会向下游透传。日志会遮蔽 Bearer Token、API Key、密码、Cookie
|
|
781
|
+
等常见敏感字段;`logging.diagnose` 默认关闭,避免异常帧局部变量泄密。
|
|
782
|
+
|
|
783
|
+
声明式 Feign 客户端默认复用连接池,对幂等请求执行有限退避重试,并支持连接/
|
|
784
|
+
读取超时与响应大小限制。直接读取 RAG 文本文件时建议使用
|
|
785
|
+
`TextReader.from_file(path, max_bytes=...)`,文件不存在或超限会明确失败,不会把
|
|
786
|
+
错误路径误当成内联文本。
|
|
787
|
+
|
|
812
788
|
### 5.7 应用事件
|
|
813
789
|
|
|
814
790
|
```python
|
|
@@ -1553,9 +1529,13 @@ gunicorn -w 4 -k uvicorn.workers.UvicornWorker -b 0.0.0.0:8080 myapp.asgi:app
|
|
|
1553
1529
|
|---------|------|--------|
|
|
1554
1530
|
| `SERVER_PORT` | 服务端口 | 8080 |
|
|
1555
1531
|
| `JWT_SECRET_KEY` | JWT 密钥 | spring-python-secret-key-change-in-production |
|
|
1556
|
-
| `DB_URL` | 数据库连接 URL | sqlite:///./
|
|
1532
|
+
| `DB_URL` | 数据库连接 URL | 未设置时使用 `sqlite:///./runtime/springbootai.db` |
|
|
1557
1533
|
| `REDIS_HOST` / `REDIS_PORT` / `REDIS_PASSWORD` | Redis 连接 | localhost/6379/空 |
|
|
1558
1534
|
| `NACOS_SERVER` | Nacos 地址 | localhost:8848 |
|
|
1535
|
+
| `NACOS_TIMEOUT` / `DISCOVERY_TIMEOUT` | Nacos 服务发现单次 HTTP 超时(秒) | 3(最大60) |
|
|
1536
|
+
| `RABBITMQ_CONNECTION_TIMEOUT` | RabbitMQ 建连默认超时(秒) | 5 |
|
|
1537
|
+
| `RABBITMQ_SOCKET_TIMEOUT` / `RABBITMQ_STACK_TIMEOUT` | RabbitMQ TCP/AMQP 握手超时(秒) | 5/5 |
|
|
1538
|
+
| `RABBITMQ_CONNECTION_ATTEMPTS` | RabbitMQ 建连尝试次数 | 1 |
|
|
1559
1539
|
| `SPRING_DISABLE_DOCKER_IP_DETECT` | 禁用容器 IP 检测 | 0 |
|
|
1560
1540
|
|
|
1561
1541
|
### 14.5 验证部署 & 故障排查
|
|
@@ -1763,9 +1743,13 @@ export LOG_DIR=logs
|
|
|
1763
1743
|
|
|
1764
1744
|
# AI 模块
|
|
1765
1745
|
export AI_PROVIDER=openai
|
|
1766
|
-
export AI_ALLOW_FAKE=
|
|
1746
|
+
export AI_ALLOW_FAKE=false
|
|
1767
1747
|
export OPENAI_API_KEY=sk-xxx
|
|
1768
1748
|
export OPENAI_CHAT_MODEL=gpt-4o-mini
|
|
1749
|
+
export AI_REQUEST_TIMEOUT_SECONDS=60
|
|
1750
|
+
export AI_MAX_OUTPUT_TOKENS=4096
|
|
1751
|
+
export AI_MAX_TOTAL_TOKENS=100000
|
|
1752
|
+
export AI_MAX_TOOL_ITERATIONS=5
|
|
1769
1753
|
export OLLAMA_BASE_URL=http://localhost:11434
|
|
1770
1754
|
export OLLAMA_CHAT_MODEL=llama3
|
|
1771
1755
|
|
|
@@ -12,7 +12,7 @@ build-backend = "setuptools.build_meta"
|
|
|
12
12
|
[project]
|
|
13
13
|
# Distribution name: springbootAI (pip install springbootAI); import package: springbootai.
|
|
14
14
|
name = "springbootAI"
|
|
15
|
-
version = "2.3.
|
|
15
|
+
version = "2.3.9"
|
|
16
16
|
description = "Spring-style Python framework with Web, ORM, Cloud and AI integrations"
|
|
17
17
|
readme = "README.md"
|
|
18
18
|
license = "MIT"
|
|
@@ -256,6 +256,7 @@ full = [
|
|
|
256
256
|
|
|
257
257
|
[tool.pytest.ini_options]
|
|
258
258
|
pythonpath = [".", "examples"]
|
|
259
|
+
testpaths = ["tests"]
|
|
259
260
|
filterwarnings = [
|
|
260
261
|
# 闈欓粯 langchain_classic 寮冪敤鍛婅鍜?community sunset 鍛婅
|
|
261
262
|
# 鍘熷洜锛氭湰椤圭洰鏈夋剰閿佸畾 langchain classic (1.x) API锛岃繖浜涙槸棰勬湡鍐呯殑妗嗘灦绾у憡璀?
|