我想在tomcat服务器启动时启动一个守护进程邮件服务线程.所以,我用@Async注释注释了一个方法.
我有一个实现ApplicationListener接口的类.当我从这个类调用我的异步方法时,它永远不会异步启动并阻塞当前线程.当我从spring控制器类调用我的异步方法时,它永远不会阻塞并异步启动.
为什么异步方法从一个类成功执行而不是从另一个类执行?
我做错了什么以及如何在服务器启动时执行我的异步方法?
提前致谢.
编辑:嗨大家好,我尝试使用InitializingBean接口,@ PostConstruct,init-method方法来调用我的异步方法,但它从未执行过.然后我意识到,我的默认lazy-init是真的,所以我将我的InitializingBean的lazy-init设为false.现在它执行我的asnyc方法,但它阻止了当前线程,现在还有一个问题,我面临的是我的服务器没有正常停止,但我必须强行停止我的服务器.
我在以下代码中得到NullPointerException:
String str = SOME_HTML_STRING;
Node node = convertStrIntoNodeUsingJTidy();
domToString(node);
//converts node to string
public static String domToString(org.w3c.dom.Node node)throws Exception {
try {
StringWriter sw = new StringWriter();
TransformerFactory tf = TransformerFactory.newInstance();
Transformer transformer = tf.newTransformer();
transformer.setOutputProperty(OutputKeys.ENCODING, "UTF-8");
// NullPointerException at this line, although node is not null
transformer.transform(new DOMSource(node), new StreamResult(sw));
return sw.toString();
} catch (Exception ex) {
throw new Exception("Error converting to String", ex);
}
}
Run Code Online (Sandbox Code Playgroud)
堆栈跟踪是:
Caused by: javax.xml.transform.TransformerException: java.lang.NullPointerException
at com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl.transform(Unknown Source)
at com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl.transform(Unknown Source)
at …
Run Code Online (Sandbox Code Playgroud)