springbootAI 2.3.3__tar.gz → 2.3.5__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.3 → springbootai-2.3.5}/CHANGELOG.md +21 -0
- {springbootai-2.3.3/springbootAI.egg-info → springbootai-2.3.5}/PKG-INFO +39 -7
- {springbootai-2.3.3 → springbootai-2.3.5}/README.md +38 -6
- {springbootai-2.3.3 → springbootai-2.3.5}/pyproject.toml +1 -1
- {springbootai-2.3.3 → springbootai-2.3.5/springbootAI.egg-info}/PKG-INFO +39 -7
- {springbootai-2.3.3 → springbootai-2.3.5}/springbootAI.egg-info/SOURCES.txt +7 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/springbootai/__init__.py +25 -1
- {springbootai-2.3.3 → springbootai-2.3.5}/springbootai/ai/__init__.py +14 -3
- springbootai-2.3.5/springbootai/ai/annotation_runtime.py +397 -0
- springbootai-2.3.5/springbootai/ai/annotations.py +180 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/springbootai/ai/autoconfig.py +8 -1
- {springbootai-2.3.3 → springbootai-2.3.5}/springbootai/ai/observability.py +13 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/springbootai/annotations/__init__.py +30 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/springbootai/annotations/conditional.py +112 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/springbootai/annotations/core.py +70 -2
- {springbootai-2.3.3 → springbootai-2.3.5}/springbootai/aop/aspect.py +111 -2
- {springbootai-2.3.3 → springbootai-2.3.5}/springbootai/cloud/nacos_config.py +11 -2
- {springbootai-2.3.3 → springbootai-2.3.5}/springbootai/config/config_loader.py +22 -1
- {springbootai-2.3.3 → springbootai-2.3.5}/springbootai/context/application_context.py +8 -1
- {springbootai-2.3.3 → springbootai-2.3.5}/springbootai/context/bean_factory.py +200 -11
- springbootai-2.3.5/springbootai/context/lifecycle.py +241 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/springbootai/csv/__init__.py +1 -1
- {springbootai-2.3.3 → springbootai-2.3.5}/springbootai/data/__init__.py +1 -1
- {springbootai-2.3.3 → springbootai-2.3.5}/springbootai/datasource/__init__.py +1 -1
- {springbootai-2.3.3 → springbootai-2.3.5}/springbootai/excel/__init__.py +1 -1
- {springbootai-2.3.3 → springbootai-2.3.5}/springbootai/i18n/__init__.py +1 -1
- {springbootai-2.3.3 → springbootai-2.3.5}/springbootai/langchain/__init__.py +1 -1
- {springbootai-2.3.3 → springbootai-2.3.5}/springbootai/langchain/agents/services.py +4 -2
- {springbootai-2.3.3 → springbootai-2.3.5}/springbootai/logging/loguru_logger.py +7 -1
- {springbootai-2.3.3 → springbootai-2.3.5}/springbootai/orm/pymybatis/__init__.py +1 -1
- {springbootai-2.3.3 → springbootai-2.3.5}/springbootai/orm/pymybatis/security/sql_injection_detector.py +5 -1
- {springbootai-2.3.3 → springbootai-2.3.5}/springbootai/orm/pymybatis/version.py +1 -1
- {springbootai-2.3.3 → springbootai-2.3.5}/springbootai/security/secret_manager.py +2 -2
- {springbootai-2.3.3 → springbootai-2.3.5}/springbootai/test/__init__.py +1 -1
- {springbootai-2.3.3 → springbootai-2.3.5}/springbootai/tx/__init__.py +1 -1
- {springbootai-2.3.3 → springbootai-2.3.5}/springbootai/utils/banner.py +2 -2
- {springbootai-2.3.3 → springbootai-2.3.5}/springbootai/validation/__init__.py +1 -1
- {springbootai-2.3.3 → springbootai-2.3.5}/springbootai/web/actuator.py +163 -46
- {springbootai-2.3.3 → springbootai-2.3.5}/springbootai/web/interceptor.py +4 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/springbootai/web/request_metrics.py +30 -3
- {springbootai-2.3.3 → springbootai-2.3.5}/springbootai/web/web_context.py +100 -8
- {springbootai-2.3.3 → springbootai-2.3.5}/springbootai/websocket/__init__.py +1 -1
- springbootai-2.3.5/tests/test_ai_annotations.py +100 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/tests/test_annotations_contract.py +1 -0
- springbootai-2.3.5/tests/test_aop_pointcut_enhancements.py +201 -0
- springbootai-2.3.5/tests/test_ioc_lifecycle_enhancements.py +328 -0
- springbootai-2.3.5/tests/test_runtime_configuration_fixes.py +59 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/tests/test_security.py +11 -0
- springbootai-2.3.5/tests/test_web_file_upload.py +67 -0
- springbootai-2.3.3/springbootai/ai/annotations.py +0 -74
- {springbootai-2.3.3 → springbootai-2.3.5}/LICENSE +0 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/MANIFEST.in +0 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/SECURITY.md +0 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/requirements-ai.txt +0 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/requirements-langgraph.txt +0 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/requirements-mcp.txt +0 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/requirements.txt +0 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/setup.cfg +0 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/setup.py +0 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/springbootAI.egg-info/dependency_links.txt +0 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/springbootAI.egg-info/entry_points.txt +0 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/springbootAI.egg-info/requires.txt +0 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/springbootAI.egg-info/top_level.txt +0 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/springbootai/ai/advisors.py +0 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/springbootai/ai/core.py +0 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/springbootai/ai/etl.py +0 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/springbootai/ai/memory.py +0 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/springbootai/ai/providers.py +0 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/springbootai/ai/resilience.py +0 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/springbootai/ai/tools.py +0 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/springbootai/ai/vectorstore.py +0 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/springbootai/annotations/batch.py +0 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/springbootai/annotations/cache.py +0 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/springbootai/annotations/cloud.py +0 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/springbootai/annotations/data.py +0 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/springbootai/annotations/enterprise.py +0 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/springbootai/annotations/langchain.py +0 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/springbootai/annotations/langgraph.py +0 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/springbootai/annotations/lombok.py +0 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/springbootai/annotations/messaging.py +0 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/springbootai/annotations/security.py +0 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/springbootai/aop/__init__.py +0 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/springbootai/aop/cloud_aop.py +0 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/springbootai/aop/comprehensive_aop.py +0 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/springbootai/aop/method_interceptor.py +0 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/springbootai/aop/proxy_factory.py +0 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/springbootai/batch/__init__.py +0 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/springbootai/cli/__init__.py +0 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/springbootai/cli/main.py +0 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/springbootai/cli/scaffold.py +0 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/springbootai/cloud/__init__.py +0 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/springbootai/cloud/bus.py +0 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/springbootai/cloud/config_center.py +0 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/springbootai/cloud/discovery.py +0 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/springbootai/cloud/feign.py +0 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/springbootai/cloud/gateway.py +0 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/springbootai/cloud/load_balancer.py +0 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/springbootai/cloud/seata.py +0 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/springbootai/cloud/seata_at_proxy.py +0 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/springbootai/cloud/seata_bridge.py +0 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/springbootai/cloud/sentinel.py +0 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/springbootai/cloud/tracer.py +0 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/springbootai/cloud/transaction_store.py +0 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/springbootai/config/__init__.py +0 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/springbootai/config/binding.py +0 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/springbootai/config/spring-configuration-metadata.json +0 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/springbootai/context/__init__.py +0 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/springbootai/context/bean_definition.py +0 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/springbootai/context/registry.py +0 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/springbootai/context/scanner.py +0 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/springbootai/core/__init__.py +0 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/springbootai/core/graceful_shutdown.py +0 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/springbootai/core/typing_utils.py +0 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/springbootai/csv/annotations.py +0 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/springbootai/csv/converters.py +0 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/springbootai/csv/easy_csv.py +0 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/springbootai/csv/exceptions.py +0 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/springbootai/csv/reader.py +0 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/springbootai/csv/writer.py +0 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/springbootai/data/page.py +0 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/springbootai/data/repository.py +0 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/springbootai/data/rest.py +0 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/springbootai/data/specification.py +0 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/springbootai/datasource/annotations.py +0 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/springbootai/datasource/context.py +0 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/springbootai/datasource/dynamic.py +0 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/springbootai/devtools.py +0 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/springbootai/event/__init__.py +0 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/springbootai/event/publisher.py +0 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/springbootai/excel/annotations.py +0 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/springbootai/excel/converters.py +0 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/springbootai/excel/easy_excel.py +0 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/springbootai/excel/exceptions.py +0 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/springbootai/excel/reader.py +0 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/springbootai/excel/style.py +0 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/springbootai/excel/writer.py +0 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/springbootai/i18n/accessor.py +0 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/springbootai/i18n/auto_config.py +0 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/springbootai/i18n/holder.py +0 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/springbootai/i18n/locale.py +0 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/springbootai/i18n/locale_resolver.py +0 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/springbootai/i18n/message_source.py +0 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/springbootai/i18n/middleware.py +0 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/springbootai/i18n/properties.py +0 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/springbootai/i18n/sources.py +0 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/springbootai/langchain/adapters.py +0 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/springbootai/langchain/agents/__init__.py +0 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/springbootai/langchain/annotations.py +0 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/springbootai/langchain/autoconfig.py +0 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/springbootai/langchain/callbacks/__init__.py +0 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/springbootai/langchain/callbacks/handlers.py +0 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/springbootai/langchain/chains/__init__.py +0 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/springbootai/langchain/chains/services.py +0 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/springbootai/langchain/core.py +0 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/springbootai/langchain/indexes/__init__.py +0 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/springbootai/langchain/indexes/index.py +0 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/springbootai/langchain/loaders/__init__.py +0 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/springbootai/langchain/loaders/loaders.py +0 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/springbootai/langchain/memory/__init__.py +0 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/springbootai/langchain/memory/memory.py +0 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/springbootai/langchain/parsers/__init__.py +0 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/springbootai/langchain/parsers/parsers.py +0 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/springbootai/langchain/partners.py +0 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/springbootai/langchain/prompts/__init__.py +0 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/springbootai/langchain/prompts/templates.py +0 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/springbootai/langchain/retrievers/__init__.py +0 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/springbootai/langchain/retrievers/retrievers.py +0 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/springbootai/langchain/tools/__init__.py +0 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/springbootai/langchain/tools/tools.py +0 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/springbootai/langchain/utilities/__init__.py +0 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/springbootai/langchain/utilities/utils.py +0 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/springbootai/langchain/vectorstores/__init__.py +0 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/springbootai/langchain/vectorstores/stores.py +0 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/springbootai/langgraph/__init__.py +0 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/springbootai/langgraph/annotation_runtime.py +0 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/springbootai/langgraph/annotations.py +0 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/springbootai/langgraph/autoconfig.py +0 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/springbootai/langgraph/checkpoint.py +0 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/springbootai/langgraph/config.py +0 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/springbootai/langgraph/runtime.py +0 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/springbootai/logging/__init__.py +0 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/springbootai/main.py +0 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/springbootai/mcp/__init__.py +0 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/springbootai/mcp/annotation_runtime.py +0 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/springbootai/mcp/annotations.py +0 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/springbootai/mcp/autoconfig.py +0 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/springbootai/mcp/client.py +0 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/springbootai/mcp/config.py +0 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/springbootai/mcp/server.py +0 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/springbootai/messaging/__init__.py +0 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/springbootai/messaging/kafka.py +0 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/springbootai/messaging/rabbitmq.py +0 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/springbootai/monitoring/__init__.py +0 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/springbootai/monitoring/admin_client.py +0 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/springbootai/monitoring/prometheus.py +0 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/springbootai/orm/__init__.py +0 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/springbootai/orm/database.py +0 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/springbootai/orm/ddl_auto.py +0 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/springbootai/orm/migration.py +0 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/springbootai/orm/mybatis_integration.py +0 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/springbootai/orm/pymybatis/annotations/__init__.py +0 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/springbootai/orm/pymybatis/annotations/annotations.py +0 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/springbootai/orm/pymybatis/cache/__init__.py +0 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/springbootai/orm/pymybatis/cache/cache.py +0 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/springbootai/orm/pymybatis/cache/redis_cache.py +0 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/springbootai/orm/pymybatis/circuit_breaker/__init__.py +0 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/springbootai/orm/pymybatis/circuit_breaker/circuit_breaker.py +0 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/springbootai/orm/pymybatis/configuration.py +0 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/springbootai/orm/pymybatis/core/__init__.py +0 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/springbootai/orm/pymybatis/core/sql_session.py +0 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/springbootai/orm/pymybatis/core/sql_session_factory.py +0 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/springbootai/orm/pymybatis/dialect/__init__.py +0 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/springbootai/orm/pymybatis/dialect/dialect.py +0 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/springbootai/orm/pymybatis/dynamic_sql/__init__.py +0 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/springbootai/orm/pymybatis/dynamic_sql/dynamic_sql.py +0 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/springbootai/orm/pymybatis/interceptor/__init__.py +0 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/springbootai/orm/pymybatis/interceptor/interceptor.py +0 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/springbootai/orm/pymybatis/mapper/__init__.py +0 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/springbootai/orm/pymybatis/mapper/mapper.py +0 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/springbootai/orm/pymybatis/metrics/__init__.py +0 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/springbootai/orm/pymybatis/metrics/metrics.py +0 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/springbootai/orm/pymybatis/pool/__init__.py +0 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/springbootai/orm/pymybatis/pool/connection_pool.py +0 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/springbootai/orm/pymybatis/security/__init__.py +0 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/springbootai/orm/pymybatis/security/access_control.py +0 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/springbootai/orm/pymybatis/security/password_encoder.py +0 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/springbootai/orm/pymybatis/security/sensitive_data_masker.py +0 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/springbootai/orm/pymybatis/transaction/__init__.py +0 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/springbootai/orm/pymybatis/transaction/transaction.py +0 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/springbootai/orm/pymybatis/type_handler/__init__.py +0 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/springbootai/orm/pymybatis/type_handler/type_handler.py +0 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/springbootai/orm/pymybatis/xml_parser/__init__.py +0 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/springbootai/orm/pymybatis/xml_parser/xml_parser.py +0 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/springbootai/retry/__init__.py +0 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/springbootai/retry/recovery.py +0 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/springbootai/retry/retry_annotations.py +0 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/springbootai/retry/retry_decorator.py +0 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/springbootai/scheduling/__init__.py +0 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/springbootai/scheduling/scheduler.py +0 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/springbootai/security/__init__.py +0 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/springbootai/security/jwt_utils.py +0 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/springbootai/security/oauth2.py +0 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/springbootai/security/replay_protection.py +0 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/springbootai/security/security_aop.py +0 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/springbootai/security/security_context.py +0 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/springbootai/test/slicing.py +0 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/springbootai/tracing/__init__.py +0 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/springbootai/tracing/skywalking.py +0 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/springbootai/tx/events.py +0 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/springbootai/tx/synchronization.py +0 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/springbootai/utils/__init__.py +0 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/springbootai/utils/bean_utils.py +0 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/springbootai/utils/logger.py +0 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/springbootai/utils/redis_client.py +0 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/springbootai/validation/aop.py +0 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/springbootai/validation/constraints.py +0 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/springbootai/validation/exceptions.py +0 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/springbootai/validation/validator.py +0 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/springbootai/web/__init__.py +0 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/springbootai/web/csrf.py +0 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/springbootai/web/exception_handler.py +0 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/springbootai/web/hateoas.py +0 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/springbootai/web/health.py +0 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/springbootai/web/result.py +0 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/springbootai/web/swagger.py +0 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/springbootai/websocket/annotations.py +0 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/springbootai/websocket/broker.py +0 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/springbootai/websocket/exceptions.py +0 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/springbootai/websocket/handler.py +0 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/springbootai/websocket/router.py +0 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/springbootai/websocket/session.py +0 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/sql/seata_undo_log.sql +0 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/tests/test_actuator.py +0 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/tests/test_actuator_prometheus_admin.py +0 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/tests/test_ai_comprehensive.py +0 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/tests/test_ai_declarative_annotations.py +0 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/tests/test_ai_module.py +0 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/tests/test_annotation_combinations.py +0 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/tests/test_aop_annotations_full.py +0 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/tests/test_audit_time.py +0 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/tests/test_batch.py +0 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/tests/test_bean_utils.py +0 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/tests/test_bus.py +0 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/tests/test_cache_annotations.py +0 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/tests/test_cli.py +0 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/tests/test_cloud_embedded_full.py +0 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/tests/test_component_init_error.py +0 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/tests/test_compositional_annotations.py +0 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/tests/test_conditional_annotations.py +0 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/tests/test_config_binding.py +0 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/tests/test_config_center.py +0 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/tests/test_config_fixes_185.py +0 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/tests/test_connection_resilience.py +0 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/tests/test_core.py +0 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/tests/test_core_annotations_full.py +0 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/tests/test_csrf.py +0 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/tests/test_csv_module.py +0 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/tests/test_data_repository.py +0 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/tests/test_data_rest.py +0 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/tests/test_datasource_routing.py +0 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/tests/test_ddl_auto.py +0 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/tests/test_declarative_aop_post_authorize_recover.py +0 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/tests/test_devtools.py +0 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/tests/test_di_config_event_full.py +0 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/tests/test_excel_module.py +0 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/tests/test_hateoas.py +0 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/tests/test_i18n_module.py +0 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/tests/test_jpa_version_transient.py +0 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/tests/test_kafka.py +0 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/tests/test_langchain_comprehensive.py +0 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/tests/test_langchain_ext.py +0 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/tests/test_langchain_module.py +0 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/tests/test_langgraph_comprehensive.py +0 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/tests/test_langgraph_module.py +0 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/tests/test_logging_config.py +0 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/tests/test_lombok_annotations.py +0 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/tests/test_mcp_module.py +0 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/tests/test_metadata.py +0 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/tests/test_migration.py +0 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/tests/test_nacos_config.py +0 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/tests/test_new_annotations.py +0 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/tests/test_new_features.py +0 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/tests/test_oauth2.py +0 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/tests/test_orm_pymybatis_full.py +0 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/tests/test_production_readiness.py +0 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/tests/test_pymybatis_configuration_hardening.py +0 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/tests/test_pymybatis_contract.py +0 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/tests/test_request_metrics.py +0 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/tests/test_retry.py +0 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/tests/test_scaffold_hardening.py +0 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/tests/test_scheduling.py +0 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/tests/test_seata_at_proxy.py +0 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/tests/test_seata_bridge.py +0 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/tests/test_seata_durable_store.py +0 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/tests/test_security_full.py +0 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/tests/test_security_hardening.py +0 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/tests/test_select_page.py +0 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/tests/test_starter.py +0 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/tests/test_startup_lifecycle.py +0 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/tests/test_swagger_module.py +0 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/tests/test_test_slicing.py +0 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/tests/test_tracing.py +0 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/tests/test_transactional_events.py +0 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/tests/test_validation_module.py +0 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/tests/test_web_annotations_full.py +0 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/tests/test_web_root_mapping.py +0 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/tests/test_web_security_responses.py +0 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/tests/test_web_static_files.py +0 -0
- {springbootai-2.3.3 → springbootai-2.3.5}/tests/test_websocket_module.py +0 -0
|
@@ -1,5 +1,26 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [2.3.5] - 2026-08-20
|
|
4
|
+
|
|
5
|
+
### 文档与发布
|
|
6
|
+
|
|
7
|
+
- 发布版本升级到 `2.3.5`,同步框架主包、扩展模块、PyMyBatis 内嵌版本、README 版本矩阵和打包元数据。
|
|
8
|
+
- README 首页新增 SpringBootAI 在线考试认证与证书说明,提供认证入口、适用场景、备考流程和重点知识范围。
|
|
9
|
+
- 认证平台入口:[http://www.yucg.cn:8230](http://www.yucg.cn:8230)。
|
|
10
|
+
|
|
11
|
+
## [2.3.4] - 2026-08-19
|
|
12
|
+
|
|
13
|
+
### 新增与完善
|
|
14
|
+
|
|
15
|
+
- 新增声明式 AI 注解:`@Prompt`、`@RAG`、`@StructuredOutput`、`@Agent`、`@Embedding`、`@VectorStore`、`@AiRetry`、`@AiCache`、`@TokenUsage`、`@ContentModeration`;复用 ChatClient、RAG、Agent、向量库和可观测性组件,并支持同步、异步与 Pydantic v1/v2。
|
|
16
|
+
- 新增 AI 注解中文用例、实时功能目录和模块文档;未配置 AI Bean 或可选依赖时不影响普通应用启动。
|
|
17
|
+
- 完善 Actuator Admin、Nacos 动态刷新、请求监控与文件上传能力,并补充对应文档与回归测试。
|
|
18
|
+
- 修复 PyMyBatis 参数检测将 Python 源码中的普通 `#` 注释误判为 SQL 注入的问题;真实引号/分号后的 SQL 注释截断攻击仍会被拦截。
|
|
19
|
+
|
|
20
|
+
### 兼容性
|
|
21
|
+
|
|
22
|
+
- AI 自动配置同时支持 `springbootai.ai` 与 Spring 风格的 `spring.ai` 配置前缀,避免已有配置中的 API Key 被遗漏。
|
|
23
|
+
|
|
3
24
|
## [2.3.3] - 2026-08-18
|
|
4
25
|
|
|
5
26
|
### 测试补充与文档完善
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: springbootAI
|
|
3
|
-
Version: 2.3.
|
|
3
|
+
Version: 2.3.5
|
|
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
|
|
@@ -163,9 +163,41 @@ Dynamic: license-file
|
|
|
163
163
|
# SpringBootAI
|
|
164
164
|
|
|
165
165
|
<p align="center">
|
|
166
|
-
<img src="doc/images/hero-banner.png" alt="SpringBootAI 功能总览" width="100%" />
|
|
166
|
+
<img src="https://raw.githubusercontent.com/YUCONGGEN/springbootAI/master/doc/images/hero-banner.png" alt="SpringBootAI 功能总览" width="100%" />
|
|
167
167
|
</p>
|
|
168
168
|
|
|
169
|
+
## SpringBootAI 考试认证与证书
|
|
170
|
+
|
|
171
|
+
SpringBootAI 已提供配套的在线考试认证平台,学习者、团队成员和项目使用方可以通过认证考试检验自己对框架核心能力的掌握情况,并在通过考试后获得对应证书。
|
|
172
|
+
|
|
173
|
+
认证入口:[http://www.yucg.cn:8230](http://www.yucg.cn:8230)
|
|
174
|
+
|
|
175
|
+
认证适合以下场景:
|
|
176
|
+
|
|
177
|
+
- **个人学习证明**:用于记录自己已经系统学习 SpringBootAI 的 Web、IoC、配置、数据访问、AOP、AI 扩展和生产治理等核心内容。
|
|
178
|
+
- **团队能力评估**:团队引入 SpringBootAI 前,可以让成员通过统一考试确认基础概念、开发规范和常见问题处理能力。
|
|
179
|
+
- **项目交付背书**:在培训、内部推广、项目验收或技术选型说明中,证书可作为使用者熟悉框架体系和最佳实践的辅助证明。
|
|
180
|
+
- **持续学习路径**:认证内容覆盖从入门到进阶的关键知识点,适合结合 README、模块文档和示例工程逐步学习后再参加考试。
|
|
181
|
+
|
|
182
|
+
建议的认证准备流程:
|
|
183
|
+
|
|
184
|
+
1. 先按 README 中的“10 分钟跑通第一个接口”完成本地环境搭建,确认能够创建应用、启动服务并访问 Swagger。
|
|
185
|
+
2. 阅读 [新手指南](https://github.com/YUCONGGEN/springbootAI/blob/master/doc/BEGINNER_GUIDE.md),理解 `@SpringBootApplication`、`@RestController`、`@Service`、`@Autowired`、配置文件和依赖注入的基本用法。
|
|
186
|
+
3. 根据实际使用方向阅读模块文档,例如 Web MVC、ORM、事务、缓存、安全、配置绑定、测试切片、AI、LangChain、LangGraph、MCP 和 Cloud 微服务等。
|
|
187
|
+
4. 运行示例或编写一个小型业务接口,至少覆盖 Controller、Service、配置读取、异常处理、Swagger 文档和数据访问中的若干能力。
|
|
188
|
+
5. 访问认证平台参加考试,通过后按平台页面提示查看、下载或领取证书。证书信息、考试规则、题量、通过标准和有效期以认证平台展示为准。
|
|
189
|
+
|
|
190
|
+
认证重点建议关注:
|
|
191
|
+
|
|
192
|
+
| 方向 | 建议掌握内容 |
|
|
193
|
+
|---|---|
|
|
194
|
+
| 快速入门 | 安装方式、项目结构、启动入口、扫描包、`application.yml`、Swagger 访问 |
|
|
195
|
+
| Web 与 IoC | 路由映射、参数绑定、Controller/Service 分层、Bean 注册、依赖注入、生命周期 |
|
|
196
|
+
| 数据与事务 | PyMyBatis Mapper、XML Mapper、分页、动态 SQL、事务边界、回滚行为 |
|
|
197
|
+
| 工程治理 | 配置合并、Profile、日志、健康检查、Prometheus、限流、熔断、测试切片 |
|
|
198
|
+
| 安全能力 | JWT、密码加密、SQL 注入防护、CSRF、OAuth2、访问控制与常见错误处理 |
|
|
199
|
+
| AI 生态 | ChatClient、Tools、RAG、Advisor、LangChain、LangGraph、MCP client/server |
|
|
200
|
+
|
|
169
201
|
[](https://pypi.org/project/springbootAI/)
|
|
170
202
|
[](https://pypi.org/project/springbootAI/)
|
|
171
203
|
[](https://github.com/YUCONGGEN/springbootAI/actions/workflows/ci.yml)
|
|
@@ -183,7 +215,7 @@ SpringBootAI 是一个采用 Spring 风格注解和分层结构的 Python 应用
|
|
|
183
215
|
| AI 与编排 | 模型调用、Tools、RAG、Chain、状态图、MCP client/server | LangChain / LangGraph / 官方 MCP SDK |
|
|
184
216
|
| 生产治理 | 健康检查、Prometheus、限流熔断、追踪、Swagger | prometheus-client / OpenTelemetry / OpenAPI |
|
|
185
217
|
|
|
186
|
-
当前版本是 `2.3.
|
|
218
|
+
当前版本是 `2.3.5`;支持 Python 3.10、3.11 和 3.12,许可证为 MIT。项目仍标记为 Beta。用于公网高并发、合规敏感或支付/订单/库存等核心系统前,必须完成目标数据库、流量模型、故障恢复和安全基线验证。内嵌 Gateway 适合内部路由,不替代公网 Nginx/Kong/WAF;Seata `distributed` 对接官方 TC + TCC 回调;`at` 模式通过 ORM 拦截器自动生成 undo_log 实现自动回滚。
|
|
187
219
|
|
|
188
220
|
[新手指南](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
221
|
|
|
@@ -364,10 +396,10 @@ SpringBootAI 是一个 **Python Web 框架**。它把 Java Spring Boot 的"注
|
|
|
364
396
|
|
|
365
397
|
| 组件 | 当前版本 |
|
|
366
398
|
|------|----------|
|
|
367
|
-
| `springbootai` 框架 API | 2.3.
|
|
368
|
-
| `springbootai.orm.pymybatis` | 2.3.
|
|
369
|
-
| `springbootai.ai` AI 模块 | 2.3.
|
|
370
|
-
| `springbootai.langchain` LangChain 模块 | 2.3.
|
|
399
|
+
| `springbootai` 框架 API | 2.3.5 |
|
|
400
|
+
| `springbootai.orm.pymybatis` | 2.3.5 |
|
|
401
|
+
| `springbootai.ai` AI 模块 | 2.3.5 |
|
|
402
|
+
| `springbootai.langchain` LangChain 模块 | 2.3.5 |
|
|
371
403
|
| Python | 3.10+ |
|
|
372
404
|
|
|
373
405
|
### 1.4 适合什么场景
|
|
@@ -1,9 +1,41 @@
|
|
|
1
1
|
# SpringBootAI
|
|
2
2
|
|
|
3
3
|
<p align="center">
|
|
4
|
-
<img src="doc/images/hero-banner.png" alt="SpringBootAI 功能总览" width="100%" />
|
|
4
|
+
<img src="https://raw.githubusercontent.com/YUCONGGEN/springbootAI/master/doc/images/hero-banner.png" alt="SpringBootAI 功能总览" width="100%" />
|
|
5
5
|
</p>
|
|
6
6
|
|
|
7
|
+
## SpringBootAI 考试认证与证书
|
|
8
|
+
|
|
9
|
+
SpringBootAI 已提供配套的在线考试认证平台,学习者、团队成员和项目使用方可以通过认证考试检验自己对框架核心能力的掌握情况,并在通过考试后获得对应证书。
|
|
10
|
+
|
|
11
|
+
认证入口:[http://www.yucg.cn:8230](http://www.yucg.cn:8230)
|
|
12
|
+
|
|
13
|
+
认证适合以下场景:
|
|
14
|
+
|
|
15
|
+
- **个人学习证明**:用于记录自己已经系统学习 SpringBootAI 的 Web、IoC、配置、数据访问、AOP、AI 扩展和生产治理等核心内容。
|
|
16
|
+
- **团队能力评估**:团队引入 SpringBootAI 前,可以让成员通过统一考试确认基础概念、开发规范和常见问题处理能力。
|
|
17
|
+
- **项目交付背书**:在培训、内部推广、项目验收或技术选型说明中,证书可作为使用者熟悉框架体系和最佳实践的辅助证明。
|
|
18
|
+
- **持续学习路径**:认证内容覆盖从入门到进阶的关键知识点,适合结合 README、模块文档和示例工程逐步学习后再参加考试。
|
|
19
|
+
|
|
20
|
+
建议的认证准备流程:
|
|
21
|
+
|
|
22
|
+
1. 先按 README 中的“10 分钟跑通第一个接口”完成本地环境搭建,确认能够创建应用、启动服务并访问 Swagger。
|
|
23
|
+
2. 阅读 [新手指南](https://github.com/YUCONGGEN/springbootAI/blob/master/doc/BEGINNER_GUIDE.md),理解 `@SpringBootApplication`、`@RestController`、`@Service`、`@Autowired`、配置文件和依赖注入的基本用法。
|
|
24
|
+
3. 根据实际使用方向阅读模块文档,例如 Web MVC、ORM、事务、缓存、安全、配置绑定、测试切片、AI、LangChain、LangGraph、MCP 和 Cloud 微服务等。
|
|
25
|
+
4. 运行示例或编写一个小型业务接口,至少覆盖 Controller、Service、配置读取、异常处理、Swagger 文档和数据访问中的若干能力。
|
|
26
|
+
5. 访问认证平台参加考试,通过后按平台页面提示查看、下载或领取证书。证书信息、考试规则、题量、通过标准和有效期以认证平台展示为准。
|
|
27
|
+
|
|
28
|
+
认证重点建议关注:
|
|
29
|
+
|
|
30
|
+
| 方向 | 建议掌握内容 |
|
|
31
|
+
|---|---|
|
|
32
|
+
| 快速入门 | 安装方式、项目结构、启动入口、扫描包、`application.yml`、Swagger 访问 |
|
|
33
|
+
| Web 与 IoC | 路由映射、参数绑定、Controller/Service 分层、Bean 注册、依赖注入、生命周期 |
|
|
34
|
+
| 数据与事务 | PyMyBatis Mapper、XML Mapper、分页、动态 SQL、事务边界、回滚行为 |
|
|
35
|
+
| 工程治理 | 配置合并、Profile、日志、健康检查、Prometheus、限流、熔断、测试切片 |
|
|
36
|
+
| 安全能力 | JWT、密码加密、SQL 注入防护、CSRF、OAuth2、访问控制与常见错误处理 |
|
|
37
|
+
| AI 生态 | ChatClient、Tools、RAG、Advisor、LangChain、LangGraph、MCP client/server |
|
|
38
|
+
|
|
7
39
|
[](https://pypi.org/project/springbootAI/)
|
|
8
40
|
[](https://pypi.org/project/springbootAI/)
|
|
9
41
|
[](https://github.com/YUCONGGEN/springbootAI/actions/workflows/ci.yml)
|
|
@@ -21,7 +53,7 @@ SpringBootAI 是一个采用 Spring 风格注解和分层结构的 Python 应用
|
|
|
21
53
|
| AI 与编排 | 模型调用、Tools、RAG、Chain、状态图、MCP client/server | LangChain / LangGraph / 官方 MCP SDK |
|
|
22
54
|
| 生产治理 | 健康检查、Prometheus、限流熔断、追踪、Swagger | prometheus-client / OpenTelemetry / OpenAPI |
|
|
23
55
|
|
|
24
|
-
当前版本是 `2.3.
|
|
56
|
+
当前版本是 `2.3.5`;支持 Python 3.10、3.11 和 3.12,许可证为 MIT。项目仍标记为 Beta。用于公网高并发、合规敏感或支付/订单/库存等核心系统前,必须完成目标数据库、流量模型、故障恢复和安全基线验证。内嵌 Gateway 适合内部路由,不替代公网 Nginx/Kong/WAF;Seata `distributed` 对接官方 TC + TCC 回调;`at` 模式通过 ORM 拦截器自动生成 undo_log 实现自动回滚。
|
|
25
57
|
|
|
26
58
|
[新手指南](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)
|
|
27
59
|
|
|
@@ -202,10 +234,10 @@ SpringBootAI 是一个 **Python Web 框架**。它把 Java Spring Boot 的"注
|
|
|
202
234
|
|
|
203
235
|
| 组件 | 当前版本 |
|
|
204
236
|
|------|----------|
|
|
205
|
-
| `springbootai` 框架 API | 2.3.
|
|
206
|
-
| `springbootai.orm.pymybatis` | 2.3.
|
|
207
|
-
| `springbootai.ai` AI 模块 | 2.3.
|
|
208
|
-
| `springbootai.langchain` LangChain 模块 | 2.3.
|
|
237
|
+
| `springbootai` 框架 API | 2.3.5 |
|
|
238
|
+
| `springbootai.orm.pymybatis` | 2.3.5 |
|
|
239
|
+
| `springbootai.ai` AI 模块 | 2.3.5 |
|
|
240
|
+
| `springbootai.langchain` LangChain 模块 | 2.3.5 |
|
|
209
241
|
| Python | 3.10+ |
|
|
210
242
|
|
|
211
243
|
### 1.4 适合什么场景
|
|
@@ -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.5"
|
|
16
16
|
description = "Spring-style Python framework with Web, ORM, Cloud and AI integrations"
|
|
17
17
|
readme = "README.md"
|
|
18
18
|
license = "MIT"
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: springbootAI
|
|
3
|
-
Version: 2.3.
|
|
3
|
+
Version: 2.3.5
|
|
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
|
|
@@ -163,9 +163,41 @@ Dynamic: license-file
|
|
|
163
163
|
# SpringBootAI
|
|
164
164
|
|
|
165
165
|
<p align="center">
|
|
166
|
-
<img src="doc/images/hero-banner.png" alt="SpringBootAI 功能总览" width="100%" />
|
|
166
|
+
<img src="https://raw.githubusercontent.com/YUCONGGEN/springbootAI/master/doc/images/hero-banner.png" alt="SpringBootAI 功能总览" width="100%" />
|
|
167
167
|
</p>
|
|
168
168
|
|
|
169
|
+
## SpringBootAI 考试认证与证书
|
|
170
|
+
|
|
171
|
+
SpringBootAI 已提供配套的在线考试认证平台,学习者、团队成员和项目使用方可以通过认证考试检验自己对框架核心能力的掌握情况,并在通过考试后获得对应证书。
|
|
172
|
+
|
|
173
|
+
认证入口:[http://www.yucg.cn:8230](http://www.yucg.cn:8230)
|
|
174
|
+
|
|
175
|
+
认证适合以下场景:
|
|
176
|
+
|
|
177
|
+
- **个人学习证明**:用于记录自己已经系统学习 SpringBootAI 的 Web、IoC、配置、数据访问、AOP、AI 扩展和生产治理等核心内容。
|
|
178
|
+
- **团队能力评估**:团队引入 SpringBootAI 前,可以让成员通过统一考试确认基础概念、开发规范和常见问题处理能力。
|
|
179
|
+
- **项目交付背书**:在培训、内部推广、项目验收或技术选型说明中,证书可作为使用者熟悉框架体系和最佳实践的辅助证明。
|
|
180
|
+
- **持续学习路径**:认证内容覆盖从入门到进阶的关键知识点,适合结合 README、模块文档和示例工程逐步学习后再参加考试。
|
|
181
|
+
|
|
182
|
+
建议的认证准备流程:
|
|
183
|
+
|
|
184
|
+
1. 先按 README 中的“10 分钟跑通第一个接口”完成本地环境搭建,确认能够创建应用、启动服务并访问 Swagger。
|
|
185
|
+
2. 阅读 [新手指南](https://github.com/YUCONGGEN/springbootAI/blob/master/doc/BEGINNER_GUIDE.md),理解 `@SpringBootApplication`、`@RestController`、`@Service`、`@Autowired`、配置文件和依赖注入的基本用法。
|
|
186
|
+
3. 根据实际使用方向阅读模块文档,例如 Web MVC、ORM、事务、缓存、安全、配置绑定、测试切片、AI、LangChain、LangGraph、MCP 和 Cloud 微服务等。
|
|
187
|
+
4. 运行示例或编写一个小型业务接口,至少覆盖 Controller、Service、配置读取、异常处理、Swagger 文档和数据访问中的若干能力。
|
|
188
|
+
5. 访问认证平台参加考试,通过后按平台页面提示查看、下载或领取证书。证书信息、考试规则、题量、通过标准和有效期以认证平台展示为准。
|
|
189
|
+
|
|
190
|
+
认证重点建议关注:
|
|
191
|
+
|
|
192
|
+
| 方向 | 建议掌握内容 |
|
|
193
|
+
|---|---|
|
|
194
|
+
| 快速入门 | 安装方式、项目结构、启动入口、扫描包、`application.yml`、Swagger 访问 |
|
|
195
|
+
| Web 与 IoC | 路由映射、参数绑定、Controller/Service 分层、Bean 注册、依赖注入、生命周期 |
|
|
196
|
+
| 数据与事务 | PyMyBatis Mapper、XML Mapper、分页、动态 SQL、事务边界、回滚行为 |
|
|
197
|
+
| 工程治理 | 配置合并、Profile、日志、健康检查、Prometheus、限流、熔断、测试切片 |
|
|
198
|
+
| 安全能力 | JWT、密码加密、SQL 注入防护、CSRF、OAuth2、访问控制与常见错误处理 |
|
|
199
|
+
| AI 生态 | ChatClient、Tools、RAG、Advisor、LangChain、LangGraph、MCP client/server |
|
|
200
|
+
|
|
169
201
|
[](https://pypi.org/project/springbootAI/)
|
|
170
202
|
[](https://pypi.org/project/springbootAI/)
|
|
171
203
|
[](https://github.com/YUCONGGEN/springbootAI/actions/workflows/ci.yml)
|
|
@@ -183,7 +215,7 @@ SpringBootAI 是一个采用 Spring 风格注解和分层结构的 Python 应用
|
|
|
183
215
|
| AI 与编排 | 模型调用、Tools、RAG、Chain、状态图、MCP client/server | LangChain / LangGraph / 官方 MCP SDK |
|
|
184
216
|
| 生产治理 | 健康检查、Prometheus、限流熔断、追踪、Swagger | prometheus-client / OpenTelemetry / OpenAPI |
|
|
185
217
|
|
|
186
|
-
当前版本是 `2.3.
|
|
218
|
+
当前版本是 `2.3.5`;支持 Python 3.10、3.11 和 3.12,许可证为 MIT。项目仍标记为 Beta。用于公网高并发、合规敏感或支付/订单/库存等核心系统前,必须完成目标数据库、流量模型、故障恢复和安全基线验证。内嵌 Gateway 适合内部路由,不替代公网 Nginx/Kong/WAF;Seata `distributed` 对接官方 TC + TCC 回调;`at` 模式通过 ORM 拦截器自动生成 undo_log 实现自动回滚。
|
|
187
219
|
|
|
188
220
|
[新手指南](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
221
|
|
|
@@ -364,10 +396,10 @@ SpringBootAI 是一个 **Python Web 框架**。它把 Java Spring Boot 的"注
|
|
|
364
396
|
|
|
365
397
|
| 组件 | 当前版本 |
|
|
366
398
|
|------|----------|
|
|
367
|
-
| `springbootai` 框架 API | 2.3.
|
|
368
|
-
| `springbootai.orm.pymybatis` | 2.3.
|
|
369
|
-
| `springbootai.ai` AI 模块 | 2.3.
|
|
370
|
-
| `springbootai.langchain` LangChain 模块 | 2.3.
|
|
399
|
+
| `springbootai` 框架 API | 2.3.5 |
|
|
400
|
+
| `springbootai.orm.pymybatis` | 2.3.5 |
|
|
401
|
+
| `springbootai.ai` AI 模块 | 2.3.5 |
|
|
402
|
+
| `springbootai.langchain` LangChain 模块 | 2.3.5 |
|
|
371
403
|
| Python | 3.10+ |
|
|
372
404
|
|
|
373
405
|
### 1.4 适合什么场景
|
|
@@ -20,6 +20,7 @@ springbootai/devtools.py
|
|
|
20
20
|
springbootai/main.py
|
|
21
21
|
springbootai/ai/__init__.py
|
|
22
22
|
springbootai/ai/advisors.py
|
|
23
|
+
springbootai/ai/annotation_runtime.py
|
|
23
24
|
springbootai/ai/annotations.py
|
|
24
25
|
springbootai/ai/autoconfig.py
|
|
25
26
|
springbootai/ai/core.py
|
|
@@ -75,6 +76,7 @@ springbootai/context/__init__.py
|
|
|
75
76
|
springbootai/context/application_context.py
|
|
76
77
|
springbootai/context/bean_definition.py
|
|
77
78
|
springbootai/context/bean_factory.py
|
|
79
|
+
springbootai/context/lifecycle.py
|
|
78
80
|
springbootai/context/registry.py
|
|
79
81
|
springbootai/context/scanner.py
|
|
80
82
|
springbootai/core/__init__.py
|
|
@@ -260,12 +262,14 @@ springbootai/websocket/session.py
|
|
|
260
262
|
sql/seata_undo_log.sql
|
|
261
263
|
tests/test_actuator.py
|
|
262
264
|
tests/test_actuator_prometheus_admin.py
|
|
265
|
+
tests/test_ai_annotations.py
|
|
263
266
|
tests/test_ai_comprehensive.py
|
|
264
267
|
tests/test_ai_declarative_annotations.py
|
|
265
268
|
tests/test_ai_module.py
|
|
266
269
|
tests/test_annotation_combinations.py
|
|
267
270
|
tests/test_annotations_contract.py
|
|
268
271
|
tests/test_aop_annotations_full.py
|
|
272
|
+
tests/test_aop_pointcut_enhancements.py
|
|
269
273
|
tests/test_audit_time.py
|
|
270
274
|
tests/test_batch.py
|
|
271
275
|
tests/test_bean_utils.py
|
|
@@ -294,6 +298,7 @@ tests/test_di_config_event_full.py
|
|
|
294
298
|
tests/test_excel_module.py
|
|
295
299
|
tests/test_hateoas.py
|
|
296
300
|
tests/test_i18n_module.py
|
|
301
|
+
tests/test_ioc_lifecycle_enhancements.py
|
|
297
302
|
tests/test_jpa_version_transient.py
|
|
298
303
|
tests/test_kafka.py
|
|
299
304
|
tests/test_langchain_comprehensive.py
|
|
@@ -316,6 +321,7 @@ tests/test_pymybatis_configuration_hardening.py
|
|
|
316
321
|
tests/test_pymybatis_contract.py
|
|
317
322
|
tests/test_request_metrics.py
|
|
318
323
|
tests/test_retry.py
|
|
324
|
+
tests/test_runtime_configuration_fixes.py
|
|
319
325
|
tests/test_scaffold_hardening.py
|
|
320
326
|
tests/test_scheduling.py
|
|
321
327
|
tests/test_seata_at_proxy.py
|
|
@@ -333,6 +339,7 @@ tests/test_tracing.py
|
|
|
333
339
|
tests/test_transactional_events.py
|
|
334
340
|
tests/test_validation_module.py
|
|
335
341
|
tests/test_web_annotations_full.py
|
|
342
|
+
tests/test_web_file_upload.py
|
|
336
343
|
tests/test_web_root_mapping.py
|
|
337
344
|
tests/test_web_security_responses.py
|
|
338
345
|
tests/test_web_static_files.py
|
|
@@ -1,12 +1,25 @@
|
|
|
1
1
|
from .annotations import SpringBootApplication
|
|
2
2
|
from .annotations import *
|
|
3
|
+
from .ai.annotations import (
|
|
4
|
+
Agent,
|
|
5
|
+
AiCache,
|
|
6
|
+
AiRetry,
|
|
7
|
+
ContentModeration,
|
|
8
|
+
Embedding,
|
|
9
|
+
Prompt,
|
|
10
|
+
RAG,
|
|
11
|
+
StructuredOutput,
|
|
12
|
+
TokenUsage,
|
|
13
|
+
VectorStore,
|
|
14
|
+
)
|
|
15
|
+
from .ai.annotation_runtime import ContentModerationError
|
|
3
16
|
from .context import *
|
|
4
17
|
from .web import *
|
|
5
18
|
from .config import *
|
|
6
19
|
from .utils import *
|
|
7
20
|
from .main import create_app, run, SpringApplication, run_cli
|
|
8
21
|
|
|
9
|
-
__version__ = "2.3.
|
|
22
|
+
__version__ = "2.3.5"
|
|
10
23
|
__author__ = "yuconggen"
|
|
11
24
|
__license__ = "MIT"
|
|
12
25
|
|
|
@@ -126,6 +139,17 @@ __all__ = [
|
|
|
126
139
|
'Get',
|
|
127
140
|
'Set',
|
|
128
141
|
'ToString',
|
|
142
|
+
'Prompt',
|
|
143
|
+
'RAG',
|
|
144
|
+
'StructuredOutput',
|
|
145
|
+
'Agent',
|
|
146
|
+
'Embedding',
|
|
147
|
+
'VectorStore',
|
|
148
|
+
'AiRetry',
|
|
149
|
+
'AiCache',
|
|
150
|
+
'TokenUsage',
|
|
151
|
+
'ContentModeration',
|
|
152
|
+
'ContentModerationError',
|
|
129
153
|
'EnableDiscoveryClient',
|
|
130
154
|
'NacosValue',
|
|
131
155
|
'RefreshScope',
|
|
@@ -18,7 +18,13 @@ from springbootai.ai.core import (
|
|
|
18
18
|
ChatResponse, EmbeddingModel, Generation, Message, MessageType,
|
|
19
19
|
PromptSpec,
|
|
20
20
|
)
|
|
21
|
-
from springbootai.ai.annotations import
|
|
21
|
+
from springbootai.ai.annotations import (
|
|
22
|
+
Agent, AiAdvisor, AiCache, AiClient, AiMemory, AiRetry, ContentModeration,
|
|
23
|
+
Embedding, Prompt, RAG, StructuredOutput, TokenUsage, Tool, VectorStore,
|
|
24
|
+
)
|
|
25
|
+
# ``VectorStore`` 在本模块历史上表示向量库接口;保留该公开名称,注解通过
|
|
26
|
+
# ``springbootai.ai.annotations.VectorStore`` 或这个别名使用。
|
|
27
|
+
VectorStoreAnnotation = VectorStore
|
|
22
28
|
from springbootai.ai.advisors import (
|
|
23
29
|
MessageChatMemoryAdvisor, QuestionAnswerAdvisor, SimpleLoggerAdvisor,
|
|
24
30
|
)
|
|
@@ -46,8 +52,9 @@ from springbootai.ai.resilience import (
|
|
|
46
52
|
)
|
|
47
53
|
from springbootai.ai.observability import AIMetrics, ai_metrics
|
|
48
54
|
from springbootai.ai.autoconfig import AIProperties, bind_ai_config, configure_ai
|
|
55
|
+
from springbootai.ai.annotation_runtime import ContentModerationError
|
|
49
56
|
|
|
50
|
-
__version__ = "2.3.
|
|
57
|
+
__version__ = "2.3.5"
|
|
51
58
|
|
|
52
59
|
__all__ = [
|
|
53
60
|
# core
|
|
@@ -55,7 +62,11 @@ __all__ = [
|
|
|
55
62
|
"ChatModel", "ChatResponse", "EmbeddingModel", "Generation", "Message",
|
|
56
63
|
"MessageType", "PromptSpec",
|
|
57
64
|
# annotations
|
|
58
|
-
"AiAdvisor", "AiClient", "AiMemory", "Tool",
|
|
65
|
+
"AiAdvisor", "AiClient", "AiMemory", "Tool", "Prompt", "RAG",
|
|
66
|
+
"StructuredOutput", "Agent", "Embedding", "VectorStore", "AiRetry",
|
|
67
|
+
"AiCache", "TokenUsage", "ContentModeration",
|
|
68
|
+
"VectorStoreAnnotation",
|
|
69
|
+
"ContentModerationError",
|
|
59
70
|
# advisors
|
|
60
71
|
"MessageChatMemoryAdvisor", "QuestionAnswerAdvisor", "SimpleLoggerAdvisor",
|
|
61
72
|
# memory
|