数据入库需求——webservice接口开发日记(包含不锁表加字段的方法)

一、需求

某个系统要把人员信息推送给我们的系统,准备采用webservice接口,实时调用的形式。

我们的系统要提供一个webservice接口,被调用后,把数据入库,然后返回结果。

可进行人员新增、修改、逻辑删除这些操作。

是一个比较简单的功能。(webservice是老方法了,其实用json更好。)

 

二、开发流程

1.为了保存人员信息,要在数据库现有的一张表中新增多个字段;

为了防止新增字段时导致表被锁、不可用,进而延误了其它操作该表的程序,可以如下操作:

(有次我们给大表加字段,锁了30多分钟……)

alter 大表的时候,可以增加 ALGORITHM=INPLACE, LOCK=NONE; 不锁表

例如:

ALTER TABLE tbl_name ADD PRIMARY KEY (column), ALGORITHM=INPLACE, LOCK=NONE;

ALTER TABLE student ADD 'is_push' varchar(2) character set utf8_general_ci NULL DEFAULT '0' comment '是否推送,0未推送,1已推送', ALGORITHM=INPLACE, LOCK=NONE;

 

 

2.作为接口提供方,要写一个接口文档,告诉另一个系统的人。

接口文档包含:

(1)接口功能描述

(2)接口的测试url与生产url,例如:

http://10.123.123.123:8080/webservice/student?wsdl

http://10.111.111.1111:80/webservice/student?wsdl

(3)入参字段,可以用表格说明;以及入参样例

(4)出参字段,可以用表格说明;以及出参样例

 

3.开发webservice接口。本项目是spring项目,因此步骤如下:

(1)找到webservice用的xml配置文件,增加一个接口,例如:

<jaxws:endpoint id="newStudent" implementor="com.xxx.webservice.StudentReceiveImpl" address="/student" />

这里配置的就是url中的路径:"/student"

(2)由于数据库新增了字段,所以修改下对应的javabean,增加相应的字段

(3)增加一个接口类,webservice用,例如StudentReceive.java:(接收学生信息的意思)

import javax.jws.WebMethod;
import javax.jws.WebService;

@WebService
public interface StudentReceive {
  @WebMethod
  public String receiveMsg(String param);
}

(4)增加一个实现类,webservice用,例如StudentReceiveImpl.java,对应xml中配置的类:

@WebService(endpointInterface="com.xxx.webservice.StudentReceive")
public class StudentReceiveImpl implements StudentReceive {
  @Override
  @WebMethod(operationName="receiveMsg")
  public String receiveMsg(String data){
    System.out.println(data);
    //省略入库操作
    return null;
  }
}

(5)处理webservice传输的报文,需要一些方法,因为它实际上包含了许多xml标签,例如使用com.fasterxml.jackson.databind.ObjectMapper对象:

ObjectMapper om = new ObjectMapper();
om.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES,false);
om.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS,false);
om.setSerializationInclusion(JsonInclude.Include.NON_NULL);
//将收到的信息转为javabean对象;data是收到的string,studentBean是自己创建的javabean
StudentBean studentBean = om.readValue(data, StudentBean.class);
......
//返回webservice消息用的方法;backBean是自己创建的javabean
return om.writeValueAsString(backBean);

(6)之后,可以本地启动项目,用SoapUI测试一下这个接口是否通了,例如输入:

http://127.0.0.1:8080/webservice/student?wsdl

如果通了的话,就会显示出这个接口中有一个receiveMsg是可用的,然后传入参数、点击发送消息就可以了。(SoapUI使用方法此处略过)

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

追逐梦想永不停

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值