민뭉아치
민뭉아치
민뭉아치
전체 방문자
오늘
어제
  • 분류 전체보기 (62)
    • ㅁㅁㅇㅊ's Life (0)
      • Diary (1)
      • Certification (6)
      • English (1)
      • 독서 (1)
    • Algorithm (25)
    • Web (2)
    • Language (3)
      • JavaScript (1)
      • JAVA (2)
    • Spring boot (9)
    • Cloud (0)
    • DevOps (1)
    • Trouble Shooting (6)
    • 개발환경 (3)
    • 짤막IT지식 (4)

블로그 메뉴

  • 홈
  • 깃허브
  • 방명록

공지사항

인기 글

태그

  • Spring
  • Algorithm
  • 코딩테스트
  • 정보처리기사
  • 자바
  • 백준알고리즘
  • Java
  • 알고리즘
  • 자격증
  • 백준

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
민뭉아치

민뭉아치

Spring boot

[Spring Boot] JPA Caching 적용하기

2022. 3. 21. 19:21

Dependency

implementation group: 'org.springframework.boot', name: 'spring-boot-starter-cache'
  • ConcurrentHashMap
  • caffeine

application.yml

logging:
	level:
		org:
			hibernate:
				SQL:DEBUG
				type.descriptor.sql.BasicBinder:DEBUG

mainApplication.java

@SpringBootApplication
@EnableCaching
public class mainApplication {
    public static void main(String[] args) {
        SpringApplication.run(mainApplication.class, args);
    }

}

@EnableCache

Entity

@Data
@Entity
public class User {
	@Id
	private long id;
	private String name;
	private String password;
}

Service

@Service
public class UserService {
	private UserRepository userRepository;

	public HelloService(@Autowired UserRepository userRepository) {
		this.userRepository = userRepository;
	}

	@Cacheable("getUserAll")
	public List<User> getUserAll() {
		List<User> user = this.userRepository.findAll();
		return user;
	}

}

@Cacheable : 자주 쓰이는 함수에 붙이면 된다. 이름을 설정해야한다.,

Repository

public interface UserRepository implements Crud... {
}

Test

@RunWith(SpringRunner.class)
@SpringBootTest
public class HelloServiceTest {
	@Autowired
	private UserService userService;

	@Autowired
	private UserRepository userRepository;

	@Test
	public void getUserAll() {
		User user = new User();
		user.setId(1);
		user.setName("test");
		user.setPassword("testpwd");
		userRepository.save(user);

		List<User> users = userService.getUserAll();
		assertEquals(1, users.size());

		Sysyem.out.pringln(userService.getUserAll());
		Sysyem.out.pringln(userService.getUserAll());
		Sysyem.out.pringln(userService.getUserAll());
	}

}

여러번 getUserAll() 메서드를 호출해본 결과 쿼리문은 따로 실행되지 않음을 확인할 수 있다.

 

캐싱 적용 확인

  • h2 Query를 보여주는 show-sql 속성을 true로 설정하여 판단한다.
spring:
  datasource:
    driver-class-name: org.h2.Driver
    url: jdbc:h2:mem:testdb
    username: sa
    password:
  jpa:
    hibernate:
      ddl-auto: create
    show-sql: true
    properties:
      hibernate:
        dialect: org.hibernate.dialect.H2Dialect

 

참고 영상

 

반응형

'Spring boot' 카테고리의 다른 글

[Spring boot] 배포 패키징 jar 에서 war로 변경  (1) 2022.04.10
[Spring Boot] JPA 조회 작업 findById(), getOne()의 차이  (0) 2022.03.29
[Spring Boot] PasswordEncoder.mathes() 암호화된 패스워드 비교  (0) 2022.03.21
[Spring Study Group] Spring MVC 요청 경로/클래스 레벨/경로 패턴 / Http 메서드 매핑설정  (0) 2021.11.07
[Spring Study Group] Spring Legacy Project 생성하기 - IntelliJ IDEA  (2) 2021.11.07
    'Spring boot' 카테고리의 다른 글
    • [Spring boot] 배포 패키징 jar 에서 war로 변경
    • [Spring Boot] JPA 조회 작업 findById(), getOne()의 차이
    • [Spring Boot] PasswordEncoder.mathes() 암호화된 패스워드 비교
    • [Spring Study Group] Spring MVC 요청 경로/클래스 레벨/경로 패턴 / Http 메서드 매핑설정
    민뭉아치
    민뭉아치
    Do Better Today Than You Were Yesterday

    티스토리툴바