Я написал приложение Springboot для выполнения etl из источника данных в другое озеро данных каждые 15 минут. Я запланировал выполнение, используя @Scheduled
аннотацию к функции.
Я создал jar
и выполнял напрямую через java -jar ingest.jar
. Работает нормально несколько дней (3-4 дня). И просто паузы без каких-либо исключений. Чтобы возобновить, я должен пойти и нажать любую клавишу, чтобы снова активировать ее.
@Scheduled(initialDelayString = "${ingest.initialdelay.in.seconds}000", fixedRateString = "${ingest.rate.in.seconds}000")
public void ingestData(){
// Ingestion Logic
}
Поскольку проблема не устранена, я создал war
и развернул ее на сервере Tomcat. Но проблема все еще остается.
Может кто-нибудь указать мне, что мне здесь не хватает? То же приложение отлично работает, если я разверну в cloudfoundry.
IO Streams - FileInputStream
и FileOutputStream
Вспомогательные функции для ввода-вывода
public static void saveLastSuccessfulDate(String filepath, String propertyName, Date dateTime) {
Properties prop = new Properties();
OutputStream output = null;
try {
String lastDate = getDateInFormat(dateTime);
log.info("Saving: " + lastDate);
output = new FileOutputStream(filepath);
prop.setProperty(propertyName, lastDate);
prop.store(output, null);
} catch (IOException io) {
io.printStackTrace();
} finally {
if (output != null) {
try {
output.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
//Helper to Write to properties file
public static String checkLastSuccessfulDateAsString(String filepath, String propName) {
Properties prop = new Properties();
InputStream input = null;
try {
input = new FileInputStream(filepath);
// load a properties file
prop.load(input);
String lastSuccesfulDate = prop.getProperty(propName);
log.info("Last Successful Date: "+lastSuccesfulDate);
return lastSuccesfulDate;
} catch (FileNotFoundException f) {
log.error("checkLastSuccessfulDateAsString: File Not Found: " + f.getMessage());
} catch (IOException ex) {
log.error(ex.getMessage());
ex.printStackTrace();
} finally {
if (input != null) {
try {
input.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
return null;
}
Привет