-
Notifications
You must be signed in to change notification settings - Fork 139
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
GH-748 - Allow publication completion to delete database entries.
We now expose a spring.modulith.events.completion-mode property, defaulting the previous behavior to a value of UPDATE. The property can also be configured to DELETE, which will cause the persistence implementations to flip to removing the database entries for event publications instead of setting the completion date.
- Loading branch information
Showing
17 changed files
with
572 additions
and
129 deletions.
There are no files selected for viewing
57 changes: 57 additions & 0 deletions
57
...events-core/src/main/java/org/springframework/modulith/events/support/CompletionMode.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,57 @@ | ||
/* | ||
* Copyright 2024 the original author or authors. | ||
* | ||
* Licensed under the Apache License, Version 2.0 (the "License"); | ||
* you may not use this file except in compliance with the License. | ||
* You may obtain a copy of the License at | ||
* | ||
* https://www.apache.org/licenses/LICENSE-2.0 | ||
* | ||
* Unless required by applicable law or agreed to in writing, software | ||
* distributed under the License is distributed on an "AS IS" BASIS, | ||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
* See the License for the specific language governing permissions and | ||
* limitations under the License. | ||
*/ | ||
package org.springframework.modulith.events.support; | ||
|
||
import org.springframework.core.env.Environment; | ||
import org.springframework.util.Assert; | ||
|
||
/** | ||
* Different modes of event completion. | ||
* | ||
* @author Oliver Drotbohm | ||
* @since 1.3 | ||
* @soundtrack Lettuce - Waffles (Unify) | ||
*/ | ||
public enum CompletionMode { | ||
|
||
/** | ||
* Completes an {@link org.springframework.modulith.events.EventPublication} by setting its completion date and | ||
* updating the database entry accordingly. | ||
*/ | ||
UPDATE, | ||
|
||
/** | ||
* Completes an {@link org.springframework.modulith.events.EventPublication} by removing the database entry. | ||
*/ | ||
DELETE; | ||
|
||
public static final String PROPERTY = "spring.modulith.events.completion-mode"; | ||
|
||
/** | ||
* Looks up the {@link CompletionMode} from the given environment or uses {@link #UPDATE} as default. | ||
* | ||
* @param environment must not be {@literal null}. | ||
* @return will never be {@literal null}. | ||
*/ | ||
public static CompletionMode from(Environment environment) { | ||
|
||
Assert.notNull(environment, "Environment must not be null!"); | ||
|
||
var result = environment.getProperty(PROPERTY, CompletionMode.class); | ||
|
||
return result == null ? CompletionMode.UPDATE : result; | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
77 changes: 77 additions & 0 deletions
77
...s-jdbc/src/main/java/org/springframework/modulith/events/jdbc/JdbcRepositorySettings.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,77 @@ | ||
/* | ||
* Copyright 2024 the original author or authors. | ||
* | ||
* Licensed under the Apache License, Version 2.0 (the "License"); | ||
* you may not use this file except in compliance with the License. | ||
* You may obtain a copy of the License at | ||
* | ||
* https://www.apache.org/licenses/LICENSE-2.0 | ||
* | ||
* Unless required by applicable law or agreed to in writing, software | ||
* distributed under the License is distributed on an "AS IS" BASIS, | ||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
* See the License for the specific language governing permissions and | ||
* limitations under the License. | ||
*/ | ||
package org.springframework.modulith.events.jdbc; | ||
|
||
import org.springframework.lang.Nullable; | ||
import org.springframework.modulith.events.support.CompletionMode; | ||
import org.springframework.util.Assert; | ||
|
||
/** | ||
* Internal abstraction of customization options for {@link JdbcEventPublicationRepository}. | ||
* | ||
* @author Oliver Drotbohm | ||
* @since 1.3 | ||
* @soundtrack Jeff Coffin - Bom Bom (Only the Horizon) | ||
*/ | ||
public class JdbcRepositorySettings { | ||
|
||
private final DatabaseType databaseType; | ||
private final String schema; | ||
private final CompletionMode completionMode; | ||
|
||
/** | ||
* Creates a new {@link JdbcRepositorySettings} for the given {@link DatabaseType}, {@link CompletionMode} and schema | ||
* | ||
* @param databaseType must not be {@literal null}. | ||
* @param schema can be {@literal null} | ||
* @param completionMode must not be {@literal null}. | ||
*/ | ||
JdbcRepositorySettings(DatabaseType databaseType, CompletionMode completionMode, @Nullable String schema) { | ||
|
||
Assert.notNull(databaseType, "Database type must not be null!"); | ||
Assert.notNull(completionMode, "Completion mode must not be null!"); | ||
|
||
this.databaseType = databaseType; | ||
this.schema = schema; | ||
this.completionMode = completionMode; | ||
} | ||
|
||
/** | ||
* Returns the {@link DatabaseType}. | ||
* | ||
* @return will never be {@literal null}. | ||
*/ | ||
public DatabaseType getDatabaseType() { | ||
return databaseType; | ||
} | ||
|
||
/** | ||
* Return the schema to be used. | ||
* | ||
* @return can be {@literal null}. | ||
*/ | ||
@Nullable | ||
public String getSchema() { | ||
return schema; | ||
} | ||
|
||
/** | ||
* Returns whether we use the deleting completion mode. | ||
*/ | ||
public boolean isDeleteCompletion() { | ||
return completionMode == CompletionMode.DELETE; | ||
} | ||
} |
Oops, something went wrong.