쓰는 방식 public record MyRecordVo( Long id, String name, String phone ) { public String region() { return Arrays.stream(phone.split("-")).findFirst().orElseThrow(RuntimeException::new); } } record로 설정한다. ( ) 괄호 안에 원하는 타입과 필드 이름을 설정한다. 추가적인 메소드는 {} 안에 작성하면 된다. (위의 메소드는 억지로 작성한 것이니 그냥 넘어가주셔도 됩니다 ㅎㅎ) 특성 https://docs.oracle.com/en/java/javase/14/docs/api/java.base/java/lang/Record.html https://docs.ora..
참고 글: https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/context/event/EventListener.html 구조 파악하기 @EventListener를 사용하는 방법은 다음과 같다. EventPublisher @Component @RequiredArgsConstructor public class EventPublisher { private final ApplicationEventPublisher publisher; public void publish(PublicEvent event) { publisher.publishEvent(event); } } EventSubscriber @Componen..
사용법 초기설정 @SpringBootApplication @EnableAsync public class SpringplaygroundApplication { public static void main(String[] args) { SpringApplication.run(SpringplaygroundApplication.class, args); } } 첫 번째로 @EnableAsync을 설정해야 한다. 그래야 비동기로 동작하는 데 필요한 Bean 들이 등록이 된다. 돌리고자 하는 클래스 또는 메소드 @Slf4j @Service @Async public class AsyncService { public void myAsyncCall() throws InterruptedException { Thread.sle..
사용법 @EnableScheduling 설정 반드시 @Scheduled를 사용할려면 @EnableScheduling을 다음과 같이 설정해야 한다. @SpringBootApplication @EnableScheduling public class SpringplaygroundApplication { public static void main(String[] args) { SpringApplication.run(SpringplaygroundApplication.class, args); } } @Scheduled 사용 @Scheduled는 다음 아래와 같이 3가지 설정을 통해 구현할 수 있으며, 원하는 내용에 어노테이션을 설정하면 된다. cron cron은 흔히 우리가 linux에서 설정하는 cron 형식과 유..
Bean Prototype Scope 싱글톤 방식으로 동작하는 것이 아닌, bean deployment의 prototype의 범위는 해당 특정 Bean에 대한 요청이 이루어질 때마다 새로운 Bean 인스턴스가 생성(즉, 다른 Bean에 주입되거나 컨테이너의 programmatic getBean() method 호출을 통해 요청됨) 원칙적으로 stateful 한 모든 Bean에는 prototype scope 을 사용하고, stateless Bean에는 singleton scope을 사용해야 한다. 프로토 타입을 사용하고자 할 때, bean의 lifecycle의 미묘한 변화을 알아야 한다. 컨테이너는 프로토타입 객체를 인스턴스화, 구성, 장식 및 조립하고 Client에게 전달한 후 해당 prototype 인..
getConnection public Connection getConnection(final long hardTimeout) throws SQLException { suspendResumeLock.acquire(); final long startTime = currentTime(); try { long timeout = hardTimeout; do { PoolEntry poolEntry = connectionBag.borrow(timeout, MILLISECONDS); if (poolEntry == null) { break; // We timed out... break and throw exception } final long now = currentTime(); if (poolEntry.isMarked..
HikariPool 생성자 super(config); this.connectionBag = new ConcurrentBag(this); this.suspendResumeLock = config.isAllowPoolSuspension() ? new SuspendResumeLock() : SuspendResumeLock.FAUX_LOCK; this.houseKeepingExecutorService = initializeHouseKeepingExecutorService();super(this) HikariPool은 PoolBase를 상속받아 구현한 클래스로서 기본 값을 설정합니다. PoolBase(final HikariConfig config) { this.config = config; this.network..
HikariDataSource getConnection() isClosed if (isClosed()) { throw new SQLException("HikariDataSource " + this + " has been closed."); } private final AtomicBoolean isShutdown = new AtomicBoolean(); Determine whether the HikariDataSource has been closed. Returns: true if the HikariDataSource has been closed, false otherwise public boolean isClosed() { return isShutdown.get(); } isClosed는 커넥션 풀이 닫..
- Total
- Today
- Yesterday
- Pattern
- thread
- 2021 KAKAO BLIND RECRUITMENT
- Java
- Command Line
- setattr
- env
- django
- ubuntu
- headers
- 프로그래머스
- DRF
- 면접
- 카카오
- 알고리즘
- BFS
- Celery
- Python
- dockerignore
- Collections
- docker
- 백준
- Spring
- docker-compose
- 그래프
- 파이썬
- 자바
- postgres
- PostgreSQL
- Linux
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |