1、需求
既有系统无法向你发送数据变化,但是要求实时处理变化的数据
2、编写接口
@RequestMapping("notify")
@PermissionLimit(limit = false)
@ResponseBody
public void processChange(String params){
log.debug("收到数据库发出的航班变更消息:{}",params);
}3、数据库添加 java代码
create or replace and compile java source named apoi as
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
public class APOI {
public static void notify(String notifyUrl,String data){
BufferedReader reader = null;
String response=null;
try {
StringBuilder postData = new StringBuilder();
postData.append("params").append("=").append(data);
byte[] postDataBytes = postData.toString().getBytes("UTF-8");
HttpURLConnection conn = (HttpURLConnection)(new URL(notifyUrl)).openConnection();
conn.setRequestMethod("POST");
conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
conn.setRequestProperty("Content-Length", String.valueOf(postDataBytes.length));
conn.setConnectTimeout(2000);
conn.setReadTimeout(5000);
conn.setDoInput(true);
conn.setDoOutput(true);
conn.connect();
conn.getOutputStream().write(postDataBytes);
conn.getOutputStream().flush();
reader = new BufferedReader(new InputStreamReader(conn.getInputStream()));
String lines;
while ((lines = reader.readLine()) != null) {
lines = new String(lines.getBytes(), "utf-8");
response+=lines;
}
reader.close();
conn.disconnect();
} catch (Exception e) {
e.printStackTrace();
}
}
}
4、编写存储过程
create or replace procedure sia_apoi(
notifyUrl varchar2,
data varchar2
)
as
language java name
'APOI.notify(java.lang.String,java.lang.String)';
5、编写触发器
create or replace trigger t_aco_td_plan_leg
after insert on AOC.TH_MESSAGE
for each row
declare
notifyUrl varchar2(200);
dir varchar2(200);
begin
select value into notifyUrl from xxl_job_config where key = 'xxl-notify-url';
select 'D' into dir from dual;
sia_apoi(notifyUrl,:new.pleg_id||','||dir);
end t_aco_td_plan_leg;
6、授予用户socket权限
exec dbms_java.grant_permission( 'USERNAME', 'SYS:java.net.SocketPermission', 'IP:PORT', 'connect,resolve' );6、测试


本博客所有文章除特别声明外,均采用 CC BY-SA 3.0协议 。转载请注明出处!