Browse Source

Simplify auditing setup

Use IsNewAwareAuditingHandler factory method to avoid exposing additional beans.

See: #1279
pull/1298/head
Christoph Strobl 3 years ago
parent
commit
1467d63f61
No known key found for this signature in database
GPG Key ID: 8CC1AB53391458C8
  1. 42
      spring-data-jdbc/src/main/java/org/springframework/data/jdbc/repository/config/JdbcAuditingRegistrar.java
  2. 41
      spring-data-r2dbc/src/main/java/org/springframework/data/r2dbc/config/R2dbcAuditingRegistrar.java

42
spring-data-jdbc/src/main/java/org/springframework/data/jdbc/repository/config/JdbcAuditingRegistrar.java

@ -17,19 +17,15 @@ package org.springframework.data.jdbc.repository.config;
import java.lang.annotation.Annotation; import java.lang.annotation.Annotation;
import org.springframework.beans.factory.ListableBeanFactory;
import org.springframework.beans.factory.config.BeanDefinition; import org.springframework.beans.factory.config.BeanDefinition;
import org.springframework.beans.factory.support.BeanDefinitionBuilder; import org.springframework.beans.factory.support.BeanDefinitionBuilder;
import org.springframework.beans.factory.support.BeanDefinitionReaderUtils;
import org.springframework.beans.factory.support.BeanDefinitionRegistry; import org.springframework.beans.factory.support.BeanDefinitionRegistry;
import org.springframework.context.annotation.ImportBeanDefinitionRegistrar; import org.springframework.context.annotation.ImportBeanDefinitionRegistrar;
import org.springframework.data.auditing.IsNewAwareAuditingHandler; import org.springframework.data.auditing.IsNewAwareAuditingHandler;
import org.springframework.data.auditing.config.AuditingBeanDefinitionRegistrarSupport; import org.springframework.data.auditing.config.AuditingBeanDefinitionRegistrarSupport;
import org.springframework.data.auditing.config.AuditingConfiguration; import org.springframework.data.auditing.config.AuditingConfiguration;
import org.springframework.data.config.ParsingUtils; import org.springframework.data.config.ParsingUtils;
import org.springframework.data.mapping.context.PersistentEntities;
import org.springframework.data.relational.auditing.RelationalAuditingCallback; import org.springframework.data.relational.auditing.RelationalAuditingCallback;
import org.springframework.lang.Nullable;
import org.springframework.util.Assert; import org.springframework.util.Assert;
/** /**
@ -39,6 +35,7 @@ import org.springframework.util.Assert;
* @see EnableJdbcAuditing * @see EnableJdbcAuditing
* @author Kazuki Shimizu * @author Kazuki Shimizu
* @author Jens Schauder * @author Jens Schauder
* @author Christoph Strobl
*/ */
class JdbcAuditingRegistrar extends AuditingBeanDefinitionRegistrarSupport { class JdbcAuditingRegistrar extends AuditingBeanDefinitionRegistrarSupport {
@ -69,7 +66,7 @@ class JdbcAuditingRegistrar extends AuditingBeanDefinitionRegistrarSupport {
@Override @Override
protected void postProcess(BeanDefinitionBuilder builder, AuditingConfiguration configuration, protected void postProcess(BeanDefinitionBuilder builder, AuditingConfiguration configuration,
BeanDefinitionRegistry registry) { BeanDefinitionRegistry registry) {
potentiallyRegisterJdbcPersistentEntities(builder, registry); builder.setFactoryMethod("from").addConstructorArgReference("jdbcMappingContext");
} }
@Override @Override
@ -96,39 +93,4 @@ class JdbcAuditingRegistrar extends AuditingBeanDefinitionRegistrarSupport {
registerInfrastructureBeanWithId(listenerBeanDefinitionBuilder.getBeanDefinition(), registerInfrastructureBeanWithId(listenerBeanDefinitionBuilder.getBeanDefinition(),
RelationalAuditingCallback.class.getName(), registry); RelationalAuditingCallback.class.getName(), registry);
} }
static void potentiallyRegisterJdbcPersistentEntities(BeanDefinitionBuilder builder,
BeanDefinitionRegistry registry) {
String persistentEntitiesBeanName = JdbcAuditingRegistrar.detectPersistentEntitiesBeanName(registry);
if (persistentEntitiesBeanName == null) {
persistentEntitiesBeanName = BeanDefinitionReaderUtils.uniqueBeanName("jdbcPersistentEntities", registry);
// TODO: https://github.com/spring-projects/spring-framework/issues/28728
BeanDefinitionBuilder definition = BeanDefinitionBuilder.genericBeanDefinition(PersistentEntities.class) //
.setFactoryMethod("of") //
.addConstructorArgReference("jdbcMappingContext");
registry.registerBeanDefinition(persistentEntitiesBeanName, definition.getBeanDefinition());
}
builder.addConstructorArgReference(persistentEntitiesBeanName);
}
@Nullable
private static String detectPersistentEntitiesBeanName(BeanDefinitionRegistry registry) {
if (registry instanceof ListableBeanFactory beanFactory) {
for (String bn : beanFactory.getBeanNamesForType(PersistentEntities.class)) {
if (bn.startsWith("jdbc")) {
return bn;
}
}
}
return null;
}
} }

