#581 - Add Cassandra examples for auditing.

This commit is contained in:
Mark Paluch
2020-08-12 14:42:03 +02:00
parent 174aafb46e
commit e58140f9b5
4 changed files with 247 additions and 0 deletions

View File

@@ -0,0 +1,56 @@
/*
* Copyright 2020 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
*
* http://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 example.springdata.cassandra.auditing;
import lombok.Data;
import java.time.Instant;
import org.springframework.data.annotation.CreatedBy;
import org.springframework.data.annotation.CreatedDate;
import org.springframework.data.annotation.Id;
import org.springframework.data.annotation.LastModifiedBy;
import org.springframework.data.annotation.LastModifiedDate;
import org.springframework.data.annotation.Transient;
import org.springframework.data.cassandra.core.mapping.Table;
import org.springframework.data.domain.Persistable;
/**
* Simple domain object that declares properties annotated with Spring Data's annotations for auditing.
*
* @author Mark Paluch
*/
@Data
@Table
public class AuditedPerson implements Persistable<Long> {
@Id Long id;
@CreatedBy String createdBy;
@LastModifiedBy String lastModifiedBy;
@CreatedDate Instant createdDate;
@LastModifiedDate Instant lastModifiedDate;
@Transient boolean isNew;
@Override
public boolean isNew() {
return isNew;
}
}

View File

@@ -0,0 +1,25 @@
/*
* Copyright 2020 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
*
* http://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 example.springdata.cassandra.auditing;
import org.springframework.data.repository.CrudRepository;
/**
* Simple repository interface for {@link AuditedPerson} instances.
*
* @author Mark Paluch
*/
public interface AuditedPersonRepository extends CrudRepository<AuditedPerson, Long> {}

View File

@@ -0,0 +1,69 @@
/*
* Copyright 2020 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
*
* http://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 example.springdata.cassandra.auditing;
import java.util.Optional;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.domain.EntityScan;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.cassandra.config.EnableCassandraAuditing;
import org.springframework.data.cassandra.core.convert.CassandraCustomConversions;
import org.springframework.data.cassandra.core.convert.MappingCassandraConverter;
import org.springframework.data.cassandra.core.mapping.CassandraMappingContext;
import org.springframework.data.cassandra.core.mapping.SimpleUserTypeResolver;
import org.springframework.data.domain.AuditorAware;
import com.datastax.oss.driver.api.core.CqlSession;
/**
* Basic {@link Configuration} to create the necessary schema for the {@link AuditedPerson} table.
*
* @author Mark Paluch
*/
@SpringBootApplication
@EntityScan(basePackageClasses = AuditedPerson.class)
@EnableCassandraAuditing
class BasicConfiguration {
/**
* {@code @Bean} method defining a supplier for an auditor. This could be also an integration with a security
* framework such as Spring Security.
*/
@Bean
AuditorAware<String> auditorAware() {
return () -> Optional.of("Some user");
}
/**
* {@code @Bean} method defining a {@link MappingCassandraConverter} as currently the auditing requires a bean
* definition for {@link MappingCassandraConverter}.
*/
@Bean
public MappingCassandraConverter cassandraConverter(CassandraMappingContext mapping,
CassandraCustomConversions conversions, CqlSession session) {
MappingCassandraConverter converter = new MappingCassandraConverter(mapping);
converter.setCodecRegistry(session.getContext().getCodecRegistry());
converter.setCustomConversions(conversions);
converter.setUserTypeResolver(new SimpleUserTypeResolver(session));
return converter;
}
}