SpringMVC Cron 타이머 데모 흔 한 문제 해결 방안
클 러 스 터 환경 에서 여러 서버 에서 한 대 만 실행 하 기 를 원한 다 면,Spring 이 자체 적 으로 가지 고 있 는 이 타이머 방식 은 당신 의 요구 에 부합 되 지 않 을 것 입 니 다.
그러나 모든 서버 가 이 타이머 작업 을 독립 적 으로 수행 해 야 하고 서로 동기 화가 존재 하지 않 는 다 면 고려 할 수 있다.
SpringMVC 타이머
본 고 는 스프링 부 트 가 타 이 머 를 설정 하 는 방식 이 아니 라 스프링 부 트 가 타 이 머 를 설정 하 는 방식 을 중점적으로 소개 한다.
주해 방식
우선,Clock 클래스 에@Component 를 추가 한 다음,정시 에 실행 해 야 하 는 방법 에@Scheduled 를 추가 하고 마지막 으로 cron 표현 식 을 지정 합 니 다.
프로젝트 구성:
Clock.java
package coderead.spring.scheduled;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import java.util.Date;
@Component
public class Clock {
// 5
@Scheduled(cron = "*/5 * * * * ?")
public void testTime() {
System.out.println(new Date());
}
}
spring-mvc.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:task="http://www.springframework.org/schema/task"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/task
http://www.springframework.org/schema/task/spring-task.xsd">
<mvc:annotation-driven />
<context:component-scan base-package="coderead.spring.*" />
<!-- -->
<task:annotation-driven />
</beans>
web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
version="3.1">
<!-- -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:spring/spring-mvc.xml</param-value>
</context-param>
<!-- ================================== listener ================================== -->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<!-- ================================== servlet ================================== -->
<!-- -->
<servlet>
<servlet-name>dispatcherServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value></param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>dispatcherServlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>
pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>coderead.spring</groupId>
<artifactId>spring-scheduled-test</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>war</packaging>
<properties>
<spring.version>5.1.6.RELEASE</spring.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>${spring.version}</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
<plugin>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-maven-plugin</artifactId>
<version>9.4.33.v20201020</version>
</plugin>
</plugins>
</build>
</project>
jetty 로 프로젝트 를 시작 하 는 방법 을 모 르 면 maven-Jetty 9-plugin 플러그 인 을 사용 하여 첫 번 째 Servlet 을 실행 하 는 것 을 참고 하 십시오.xml 설정 방식
xml 설정 을 사용 해 야 한다 면@Scheduled 주석 과
Clock.java 주석 제거
package coderead.spring.scheduled;
import java.util.Date;
public class Clock {
public void testTime() {
System.out.println(new Date());
}
}
spring-mvc.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:task="http://www.springframework.org/schema/task"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/task
http://www.springframework.org/schema/task/spring-task.xsd">
<mvc:annotation-driven />
<context:component-scan base-package="coderead.spring.*" />
<!-- xml Clock Bean-->
<bean id="clock" class="coderead.spring.scheduled.Clock" />
<!-- xml -->
<task:scheduled-tasks>
<task:scheduled ref="clock" method="testTime" cron="*/5 * * * * ?"/>
</task:scheduled-tasks>
</beans>
흔 한 문제@Scheduled 정시 퀘 스 트 가 유효 하지 않 습 니 다
@Scheduled 정시 미 션 이 적용 되 지 않 습 니까??
또 하 나 는 spring-mvc.xml 파일 에
@Scheduled 정시 미 션 두 번 수행
@Scheduled Spring 정시 작업 은 매번 두 번 씩 해결 방안 을 수행 합 니 다.
주요 원인 은 웹.xml 가
<web-app ....>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:spring/spring-mvc.xml</param-value>
</context-param>
...
<servlet>
<servlet-name>dispatcherServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:spring/spring-mvc.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
...
</web-app>
cron 표현 식cron 표현 식 은 코드 실행 주 기 를 규정 하 는 표현 식 입 니 다.cron 표현 식 은 이 글 에서 cron 표현 식 의 사용 세부 사항 을 상세 하 게 설명 합 니 다.
나의 천박한 경험 으로,나의 cron 표현 식 에 대한 기억 은:
자주 사용 하 는 cron 표현 식 은 6 개의 도 메 인 으로 구성 되 어 있 으 며,도 메 인과 도 메 인 사 이 는 빈 칸 으로 나 뉜 다.
도 메 인 은 왼쪽 에서 오른쪽으로 시간 단 위 는 초 부터 점점 커진다.그들 은 각각'초 분 시 날짜 월 주'이다.
날짜 와 주 는 서로 영향 을 미 치기 때문에,보통 그 중 하 나 를 사용 하지 않 는 다 면?임 의 를 표시 하면 다른 하 나 는 반드시 써 야 합 니까?임 의
원인:보통 날짜 조건 을 지정 한 후에 우 리 는'임의의 요일'을 원 하지만 사실은 이때 주 는 날짜 의 변화 에 따라 상응하는 변 화 를 해 야 하기 때문에 완전히 임의로 할 수 없다.
또한 온라인 Cron 표현 식 을 통 해 이전 코드 의 cron 표현 식 의 의 미 를 이해 하거나 필요 에 따라 새로운 cron 표현 식 을 만 들 수 있 습 니 다.
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
[MeU] Hashtag 기능 개발➡️ 기존 Tag 테이블에 존재하지 않는 해시태그라면 Tag , tagPostMapping 테이블에 모두 추가 ➡️ 기존에 존재하는 해시태그라면, tagPostMapping 테이블에만 추가 이후에 개발할 태그 기반 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.