봄에 시작할 때 메서드 실행한다.
어떤 봄은 3기능 응용 프로그램이 처음으로 구동되는 몇가지 방법을 실행할 수 있을까요?나와 같이 메서드를 설정한 요령을 할 수 있죠.@Scheduled
Annotation고 시작 직후지만 정기적으로 실행할 것이다 시행하고 있습니다.
만약"응용 프로그램려면"으로"응용 컨텍스트 여러"말은, 네, 거기 많은 이 문제를 해결하는 방법, 가장 쉬운(singletons 콩, 어쨌든에)과 메서드에 주석을 달다 하고 있다.@PostConstruct
. 다른 옵션을 시도해 보겠지만 요약하자면 그들은:링크를 한번 보세요.
- 방법과 주석이 달린
@PostConstruct
afterPropertiesSet()
으로에 의해 정의되InitializingBean
콜백 인터페이스- 사용자 지정 init()법하다.
그 콩줄기를 받치는 라이프 사이클보다는 환경 라이프 사이클지만 사건의 99%에서 두 사람은 같다로 엄밀히 말하면, 이러한 고리이다.
만약 당신이 특별히 컨텍스트startup/shutdown로 후크 할이 필요하면 대신았지만 불필요한 일은 수명 주기 인터페이스 구현할 수 있습니다.
이 쉽게 하나의로 수행한다.ApplicationListener
. 나는 이 Spring's을 듣는 직장에 도착했다.ContextRefreshedEvent
:
import org.springframework.context.ApplicationListener;
import org.springframework.context.event.ContextRefreshedEvent;
import org.springframework.stereotype.Component;
@Component
public class StartupHousekeeper implements ApplicationListener<ContextRefreshedEvent> {
@Override
public void onApplicationEvent(final ContextRefreshedEvent event) {
// do whatever you need here
}
}
적용 청취자들 동기적으로 봄에 달린다.만약 당신이 확인하고 싶은 코드 한번만, 단지 구성 요소 안에서 약간의 위엄을 지키다 실행됩니다.
갱신하다
봄 4.2+에 출발하는 것도 사용할 수 있다.@EventListener
주석은 관찰할ContextRefreshedEvent
(@ bphilipnyc에 이 지적에 대해 감사):.
import org.springframework.context.ApplicationListener;
import org.springframework.context.event.ContextRefreshedEvent;
import org.springframework.stereotype.Component;
@Component
public class StartupHousekeeper {
@EventListener(ContextRefreshedEvent.class)
public void contextRefreshedEvent() {
// do whatever you need here
}
}
봄 4.2+에서 당신은 이제는 단순히: 할 수 있다.
@Component
class StartupHousekeeper {
@EventListener(ContextRefreshedEvent.class)
public void contextRefreshedEvent() {
//do whatever
}
}
만약 당신이 spring-boot을 사용하여, 이것이 최선의 방법입니다.
나는 그것을 느낀다.@PostConstruct
그리고 다른 다양한 생활 주기 interjections 있우회 방법이 되는 것이다.이러한 직접적으로 런타임인 문제에 있거나 명백하다 결함 예상치 못한bean/context 라이프 사이클 전체 사건에 의해 이상을 일으킬 수 있다.왜 직접 평원 자바를 사용하여 콩을 실시하지 못하니?당신은 아직 이 콩은'spring 방법의(즉 유효:봄 AoP proxy)를 호출합니다.그리고 무엇보다도, 평범한 자바, 그것보다 더 간단할 수가 없어요.컨텍스트 청취자와 이상한 일정 담당자가 필요 없음.
@SpringBootApplication
public class DemoApplication {
public static void main(String[] args) {
ConfigurableApplicationContext app = SpringApplication.run(DemoApplication.class, args);
MyBean myBean = (MyBean)app.getBean("myBean");
myBean.invokeMyEntryPoint();
}
}
SpringBoot을 가지고, 우리는 시작 via에 대한 메서드 실행될 수 있습니다.@EventListener
주석
@Component
public class LoadDataOnStartUp
{
@EventListener(ApplicationReadyEvent.class)
public void loadData()
{
// do something
}
}
는 @ PostConstruct 주석 참조하기 위해 노력하고 경고를 받고 있자바 1.8사용자에게 대신 만약 당신이 이미 또는 fixedDelayfixedRate을 가진 @ 예정 된 일이 있다 할 수 있는 그 @ 예정 된 주석에서 피기 배킹을 하게 되었다.
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
@EnableScheduling
@Component
public class ScheduledTasks {
private static final Logger LOGGER = LoggerFactory.getLogger(ScheduledTasks.class);
private static boolean needToRunStartupMethod = true;
@Scheduled(fixedRate = 3600000)
public void keepAlive() {
//log "alive" every hour for sanity checks
LOGGER.debug("alive");
if (needToRunStartupMethod) {
runOnceOnlyOnStartup();
needToRunStartupMethod = false;
}
}
public void runOnceOnlyOnStartup() {
LOGGER.debug("running startup job");
}
}
우리가 무엇을 한확장된 것이다 것은우리가 한 확장시키고 있다.org.springframework.web.context.ContextLoaderListener
는 컨텍스트면서 시작하는 것 인쇄하려면.문맥이 시작될 때 인쇄할 수 있도록.
public class ContextLoaderListener extends org.springframework.web.context.ContextLoaderListener
{
private static final Logger logger = LoggerFactory.getLogger( ContextLoaderListener.class );
public ContextLoaderListener()
{
logger.info( "Starting application..." );
}
}
그때 다음 위치에 하위클래스 구성의 서브 클래스를 구성한다.web.xml
:
<listener>
<listener-class>
com.mycomp.myapp.web.context.ContextLoaderListener
</listener-class>
</listener>
만약 당신의 주목하라,이것은오직 당신의 조언이다는 주목해라, 이것은 좋다.
runOnceOnStartup
방법 완전히 초기화 봄 상황에 달려 있다.방법은 완전히 초기화된 스프링 컨텍스트에 따라 달라진다.예를 들어:거래 demarcation예를 들어,트랜잭션구분이있는dao를 호출하려는 경우와 dao 부르고 싶다.
fixedDelay가 매우 높게 설정된 예약 방법을 사용할 수도 있음
@Scheduled(fixedDelay = Long.MAX_VALUE)
public void runOnceOnStartup() {
dosomething();
}
이는 전체 애플리케이션이 유선 연결된다는 장점이 있다(Transactions, Dao, ...).
스프링 태스크 네임스페이스를 사용하여 한 번 실행할 태스크 예약에 표시됨
AppStartListener implements ApplicationListener {
@Override
public void onApplicationEvent(ApplicationEvent event) {
if(event instanceof ApplicationReadyEvent){
System.out.print("ciao");
}
}
}
WebApplication을 구현하는 다른 솔루션 게시이니셜라이저 및 스프링 콩이 인스턴스화되기 훨씬 전에, 누군가 사용 케이스를 가지고 있는 경우
만약 당신이 전에 당신의 응용 프로그램 완전히 실행되는 콩을 구성하고 싶다면,전에 빈을 구성하려면 실행되기 완전히응용 프로그램이 사용할 수 있다.@Autowired
:
@Autowired
private void configureBean(MyBean: bean) {
bean.setConfiguration(myConfiguration);
}
당신은사용할 수를 사용할 수 있있다@EventListener
후에 서버와 모든 콩 사용이 시작된 구성 요소에서, 호출됩니다.서버를 시작하고 모든 콩을 초기화한 후에 호출되는 구성 요소.
@EventListener
public void onApplicationEvent(ContextClosedEvent event) {
}
파일 파일의 경우 들어StartupHousekeeper.java
패키지에 위치한 포장에 있는com.app.startup
다음 이야기 위치에서가 작업을 수행하십시오며 이걸 해 줘.StartupHousekeeper.java
:
@Component
public class StartupHousekeeper {
@EventListener(ContextRefreshedEvent.class)
public void keepHouse() {
System.out.println("This prints at startup.");
}
}
그리고안으로 하라 이것을 그리고에서 이렇게 하다.myDispatcher-servlet.java
:
<?xml version="1.0" encoding="UTF-8"?>
<beans>
<mvc:annotation-driven />
<context:component-scan base-package="com.app.startup" />
</beans>
참조URL: https://stackoverflow.com/questions/2401489/execute-method-on-startup-in-spring
'IT이야기' 카테고리의 다른 글
Vuex mapState 경로와 경로 매개 변수에 근거한다. (0) | 2022.05.17 |
---|---|
경고:수 을 왼쪽 시프트 형식의 탭 너비입니다. (0) | 2022.05.17 |
농담이든+vuejs+vuetify과 예상치 못한 식별자입니다. (0) | 2022.05.17 |
자바에서 스트림 정말 디버깅만 peek은? (0) | 2022.05.17 |
Nuxt:js 파일에서vuex 상점에 액세스 할 수 없다. (0) | 2022.05.17 |