今天在項目中碰到一個問題, 使用多綫程調用其他系統接口,在綫程實現中包含 @service 接口的調用! 這時候問題出現了,如果使用new 的方法會導致 service 類注入為 null,后將
Callable 實現類注入到spring 容器中,
另一個問題出現了,在綫程調用中出現了新的問題,儅第一次submit 后,沒有還沒有call 的時候第二次的調用導致第一次的參數被覆蓋!
最後換是回到之前的思路! 查了各種解決方案,經測試可用的方案特記錄下!
@Component
public class SeriesProductTask implements Callable<Map<Long, Result>>
{
public static SeriesProductTask seriesProductTask; public SeriesProductRelation seriesProductRelation; public static String addProduct = "addProduct"; public static String editProduct = "editProduct"; public static String delProduct = "delProduct"; public ClientInfo clientInfo; public VenderInfo venderInfo;
@Resource
private SeriesWriteService seriesWriteService;
public static SeriesProductTask seriesProductTask;
@PostConstruct
public void init() {
seriesProductTask = this;
seriesProductTask.seriesWriteService = this.seriesWriteService;
}
public String action; public void build(SeriesProductRelation seriesProductRelation, String action,ClientInfo clientInfo,VenderInfo venderInfo){ this.setSeriesProductRelation(seriesProductRelation); this.setAction(action); this.setClientInfo(clientInfo); this.setVenderInfo(venderInfo); }
@Override
public Map<Long, Result> call(){
seriesProductTask.seriesWriteService.方法();
}
}
類調用方法
@Service
class test{
private ExecutorService execSeriesProductPool = Executors.newCachedThreadPool();
public void test(){ for(i = 1; i < 10 ; i ++){ SeriesProductTask task = new SeriesProductTask(); tesk.build(); execSeriesProductPool.submit(task); } }
}
说明:
被@PostConstruct修饰的方法会在服务器加载Servlet的时候运行,并且只会被服务器调用一次,类似于Serclet的inti()方法。
被@PostConstruct修饰的方法会在构造函数之后,init()方法之前运行
有更好建議的也可以一起探討一下哦!