Spring Boot : 데이터베이스에서 @Scheduled cron 값을 가져옵니다.
사용하고 있다Spring Boot
스케줄에 문제가 있습니다.cron task
데이터베이스에 있는 값을 사용합니다.
당분간 다음과 같은 속성 파일에서 값을 읽습니다.
@Scheduled(cron= "${time.export.cron}")
public void performJob() throws Exception {
// do something
}
이 방법은 잘 작동하지만 속성 파일에서 값을 가져오는 대신 데이터베이스 테이블에서 값을 가져오고 싶습니다.가능성과 방법은?
spring Boot Application 메인클래스 또는 임의의 컨피규레이션클래스의 데이터베이스에서 cron 값을 취득하기 위해 bean을 추가할 수 있습니다.코드 예는 다음과 같습니다.
@Autowired
private CronRepository cronRepo;
@Bean
public int getCronValue()
{
return cronRepo.findOne("cron").getCronValue();
}
테이블을 만들고 데이터베이스에 적절한 값을 제공해야 합니다.그 후, 그 안에 있는 콩을 제공할 수 있습니다.@Scheduled
코드 예는 다음과 같습니다.
@Scheduled(cron="#{@getCronValue}")
문제가 해결되길 바랍니다.
@Bean 주석이 달린 메서드를 사용하면 문제가 해결됩니다.그러나 Spring Boot는 이 메서드를 한 번만 호출하고 캐시된 버전을 반환하므로 새로운 값을 얻으려면 Spring을 재시작해야 합니다.
데이터베이스에서 새 실행 시간을 가져오려면 SchedulingConfigr를 사용합니다.
@Configuration
public class SchedulerConfig implements SchedulingConfigurer {
@Autowired
private YourService yourService;
@Bean
public YourJob yourJob() {
return new YourJob();
}
@Override
public void configureTasks(ScheduledTaskRegistrar taskRegistrar) {
taskRegistrar.addTriggerTask(
() -> yourJob().performJob(),
(TriggerContext triggerContext) -> yourService.getCron()
);
}
}
주의: @Scheduled는 이 방법으로 사용하지 마십시오.
목표를 달성하려면 실행 시 스케줄러를 구성해야 합니다.즉, 보다 낮은 수준의 스케줄러 API를 사용해야 합니다.데이터베이스와의 접속을 이미 준비하고 있는 경우는, 스케줄러를 설정할 수 있습니다.@Scheduled annotation을 사용하지 말고 스케줄러를 관리해야 할 것 같습니다.
다음 토픽이 제 뜻을 설명하는 데 도움이 될 것 같습니다.
단, 빈 작성을 대행하고 주석의 원래 주석을 커스텀 메타데이터로 대체하는 와일드 어프로치를 항상 사용할 수 있지만 이를 구현하려면 많은 프레임워크 세부사항과 @Scheduled Annatation 프로세서가 어떻게 작동하는지 알아야 합니다.
값이 저장된 데이터베이스 테이블에서 속성을 로드해야 합니다.해당 DB 속성을 응용 프로그램 속성과 병합합니다.
@Autowired
private DataSource dataSource;
@Autowired
private DatabaseConfiguration configuration;
@Bean(name = "propertyConfig")
public DatabaseConfiguration getDatabaseConfiguration() {
DatabaseConfiguration configuration = new DatabaseConfiguration(dataSource, "propertyTable", "key", "value");
return configuration;
}
@Bean(name = "dbProperty")
public Properties getDBProperties(){
Properties properties = ConfigurationConverter.getProperties(configuration);
return properties;
}
상세한 것에 대하여는, https://analyzejava.wordpress.com/2015/01/16/loading-configuration-properties-from-database-in-spring-based-application/ 를 참조해 주세요.
언급URL : https://stackoverflow.com/questions/37113327/spring-boot-getting-scheduled-cron-value-from-database
'it-source' 카테고리의 다른 글
값을 기준으로 JSON 정렬 (0) | 2023.03.17 |
---|---|
화면으로 돌아가면 React Native에서 useEffect가 호출되지 않음 (0) | 2023.03.17 |
컨트롤러 함수에 대한 호출이 기능하지 않는 각도 ng클릭 (0) | 2023.03.17 |
config() 모듈에서의 의존관계 주입: 각도JS (0) | 2023.03.17 |
Spring Boot 및 Logback을 사용하여 콘솔에 대한 휴지 상태 로깅을 피할 수 없음 (0) | 2023.03.17 |