问题描述
我的日程安排中有一个SendDaily电子邮件作业,该作业每天8 AM运行,执行此作业时,我遇到了错误
FATAL:剩余的连接插槽保留用于非复制超级用户连接
public class SendDailyEmail implements Job {
private static Logger LOG = Logger.getLogger(SendDailyEmail.class);
public void execute(JobExecutionContext arg0) throws JobExecutionException {
LOG.info("Sending Daily Email ");
Schedulars.date = new Date();
Calendar calendar = Calendar.getInstance();
calendar.setTime(Schedulars.date);
int hours = calendar.get(Calendar.HOUR_OF_DAY);
String check = "false";
try {
LOG.info("hour of the day:" + hours);
if (hours == 8) {
if (LoggerInitializer.dailymailflag) {
LoggerInitializer.dailymailflag = false;
LOG.debug("In Send Daily Email Schedular" + LoggerInitializer.dailymailflag);
LOG.debug("Before Execute");
if (LoggerInitializer.sessioncheckfordailyemail != null) {
check = LoggerInitializer.sessioncheckfordailyemail.get("" + hours);
LOG.debug("hashmap " + LoggerInitializer.sessioncheckfordailyemail.containsKey("" + hours));
if (check == null) {
LoggerInitializer.sessioncheckfordailyemail.put("" + hours,"true");
LOG.debug("In Send Daily Email Schedular" + LoggerInitializer.dailymailflag);
UserDaoInterface userDaoInterface = JndiLookup.getUserDAO();
ArrayList<SystemUser> arrUpdateSystemUsers = new ArrayList<SystemUser>();
ArrayList<SystemUser> arraySystemUsers = userDaoInterface
.getAllClientsForDailyEmail("sysadmin");
LOG.debug("size-------------------" + arraySystemUsers.size());
if (arraySystemUsers != null) {
LOG.debug("size-------------------" + arraySystemUsers.size());
for (SystemUser systemUser : arraySystemUsers) {
LOG.info("Client Credits " + systemUser.getCredits());
LOG.info("Client ref " + systemUser.getClientref());
LOG.info("--------------------------------------In Sending Daily email");
if (systemUser.getBillingType().equalsIgnoreCase("Prepaid")) {
ArrayList<SystemUser> clientUsers = userDaoInterface
.getUserByUsermasterID("" + systemUser.getId());
for (SystemUser user : clientUsers) {
LOG.info("System User User Id" + user.getUserid());
LOG.info("System User credits " + user.getCredits());
LOG.info("System User clientref " + user.getClientref());
senddailyEmail(user,systemUser);
user.setDate(new Date());
arrUpdateSystemUsers.add(user);
}
}
}
}
for (SystemUser systemUser : arrUpdateSystemUsers) {
userDaoInterface.mergeUser(systemUser);
}
userDaoInterface = null;
} else {
System.out.println("Mail Already sent");
}
}
}
} else {
if (hours == 9) {
System.out.println("In Send Daily Email Schedular" + LoggerInitializer.dailymailflag);
LoggerInitializer.dailymailflag = true;
LoggerInitializer.sessioncheckfordailyemail.remove("" + "8");
}
}
} catch (Exception e) {
LOG.info(e.getMessage(),e);
} finally {
}
Schedulars.date = null;
}
我的getAllClientsForDailyEmail方法实现
public ArrayList<SystemUser> getAllClientsForDailyEmail(String clientref) {
em = getEm();
Date currentdate = new Date();
ArrayList<SystemUser> systemUsers = null;
try {
Query query = em.createNativeQuery(
"SELECT * FROM \"CLIENT\" WHERE clientref !=:clientref and \"ID\"=CAST(nullif(\"Usermaster\",'') AS INTEGER) and"
+ " \"SendMailDate\" < :currentdate or \"SendMailDate\" is null",SystemUser.class);
query.setParameter("clientref",clientref);
query.setParameter("currentdate",currentdate);
if (query.getResultList().size() > 0)
systemUsers = (ArrayList<SystemUser>) query.getResultList();
} catch (Exception e) {
// TODO Auto-generated catch block
LOG.error(e.getMessage());
} finally {
em.close();
}
return systemUsers;
}
我的getUserByUsermasterID方法实现
public ArrayList<SystemUser> getUserByUsermasterID(String usermasterId) {
em = getEm();
// String userrole="User";
ArrayList<SystemUser> users = null;
try {
String qlString = "SELECT user FROM SystemUser user " + "WHERE user.usermasterId = :usermasterId";
TypedQuery<SystemUser> query = em.createQuery(qlString,SystemUser.class);
query.setParameter("usermasterId",usermasterId);
if (query.getResultList().size() > 0)
users = (ArrayList<SystemUser>) query.getResultList();
} catch (Exception exception) {
LOG.error(exception);
} finally {
em.close();
}
return users;
}
我将同时关闭这两种方法的实体管理器。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)