Skip to content

Commit 506f5a7

Browse files
authored
Allow customizing mongo collection name in environment configuration (#3328)
* Allow customizing mongo collection name in environment configuration * Upgrade core to get netty fix
1 parent 81ace1d commit 506f5a7

File tree

8 files changed

+35
-10
lines changed

8 files changed

+35
-10
lines changed

Diff for: data-mongodb/src/main/java/io/micronaut/data/mongodb/init/AbstractMongoCollectionsCreator.java

+5-2
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@
3131
import io.micronaut.data.model.PersistentProperty;
3232
import io.micronaut.data.model.naming.NamingStrategy;
3333
import io.micronaut.data.model.runtime.RuntimeEntityRegistry;
34+
import io.micronaut.data.mongodb.operations.MongoCollectionNameProvider;
3435
import io.micronaut.inject.qualifiers.Qualifiers;
3536
import org.slf4j.Logger;
3637
import org.slf4j.LoggerFactory;
@@ -80,10 +81,12 @@ protected <M> M getMongoFactory(Class<M> mongoFactoryClass, BeanLocator beanLoca
8081
* @param runtimeEntityRegistry The entity registry
8182
* @param mongoConfigurations The configuration
8283
* @param databaseOperationsProvider The database provider
84+
* @param mongoCollectionNameProvider The Mongo collection name provider
8385
*/
8486
protected void initialize(RuntimeEntityRegistry runtimeEntityRegistry,
8587
List<AbstractMongoConfiguration> mongoConfigurations,
86-
DatabaseOperationsProvider<Dtbs> databaseOperationsProvider) {
88+
DatabaseOperationsProvider<Dtbs> databaseOperationsProvider,
89+
MongoCollectionNameProvider mongoCollectionNameProvider) {
8790

8891
for (AbstractMongoConfiguration mongoConfiguration : mongoConfigurations) {
8992
// TODO: different initializer per conf
@@ -99,7 +102,7 @@ protected void initialize(RuntimeEntityRegistry runtimeEntityRegistry,
99102
for (PersistentEntity entity : entities) {
100103
Dtbs database = databaseOperations.find(entity);
101104
Set<String> collections = databaseOperations.listCollectionNames(database);
102-
String persistedName = entity.getPersistedName();
105+
String persistedName = mongoCollectionNameProvider.provide(entity);
103106
if (collections.add(persistedName)) {
104107
if (LOG.isInfoEnabled()) {
105108
LOG.info("Creating collection: {} in database: {}", persistedName, databaseOperations.getDatabaseName(database));

Diff for: data-mongodb/src/main/java/io/micronaut/data/mongodb/init/MongoCollectionsCreator.java

+4-2
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
import io.micronaut.data.model.runtime.RuntimeEntityRegistry;
2929
import io.micronaut.data.mongodb.conf.MongoDataConfiguration;
3030
import io.micronaut.data.mongodb.conf.RequiresSyncMongo;
31+
import io.micronaut.data.mongodb.operations.MongoCollectionNameProvider;
3132
import io.micronaut.data.mongodb.operations.MongoDatabaseNameProvider;
3233
import jakarta.annotation.PostConstruct;
3334

@@ -52,7 +53,8 @@ public final class MongoCollectionsCreator extends AbstractMongoCollectionsCreat
5253
@PostConstruct
5354
void initialize(BeanLocator beanLocator,
5455
RuntimeEntityRegistry runtimeEntityRegistry,
55-
List<AbstractMongoConfiguration> mongoConfigurations) {
56+
List<AbstractMongoConfiguration> mongoConfigurations,
57+
MongoCollectionNameProvider mongoCollectionNameProvider) {
5658

5759
super.initialize(runtimeEntityRegistry, mongoConfigurations, mongoConfiguration -> {
5860
MongoClient mongoClient = getMongoFactory(MongoClient.class, beanLocator, mongoConfiguration);
@@ -80,7 +82,7 @@ public void createCollection(MongoDatabase database, String collection) {
8082
database.createCollection(collection);
8183
}
8284
};
83-
});
85+
}, mongoCollectionNameProvider);
8486
}
8587

8688
}

Diff for: data-mongodb/src/main/java/io/micronaut/data/mongodb/init/MongoReactiveCollectionsCreator.java

+4-2
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
import io.micronaut.data.model.runtime.RuntimeEntityRegistry;
2828
import io.micronaut.data.mongodb.conf.MongoDataConfiguration;
2929
import io.micronaut.data.mongodb.conf.RequiresReactiveMongo;
30+
import io.micronaut.data.mongodb.operations.MongoCollectionNameProvider;
3031
import io.micronaut.data.mongodb.operations.MongoDatabaseNameProvider;
3132
import reactor.core.publisher.Flux;
3233
import reactor.core.publisher.Mono;
@@ -53,7 +54,8 @@ public final class MongoReactiveCollectionsCreator extends AbstractMongoCollecti
5354
@PostConstruct
5455
void initialize(BeanLocator beanLocator,
5556
RuntimeEntityRegistry runtimeEntityRegistry,
56-
List<AbstractMongoConfiguration> mongoConfigurations) {
57+
List<AbstractMongoConfiguration> mongoConfigurations,
58+
MongoCollectionNameProvider mongoCollectionNameProvider) {
5759

5860
super.initialize(runtimeEntityRegistry, mongoConfigurations, mongoConfiguration -> {
5961
MongoClient mongoClient = getMongoFactory(MongoClient.class, beanLocator, mongoConfiguration);
@@ -81,7 +83,7 @@ public void createCollection(MongoDatabase database, String collection) {
8183
Mono.from(database.createCollection(collection)).block();
8284
}
8385
};
84-
});
86+
}, mongoCollectionNameProvider);
8587
}
8688

8789
}

