先加个前提.我是google 百度 csdn javaeye过才来提问的. 各位大哥帮忙了
web项目启动加载一个类的方法
import java.io.IOException;
import java.net.ServerSocket;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;public class NetworkService {
private final ServerSocket serverSocket;
private final ExecutorService pool; public NetworkService(int port, int poolSize) throws IOException {
serverSocket = new ServerSocket(port);
pool = Executors.newFixedThreadPool(poolSize);
} public void serve() {
try {
System.out.println("server ready");
for (;;) {
pool.execute(new Handler(serverSocket.accept()));
}
} catch (IOException ex) {
pool.shutdown();
}
}
}
spring 如果 这样配置.
<bean id="networkService" init-method="serve" class="com.huateng.accorecard.common.integration.NetworkService">
<constructor-arg index="0" type="int">
<value>19001</value>
</constructor-arg>
<constructor-arg index="1" type="int">
<value>10</value>
</constructor-arg>
</bean>
结果是Web项目无法完成启动. 应该是在等serve() 方法返回 问.有没有办法.加载这个方法而不影响主线程呢?
web项目启动加载一个类的方法
import java.io.IOException;
import java.net.ServerSocket;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;public class NetworkService {
private final ServerSocket serverSocket;
private final ExecutorService pool; public NetworkService(int port, int poolSize) throws IOException {
serverSocket = new ServerSocket(port);
pool = Executors.newFixedThreadPool(poolSize);
} public void serve() {
try {
System.out.println("server ready");
for (;;) {
pool.execute(new Handler(serverSocket.accept()));
}
} catch (IOException ex) {
pool.shutdown();
}
}
}
spring 如果 这样配置.
<bean id="networkService" init-method="serve" class="com.huateng.accorecard.common.integration.NetworkService">
<constructor-arg index="0" type="int">
<value>19001</value>
</constructor-arg>
<constructor-arg index="1" type="int">
<value>10</value>
</constructor-arg>
</bean>
结果是Web项目无法完成启动. 应该是在等serve() 方法返回 问.有没有办法.加载这个方法而不影响主线程呢?
容俺仔细想想再来.!
产生不能正常启动的原因是.那个for会一直挂在那.spring在等它执行结束再往下走.. 我晕了.想不到办法了
public NetworkService(int port, int poolSize) throws IOException {
serverSocket = new ServerSocket(port);
pool = Executors.newFixedThreadPool(poolSize);
serve();
}
在serve()方法里再开个线程去执行
那个for循环逻辑,这样主线程就可以继续往下执行,
不会影响web容器的启动
楼主要给我100分哦
serve();
}
然后在spring里面改为 <bean id="networkService" class="com.huateng.accorecard.common.integration.NetworkService">
<constructor-arg index="0" type="int">
<value>19001</value>
</constructor-arg>
<constructor-arg index="1" type="int">
<value>10</value>
</constructor-arg>
</bean>
<bean id="serverService" init-method="start" class="java.lang.Thread">
<constructor-arg>
<ref bean="networkService"/>
</constructor-arg>
</bean>
伤心.还是认真去看基础了马上结帖.人人有份.