我正在实现一个@singleton,其中我希望有一个预定的功能。
@Singleton
public class MyClass
{
static volatile MyClass instance;
private Map<String, String> myArray = new HashMap<String, String>();
private MyClass()
{
}
public static MyClass getInstance()
{
if (instance == null)
{
synchronized (MyClass.class)
{
if (instance== null)
{
instance= new MyClass();
}
}
}
return instance;
}
public void setPar( String key, String value)
{
this.myArray.put(key, value);
for (Map.Entry<String, String> entry : this.myArray.entrySet() )
{
System.out.println( entry.getKey()+ " ::: " + entry.getValue() );
}
}
@Schedule(second = "*/5", minute="*",hour="*", persistent=true)
public void doJob()
{
System.out.println("*** Hello from scheduled task ***");
}
}
这是在eclipse中创建的动态Web项目中,并在Tomcat服务器中运行。
因此,当我发出html文件请求时,会执行一个servlet。
@Stateless
public class MyServlet extends HttpServlet
{
private static final long serialVersionUID = 1L;
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
String param1= req.getParameter("param1");
String param2= req.getParameter("param2");
MyClass inst= MyClass.getInstance();
inst.setPar(param1, param2);
}
}
我想要的是使用@Schedule注释执行doJob()。
我猜测,因为MyClass实例被加载 - 并且通过打印数组值,它确实有效 - doJob()也会按照@Schedule中的描述启动和工作。
项目的任何配置是否有问题?我尝试用this调整但没有改变。我做错了什么?
提前感谢您的帮助。 (我对Java很新,所以要温和一点。)