因此,在前端主页中有一个可以打开和关闭的开关。交换机的状态码可以使用Ajax发送到后端。Spring MVC:通过打开和关闭网页上的开关来触发和终止后端方法
现在,当开关接通时,我想后端方法继续运行,这是我的定义如下:
public static void foo {
Thread thread = new Thread(new Runnable() {
@Override
public void run() {
while(true) {
try {
Thread.sleep(8000);
ArticleDAO.addNewArticles();
} catch (Exception e) {
e.printStackTrace();
}
}
}
});
thread.start();
}
而当切换截止时,我想的方法,或要终止的线程。
在JSP页面中的Ajax代码看起来是这样的:
$("#switcher").on("switchChange.bootstrapSwitch", function(e, state) {
if (state == true) {
$(function() {
$.ajax({
type: "POST",
url: "http://localhost:8080/wx/admin/toggle_state.html",
data: {
stateCode: 1
},
success: function(data) {
alert("Switched to auto mode");
},
error: function() {
alert("Something went wrong!!");
}
});
});
} else if (state == false) {
$(function() {
$.ajax({
type: "POST",
url: "http://localhost:8080/wx/admin/toggle_state.html",
data: {
stateCode: 0
},
success: function(data) {
alert("Switched to manual mode");
},
error: function() {
alert("Something went wrong!!");
}
});
});
} else {
alert("Something went wrong!!");
}
});
而这里的春天控制器:
@RequestMapping(value = "admin/toggle_state.html", method = RequestMethod.POST)
@ResponseBody
public String toggleState(@RequestParam Integer stateCode) throws Exception {
if (stateCode == 1) {
/*
EXECUTE THE FOO METHOD RIGHT HERE
*/
System.out.println("Switched to auto mode.");
} else if (stateCode == 0) {
// TERMINATE THE METHOD/THREAD HERE
}
return "";
}
那么,什么是推荐的方式来实现这一目标?它实际上并不难,但我不知道如何开始和终止我的情况下的线程。我能想到的一种方法是将交换机的状态代码存储到数据库,并使方法在线程中每次运行该方法时检查数据库。但这似乎不是一个好的解决方案。有任何想法吗?提前致谢!!
这对你很清楚吗? – 2015-02-11 16:49:18
谢谢,但是如何在切换关闭时获得对该线程的引用? – jwong 2015-02-12 03:29:00
你可以通过创建线程作为实例变量来完成。 – 2015-02-12 03:31:31