Diff for: data-mongodb/src/main/java/io/micronaut/data/mongodb/operations/DefaultMongoCollectionNameProvider.java

+15-1
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,10 @@
1616
package io.micronaut.data.mongodb.operations;
1717

1818
import io.micronaut.context.annotation.Requires;
19+
import io.micronaut.context.env.Environment;
20+
import io.micronaut.context.env.PropertyPlaceholderResolver;
1921
import io.micronaut.core.annotation.Internal;
22+
import io.micronaut.core.annotation.Nullable;
2023
import io.micronaut.data.model.PersistentEntity;
2124
import jakarta.inject.Singleton;
2225

@@ -31,9 +34,20 @@
3134
@Internal
3235
public final class DefaultMongoCollectionNameProvider implements MongoCollectionNameProvider {
3336

37+
@Nullable
38+
private final PropertyPlaceholderResolver propertyPlaceholderResolver;
39+
40+
DefaultMongoCollectionNameProvider(@Nullable Environment environment) {
41+
this.propertyPlaceholderResolver = environment != null ? environment.getPlaceholderResolver() : null;
42+
}
43+
3444
@Override
3545
public String provide(PersistentEntity persistentEntity) {
36-
return persistentEntity.getPersistedName();
46+
String persistedName = persistentEntity.getPersistedName();
47+
if (propertyPlaceholderResolver != null && persistedName.contains(propertyPlaceholderResolver.getPrefix())) {
48+
persistedName = propertyPlaceholderResolver.resolveRequiredPlaceholders(persistedName);
49+
}
50+
return persistedName;
3751
}
3852

3953
}

Diff for: doc-examples/mongo-example-java/src/main/java/example/Manufacturer.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
import io.micronaut.data.annotation.MappedEntity;
88
import org.bson.types.ObjectId;
99

10-
@MappedEntity
10+
@MappedEntity("${mapping.custom.manufacturer}")
1111
public class Manufacturer {
1212
@Id
1313
@GeneratedValue

Diff for: doc-examples/mongo-example-java/src/main/java/example/Product.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
import io.micronaut.data.annotation.Relation;
99
import org.bson.types.ObjectId;
1010

11-
@MappedEntity
11+
@MappedEntity("${mapping.custom.product}")
1212
public class Product {
1313

1414
@Id

Diff for: doc-examples/mongo-example-java/src/main/resources/application.yml

+4
Original file line numberDiff line numberDiff line change
@@ -4,3 +4,7 @@ micronaut:
44
data:
55
mongodb:
66
create-collections: true
7+
mapping:
8+
custom:
9+
product: col_product
10+
manufacturer: col_manufacturer

Diff for: gradle/libs.versions.toml

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
[versions]
2-
micronaut = "4.7.13"
2+
micronaut = "4.7.14"
33
micronaut-platform = "4.7.4"
44
micronaut-docs = "2.0.0"
55
micronaut-gradle-plugin = "4.4.5"

0 commit comments

Comments
 (0)