Hibernate CreateStoredProcedureRequesty块永久
我一直在尝试从运行在Glassfish上的JavaEE应用程序中创建derby数据库的备份。我正在尝试使用StoredProcedureQueries来实现这一点,它们在下面的方法中工作得很好Hibernate CreateStoredProcedureRequesty块永久,hibernate,jakarta-ee,derby,hibernate-entitymanager,Hibernate,Jakarta Ee,Derby,Hibernate Entitymanager,我一直在尝试从运行在Glassfish上的JavaEE应用程序中创建derby数据库的备份。我正在尝试使用StoredProcedureQueries来实现这一点,它们在下面的方法中工作得很好 public Backup doBackup(String path) throws QueryTimeoutException { StoredProcedureQuery query = em.createStoredProcedureQuery( "SYSCS_UT
public Backup doBackup(String path) throws QueryTimeoutException {
StoredProcedureQuery query = em.createStoredProcedureQuery(
"SYSCS_UTIL.SYSCS_BACKUP_DATABASE");
query.registerStoredProcedureParameter(1, java.lang.String.class,
ParameterMode.IN);
query.setParameter(1, path);
query.execute();
}
但是,我也希望像cronjob一样自动创建备份。要做到这一点,我想我只需要使用每n小时执行一次的ScheduleXecuterService。我为此编写了以下方法:
public void startScheduledBackupRunner() {
long delay = 1;
Runnable backupRunner = () -> {
try {
doBackup("/foo/bar/");
} catch (PersistenceException e) {
logger.fatal(e);
}
};
ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1);
scheduler.scheduleAtFixedRate(backupRunner, delay, delay, TimeUnit.HOURS);
}
backupRunner线程已成功执行,它还调用doBackup()方法。但是,调用createStoredProcedureQuery()时,它似乎遇到了问题。如果重要的话,我会像这样注入EntityManager em:
@PersistenceContext
EntityManager em;
我是不是错过了什么重要的东西?非常感谢任何线索。好的,所以我找到了一个解决方案,它不需要使用
@Schedule
注释创建单独的线程。它并没有解决潜在的问题,我仍然不知道为什么第一种方法不起作用,它只是执行计划任务的另一种可能更优雅的方式