티스토리 뷰
글쓴이의 환경은 Java 1.8 , MySQL, 이클립스는 20.06 버전을 사용했습니다.
스케쥴러를 먼저 사용하기 위해서
* SchedulerApplication 클래스
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.scheduling.annotation.EnableScheduling;
@SpringBootApplication
@EnableScheduling
public class SchedulerApplication {
public static void main(String[] args) {
SpringApplication.run(SchedulerApplication.class, args);
}
}
@EnableScheduling 어노테이션을 사용
Spring boot 어플리케이션에서 스케줄러 기능을 활성하 합니다.
그 후 기능을 담당 할 클래스를 만들어줍니다.
import java.time.LocalDate;
import java.util.*;
@Component
public class schedulerTest {
@Autowired
private MemberDAO dao;
// 초 /분 /시 /일/월/요일
@Scheduled(cron = "*/3 * * * * *") // 매 3초마다 실행
public void updateStatuses() {
System.out.println("스케줄러 작동중 ");
List<MemberVO> allMembers = dao.findAllMembers();
System.out.println("All Members: " + allMembers);
LocalDate today = LocalDate.now(); //오늘 날짜 시간을 가져옴
// 조회된 모든 회원에 대해 처리합니다.
for (MemberVO member : allMembers) {
processMember(member, today);
}
}
private void processMember(MemberVO member, LocalDate today) {
// 회원의 마지막 로그인 날짜가 없는 경우 처리하지 않습니다.
if (member.getLastLogin() == null) {
// System.out.println("ID: " + member.getId() + " - No last login date available.");
return;
}
// 마지막 로그인 날짜를 LocalDateTime으로 변환한 후, LocalDate로 변환합니다.
LocalDate lastLoginDate = member.getLastLogin().toLocalDateTime().toLocalDate();
// 현재 날짜와 마지막 로그인 날짜 사이의 개월 수를 계산합니다.
long monthsSinceLastLogin = java.time.temporal.ChronoUnit.MONTHS.between(lastLoginDate, today);
System.out.println("ID: " + member.getId() + ", Last Login: " + lastLoginDate + ", Months Since Last Login: " + monthsSinceLastLogin);
// 마지막 로그인 날짜가 6개월 이상 지난 경우 상태를 업데이트합니다.
if (monthsSinceLastLogin >= 6) {
try {
// 회원의 상태를 업데이트합니다. (상태 업데이트 쿼리 실행)
dao.updateStatus(member.getId());
System.out.println("Updated status for ID: " + member.getId());
} catch (Exception e) {
// System.err.println("Failed to update status for ID: " + member.getId() + " due to: " + e.getMessage());
e.printStackTrace();
}
}
}
}
import는 자신에게 맞는 것으로 사용을 하시면 됩니다.
기능을 하는 클래스에서
자신이 원하는 스타일로 바꿔 사용하셔도 됩니다.
여기서 더 필요한 것은
DAO
public List<MemberVO> findAllMembers() {
return as.selectList("member.findAllMembers");
}
//-------------------------------------------------------
//상태 업데이트
public void updateStatus(String id) {
as.update("member.updateStatus", id);
}
Mapper
<select id="findAllMembers" resultType="memberVO">
SELECT id,last_login AS
lastLogin
FROM member
</select>
// -----------------------------------------------
<!-- 회원상태 변경 -->
<update id="updateStatus" parameterType="String">
UPDATE member
SET status = 2
WHERE id = #{id}
</update>
VO
private Timestamp lastLogin;
이렇게 코드를 작성하고
그 후 자신의 코드 흐름에 맞게 코드를 짜시면 동작을 잘 할 것 입니다.
저는 테스트 하려고 매 3초 마다 실행을 하도록 하였는데
자신이 원하는 시간대로 바꾸어 사용 하시면 될 것 같습니다.
'spring boot' 카테고리의 다른 글
| Spring boot css적용하기 (0) | 2026.04.12 |
|---|---|
| [Spring Boot] Ajax로 기상청 API 날씨 정보 불러오기 (0) | 2026.04.12 |
| [자바] bcrypt 란?, bcrypt를 이용한 비밀번호 암호화 (0) | 2026.04.12 |
| [Java] Ajax란??? + Ajax 활용 예[출처] [Java] Ajax란? + Ajax 활용 (0) | 2026.04.12 |
| [Spring Boot] Selenium(셀레니움) 연습(네이버 영어사전 가져오기)[출처] [Spring Boot] Selenium(셀레니움) 연습(네이버 영어사전 가져오기) (0) | 2026.04.12 |
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 비밀번호암호화
- FIFO
- ajax로그인
- 오래된이용자
- java
- 날씨불러오기
- parameterType
- ResultType
- 셀레니움
- springbootcss
- 차이점
- 크롤링연습
- cookie
- deque
- 세션
- varchar
- 데이터타입
- Spring
- 비동기식
- mybatis
- char
- bcrypt
- 기상청api
- AJAX
- DTO
- LIFO
- Vo
- 스케줄러
- springboot
- 회원상태
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 |
글 보관함