Skip to content

add ConditionalOnSingle/MultiTenantMode - #2165

Open
grafjo wants to merge 1 commit into
mainfrom
add-conditional-on-tenant-mode
Open

add ConditionalOnSingle/MultiTenantMode #2165
grafjo wants to merge 1 commit into
mainfrom
add-conditional-on-tenant-mode

Conversation

@grafjo

@grafjo grafjo commented Jul 11, 2026

Copy link
Copy Markdown
Contributor

Here are some things you should have thought about:

Multi-Tenancy

  • Extended new entities with AbstractTenantAwareEntity?
  • New entity added to TenantAwareDatabaseConfiguration?
  • Tested with dev-multitenant profile?

Copilot AI review requested due to automatic review settings July 11, 2026 16:50

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR introduces dedicated Spring conditional annotations for single-tenant and multi-tenant runtime modes and migrates existing bean registrations away from repeated @ConditionalOnProperty usage. This centralizes the tenancy-mode decision logic and makes mode-specific components easier to identify and maintain.

Changes:

  • Added @ConditionalOnSingleTenantMode / @ConditionalOnMultiTenantMode meta-annotations plus their Condition implementations.
  • Replaced @ConditionalOnProperty(zeiterfassung.tenant.mode=...) across multiple services/configurations with the new annotations.
  • Removed now-unneeded static imports of TenantConfigurationProperties.SINGLE/MULTI from the updated classes.

Reviewed changes

Copilot reviewed 23 out of 23 changed files in this pull request and generated 5 comments.

Show a summary per file
File Description
src/main/java/de/focusshift/zeiterfassung/timeentry/republish/DayLockedRepublishServiceMultiTenant.java Switch multi-tenant service activation to @ConditionalOnMultiTenantMode.
src/main/java/de/focusshift/zeiterfassung/timeentry/republish/DayLockedRepublishRabbitmqConfiguration.java Gate RabbitMQ republish configuration via @ConditionalOnMultiTenantMode.
src/main/java/de/focusshift/zeiterfassung/timeentry/DayLockedSchedulerServiceSingleTenant.java Switch single-tenant scheduler activation to @ConditionalOnSingleTenantMode.
src/main/java/de/focusshift/zeiterfassung/timeentry/DayLockedSchedulerServiceMultiTenant.java Switch multi-tenant scheduler activation to @ConditionalOnMultiTenantMode.
src/main/java/de/focusshift/zeiterfassung/tenancy/registration/TenantRegistrationService.java Gate tenant registration service via @ConditionalOnMultiTenantMode.
src/main/java/de/focusshift/zeiterfassung/tenancy/registration/property/PropertyTenantInitializer.java Gate single-tenant property initializer via @ConditionalOnSingleTenantMode.
src/main/java/de/focusshift/zeiterfassung/tenancy/configuration/single/TenantContextHolderSingleTenant.java Gate single-tenant context holder via @ConditionalOnSingleTenantMode.
src/main/java/de/focusshift/zeiterfassung/tenancy/configuration/single/SingleTenantDatabaseConfiguration.java Gate single-tenant DB config via @ConditionalOnSingleTenantMode.
src/main/java/de/focusshift/zeiterfassung/tenancy/configuration/single/IsSingleTenantMode.java New Condition implementing “single tenant mode” matching logic.
src/main/java/de/focusshift/zeiterfassung/tenancy/configuration/single/ConditionalOnSingleTenantMode.java New meta-annotation encapsulating single-tenant mode conditional logic.
src/main/java/de/focusshift/zeiterfassung/tenancy/configuration/multi/TenantContextHolderMultiTenant.java Gate multi-tenant context holder via @ConditionalOnMultiTenantMode.
src/main/java/de/focusshift/zeiterfassung/tenancy/configuration/multi/TenantAwareDatabaseConfiguration.java Gate tenant-aware DB config via @ConditionalOnMultiTenantMode.
src/main/java/de/focusshift/zeiterfassung/tenancy/configuration/multi/IsMultiTenantMode.java New Condition implementing “multi tenant mode” matching logic.
src/main/java/de/focusshift/zeiterfassung/tenancy/configuration/multi/ConditionalOnMultiTenantMode.java New meta-annotation encapsulating multi-tenant mode conditional logic.
src/main/java/de/focusshift/zeiterfassung/tenancy/configuration/multi/AdminAwareDatabaseConfiguration.java Gate admin DB config via @ConditionalOnMultiTenantMode.
src/main/java/de/focusshift/zeiterfassung/security/SecurityBeanConfiguration.java Gate single-/multi-tenant OIDC user service beans via new conditionals.
src/main/java/de/focusshift/zeiterfassung/security/oidc/clientregistration/TenantLifecycleEventHandlerOidcClient.java Gate OIDC tenant lifecycle handler via @ConditionalOnMultiTenantMode.
src/main/java/de/focusshift/zeiterfassung/security/oidc/clientregistration/OidcClientEntityToClientRegistrationConverter.java Gate converter bean via @ConditionalOnMultiTenantMode.
src/main/java/de/focusshift/zeiterfassung/security/oidc/clientregistration/OidcClientEntityRepository.java Gate repository via @ConditionalOnMultiTenantMode.
src/main/java/de/focusshift/zeiterfassung/security/oidc/clientregistration/KeycloakUrlProvider.java Gate Keycloak URL provider via @ConditionalOnMultiTenantMode.
src/main/java/de/focusshift/zeiterfassung/security/oidc/clientregistration/JdbcClientRegistrationRepository.java Gate JDBC client registration repository via @ConditionalOnMultiTenantMode.
src/main/java/de/focusshift/zeiterfassung/security/oidc/clientregistration/ClientRegistrationFactory.java Gate client registration factory via @ConditionalOnMultiTenantMode.
src/main/java/de/focusshift/zeiterfassung/launchpad/LaunchpadConfiguration.java Gate Launchpad integration configuration via @ConditionalOnMultiTenantMode.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

@grafjo
grafjo force-pushed the add-conditional-on-tenant-mode branch 4 times, most recently from 1af9ec7 to ea1cfc5 Compare July 11, 2026 18:12
@derTobsch derTobsch added this to the 3.2.0 milestone Jul 15, 2026
@github-actions github-actions Bot added the status: planned This issue is planned in a milestone and won't be touched by stale bot. label Jul 15, 2026
…On{Single,Multi}TenantMode annotations

Introduce ConditionalOnSingleTenantMode / ConditionalOnMultiTenantMode
annotations (backed by IsSingleTenantMode / IsMultiTenantMode
conditions) under tenancy.configuration.single / .multi, mirroring the
urlaubsverwaltung style, and replace every
@ConditionalOnProperty("zeiterfassung.tenant.mode") site with them.
@grafjo
grafjo force-pushed the add-conditional-on-tenant-mode branch from ea1cfc5 to 92c564c Compare July 16, 2026 18:28
@grafjo grafjo mentioned this pull request Jul 16, 2026
3 tasks
@sonarqubecloud

Copy link
Copy Markdown

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

status: planned This issue is planned in a milestone and won't be touched by stale bot.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants