Skip to content

Commit 8239c3e

Browse files
committed
Merge remote-tracking branch 'origin/develop'
2 parents 535e6b8 + 40dc6e3 commit 8239c3e

File tree

3 files changed

+66
-62
lines changed

3 files changed

+66
-62
lines changed

src/main/java/cn/com/ttblog/ssmbootstrap_table/controller/IndexController.java

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ public IndexController(){
6060
private Logger logger = LoggerFactory.getLogger(this.getClass());
6161

6262
@Autowired
63-
private ApplicationContext applicationContext;
63+
private ApplicationContext applicationContext;
6464

6565
@RequestMapping("/login")
6666
public String login(HttpSession session, HttpServletRequest request,
@@ -79,7 +79,11 @@ public String login(HttpSession session, HttpServletRequest request,
7979
param.put("logintime", new DateTime().toString("yyyy-MM-dd HH:mm:ss"));
8080
param.put("loginip", request.getRemoteAddr());
8181
//publishEvent会依次调用所有的监听器,同步调用,所有监听器执行完毕继续向下执行
82-
applicationContext.publishEvent(new LoginEvent(this,param));
82+
logger.info("发布事件,parent context:{},application:{}",applicationContext.getParent(),applicationContext);
83+
/**
84+
* 在Controller控制器这一层发布事件不要直接用applicationContext.publishEvent(),因为事件会同时添加在root application context中导致重复执行一次
85+
*/
86+
applicationContext.getParent().publishEvent(new LoginEvent(this,param));
8387
if(requri!=null&&requri.length()>0){
8488
String uri=new String(Base64.decodeBase64(requri));
8589
String touri=uri.substring(request.getContextPath().length()+1);
Lines changed: 48 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -1,48 +1,48 @@
1-
package cn.com.ttblog.ssmbootstrap_table.util;
2-
3-
import org.springframework.aop.interceptor.AsyncUncaughtExceptionHandler;
4-
import org.springframework.context.annotation.Configuration;
5-
import org.springframework.scheduling.annotation.AsyncConfigurer;
6-
import org.springframework.scheduling.annotation.EnableAsync;
7-
import java.lang.reflect.Method;
8-
import java.util.concurrent.Executor;
9-
import java.util.concurrent.ExecutorService;
10-
import java.util.concurrent.Executors;
11-
import java.util.concurrent.ThreadFactory;
12-
13-
/**
14-
* 启用异步方法
15-
* 发现在xml中配置<task:annotation-driven></task:annotation-driven>不生效,
16-
* 基于java config是生效的
17-
* http://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/scheduling/annotation/EnableAsync.html
18-
* http://docs.spring.io/spring/docs/4.2.9.RELEASE/spring-framework-reference/htmlsingle/#scheduling-annotation-support-async
19-
*/
20-
@Configuration
21-
@EnableAsync
22-
public class Config implements AsyncConfigurer {
23-
24-
/**
25-
* 自定义实现Executor
26-
* @return
27-
*/
28-
@Override
29-
public Executor getAsyncExecutor() {
30-
ExecutorService executorService=Executors.newSingleThreadExecutor(new ThreadFactory() {
31-
@Override
32-
public Thread newThread(Runnable r) {
33-
return new Thread(r,"task");
34-
}
35-
});
36-
return executorService;
37-
}
38-
39-
@Override
40-
public AsyncUncaughtExceptionHandler getAsyncUncaughtExceptionHandler() {
41-
return new AsyncUncaughtExceptionHandler() {
42-
@Override
43-
public void handleUncaughtException(Throwable throwable, Method method, Object... objects) {
44-
System.out.printf("throwable:%s,method:%s,objects:%s",throwable,method,objects);
45-
}
46-
};
47-
}
48-
}
1+
//package cn.com.ttblog.ssmbootstrap_table.util;
2+
//
3+
//import org.springframework.aop.interceptor.AsyncUncaughtExceptionHandler;
4+
//import org.springframework.context.annotation.Configuration;
5+
//import org.springframework.scheduling.annotation.AsyncConfigurer;
6+
//import org.springframework.scheduling.annotation.EnableAsync;
7+
//import java.lang.reflect.Method;
8+
//import java.util.concurrent.Executor;
9+
//import java.util.concurrent.ExecutorService;
10+
//import java.util.concurrent.Executors;
11+
//import java.util.concurrent.ThreadFactory;
12+
//
13+
///**
14+
// * 启用异步方法
15+
// * 发现在xml中配置<task:annotation-driven></task:annotation-driven>不生效,
16+
// * 基于java config是生效的
17+
// * http://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/scheduling/annotation/EnableAsync.html
18+
// * http://docs.spring.io/spring/docs/4.2.9.RELEASE/spring-framework-reference/htmlsingle/#scheduling-annotation-support-async
19+
// */
20+
//@Configuration
21+
//@EnableAsync
22+
//public class Config implements AsyncConfigurer {
23+
//
24+
// /**
25+
// * 自定义实现Executor
26+
// * @return
27+
// */
28+
// @Override
29+
// public Executor getAsyncExecutor() {
30+
// ExecutorService executorService=Executors.newSingleThreadExecutor(new ThreadFactory() {
31+
// @Override
32+
// public Thread newThread(Runnable r) {
33+
// return new Thread(r,"task");
34+
// }
35+
// });
36+
// return executorService;
37+
// }
38+
//
39+
// @Override
40+
// public AsyncUncaughtExceptionHandler getAsyncUncaughtExceptionHandler() {
41+
// return new AsyncUncaughtExceptionHandler() {
42+
// @Override
43+
// public void handleUncaughtException(Throwable throwable, Method method, Object... objects) {
44+
// System.out.printf("throwable:%s,method:%s,objects:%s",throwable,method,objects);
45+
// }
46+
// };
47+
// }
48+
//}

src/main/resources/spring/spring-context.xml

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -22,17 +22,6 @@
2222
<context:exclude-filter type="annotation" expression="org.springframework.web.bind.annotation.ControllerAdvice" />
2323
</context:component-scan>
2424

25-
<!--<bean id="threadPoolTaskExecutor"-->
26-
<!--class="org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor">-->
27-
<!--<property name="corePoolSize" value="1" />-->
28-
<!--<property name="maxPoolSize" value="10" />-->
29-
<!--<property name="queueCapacity" value="50" />-->
30-
<!--<property name="threadNamePrefix" value="task-" />-->
31-
<!--<property name="keepAliveSeconds" value="30" />-->
32-
<!--</bean>-->
33-
34-
<!--<task:annotation-driven executor="threadPoolTaskExecutor"></task:annotation-driven>-->
35-
3625
<bean id="configProperties"
3726
class="org.springframework.beans.factory.config.PropertiesFactoryBean">
3827
<property name="locations">
@@ -56,7 +45,18 @@
5645
<!--<import resource="spring-jmx.xml" />-->
5746
<import resource="spring-ehcache.xml"/>
5847
<import resource="spring-websocket.xml"/>
59-
48+
49+
<bean id="async-method-pool"
50+
class="org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor">
51+
<property name="corePoolSize" value="1" />
52+
<property name="maxPoolSize" value="10" />
53+
<property name="queueCapacity" value="50" />
54+
<property name="threadNamePrefix" value="async-method-pool-" />
55+
<property name="keepAliveSeconds" value="30" />
56+
</bean>
57+
58+
<task:annotation-driven executor="async-method-pool" proxy-target-class="true"></task:annotation-driven>
59+
6060
<!-- jsonpfilter -->
6161
<bean class="com.intera.util.web.servlet.filter.JsonpCallbackFilter"
6262
id="jsonpCallbackFilter" />

0 commit comments

Comments
 (0)