SpringBoot]ショッピングモールプロジェクト(9)-監査共有エンティティ属性の使用
14238 ワード
レビューを使用してエンティティの汎用プロパティを汎用化
実際にサービスを実行すると、通常、登録時間、変更時間、登録者、および変更者がテーブルに配置され、利用されます.データの作成または変更時に時間を記録し、ユーザーのIDを残します.これらのコラムは、バグやコンサルティングが発生した場合に使用できます.
Spring Data Jpaは、エンティティが保存または変更されると、登録日、変更日、登録者、および変更者が自動的に入力される監査機能を提供します.Auditの事前定義は「監視」です.すなわち、エンティティの作成と変更を監視します.これらの共通メンバー変数を抽象クラスとして作成し、その抽象クラスを継承する形でエンティティを再編成します.
Auditor Awareインタフェースを実装するクラスを作成し、現在ログインしているユーザーの情報を登録者と変更者として指定します.
public class AuditorAwareImpl implements AuditorAware<String> {
@Override
public Optional<String> getCurrentAuditor() {
Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
String userId = "";
if(authentication != null){
userId = authentication.getName();
}
return Optional.of(userId);
}
}
現在のログインユーザーの情報を表示し、登録者と変更者として名前を付けます.監査機能を使用するには、Configファイルを作成します.
@Configuration
@EnableJpaAuditing
public class AuditConfig {
@Bean
public AuditorAware<String> auditorProvider() {
return new AuditorAwareImpl();
}
}
@EnableJpaAuditing宣言JPAのAuditing機能が有効になっています.その後、AuditorAwareを空に登録して、登録者と変更者を処理します.▼▼BaseTimeEntity類
登録者とテーブルに変更者が含まれていない可能性があるため、BaseTimeEntityクラスを作成してBaseTimeEntityを継承します.
@EntityListeners(value = {AuditingEntityListener.class})
@MappedSuperclass
@Getter @Setter
public abstract class BaseTimeEntity {
@CreatedDate
@Column(updatable = false)
private LocalDateTime regTime;
@LastModifiedDate
private LocalDateTime updateTime;
}
@MappedSuperclass宣言は、共通のマッピング情報が必要な場合に使用される宣言で、継承した親の子にのみマッピング情報を提供します.✏️ BaseEntity
BaseEntityは、上記で作成したBaseTimeEntityを継承します.登録日、変更日、登録者、および変更者を持つエンティティは、BaseEntityを継承できます.
@EntityListeners(value = {AuditingEntityListener.class})
@MappedSuperclass
@Getter
public abstract class BaseEntity extends BaseTimeEntity{
@CreatedBy
@Column(updatable = false)
private String createdBy;
@LastModifiedBy
private String modifiedBy;
}
監査機能をメンバー・エンティティに適用するには、BaseEntityクラスを継承し、メンバー・エンティティを保存するときにテスト・コードを自動的に作成して、登録者、変更者、登録時間、および変更時間が保存されているかどうかを確認します.✏️ MemberTest
@SpringBootTest
@Transactional
@TestPropertySource(locations="classpath:application-test.properties")
public class MemberTest {
@Autowired
MemberRepository memberRepository;
@PersistenceContext
EntityManager em;
@Test
@DisplayName("Auditing 테스트")
@WithMockUser(username = "gildong", roles = "USER")
public void auditingTest(){
Member newMember = new Member();
memberRepository.save(newMember);
em.flush();
em.clear();
Member member = memberRepository.findById(newMember.getId())
.orElseThrow(EntityNotFoundException::new);
System.out.println("register time : " + member.getRegTime());
System.out.println("update time : " + member.getUpdateTime());
System.out.println("create member : " + member.getCreatedBy());
System.out.println("modify member : " + member.getModifiedBy());
}
}
残りのエンティティを変更してBaseEntityを継承します.Reference
この問題について(SpringBoot]ショッピングモールプロジェクト(9)-監査共有エンティティ属性の使用), 我々は、より多くの情報をここで見つけました https://velog.io/@yulhee741/Spring-Boot-쇼핑몰-프로젝트-9-Auditing을-이용한-엔티티-공통-속성-공통화テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol