相关疑难解决方法(0)

如何在基于servlet的Web应用程序中运行后台任务?

我正在使用Java,我想在我的应用程序中保持servlet不断运行,但我不知道怎么做.我的servlet有一个方法,它每天从数据库中提供用户的计数以及整个数据库中用户的总数.所以我想保持servlet不断运行.

multithreading servlets background-process java-ee scheduledexecutorservice

93
推荐指数
1
解决办法
4万
查看次数

用于java Web应用程序的shutdown hook

当java Web应用程序停止或者tomcat停止时,我需要优先保存一些数据.如何才能做到这一点?编辑:如果我使用jvm关闭钩子的任何缺点?

java web-applications shutdown

38
推荐指数
3
解决办法
4万
查看次数

tomcat中的shutdown hook(必要)没有运行

我有一个长期运行的cpu和数据库密集型线程(以低优先级运行),可由管理员请求由我的tomcat应用程序触发.

我为此线程使用了一个关闭钩子,因此如果应用程序被强制停止,它可以在退出之前清理数据库状态.在独立模式下完美运行,使用control-C并在eclipse控制台中取消.

但是当在tomcat下运行时,当我执行时:

$ CATALINA_HOME/bin中/ shutdown.sh

我通过调试日志验证我的servlet contextDestroyed消息是由tomcat发送的,但是对于这个线程,消息无法阻止它,重要的是我的shutdown hook永远不会触发.

我注意到其他人说使用contextDestroyed消息,但这对我不起作用,而且一些问题和答案暗示关闭钩子在tomcat中为它们工作.

我正在使用tomcat 6.0.35.

java tomcat shutdown

4
推荐指数
1
解决办法
2195
查看次数

创建后台用于发送电子邮件的线程

我需要在注册过程中发送一封电子邮件,因此我正在使用Java Mail API,这工作正常,但观察到电子邮件进程花了将近6秒(这太长了)所以Ajax调用让用户等待响应太久了

因此我决定使用后台线程发送电子邮件,以便用户无需等待Ajax调用响应(Jersey REST Web Service调用)

我的问题是,为每个请求在Web应用程序中创建线程是一个好习惯吗?

@Path("/insertOrUpdateUser")
public class InsertOrUpdateUser {
        final static Logger logger = Logger.getLogger(InsertOrUpdateUser.class);
        @GET
        @Consumes("application/text")
        @Produces("application/json")
        public String getSalesUserData(@QueryParam(value = "empId") String empId
                        )
                        throws JSONException, SQLException {
                JSONObject final_jsonobject = new JSONObject();
            ExecutorService executorService = Executors.newFixedThreadPool(10);
                                executorService.execute(new Runnable() {
                                 public void run() {
                                         try {
                                                        SendEmailUtility.sendmail(emaildummy);
                                                } catch (IOException e) {
                                                        logger.error("failed",e);

                                                }
                                 }
                              });

                        }


                } catch (SQLException e) {

                } catch (Exception e) {


                } …
Run Code Online (Sandbox Code Playgroud)

java multithreading

2
推荐指数
1
解决办法
6805
查看次数