@ngxtm/devkit 3.4.0 → 3.4.1
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.
- package/package.json +2 -1
- package/rules/README.md +141 -0
- package/rules/dart/best-practices/SKILL.md +23 -0
- package/rules/dart/language/SKILL.md +52 -0
- package/rules/dart/tooling/SKILL.md +43 -0
- package/rules/dotnet/aspnet-core/SKILL.md +92 -0
- package/rules/dotnet/aspnet-core/references/REFERENCE.md +335 -0
- package/rules/dotnet/best-practices/SKILL.md +101 -0
- package/rules/dotnet/best-practices/references/REFERENCE.md +256 -0
- package/rules/dotnet/blazor/SKILL.md +146 -0
- package/rules/dotnet/blazor/references/REFERENCE.md +392 -0
- package/rules/dotnet/language/SKILL.md +82 -0
- package/rules/dotnet/language/references/REFERENCE.md +222 -0
- package/rules/dotnet/patterns.rule.md +388 -0
- package/rules/dotnet/razor-pages/SKILL.md +124 -0
- package/rules/dotnet/razor-pages/references/REFERENCE.md +321 -0
- package/rules/dotnet/security/SKILL.md +89 -0
- package/rules/dotnet/security/references/REFERENCE.md +295 -0
- package/rules/dotnet/tooling/SKILL.md +92 -0
- package/rules/dotnet/tooling/references/REFERENCE.md +300 -0
- package/rules/flutter/auto-route-navigation/SKILL.md +43 -0
- package/rules/flutter/auto-route-navigation/references/REFERENCE.md +19 -0
- package/rules/flutter/auto-route-navigation/references/router-config.md +62 -0
- package/rules/flutter/bloc-state-management/SKILL.md +64 -0
- package/rules/flutter/bloc-state-management/references/REFERENCE.md +20 -0
- package/rules/flutter/bloc-state-management/references/auth-bloc-example.md +52 -0
- package/rules/flutter/bloc-state-management/references/equatable-usage.md +56 -0
- package/rules/flutter/bloc-state-management/references/property-based-state.md +68 -0
- package/rules/flutter/bloc.rule.md +76 -0
- package/rules/flutter/cicd/SKILL.md +48 -0
- package/rules/flutter/cicd/references/advanced-workflow.md +66 -0
- package/rules/flutter/cicd/references/fastlane.md +139 -0
- package/rules/flutter/cicd/references/github-actions.md +59 -0
- package/rules/flutter/dependency-injection/SKILL.md +42 -0
- package/rules/flutter/dependency-injection/references/REFERENCE.md +15 -0
- package/rules/flutter/dependency-injection/references/modules.md +37 -0
- package/rules/flutter/error-handling/SKILL.md +32 -0
- package/rules/flutter/error-handling/references/REFERENCE.md +19 -0
- package/rules/flutter/error-handling/references/error-mapping.md +31 -0
- package/rules/flutter/feature-based-clean-architecture/SKILL.md +46 -0
- package/rules/flutter/feature-based-clean-architecture/references/REFERENCE.md +14 -0
- package/rules/flutter/feature-based-clean-architecture/references/folder-structure.md +36 -0
- package/rules/flutter/getx-navigation/SKILL.md +70 -0
- package/rules/flutter/getx-navigation/references/app-pages.md +40 -0
- package/rules/flutter/getx-navigation/references/middleware-example.md +29 -0
- package/rules/flutter/getx-state-management/SKILL.md +76 -0
- package/rules/flutter/getx-state-management/references/binding-example.md +32 -0
- package/rules/flutter/getx-state-management/references/reactive-vs-simple.md +39 -0
- package/rules/flutter/go-router-navigation/SKILL.md +57 -0
- package/rules/flutter/idiomatic-flutter/SKILL.md +20 -0
- package/rules/flutter/layer-based-clean-architecture/SKILL.md +50 -0
- package/rules/flutter/layer-based-clean-architecture/references/REFERENCE.md +60 -0
- package/rules/flutter/layer-based-clean-architecture/references/repository-mapping.md +50 -0
- package/rules/flutter/localization/SKILL.md +50 -0
- package/rules/flutter/localization/references/REFERENCE.md +48 -0
- package/rules/flutter/localization/references/sheet-loader.md +33 -0
- package/rules/flutter/navigator-v1-navigation/SKILL.md +71 -0
- package/rules/flutter/navigator-v1-navigation/references/on-generate-route.md +48 -0
- package/rules/flutter/performance/SKILL.md +24 -0
- package/rules/flutter/retrofit-networking/SKILL.md +51 -0
- package/rules/flutter/retrofit-networking/references/REFERENCE.md +19 -0
- package/rules/flutter/retrofit-networking/references/token-refresh.md +40 -0
- package/rules/flutter/riverpod-state-management/SKILL.md +53 -0
- package/rules/flutter/riverpod-state-management/references/architecture.md +124 -0
- package/rules/flutter/riverpod-state-management/references/best-practices.md +89 -0
- package/rules/flutter/riverpod-state-management/references/testing.md +73 -0
- package/rules/flutter/riverpod.rule.md +78 -0
- package/rules/flutter/security/SKILL.md +33 -0
- package/rules/flutter/security/references/REFERENCE.md +15 -0
- package/rules/flutter/security/references/network-security.md +28 -0
- package/rules/flutter/testing/SKILL.md +44 -0
- package/rules/flutter/testing/references/REFERENCE.md +21 -0
- package/rules/flutter/testing/references/bloc-testing.md +38 -0
- package/rules/flutter/testing/references/integration-testing.md +128 -0
- package/rules/flutter/testing/references/robot-pattern.md +82 -0
- package/rules/flutter/testing/references/unit-testing.md +130 -0
- package/rules/flutter/testing/references/widget-testing.md +120 -0
- package/rules/flutter/widgets/SKILL.md +37 -0
- package/rules/golang/chi-router/SKILL.md +219 -0
- package/rules/golang/chi-router/references/REFERENCE.md +13 -0
- package/rules/golang/chi-router/references/routing-patterns.md +205 -0
- package/rules/golang/cobra-cli/SKILL.md +227 -0
- package/rules/golang/cobra-cli/references/REFERENCE.md +13 -0
- package/rules/golang/cobra-cli/references/command-patterns.md +224 -0
- package/rules/golang/core/SKILL.md +210 -0
- package/rules/golang/core/references/REFERENCE.md +14 -0
- package/rules/golang/core/references/concurrency-patterns.md +114 -0
- package/rules/golang/core/references/error-handling.md +87 -0
- package/rules/golang/echo-framework/SKILL.md +215 -0
- package/rules/golang/echo-framework/references/REFERENCE.md +14 -0
- package/rules/golang/echo-framework/references/middleware-patterns.md +141 -0
- package/rules/golang/echo-framework/references/routing-patterns.md +140 -0
- package/rules/golang/ent-orm/SKILL.md +239 -0
- package/rules/golang/ent-orm/references/REFERENCE.md +13 -0
- package/rules/golang/ent-orm/references/schema-patterns.md +255 -0
- package/rules/golang/fiber-framework/SKILL.md +196 -0
- package/rules/golang/fiber-framework/references/REFERENCE.md +13 -0
- package/rules/golang/fiber-framework/references/routing-patterns.md +191 -0
- package/rules/golang/gin-framework/SKILL.md +205 -0
- package/rules/golang/gin-framework/references/REFERENCE.md +14 -0
- package/rules/golang/gin-framework/references/middleware-patterns.md +119 -0
- package/rules/golang/gorm-orm/SKILL.md +196 -0
- package/rules/golang/gorm-orm/references/REFERENCE.md +14 -0
- package/rules/golang/gorm-orm/references/model-definitions.md +167 -0
- package/rules/golang/gorm-orm/references/query-patterns.md +161 -0
- package/rules/golang/grpc/SKILL.md +231 -0
- package/rules/golang/grpc/references/REFERENCE.md +13 -0
- package/rules/golang/grpc/references/service-patterns.md +276 -0
- package/rules/golang/testify/SKILL.md +239 -0
- package/rules/golang/testify/references/REFERENCE.md +13 -0
- package/rules/golang/testify/references/assert-patterns.md +170 -0
- package/rules/golang/validator/SKILL.md +234 -0
- package/rules/golang/validator/references/REFERENCE.md +13 -0
- package/rules/golang/validator/references/validation-tags.md +211 -0
- package/rules/golang/viper-config/SKILL.md +244 -0
- package/rules/golang/viper-config/references/REFERENCE.md +13 -0
- package/rules/golang/viper-config/references/config-loading.md +181 -0
- package/rules/golang/wire-di/SKILL.md +243 -0
- package/rules/golang/wire-di/references/REFERENCE.md +13 -0
- package/rules/golang/wire-di/references/provider-patterns.md +193 -0
- package/rules/golang/zap-logging/SKILL.md +203 -0
- package/rules/golang/zap-logging/references/REFERENCE.md +13 -0
- package/rules/golang/zap-logging/references/logger-config.md +165 -0
- package/rules/java/build-gradle/SKILL.md +92 -0
- package/rules/java/build-gradle/references/REFERENCE.md +14 -0
- package/rules/java/build-gradle/references/kotlin-dsl.md +118 -0
- package/rules/java/build-gradle/references/task-configuration.md +132 -0
- package/rules/java/build-maven/SKILL.md +86 -0
- package/rules/java/build-maven/references/REFERENCE.md +14 -0
- package/rules/java/build-maven/references/dependency-management.md +111 -0
- package/rules/java/build-maven/references/lifecycle-phases.md +114 -0
- package/rules/java/graalvm-native/SKILL.md +105 -0
- package/rules/java/graalvm-native/references/REFERENCE.md +12 -0
- package/rules/java/java-collections-streams/SKILL.md +148 -0
- package/rules/java/java-collections-streams/references/REFERENCE.md +15 -0
- package/rules/java/java-collections-streams/references/collectors-patterns.md +178 -0
- package/rules/java/java-collections-streams/references/stream-pipelines.md +165 -0
- package/rules/java/java-concurrency/SKILL.md +187 -0
- package/rules/java/java-concurrency/references/REFERENCE.md +17 -0
- package/rules/java/java-concurrency/references/completable-future.md +165 -0
- package/rules/java/java-concurrency/references/executor-patterns.md +176 -0
- package/rules/java/java-concurrency/references/virtual-threads.md +190 -0
- package/rules/java/java-core-language/SKILL.md +121 -0
- package/rules/java/java-core-language/references/REFERENCE.md +15 -0
- package/rules/java/java-core-language/references/jvm-memory-model.md +160 -0
- package/rules/java/java-core-language/references/modern-java-features.md +168 -0
- package/rules/java/java-project-structure/SKILL.md +195 -0
- package/rules/java/java-project-structure/references/REFERENCE.md +15 -0
- package/rules/java/java-project-structure/references/maven-project-layout.md +199 -0
- package/rules/java/java-project-structure/references/module-system.md +159 -0
- package/rules/java/micronaut-core/SKILL.md +99 -0
- package/rules/java/micronaut-core/references/REFERENCE.md +12 -0
- package/rules/java/micronaut-reactive/SKILL.md +68 -0
- package/rules/java/micronaut-reactive/references/REFERENCE.md +12 -0
- package/rules/java/quarkus-core/SKILL.md +85 -0
- package/rules/java/quarkus-core/references/REFERENCE.md +12 -0
- package/rules/java/quarkus-reactive/SKILL.md +67 -0
- package/rules/java/quarkus-reactive/references/REFERENCE.md +12 -0
- package/rules/java/spring-batch/SKILL.md +102 -0
- package/rules/java/spring-batch/references/REFERENCE.md +12 -0
- package/rules/java/spring-boot-architecture/SKILL.md +206 -0
- package/rules/java/spring-boot-architecture/references/REFERENCE.md +15 -0
- package/rules/java/spring-boot-architecture/references/auto-configuration.md +158 -0
- package/rules/java/spring-boot-architecture/references/configuration-properties.md +202 -0
- package/rules/java/spring-boot-web/SKILL.md +217 -0
- package/rules/java/spring-boot-web/references/REFERENCE.md +17 -0
- package/rules/java/spring-cloud/SKILL.md +109 -0
- package/rules/java/spring-cloud/references/REFERENCE.md +13 -0
- package/rules/java/spring-data-jpa/SKILL.md +241 -0
- package/rules/java/spring-data-jpa/references/REFERENCE.md +16 -0
- package/rules/java/spring-security/SKILL.md +161 -0
- package/rules/java/spring-security/references/REFERENCE.md +16 -0
- package/rules/java/spring-security/references/jwt-auth-flow.md +213 -0
- package/rules/java/testing-junit-mockito/SKILL.md +135 -0
- package/rules/java/testing-junit-mockito/references/REFERENCE.md +15 -0
- package/rules/java/testing-junit-mockito/references/junit5-patterns.md +159 -0
- package/rules/java/testing-junit-mockito/references/mockito-patterns.md +148 -0
- package/rules/java/testing-junit-mockito/references/spring-boot-testing.md +152 -0
- package/rules/javascript/best-practices/SKILL.md +64 -0
- package/rules/javascript/best-practices/references/REFERENCE.md +91 -0
- package/rules/javascript/language/SKILL.md +71 -0
- package/rules/javascript/language/references/REFERENCE.md +106 -0
- package/rules/javascript/tooling/SKILL.md +60 -0
- package/rules/javascript/tooling/references/REFERENCE.md +107 -0
- package/rules/metadata.json +54 -0
- package/rules/nestjs/api-standards/SKILL.md +47 -0
- package/rules/nestjs/api-standards/references/pagination-wrapper.md +87 -0
- package/rules/nestjs/architecture/SKILL.md +68 -0
- package/rules/nestjs/architecture/references/dynamic-module.md +53 -0
- package/rules/nestjs/caching/SKILL.md +51 -0
- package/rules/nestjs/caching/references/REFERENCE.md +13 -0
- package/rules/nestjs/caching/references/cache-patterns.md +183 -0
- package/rules/nestjs/configuration/SKILL.md +41 -0
- package/rules/nestjs/configuration/references/REFERENCE.md +13 -0
- package/rules/nestjs/configuration/references/config-patterns.md +184 -0
- package/rules/nestjs/controllers-services/SKILL.md +63 -0
- package/rules/nestjs/controllers-services/references/REFERENCE.md +14 -0
- package/rules/nestjs/controllers-services/references/controller-patterns.md +119 -0
- package/rules/nestjs/controllers-services/references/service-patterns.md +129 -0
- package/rules/nestjs/database/SKILL.md +102 -0
- package/rules/nestjs/database/references/REFERENCE.md +14 -0
- package/rules/nestjs/database/references/typeorm-patterns.md +156 -0
- package/rules/nestjs/deployment/SKILL.md +36 -0
- package/rules/nestjs/deployment/references/REFERENCE.md +13 -0
- package/rules/nestjs/deployment/references/deployment-patterns.md +140 -0
- package/rules/nestjs/documentation/SKILL.md +64 -0
- package/rules/nestjs/documentation/references/REFERENCE.md +13 -0
- package/rules/nestjs/documentation/references/swagger-patterns.md +139 -0
- package/rules/nestjs/error-handling/SKILL.md +55 -0
- package/rules/nestjs/error-handling/references/REFERENCE.md +13 -0
- package/rules/nestjs/error-handling/references/exception-filters.md +152 -0
- package/rules/nestjs/file-uploads/SKILL.md +35 -0
- package/rules/nestjs/file-uploads/references/REFERENCE.md +13 -0
- package/rules/nestjs/file-uploads/references/upload-patterns.md +125 -0
- package/rules/nestjs/observability/SKILL.md +39 -0
- package/rules/nestjs/observability/references/REFERENCE.md +13 -0
- package/rules/nestjs/observability/references/logging-metrics.md +175 -0
- package/rules/nestjs/performance/SKILL.md +60 -0
- package/rules/nestjs/performance/references/REFERENCE.md +13 -0
- package/rules/nestjs/performance/references/performance-patterns.md +107 -0
- package/rules/nestjs/real-time/SKILL.md +45 -0
- package/rules/nestjs/real-time/references/REFERENCE.md +13 -0
- package/rules/nestjs/real-time/references/websocket-patterns.md +121 -0
- package/rules/nestjs/scheduling/SKILL.md +39 -0
- package/rules/nestjs/scheduling/references/REFERENCE.md +13 -0
- package/rules/nestjs/scheduling/references/scheduling-patterns.md +137 -0
- package/rules/nestjs/search/SKILL.md +41 -0
- package/rules/nestjs/search/references/REFERENCE.md +13 -0
- package/rules/nestjs/search/references/search-patterns.md +137 -0
- package/rules/nestjs/security/SKILL.md +87 -0
- package/rules/nestjs/security/references/REFERENCE.md +14 -0
- package/rules/nestjs/security/references/authentication.md +151 -0
- package/rules/nestjs/testing/SKILL.md +40 -0
- package/rules/nestjs/testing/references/REFERENCE.md +14 -0
- package/rules/nestjs/testing/references/unit-testing.md +179 -0
- package/rules/nestjs/transport/SKILL.md +45 -0
- package/rules/nestjs/transport/references/REFERENCE.md +13 -0
- package/rules/nestjs/transport/references/microservices-patterns.md +170 -0
- package/rules/nextjs/app-router/SKILL.md +46 -0
- package/rules/nextjs/app-router/references/REFERENCE.md +14 -0
- package/rules/nextjs/app-router/references/routing-patterns.md +182 -0
- package/rules/nextjs/architecture/SKILL.md +44 -0
- package/rules/nextjs/architecture/references/fsd-structure.md +77 -0
- package/rules/nextjs/authentication/SKILL.md +29 -0
- package/rules/nextjs/authentication/references/auth-implementation.md +73 -0
- package/rules/nextjs/caching/SKILL.md +66 -0
- package/rules/nextjs/caching/references/REFERENCE.md +13 -0
- package/rules/nextjs/caching/references/cache-strategies.md +168 -0
- package/rules/nextjs/data-access-layer/SKILL.md +33 -0
- package/rules/nextjs/data-access-layer/references/patterns.md +66 -0
- package/rules/nextjs/data-fetching/SKILL.md +59 -0
- package/rules/nextjs/data-fetching/references/REFERENCE.md +13 -0
- package/rules/nextjs/data-fetching/references/fetch-patterns.md +160 -0
- package/rules/nextjs/internationalization/SKILL.md +105 -0
- package/rules/nextjs/internationalization/references/REFERENCE.md +13 -0
- package/rules/nextjs/internationalization/references/i18n-patterns.md +180 -0
- package/rules/nextjs/optimization/SKILL.md +64 -0
- package/rules/nextjs/optimization/references/REFERENCE.md +13 -0
- package/rules/nextjs/optimization/references/optimization-patterns.md +190 -0
- package/rules/nextjs/rendering/SKILL.md +91 -0
- package/rules/nextjs/rendering/references/REFERENCE.md +13 -0
- package/rules/nextjs/rendering/references/rendering-modes.md +163 -0
- package/rules/nextjs/server-actions/SKILL.md +46 -0
- package/rules/nextjs/server-actions/references/REFERENCE.md +13 -0
- package/rules/nextjs/server-actions/references/action-patterns.md +188 -0
- package/rules/nextjs/server-components/SKILL.md +52 -0
- package/rules/nextjs/server-components/references/REFERENCE.md +13 -0
- package/rules/nextjs/server-components/references/component-patterns.md +175 -0
- package/rules/nextjs/state-management/SKILL.md +73 -0
- package/rules/nextjs/state-management/references/REFERENCE.md +13 -0
- package/rules/nextjs/state-management/references/state-patterns.md +218 -0
- package/rules/nextjs/styling/SKILL.md +31 -0
- package/rules/nextjs/styling/references/implementation.md +56 -0
- package/rules/react/component-patterns/SKILL.md +66 -0
- package/rules/react/component-patterns/references/REFERENCE.md +126 -0
- package/rules/react/hooks/SKILL.md +60 -0
- package/rules/react/hooks/references/REFERENCE.md +132 -0
- package/rules/react/hooks.rule.md +79 -0
- package/rules/react/performance/SKILL.md +69 -0
- package/rules/react/performance/references/REFERENCE.md +143 -0
- package/rules/react/security/SKILL.md +46 -0
- package/rules/react/security/references/REFERENCE.md +170 -0
- package/rules/react/state-management/SKILL.md +56 -0
- package/rules/react/state-management/references/REFERENCE.md +137 -0
- package/rules/react/testing/SKILL.md +45 -0
- package/rules/react/testing/references/REFERENCE.md +149 -0
- package/rules/react/tooling/SKILL.md +39 -0
- package/rules/react/typescript/SKILL.md +53 -0
- package/rules/rust/actix-web/SKILL.md +160 -0
- package/rules/rust/actix-web/references/REFERENCE.md +13 -0
- package/rules/rust/actix-web/references/handler-patterns.md +198 -0
- package/rules/rust/async-graphql/SKILL.md +228 -0
- package/rules/rust/async-graphql/references/REFERENCE.md +13 -0
- package/rules/rust/async-graphql/references/schema-patterns.md +215 -0
- package/rules/rust/axum/SKILL.md +161 -0
- package/rules/rust/axum/references/REFERENCE.md +14 -0
- package/rules/rust/axum/references/handler-patterns.md +97 -0
- package/rules/rust/bevy/SKILL.md +206 -0
- package/rules/rust/bevy/references/REFERENCE.md +13 -0
- package/rules/rust/bevy/references/ecs-patterns.md +226 -0
- package/rules/rust/clap/SKILL.md +217 -0
- package/rules/rust/clap/references/REFERENCE.md +13 -0
- package/rules/rust/clap/references/derive-patterns.md +205 -0
- package/rules/rust/core/SKILL.md +154 -0
- package/rules/rust/core/references/REFERENCE.md +14 -0
- package/rules/rust/core/references/error-handling.md +92 -0
- package/rules/rust/diesel-orm/SKILL.md +176 -0
- package/rules/rust/diesel-orm/references/REFERENCE.md +13 -0
- package/rules/rust/diesel-orm/references/schema-patterns.md +206 -0
- package/rules/rust/rocket/SKILL.md +182 -0
- package/rules/rust/rocket/references/REFERENCE.md +13 -0
- package/rules/rust/rocket/references/handler-patterns.md +209 -0
- package/rules/rust/sea-orm/SKILL.md +230 -0
- package/rules/rust/sea-orm/references/REFERENCE.md +13 -0
- package/rules/rust/sea-orm/references/entity-patterns.md +221 -0
- package/rules/rust/serde-serialization/SKILL.md +150 -0
- package/rules/rust/serde-serialization/references/REFERENCE.md +13 -0
- package/rules/rust/serde-serialization/references/serialization-patterns.md +199 -0
- package/rules/rust/sqlx-database/SKILL.md +140 -0
- package/rules/rust/sqlx-database/references/REFERENCE.md +13 -0
- package/rules/rust/sqlx-database/references/query-patterns.md +210 -0
- package/rules/rust/tauri/SKILL.md +180 -0
- package/rules/rust/tauri/references/REFERENCE.md +13 -0
- package/rules/rust/tauri/references/command-patterns.md +209 -0
- package/rules/rust/tokio-runtime/SKILL.md +167 -0
- package/rules/rust/tokio-runtime/references/REFERENCE.md +14 -0
- package/rules/rust/tokio-runtime/references/async-patterns.md +137 -0
- package/rules/rust/tokio-runtime/references/synchronization.md +152 -0
- package/rules/rust/tonic/SKILL.md +231 -0
- package/rules/rust/tonic/references/REFERENCE.md +13 -0
- package/rules/rust/tonic/references/service-patterns.md +213 -0
- package/rules/rust/tracing/SKILL.md +214 -0
- package/rules/rust/tracing/references/REFERENCE.md +13 -0
- package/rules/rust/tracing/references/instrumentation.md +187 -0
- package/rules/typescript/best-practices/SKILL.md +108 -0
- package/rules/typescript/best-practices/references/REFERENCE.md +68 -0
- package/rules/typescript/language/SKILL.md +72 -0
- package/rules/typescript/language/references/REFERENCE.md +67 -0
- package/rules/typescript/patterns.rule.md +85 -0
- package/rules/typescript/security/SKILL.md +59 -0
- package/rules/typescript/security/references/REFERENCE.md +113 -0
- package/rules/typescript/tooling/SKILL.md +52 -0
- package/rules/typescript/tooling/references/REFERENCE.md +110 -0
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: Micronaut Reactive
|
|
3
|
+
description: Reactive types, HTTP clients, and non-blocking patterns.
|
|
4
|
+
metadata:
|
|
5
|
+
labels: [java, micronaut, reactive]
|
|
6
|
+
triggers:
|
|
7
|
+
files: ['**/*.java']
|
|
8
|
+
keywords: [Flux, Mono, Reactive, HttpClient, '@Client', Publisher, Flowable]
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
# Micronaut Reactive Standards
|
|
12
|
+
|
|
13
|
+
## Reactive Controllers
|
|
14
|
+
|
|
15
|
+
```java
|
|
16
|
+
@Controller("/users")
|
|
17
|
+
public class UserController {
|
|
18
|
+
|
|
19
|
+
@Get("/{id}")
|
|
20
|
+
public Mono<User> findById(Long id) {
|
|
21
|
+
return userService.findById(id);
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
@Get(produces = MediaType.TEXT_EVENT_STREAM)
|
|
25
|
+
public Flux<User> stream() {
|
|
26
|
+
return userService.streamAll();
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
## Declarative HTTP Client
|
|
32
|
+
|
|
33
|
+
```java
|
|
34
|
+
@Client("order-service")
|
|
35
|
+
public interface OrderClient {
|
|
36
|
+
|
|
37
|
+
@Get("/orders/{userId}")
|
|
38
|
+
Flux<Order> getOrders(Long userId);
|
|
39
|
+
|
|
40
|
+
@Post("/orders")
|
|
41
|
+
Mono<Order> createOrder(@Body CreateOrderRequest request);
|
|
42
|
+
}
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
## Low-Level Client
|
|
46
|
+
|
|
47
|
+
```java
|
|
48
|
+
@Singleton
|
|
49
|
+
public class ExternalApiService {
|
|
50
|
+
|
|
51
|
+
private final HttpClient httpClient;
|
|
52
|
+
|
|
53
|
+
public ExternalApiService(@Client("https://api.external.com") HttpClient httpClient) {
|
|
54
|
+
this.httpClient = httpClient;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
public Mono<ExternalData> fetchData(String id) {
|
|
58
|
+
return Mono.from(httpClient.retrieve(
|
|
59
|
+
HttpRequest.GET("/data/" + id),
|
|
60
|
+
ExternalData.class
|
|
61
|
+
));
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
## References
|
|
67
|
+
|
|
68
|
+
- [HTTP Client Patterns](references/http-client-patterns.md) - Retry, fallback, timeout
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
# Micronaut Reactive References
|
|
2
|
+
|
|
3
|
+
## References
|
|
4
|
+
|
|
5
|
+
- [**HTTP Client Patterns**](http-client-patterns.md) - Declarative clients, retry, fallback
|
|
6
|
+
|
|
7
|
+
## Quick Checks
|
|
8
|
+
|
|
9
|
+
- [ ] Use @Client for declarative HTTP clients
|
|
10
|
+
- [ ] Mono for single values, Flux for streams
|
|
11
|
+
- [ ] Configure timeouts and retries
|
|
12
|
+
- [ ] Non-blocking I/O throughout
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: Quarkus Core
|
|
3
|
+
description: CDI dependency injection, configuration, dev mode, and extensions.
|
|
4
|
+
metadata:
|
|
5
|
+
labels: [java, quarkus, di, configuration]
|
|
6
|
+
triggers:
|
|
7
|
+
files: ['**/*.java', 'application.properties', 'pom.xml']
|
|
8
|
+
keywords: [Quarkus, '@Inject', '@ApplicationScoped', '@ConfigProperty', Arc, QuarkusApplication]
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
# Quarkus Core Standards
|
|
12
|
+
|
|
13
|
+
## CDI (ArC) Dependency Injection
|
|
14
|
+
|
|
15
|
+
```java
|
|
16
|
+
@ApplicationScoped
|
|
17
|
+
public class UserService {
|
|
18
|
+
|
|
19
|
+
@Inject
|
|
20
|
+
UserRepository userRepository;
|
|
21
|
+
|
|
22
|
+
@Inject
|
|
23
|
+
@ConfigProperty(name = "app.max-users", defaultValue = "1000")
|
|
24
|
+
int maxUsers;
|
|
25
|
+
|
|
26
|
+
public User findById(Long id) {
|
|
27
|
+
return userRepository.findById(id);
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
// Bean scopes
|
|
32
|
+
@ApplicationScoped // Single instance per application
|
|
33
|
+
@RequestScoped // Per HTTP request
|
|
34
|
+
@Singleton // Like ApplicationScoped but not proxied
|
|
35
|
+
@Dependent // New instance each injection
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
## Configuration
|
|
39
|
+
|
|
40
|
+
```java
|
|
41
|
+
@ConfigMapping(prefix = "app")
|
|
42
|
+
public interface AppConfig {
|
|
43
|
+
String name();
|
|
44
|
+
int maxConnections();
|
|
45
|
+
Optional<String> description();
|
|
46
|
+
DatabaseConfig database();
|
|
47
|
+
|
|
48
|
+
interface DatabaseConfig {
|
|
49
|
+
String url();
|
|
50
|
+
String username();
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
// Usage
|
|
55
|
+
@Inject
|
|
56
|
+
AppConfig config;
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
```properties
|
|
60
|
+
# application.properties
|
|
61
|
+
app.name=MyApp
|
|
62
|
+
app.max-connections=100
|
|
63
|
+
app.database.url=jdbc:postgresql://localhost/db
|
|
64
|
+
app.database.username=admin
|
|
65
|
+
|
|
66
|
+
# Profile-specific
|
|
67
|
+
%dev.app.database.url=jdbc:h2:mem:test
|
|
68
|
+
%prod.app.database.url=${DB_URL}
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
## Dev Mode
|
|
72
|
+
|
|
73
|
+
```bash
|
|
74
|
+
# Live reload
|
|
75
|
+
./mvnw quarkus:dev
|
|
76
|
+
|
|
77
|
+
# Continuous testing
|
|
78
|
+
./mvnw quarkus:dev -Dquarkus.test.continuous-testing=enabled
|
|
79
|
+
|
|
80
|
+
# Dev UI at http://localhost:8080/q/dev
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
## References
|
|
84
|
+
|
|
85
|
+
- [CDI Patterns](references/cdi-patterns.md) - Producers, qualifiers, interceptors
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
# Quarkus Core References
|
|
2
|
+
|
|
3
|
+
## References
|
|
4
|
+
|
|
5
|
+
- [**CDI Patterns**](cdi-patterns.md) - Producers, qualifiers, interceptors, events
|
|
6
|
+
|
|
7
|
+
## Quick Checks
|
|
8
|
+
|
|
9
|
+
- [ ] Use @ApplicationScoped for services (not @Singleton)
|
|
10
|
+
- [ ] Use @ConfigMapping for type-safe configuration
|
|
11
|
+
- [ ] Profile configs with %dev, %prod prefixes
|
|
12
|
+
- [ ] Dev mode for live reload during development
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: Quarkus Reactive
|
|
3
|
+
description: Mutiny reactive types, reactive routes, and non-blocking I/O.
|
|
4
|
+
metadata:
|
|
5
|
+
labels: [java, quarkus, reactive, mutiny]
|
|
6
|
+
triggers:
|
|
7
|
+
files: ['**/*.java']
|
|
8
|
+
keywords: [Mutiny, Uni, Multi, '@Route', reactive, SmallRye, '@NonBlocking']
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
# Quarkus Reactive Standards
|
|
12
|
+
|
|
13
|
+
## Mutiny Types
|
|
14
|
+
|
|
15
|
+
```java
|
|
16
|
+
// Uni - 0 or 1 item (like CompletableFuture)
|
|
17
|
+
public Uni<User> findById(Long id) {
|
|
18
|
+
return Uni.createFrom().item(() -> repository.findById(id))
|
|
19
|
+
.onFailure().recoverWithItem(User.unknown());
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
// Multi - 0 to N items (like Stream)
|
|
23
|
+
public Multi<User> streamAll() {
|
|
24
|
+
return Multi.createFrom().items(repository.findAll().stream())
|
|
25
|
+
.filter(User::isActive);
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
// Transformations
|
|
29
|
+
Uni<String> name = findById(1L)
|
|
30
|
+
.map(User::getName)
|
|
31
|
+
.onItem().ifNull().failWith(new NotFoundException());
|
|
32
|
+
|
|
33
|
+
// Combining
|
|
34
|
+
Uni<UserProfile> profile = Uni.combine().all()
|
|
35
|
+
.unis(findUser(id), findOrders(id), findPreferences(id))
|
|
36
|
+
.with((user, orders, prefs) -> new UserProfile(user, orders, prefs));
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
## Reactive REST Endpoints
|
|
40
|
+
|
|
41
|
+
```java
|
|
42
|
+
@Path("/users")
|
|
43
|
+
public class UserResource {
|
|
44
|
+
|
|
45
|
+
@GET
|
|
46
|
+
@Path("/{id}")
|
|
47
|
+
public Uni<User> get(@PathParam("id") Long id) {
|
|
48
|
+
return userService.findById(id);
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
@GET
|
|
52
|
+
@Produces(MediaType.SERVER_SENT_EVENTS)
|
|
53
|
+
public Multi<User> stream() {
|
|
54
|
+
return userService.streamAll();
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
@POST
|
|
58
|
+
public Uni<Response> create(CreateUserRequest request) {
|
|
59
|
+
return userService.create(request)
|
|
60
|
+
.map(user -> Response.created(URI.create("/users/" + user.id())).build());
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
## References
|
|
66
|
+
|
|
67
|
+
- [Mutiny Patterns](references/mutiny-patterns.md) - Error handling, timeouts, combining
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
# Quarkus Reactive References
|
|
2
|
+
|
|
3
|
+
## References
|
|
4
|
+
|
|
5
|
+
- [**Mutiny Patterns**](mutiny-patterns.md) - Combining Uni/Multi, error handling, timeouts
|
|
6
|
+
|
|
7
|
+
## Quick Checks
|
|
8
|
+
|
|
9
|
+
- [ ] Use Uni for single async result
|
|
10
|
+
- [ ] Use Multi for streaming
|
|
11
|
+
- [ ] Non-blocking for I/O operations
|
|
12
|
+
- [ ] Proper error recovery with onFailure()
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: Spring Batch
|
|
3
|
+
description: Job configuration, chunk processing, readers, writers, processors, and job execution.
|
|
4
|
+
metadata:
|
|
5
|
+
labels: [java, spring-boot, batch, etl]
|
|
6
|
+
triggers:
|
|
7
|
+
files: ['**/*Batch*.java', '**/*Job*.java', '**/*Step*.java']
|
|
8
|
+
keywords: [Job, Step, ItemReader, ItemWriter, ItemProcessor, JobBuilder, StepBuilder, Chunk, Tasklet]
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
# Spring Batch Standards
|
|
12
|
+
|
|
13
|
+
## Job Configuration
|
|
14
|
+
|
|
15
|
+
```java
|
|
16
|
+
@Configuration
|
|
17
|
+
@RequiredArgsConstructor
|
|
18
|
+
public class UserExportJobConfig {
|
|
19
|
+
|
|
20
|
+
private final JobRepository jobRepository;
|
|
21
|
+
private final PlatformTransactionManager transactionManager;
|
|
22
|
+
|
|
23
|
+
@Bean
|
|
24
|
+
public Job userExportJob(Step exportStep) {
|
|
25
|
+
return new JobBuilder("userExportJob", jobRepository)
|
|
26
|
+
.incrementer(new RunIdIncrementer())
|
|
27
|
+
.start(exportStep)
|
|
28
|
+
.build();
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
@Bean
|
|
32
|
+
public Step exportStep(
|
|
33
|
+
ItemReader<User> reader,
|
|
34
|
+
ItemProcessor<User, UserDto> processor,
|
|
35
|
+
ItemWriter<UserDto> writer) {
|
|
36
|
+
return new StepBuilder("exportStep", jobRepository)
|
|
37
|
+
.<User, UserDto>chunk(100, transactionManager)
|
|
38
|
+
.reader(reader)
|
|
39
|
+
.processor(processor)
|
|
40
|
+
.writer(writer)
|
|
41
|
+
.faultTolerant()
|
|
42
|
+
.skipLimit(10)
|
|
43
|
+
.skip(DataAccessException.class)
|
|
44
|
+
.build();
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
## Reader/Processor/Writer
|
|
50
|
+
|
|
51
|
+
```java
|
|
52
|
+
@Bean
|
|
53
|
+
public JpaPagingItemReader<User> userReader(EntityManagerFactory emf) {
|
|
54
|
+
return new JpaPagingItemReaderBuilder<User>()
|
|
55
|
+
.name("userReader")
|
|
56
|
+
.entityManagerFactory(emf)
|
|
57
|
+
.queryString("SELECT u FROM User u WHERE u.status = 'ACTIVE'")
|
|
58
|
+
.pageSize(100)
|
|
59
|
+
.build();
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
@Bean
|
|
63
|
+
public ItemProcessor<User, UserDto> userProcessor() {
|
|
64
|
+
return user -> new UserDto(user.getId(), user.getName(), user.getEmail());
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
@Bean
|
|
68
|
+
public FlatFileItemWriter<UserDto> userWriter() {
|
|
69
|
+
return new FlatFileItemWriterBuilder<UserDto>()
|
|
70
|
+
.name("userWriter")
|
|
71
|
+
.resource(new FileSystemResource("output/users.csv"))
|
|
72
|
+
.delimited()
|
|
73
|
+
.names("id", "name", "email")
|
|
74
|
+
.build();
|
|
75
|
+
}
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
## Job Execution
|
|
79
|
+
|
|
80
|
+
```java
|
|
81
|
+
@Service
|
|
82
|
+
@RequiredArgsConstructor
|
|
83
|
+
public class JobLauncherService {
|
|
84
|
+
|
|
85
|
+
private final JobLauncher jobLauncher;
|
|
86
|
+
private final Job userExportJob;
|
|
87
|
+
|
|
88
|
+
public void runExport(String date) throws Exception {
|
|
89
|
+
JobParameters params = new JobParametersBuilder()
|
|
90
|
+
.addString("date", date)
|
|
91
|
+
.addLong("time", System.currentTimeMillis())
|
|
92
|
+
.toJobParameters();
|
|
93
|
+
|
|
94
|
+
JobExecution execution = jobLauncher.run(userExportJob, params);
|
|
95
|
+
log.info("Job status: {}", execution.getStatus());
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
## References
|
|
101
|
+
|
|
102
|
+
- [Chunk Processing](references/chunk-processing.md) - Sizing, transactions, error handling
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
# Spring Batch References
|
|
2
|
+
|
|
3
|
+
## References
|
|
4
|
+
|
|
5
|
+
- [**Chunk Processing**](chunk-processing.md) - Chunk sizing, transaction boundaries, skip/retry
|
|
6
|
+
|
|
7
|
+
## Quick Checks
|
|
8
|
+
|
|
9
|
+
- [ ] Use JobBuilder/StepBuilder (not deprecated *BuilderFactory)
|
|
10
|
+
- [ ] Set appropriate chunk size (100-1000)
|
|
11
|
+
- [ ] Configure skip/retry for fault tolerance
|
|
12
|
+
- [ ] Use RunIdIncrementer for re-runnable jobs
|
|
@@ -0,0 +1,206 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: Spring Boot Architecture
|
|
3
|
+
description: Application structure, auto-configuration, profiles, bean lifecycle, and configuration properties.
|
|
4
|
+
metadata:
|
|
5
|
+
labels: [java, spring-boot, architecture, configuration]
|
|
6
|
+
triggers:
|
|
7
|
+
files: ['**/Application.java', '**/*Configuration.java', 'application.yml', 'application.properties', 'application-*.yml']
|
|
8
|
+
keywords: [SpringBootApplication, Configuration, Bean, Profile, AutoConfiguration, ConfigurationProperties, EnableAutoConfiguration]
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
# Spring Boot Architecture Standards
|
|
12
|
+
|
|
13
|
+
## Application Entry Point
|
|
14
|
+
|
|
15
|
+
```java
|
|
16
|
+
@SpringBootApplication
|
|
17
|
+
public class Application {
|
|
18
|
+
public static void main(String[] args) {
|
|
19
|
+
SpringApplication.run(Application.class, args);
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
// @SpringBootApplication combines:
|
|
24
|
+
// @Configuration - source of bean definitions
|
|
25
|
+
// @EnableAutoConfiguration - auto-configure based on classpath
|
|
26
|
+
// @ComponentScan - scan for components in this package and below
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
## Configuration Classes
|
|
30
|
+
|
|
31
|
+
```java
|
|
32
|
+
@Configuration
|
|
33
|
+
public class AppConfig {
|
|
34
|
+
|
|
35
|
+
@Bean
|
|
36
|
+
public RestTemplate restTemplate(RestTemplateBuilder builder) {
|
|
37
|
+
return builder
|
|
38
|
+
.setConnectTimeout(Duration.ofSeconds(5))
|
|
39
|
+
.setReadTimeout(Duration.ofSeconds(30))
|
|
40
|
+
.build();
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
@Bean
|
|
44
|
+
@ConditionalOnProperty(name = "app.feature.enabled", havingValue = "true")
|
|
45
|
+
public FeatureService featureService() {
|
|
46
|
+
return new FeatureServiceImpl();
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
// Conditional beans
|
|
51
|
+
@ConditionalOnProperty(...) // Based on property
|
|
52
|
+
@ConditionalOnClass(...) // Based on class presence
|
|
53
|
+
@ConditionalOnMissingBean(...) // If no other bean exists
|
|
54
|
+
@ConditionalOnBean(...) // If another bean exists
|
|
55
|
+
@ConditionalOnExpression(...) // SpEL expression
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
## Configuration Properties
|
|
59
|
+
|
|
60
|
+
```java
|
|
61
|
+
@ConfigurationProperties(prefix = "app")
|
|
62
|
+
@Validated
|
|
63
|
+
public record AppProperties(
|
|
64
|
+
@NotBlank String name,
|
|
65
|
+
@NotNull Duration timeout,
|
|
66
|
+
@Valid DatabaseProperties database
|
|
67
|
+
) {
|
|
68
|
+
public record DatabaseProperties(
|
|
69
|
+
String host,
|
|
70
|
+
int port,
|
|
71
|
+
@NotBlank String username
|
|
72
|
+
) {}
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
// Enable in configuration
|
|
76
|
+
@Configuration
|
|
77
|
+
@EnableConfigurationProperties(AppProperties.class)
|
|
78
|
+
public class AppConfig {}
|
|
79
|
+
|
|
80
|
+
// Usage
|
|
81
|
+
@Service
|
|
82
|
+
public class MyService {
|
|
83
|
+
private final AppProperties props;
|
|
84
|
+
|
|
85
|
+
public MyService(AppProperties props) {
|
|
86
|
+
this.props = props;
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
```yaml
|
|
92
|
+
# application.yml
|
|
93
|
+
app:
|
|
94
|
+
name: my-application
|
|
95
|
+
timeout: 30s
|
|
96
|
+
database:
|
|
97
|
+
host: localhost
|
|
98
|
+
port: 5432
|
|
99
|
+
username: admin
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
## Profiles
|
|
103
|
+
|
|
104
|
+
```yaml
|
|
105
|
+
# application.yml (default)
|
|
106
|
+
spring:
|
|
107
|
+
profiles:
|
|
108
|
+
active: dev
|
|
109
|
+
|
|
110
|
+
---
|
|
111
|
+
spring:
|
|
112
|
+
config:
|
|
113
|
+
activate:
|
|
114
|
+
on-profile: dev
|
|
115
|
+
server:
|
|
116
|
+
port: 8080
|
|
117
|
+
logging:
|
|
118
|
+
level:
|
|
119
|
+
root: DEBUG
|
|
120
|
+
|
|
121
|
+
---
|
|
122
|
+
spring:
|
|
123
|
+
config:
|
|
124
|
+
activate:
|
|
125
|
+
on-profile: prod
|
|
126
|
+
server:
|
|
127
|
+
port: 80
|
|
128
|
+
logging:
|
|
129
|
+
level:
|
|
130
|
+
root: INFO
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
```java
|
|
134
|
+
// Profile-specific beans
|
|
135
|
+
@Configuration
|
|
136
|
+
@Profile("dev")
|
|
137
|
+
public class DevConfig {
|
|
138
|
+
@Bean
|
|
139
|
+
public DataSource dataSource() {
|
|
140
|
+
return new EmbeddedDatabaseBuilder()
|
|
141
|
+
.setType(EmbeddedDatabaseType.H2)
|
|
142
|
+
.build();
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
@Configuration
|
|
147
|
+
@Profile("prod")
|
|
148
|
+
public class ProdConfig {
|
|
149
|
+
@Bean
|
|
150
|
+
public DataSource dataSource(DataSourceProperties props) {
|
|
151
|
+
return DataSourceBuilder.create()
|
|
152
|
+
.url(props.getUrl())
|
|
153
|
+
.username(props.getUsername())
|
|
154
|
+
.password(props.getPassword())
|
|
155
|
+
.build();
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
```
|
|
159
|
+
|
|
160
|
+
## Bean Lifecycle
|
|
161
|
+
|
|
162
|
+
```java
|
|
163
|
+
@Component
|
|
164
|
+
public class MyComponent implements InitializingBean, DisposableBean {
|
|
165
|
+
|
|
166
|
+
@PostConstruct
|
|
167
|
+
public void init() {
|
|
168
|
+
// Called after dependency injection
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
@Override
|
|
172
|
+
public void afterPropertiesSet() {
|
|
173
|
+
// Called after properties set
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
@PreDestroy
|
|
177
|
+
public void cleanup() {
|
|
178
|
+
// Called before destruction
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
@Override
|
|
182
|
+
public void destroy() {
|
|
183
|
+
// Called on shutdown
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
// Or with @Bean
|
|
188
|
+
@Bean(initMethod = "init", destroyMethod = "cleanup")
|
|
189
|
+
public MyService myService() {
|
|
190
|
+
return new MyService();
|
|
191
|
+
}
|
|
192
|
+
```
|
|
193
|
+
|
|
194
|
+
## Best Practices
|
|
195
|
+
|
|
196
|
+
1. **Use @ConfigurationProperties** over @Value for type-safe configuration
|
|
197
|
+
2. **Profiles for environment-specific** config, not feature flags
|
|
198
|
+
3. **Externalize configuration** - never hardcode secrets
|
|
199
|
+
4. **Use record classes** for immutable configuration properties
|
|
200
|
+
5. **Validate configuration** with @Validated and Jakarta constraints
|
|
201
|
+
6. **Auto-configuration order** matters - use @AutoConfigureAfter/@AutoConfigureBefore
|
|
202
|
+
|
|
203
|
+
## References
|
|
204
|
+
|
|
205
|
+
- [Auto-Configuration](references/auto-configuration.md) - Custom auto-config, conditions
|
|
206
|
+
- [Configuration Properties](references/configuration-properties.md) - Binding, validation, relaxed binding
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
# Spring Boot Architecture References
|
|
2
|
+
|
|
3
|
+
## References
|
|
4
|
+
|
|
5
|
+
- [**Auto-Configuration**](auto-configuration.md) - Custom auto-config, conditional beans, ordering
|
|
6
|
+
- [**Configuration Properties**](configuration-properties.md) - Type-safe binding, validation, nested properties
|
|
7
|
+
|
|
8
|
+
## Quick Checks
|
|
9
|
+
|
|
10
|
+
- [ ] @SpringBootApplication on main class
|
|
11
|
+
- [ ] Use @ConfigurationProperties over @Value
|
|
12
|
+
- [ ] Validate configuration with @Validated
|
|
13
|
+
- [ ] Use profiles for environment differences
|
|
14
|
+
- [ ] Never hardcode secrets - externalize configuration
|
|
15
|
+
- [ ] Use records for immutable configuration
|