2017-10-03 2 views
2

Ich habe RESTful Web Services bereitgestellt, um Daten in eine entfernte Datenbank einer anderen Anwendung zu übertragen. Ich muss diese Dienste aufrufen, um Daten von PostgreSQL DB zu senden, indem ich Daten im JSON Format als GET/POST Parameter an den Web Service sende. Ist es möglich, diese Web Services von den PostgreSQL - Funktionen (periodisch) aufzurufen, die überhaupt Daten in meine Datenbank pushen, oder JAVA - Code zu schreiben, um diese Web - Services aufzurufen, die Abfragen in der PostgreSQL - Datenbank ausführen und Web - Services aufrufen entfernte DB.Aufruf von RESTful Web Services von PostgreSQL procedure/function

Antwort

2

Ja, es ist möglich, obwohl nicht direkt von Postgresql selbst. Ich weiß nicht, über Java, aber der schnellste Weg ist plperlu mit REST::Client Paket zu verwenden, zB:

CREATE OR REPLACE FUNCTION restful.put(auri character varying, ajson_text text) 
RETURNS text 
LANGUAGE plperlu 
SECURITY DEFINER 
AS $function$ 
    use REST::Client; 
    use Encode qw(encode); 
    my $client = REST::Client->new();  
    $client->getUseragent()->proxy('https', 'http://some-proxy/'); # use for proxy authentication 
    $client->addHeader('Content-Type', 'application/json');   # headers 
    $client->POST($_[0], encode('UTF-8', $_[1]));     # encoding 
    return $client->responseContent(); 
$function$ 
1

Lösung 1: Mit jOOQ

Zuerst erzeugen Klassen von XML-Datei die entsprechen postgresql Datenbankstruktur.

Dann können Sie sie in Ihrem Code, zum Beispiel in Ihrer Java-Anwendung verwenden:

try (DatabaseContext dbCtx=new DatabaseContext()) 
    { 

     DSLContext ctx=dbCtx.getContext(); 
     ctx.insertInto(TABLE) 
     .set(TABLE.ID, values.getId()) 
     .set(TABLE.DATA, values.getData().toString()) 
     .execute(); 
    } 

Lösung 2: Hibernate

Sie erste Setup-XML und Java-Dateien überwintern für die Abbildung Ihrer Datenbank ähnlich der JOOQ-Lösung.

Dann erneut Verbindung zur Datenbank und Push-Daten.

Configuration cfg=new Configuration(); 
    cfg.configure("your_database_configuration_file.cfg.xml"); 
    SessionFactory factory=cfg.buildSessionFactory(); 
    Session session=factory.openSession(); 
    Transaction t=session.beginTransaction(); 

    TranstateData e1=new TranstateData(); 
    e1.setId(idR); 
    e1.setData(dataR); 
    session.persist(e1); 
    t.commit(); 
    session.close(); 

Diese Lösungen sind besser als SQL Schreiben in die Datenbank direkt zu verbinden, weil Sie nur von Zeit zu Zeit aktualisiert werden können (z. B. eine Aufgabe schreiben, das tut), wenn die Tabellen geändert werden (was bedeutet, Sie müssen nicht Um die Konfigurationen zweimal zu schreiben, generiert der Code automatisch die Änderungen. Sie finden Fehler auch schneller, weil Sie die Klassen und Variablen sehen. Nicht zu vergessen, sie sind nicht die einzigen Möglichkeiten, um mit JOOQ und Hibernate herumzuspielen ... auch andere Möglichkeiten sind verfügbar. Das Internet ist voll von anderen Beispielen. MyBatis ist auch eine Lösung (Lösung 3). Alle genannten werden für PostgreSQL unterstützt.

Verwandte Themen