关于接口并发问题,webservice,等http请求

6 篇文章 0 订阅
1 篇文章 0 订阅

暂且不谈高并发 只谈并发  .

不想丢请求再去考虑高并发 MQ或redis的事(这里不考虑)

正题.记录自我需求处理并的情况.

公司的一个框架(一种商业框架很庞大)无法使用整合市面上那些较新的技术框架,只能使用基础的java工具

这里的接口是一个模块 是webservice的

外部系统调用这个接口 重复写入 数据出现重复单据.故对此问题进行解决.

分析:

1.外部系统短时多次提交重复数据 

2.接口系统业务复杂 处理数据用时过长,导致数据积压 .数据脏读.

/**
 * 产成品入库单
 * @author Administrator
 *
 */
public class GetIcFinprodin {
	
	
	private static final Integer JP = 127;//同步对象标识

	public String getExecute(String operation,String orderform){
		String resultstr=null; 
		if (operation.equals("Insert")){
			//插入
			resultstr = insert(operation, orderform);
			
		}
		
		return resultstr;
	}
	
	/**
	 * 插入 
	 * @param operation
	 * @param orderform
	 * @return
	 */
	public String insert(String operation,String orderform){
		


		Boolean flag = true;//默认通过
		
		
		synchronized(JP) {
			
			//通过mes单据号查询单据是否存在 不存在就可以插入否则返回已插入提示
			if(StringUtils.isNotBlank(vdef1) ){
				try {
					BaseDAO bd = new BaseDAO();
					String vbillcodeExist = (String)bd.executeQuery("select vbillcode from ic_finprodin_h where vdef1 = '"+vdef1+"'", new ColumnProcessor());
					if(StringUtils.isNotBlank(vbillcodeExist)){
						flag = false;//已存在不允许重复插入
					}
				} catch (DAOException e) {
					e.printStackTrace();
				}
			}
			
		
		
			if(flag){
                //业务===========....耗时代码段   S
				GetXChangeService gtxchangeservice=new GetXChangeService();
				
				Object ovbillcode = "";
				
				JSONObject backinfojson=gtxchangeservice.getXChangeservice(xml_sb.toString());
				if(backinfojson.getString("$successful").equals("Y")){
					String pk=backinfojson.getJSONObject("sendresult").getString("content");
					BaseDAO bd = new BaseDAO();
					try {
						//获取插入的订单单号  
						ovbillcode = bd.executeQuery("select vbillcode from ic_finprodin_h where cgeneralhid ='"+pk+"'", new ColumnProcessor());
						
						backinfojson.put("$vbillcode", ovbillcode);
					} catch (Exception e) {
						e.printStackTrace();
					}
				//业务.-===========...耗时代码段    E	
					
				}else if(backinfojson.getString("$successful").equals("N")) {
					backinfojson.put("$vbillcode",ovbillcode);
					
				}
				
				return backinfojson.toJSONString();
			}else{
				JSONObject backinfojson = new JSONObject();
				backinfojson.put("$successful", "Y");
				backinfojson.put("sendresult", vdef1+" MES单据已存在,单据已插入成功!");
				return backinfojson.toJSONString();
			}	
		}
	}
	
   
}

JP 标识使用  基本类型 或String 类型(注意不能new  这里是java基础的东西,可了解一下 )  作为同一对象   保证线程同步 有兴趣的可以把 127 改成128 试试效果 估计你能找到答案

同步之后性能会下降,做个取舍吧.

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
用友U8 API接口是用友公司为了方便开发者与U8软件进行数据交互而提供的一套接口。通过使用U8 API接口,开发者可以实现与U8软件的对接,并实现各种功能的扩展和自定义。 在使用U8 API接口进行WebService开发时,可能会遇到一些常见问题: 1. 接口调用问题:在使用U8 API接口时,需要正确传入参数,并按照接口规范进行调用。如果出现调用失败的情况,可以通过查看接口的返回信息和错误提示进行排查。 2. 权限设置问题:在使用U8 API接口时,需要确保当前用户具有接口所需的权限。如果出现权限不足的情况,需要在U8软件中相应设置。 3. 数据映射问题:在进行数据交互时,需要将U8软件中的数据与外部系统的数据进行映射。在进行数据映射时,需要注意各字段的对应关系,确保数据的准确传递。 4. 并发冲突问题:在多个请求同时访问U8 API接口时,可能会出现并发冲突的问题。为了避免数据错乱或丢失,可以使用事务管理和锁机制来解决并发冲突问题。 5. 接口升级问题:随着U8软件的版本迭代,U8 API接口可能会发生变化。在进行接口开发时,需要关注U8软件的版本和相应的接口文档,确保使用最新的接口版本。 总之,使用用友U8 API接口进行WebService开发时,需要注意接口调用、权限设置、数据映射、并发冲突和接口升级等问题。通过仔细分析和排查,可以解决相关问题,实现与U8软件的灵活对接和功能扩展。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值