Как создать веб-работу Azure с использованием Java с Eclipse и Maven? - PullRequest
0 голосов
/ 20 мая 2019

Я хотел бы создать запланированное веб-задание с использованием Java для архивирования моих данных один раз в день Мой план, чтобы минимизировать зависимости в самом веб-задании, - просто вызвать Http-вызов работающего экземпляра моего основного приложения, чтобы он мог позаботиться обо всем остальном. Проблема, с которой я столкнулся, заключается в том, что после успешной загрузки веб-задания я нажимаю кнопку «Выполнить», она успешно выполняется, а затем сразу же завершается сбоем. Записывается только успех, поэтому я абсолютно не знаю, что является причиной сбоя. Я надеюсь, что кто-то с немного большим опытом может помочь мне разобраться, что мне не хватает.

Java-код выглядит примерно так:

        HttpURLConnection httpConnection = null;
        Integer responseCode = null;
        try {
            URL serverUrl = new URL(endpoint);

            httpConnection = (HttpURLConnection) serverUrl.openConnection();
            httpConnection.setRequestMethod("GET");

            responseCode = httpConnection.getResponseCode();

            System.out.println("Status: " + responseCode + " - " + httpConnection.getResponseMessage());

            return responseCode;

        } catch (Exception e) {
            if (responseCode != null) {
                System.out.println("Status: " + responseCode + " - " + httpConnection.getResponseMessage());
            }
            e.printStackTrace();
        } finally {
            if (httpConnection != null) {
                httpConnection.disconnect();
            }
        }
        return 400;

Упрощенно, но просто знайте, что оно само по себе прекрасно работает.

Мой процесс состоял в том, чтобы экспортировать этот код как файл jar, а затем сжать файл jar вместе с командным файлом в zip-архив.

Пакетный файл читает:

set JAVA_HOME=D:\Program Files (x86)\Java\jdk1.8.0_202
set CLASSPATH=.;%JAVA_HOME%\lib
set PATH=%JAVA_HOME%\bin;%PATH%
java -jar archive-webjob.jar

И я уже пробовал использовать разные jdks, 1.8.0_202 - самый последний.

В других местах я видел другие файлы, такие как web.config или settings.job, но сам не видел никакой разницы, используя их.

Что касается моих настроек в Azure, то для Always-on установлено значение true, наряду с Tomcat 8.5 (авто), Java 1.8 (авто), 64-бит и минимальными настройками безопасности.

К сожалению, мне было очень трудно найти ресурсы о том, как это сделать. Поэтому, пожалуйста, потерпите меня, если я упускаю что-то очевидное.

К вашему сведению, функции Azure, к сожалению, для меня не обсуждаются, поскольку моя компания не разрешает развертывание с помощью интерфейса командной строки Azure, хотя я уверен, что это было бы отличным решением.

Заранее благодарим за любую полезную информацию.

1 Ответ

0 голосов
/ 21 мая 2019

Итак, в журналах действительно подробно описываются сбои.Проблема заключалась в том, что я сжимал неправильный файл jar (тот, который я вручную экспортировал в eclipse), у которого не было свойства «Main-Class» в файле MANIFEST.MF.Чтобы в этот раз кто-нибудь испытал трудности, я продолжу и четко опишу шаги, которые я предпринял.

  1. Напишите код Java и убедитесь, что он работает локально.Обратите внимание, что после загрузки вы не сможете отправить запрос на локальный хост или частный адрес, такой как SO, - но, конечно, ваши конечные точки развернутых экземпляров будут работать.

  2. Выполнение.bat файл, который работал для меня, на самом деле выглядит так:

set PATH=%PATH%;%JAVA_HOME%/bin
java -jar AppName-Version-jar-with-dependencies.jar 

Постфикс 'jar-with-dependencies' является результатом:

Плагин Maven (конечно, способы сделать это и с помощью gradle / ant / command line):
    ...
    <build>
        <plugins>
            <plugin>
                <artifactId>maven-assembly-plugin</artifactId>
                <version>2.5.5</version>
                <configuration>
                    <archive>
                        <manifest>
                            <addClasspath>true</addClasspath>
                            <mainClass>com.otherPackages.MainClassName</mainClass>
                        </manifest>
                    </archive>
                    <descriptorRefs>
                        <descriptorRef>jar-with-dependencies</descriptorRef>
                    </descriptorRefs>
                </configuration>
                <executions>
                    <execution>
                        <id>make-assembly</id>
                        <phase>package</phase>
                        <goals>
                            <goal>single</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin> 
        </plugins>
    </build>

Ключевой шаг, который я пропустил: как уже упоминалось, хотя a *Файл 1023 * был сгенерирован, в нем не было атрибута «Main-Class» (несмотря на реализацию описанного выше подключаемого модуля maven-сборка).

Просто создайте файл в src/main/resources со следующим содержимым:
Manifest-Version: 1.0 
Main-Class: com.otherPackages.MainClassName

mvn clean package сгенерирует AppName-Version-jar-with-dependencies.jar в целевой папке (нет необходимости вручную экспортировать как jar), в котором будет подробный файл MANIFEST.MF, который на этот раз содержит свойство Main-Class.

Сожмите AppName-Version-jar-with-dependencies.jar вместе с файлом run.bat в .zip

Загрузите ZIP-файл в Azure и Webjobдолжно работать как положено.

Надеюсь, это сэкономит кому-то немного времени.Я чувствовал бы себя виноватым, если бы я, по крайней мере, не документировал свои полтора дня, пытаясь понять это.

...