41
spring-data-r2dbc/src/main/java/org/springframework/data/r2dbc/config/R2dbcAuditingRegistrar.java

@ -17,19 +17,15 @@ package org.springframework.data.r2dbc.config;
import java.lang.annotation.Annotation; import java.lang.annotation.Annotation;
import org.springframework.beans.factory.ListableBeanFactory;
import org.springframework.beans.factory.config.BeanDefinition; import org.springframework.beans.factory.config.BeanDefinition;
import org.springframework.beans.factory.support.BeanDefinitionBuilder; import org.springframework.beans.factory.support.BeanDefinitionBuilder;
import org.springframework.beans.factory.support.BeanDefinitionReaderUtils;
import org.springframework.beans.factory.support.BeanDefinitionRegistry; import org.springframework.beans.factory.support.BeanDefinitionRegistry;
import org.springframework.context.annotation.ImportBeanDefinitionRegistrar; import org.springframework.context.annotation.ImportBeanDefinitionRegistrar;
import org.springframework.data.auditing.ReactiveIsNewAwareAuditingHandler; import org.springframework.data.auditing.ReactiveIsNewAwareAuditingHandler;
import org.springframework.data.auditing.config.AuditingBeanDefinitionRegistrarSupport; import org.springframework.data.auditing.config.AuditingBeanDefinitionRegistrarSupport;
import org.springframework.data.auditing.config.AuditingConfiguration; import org.springframework.data.auditing.config.AuditingConfiguration;
import org.springframework.data.config.ParsingUtils; import org.springframework.data.config.ParsingUtils;
import org.springframework.data.mapping.context.PersistentEntities;
import org.springframework.data.r2dbc.mapping.event.ReactiveAuditingEntityCallback; import org.springframework.data.r2dbc.mapping.event.ReactiveAuditingEntityCallback;
import org.springframework.lang.Nullable;
import org.springframework.util.Assert; import org.springframework.util.Assert;
/** /**
@ -62,7 +58,7 @@ class R2dbcAuditingRegistrar extends AuditingBeanDefinitionRegistrarSupport {
@Override @Override
protected void postProcess(BeanDefinitionBuilder builder, AuditingConfiguration configuration, protected void postProcess(BeanDefinitionBuilder builder, AuditingConfiguration configuration,
BeanDefinitionRegistry registry) { BeanDefinitionRegistry registry) {
potentiallyRegisterR2dbcPersistentEntities(builder, registry); builder.setFactoryMethod("from").addConstructorArgReference("r2dbcMappingContext");
} }
/* /*
@ -97,39 +93,4 @@ class R2dbcAuditingRegistrar extends AuditingBeanDefinitionRegistrarSupport {
registerInfrastructureBeanWithId(listenerBeanDefinitionBuilder.getBeanDefinition(), registerInfrastructureBeanWithId(listenerBeanDefinitionBuilder.getBeanDefinition(),
ReactiveAuditingEntityCallback.class.getName(), registry); ReactiveAuditingEntityCallback.class.getName(), registry);
} }
static void potentiallyRegisterR2dbcPersistentEntities(BeanDefinitionBuilder builder,
BeanDefinitionRegistry registry) {
String persistentEntitiesBeanName = R2dbcAuditingRegistrar.detectPersistentEntitiesBeanName(registry);
if (persistentEntitiesBeanName == null) {
persistentEntitiesBeanName = BeanDefinitionReaderUtils.uniqueBeanName("r2dbcPersistentEntities", registry);
// TODO: https://github.com/spring-projects/spring-framework/issues/28728
BeanDefinitionBuilder definition = BeanDefinitionBuilder.genericBeanDefinition(PersistentEntities.class) //
.setFactoryMethod("of") //
.addConstructorArgReference("r2dbcMappingContext");
registry.registerBeanDefinition(persistentEntitiesBeanName, definition.getBeanDefinition());
}
builder.addConstructorArgReference(persistentEntitiesBeanName);
}
@Nullable
private static String detectPersistentEntitiesBeanName(BeanDefinitionRegistry registry) {
if (registry instanceof ListableBeanFactory beanFactory) {
for (String bn : beanFactory.getBeanNamesForType(PersistentEntities.class)) {
if (bn.startsWith("r2dbc")) {
return bn;
}
}
}
return null;
}
} }

Loading…
Cancel
Save