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、测试

upload successful

upload successful



数据库      oracle

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