Соединение Flink JDBC для нескольких арендаторов - PullRequest
1 голос
/ 22 марта 2019

У меня есть следующие 2 класса.Основным классом является Aloscalculation , который имеет переменную finalOutput , которая содержит определенные значения. DataSet<Tuple4<String, String, Double, String>> finalOutput.Значение пытается быть вставлено в postgresql.Переменная connectionValues ​​имеет json и имеет различные параметры, такие как имя пользователя, пароль, имя_двира, полученное из хеш-карты с именем externalmap.Из Writealos я могу отправить объект строки, который пытается вставить в Aloscalculation.Но я не могу отправить переменные значения соединения, чтобы установить имя_пользователя, пароль, URL-адрес и имя пользователя.Пожалуйста, предложите мне, как это сделать.Значения, такие как org_metric_result, org_metric_orgid рассчитываются соответственно.

Теперь я отредактировал код по-новому, чтобы решить проблему.Но теперь новая проблема в методе Writealos, если совпадение не происходит, я возвращаю пустой объект.Из-за чего при вставке базы данных я получаю исключение о том, что формируется нулевое значение и его нельзя вставить.Пожалуйста, кто-нибудь может решить эту ошибку?

    public class Writealos implements MapFunction<Tuple4<String, String, Double, String>, Row> 
    {
        @Autowired
        private Tenantresource outermap;
        public Row map(Tuple4<String, String, Double, String> arg0)throws Exception
        {
            if(arg0.f0.equals(currentKey))
            {
               Row obj = new Row(7);
               String string = RandomStringUtils.randomAlphanumeric(32);
               obj.setField(0, string);
               obj.setField(1, alos);
               obj.setField(2, org_metric_result.toString());
               obj.setField(3, Start_Date.toString());
               obj.setField(4, End_Date.toString());
               obj.setField(5, Execution_Date.toString());
               obj.setField(6, org_metric_orgid);
         }
            return obj; 
        }
    }

    public class Aloscalculation
    {
        @Autowired
    private static Tenantresource outermap;
        public static void calculateAlos(Fhirresource fhir_resource ) throws Exception 
        {
            String query = "insert into reports (org_metric_id,org_metric_topic, org_metric_result, org_metric_from, org_metric_to, org_metric_executed_on, org_metric_orgid) values (?,?,cast(? as json),cast(? as timestamp),cast(? as timestamp),cast(? as timestamp),?)";
         for(String currentKey : outermap.tenantresourcereturn().keySet()) 
         { 
             JSONObject connection =new JSONObject( outermap.tenantresourcereturn().get(currentKey));
             System.out.println(currentKey);
             String url=connection.getString("jdbc_url")+":"+connection.getString("port")+"/"+connection.getString("db_name");
             System.out.println(url);
            finaloutput.map(new Writealos(fhir_resource,currentKey))
                .output(JDBCOutputFormat.buildJDBCOutputFormat()
                .setDrivername()
                .setDBUrl()
                .setUsername()
                .setPassword()
                .setQuery(query)
                .finish());
        }
    }

1 Ответ

0 голосов
/ 22 марта 2019

Как вы выставляете public Row map(Tuple4<String, String, Double, String> arg0) через сервис.Spring предоставляет аннотацию @ ResponseBody.Вам нужно иметь соответствующий POJO, и Spring позаботится о преобразовании.Во-вторых, почему вы не планируете использовать какой-либо инструмент ORM (Hibernate, Ibatis и т. Д.), Он может упростить ваши операции CRUD.

Как работает аннотация Spring @ResponseBody в этом примере приложения RESTful?

...