Запустите приложение весенней загрузки на сервере Liberty - PullRequest
2 голосов
/ 14 марта 2020

Я разработал автономное приложение с весенней загрузкой , которое обслуживает службу отдыха, я упаковал его как jar и оно работает правильно. Чтобы выпустить его на производственном сервере (Websphere), я должен преобразовать его в war.

Я обновил pom.xml, добавив следующие строки:

<properties>
    <maven.compiler.target>1.7</maven.compiler.target>
    <maven.compiler.source>1.7</maven.compiler.source>
</properties>
<packaging>war</packaging>
<build>
    <finalName>${artifactId}</finalName>
</build>

Затем я запустил maven clean package и получил war. Итак, его публикация на сервере Tomcat работает нормально, но в Liberty я получаю ошибку:

Error 404: SRVE0190E: File not found /

Я также изменил свою точку входа следующим образом:

@SpringBootApplication
@PropertySource("classpath:alerts.properties")
public class WebApplication extends SpringBootServletInitializer 
{

//  public static void main(String[] args) {
//      SpringApplication.run(WebApplication.class, args);
//  }

    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
        return application.sources(WebApplication.class);
    }
}

С безуспешно, поэтому ... как я могу запустить весеннюю загрузку на сервере Liberty?

ОБНОВЛЕНИЕ

Как и @ Anjum Fatima . Я также добавил функции в server.xml

<feature>jsp-2.3</feature>
<feature>springBoot-2.0</feature>
<feature>servlet-3.1</feature>

Ранее в этом файле я также добавил:

<library>
    <file id="alerts.properties" name="${shared.resource.dir}/alerts.properties"/>
</library>
<webApplication id="alerts" location="alerts.war" name="alerts">

И в wlp18\usr\shared\resources Я скопировал файл свойств.

Но у меня все та же ошибка.

Файл alert.properties:

spring.datasource.url=jdbc:h2:file:~/alertsdb;DB_CLOSE_ON_EXIT=FALSE;AUTO_RECONNECT=TRUE
spring.datasource.username=admin
spring.datasource.password=mypassword
spring.datasource.driver-class-name=org.h2.Driver

spring.jpa.show-sql=true
spring.jpa.hibernate.ddl-auto=update

spring.h2.console.enabled=true
spring.h2.console.settings.web-allow-others=true

spring.mvc.view.prefix: /
spring.mvc.view.suffix: .jsp
spring.messages.basename=validation

ОБНОВЛЕНИЕ 2

Сервер почти запущен, но он не может найти некоторые файлы, такие как com.ibm.ws.kernel.boot.nls_1.0.22.jar, в папке lib Liberty есть файл com.ibm.ws.kernel.boot_1.0.22.jar (без .nls), здесь вывод консоли, что мне не хватает?

2020-03-18 13:44:38.950  INFO 34004 --- [ecutor-thread-4] it.mycompany.alerts.WebApplication       : Started WebApplication in 10.915 seconds (JVM running for 24.544)
[WARNING ] The XML schema [web-jsptaglibrary_2_1.xsd] could not be found. This is very likely to break XML validation if XML validation is enabled.
[WARNING ] The XML schema [javaee_5.xsd] could not be found. This is very likely to break XML validation if XML validation is enabled.
[WARNING ] The XML schema [jsp_2_1.xsd] could not be found. This is very likely to break XML validation if XML validation is enabled.
[WARNING ] The XML schema [javaee_web_services_1_2.xsd] could not be found. This is very likely to break XML validation if XML validation is enabled.
[WARNING ] The XML schema [javaee_web_services_client_1_2.xsd] could not be found. This is very likely to break XML validation if XML validation is enabled.
[WARNING ] The XML schema [web-app_3_0.xsd] could not be found. This is very likely to break XML validation if XML validation is enabled.
[WARNING ] The XML schema [web-fragment_3_0.xsd] could not be found. This is very likely to break XML validation if XML validation is enabled.
[WARNING ] The XML schema [web-common_3_0.xsd] could not be found. This is very likely to break XML validation if XML validation is enabled.
[WARNING ] The XML schema [javaee_6.xsd] could not be found. This is very likely to break XML validation if XML validation is enabled.
[WARNING ] The XML schema [jsp_2_2.xsd] could not be found. This is very likely to break XML validation if XML validation is enabled.
[WARNING ] The XML schema [javaee_web_services_1_3.xsd] could not be found. This is very likely to break XML validation if XML validation is enabled.
[WARNING ] The XML schema [javaee_web_services_client_1_3.xsd] could not be found. This is very likely to break XML validation if XML validation is enabled.
[WARNING ] The XML schema [web-app_3_1.xsd] could not be found. This is very likely to break XML validation if XML validation is enabled.
[WARNING ] The XML schema [web-fragment_3_1.xsd] could not be found. This is very likely to break XML validation if XML validation is enabled.
[WARNING ] The XML schema [web-common_3_1.xsd] could not be found. This is very likely to break XML validation if XML validation is enabled.
[WARNING ] The XML schema [javaee_7.xsd] could not be found. This is very likely to break XML validation if XML validation is enabled.
[WARNING ] The XML schema [javaee_web_services_1_4.xsd] could not be found. This is very likely to break XML validation if XML validation is enabled.
[WARNING ] The XML schema [javaee_web_services_client_1_4.xsd] could not be found. This is very likely to break XML validation if XML validation is enabled.
[WARNING ] The XML schema [web-app_4_0.xsd] could not be found. This is very likely to break XML validation if XML validation is enabled.
[WARNING ] The XML schema [web-fragment_4_0.xsd] could not be found. This is very likely to break XML validation if XML validation is enabled.
[WARNING ] The XML schema [web-common_4_0.xsd] could not be found. This is very likely to break XML validation if XML validation is enabled.
[WARNING ] The XML schema [javaee_8.xsd] could not be found. This is very likely to break XML validation if XML validation is enabled.
[WARNING ] Failed to scan [file:/C:/lang/appserver/wlp/wlp18/lib/com.ibm.ws.kernel.boot.nls_1.0.22.jar] from classloader hierarchy
C:\lang\appserver\wlp\wlp18\lib\com.ibm.ws.kernel.boot.nls_1.0.22.jar (File not found)

Спасибо

Ответы [ 4 ]

2 голосов
/ 16 марта 2020

Образец военного приложения Spring Boot можно посмотреть в https://github.com/anjumfatima90/dojo.samples. У него есть шаги для развертывания на свободе. Я надеюсь, что это поможет.

ОБНОВЛЕНИЕ: Есть два способа развернуть войну весенней загрузки в открытой свободе, вы развертывали ее как обычный старый WAR, который не требует добавления springBoot- 2.0 функция на сервер. xml. В моем примере с github показан другой способ добавления функции springBoot-2.0 на ваш сервер. xml вместе с изменениями в теге <application>, как в https://www.ibm.com/support/knowledgecenter/SSEQTP_liberty/com.ibm.websphere.wlp.doc/ae/twlp_dep_springboot.html

Учитывая ваш путь , который развертывается как обычная старая война. Скотт клонировал ваше приложение и внес некоторые изменения, чтобы добавить liberty-maven-plugin в своем репо https://github.com/scottkurz/springboot-liberty-1, чтобы помочь вам в этом.

Шаги к работе:

  1. Клонировать репозиторий, используя git clone https://github.com/scottkurz/springboot-liberty-1.git.
  2. Выполнить mvn clean install
  3. Выполнить mvn liberty:run
  4. Вы найдете папку liberty, созданную в целевой папке приложения. , Вы можете сравнить ваш сервер с target/liberty/wlp/usr/servers/defaultServer.

ПРИМЕЧАНИЕ : Скотт добавил alerts.properties в src/main/resources приложения.

2 голосов
/ 17 марта 2020

Если вы упаковываете приложение как настоящую войну, а не как конвертированный jar-файл, то все, что вам нужно, это функция servlet и папка dropins.

My server.xml:

<server description="Tester">
    <featureManager>
        <feature>servlet-4.0</feature>
    </featureManager>

    <httpEndpoint host="*" httpPort="9080" httpsPort="9443" id="defaultHttpEndpoint"/>
</server>

pom.xml:

<project xmlns="http://maven.apache.org/POM/4.0.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.ibm.example</groupId>
    <artifactId>SpringbootWeb</artifactId>
    <packaging>war</packaging>
    <version>1.0.0</version>

    <parent>
        <groupId>io.openliberty.tools</groupId>
        <artifactId>liberty-maven-app-parent</artifactId>
        <version>3.2</version>
    </parent>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <maven.compiler.source>1.8</maven.compiler.source>
        <maven.compiler.target>1.8</maven.compiler.target>
        <packaging.type>minify,runnable</packaging.type>
    </properties>

    <profiles>
        <profile>
            <id>usr-package</id>
            <properties>
                <packaging.type>usr</packaging.type>
            </properties>
        </profile>
    </profiles>


    <build>
        <finalName>${project.artifactId}</finalName>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-war-plugin</artifactId>
                <version>3.0.0</version>
                <configuration>
                    <packagingExcludes>pom.xml</packagingExcludes>
                </configuration>
            </plugin>
            <plugin>
                <groupId>io.openliberty.tools</groupId>
                <artifactId>liberty-maven-plugin</artifactId>
                <version>3.2</version>
                <configuration>
                    <assemblyArtifact>
                        <groupId>io.openliberty</groupId>
                        <artifactId>openliberty-runtime</artifactId>
                        <version>[18.0.0.1,)</version>
                        <type>zip</type>
                    </assemblyArtifact>
                    <serverName>${project.artifactId}Server</serverName>
                    <include>${packaging.type}</include>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-failsafe-plugin</artifactId>
                <version>2.19.1</version>
                <executions>
                    <execution>
                        <goals>
                            <goal>integration-test</goal>
                            <goal>verify</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
            <version>2.2.5.RELEASE</version>
            <exclusions>
                <exclusion>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-starter-tomcat</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>4.0.1</version>
            <scope>provided</scope>
        </dependency>
    </dependencies>
</project>

Когда вы запустите цель package в Maven, она создаст войну и банку, которая содержит пакет времени исполнения liberty для вас в формате jar. Вы можете взять войну и поместить ее в папку dropins вашего текущего приложения. Убедитесь, что в файле Liberty messages.log нет других ошибок.

Мой пример на GitHub -Brian

1 голос
/ 15 марта 2020

Вам не нужно запускать банку Spring Boot как войну за свободу. Вот руководство по свободе о том, как развернуть jar Spring Boot в свободе: https://openliberty.io/guides/spring-boot.html Здесь есть еще одна замечательная статья о запуске приложений Spring Boot в свободе: https://developer.ibm.com/articles/modernize-and-optimize-spring-boot-applications/

0 голосов
/ 20 марта 2020

Наконец-то все работает, я начал с нового проекта. Здесь pom.xmlliberty-maven-plugin):

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.2.5.RELEASE</version>
        <relativePath /> <!-- lookup parent from repository -->
    </parent>

    <groupId>it.mycompany</groupId>
    <artifactId>alerts</artifactId>
    <version>1.0-SNAPSHOT</version>

    <properties>
        <maven.compiler.target>1.8</maven.compiler.target>
        <maven.compiler.source>1.8</maven.compiler.source>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-tomcat</artifactId>
            <scope>provided</scope>
        </dependency>

        <dependency>
            <groupId>org.apache.tomcat.embed</groupId>
            <artifactId>tomcat-embed-jasper</artifactId>
        </dependency>

        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>jstl</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-security</artifactId>
        </dependency>

        <dependency>
            <groupId>com.h2database</groupId>
            <artifactId>h2</artifactId>
            <scope>runtime</scope>
        </dependency>

        <dependency>
            <groupId>com.ibm.mq</groupId>
            <artifactId>com.ibm.mq.allclient</artifactId>
            <version>9.1.4.0</version>
        </dependency>
    </dependencies>

    <packaging>war</packaging>

    <build>
        <finalName>${artifactId}</finalName>
        <plugins>
            <plugin>
                <groupId>io.openliberty.tools</groupId>
                <artifactId>liberty-maven-plugin</artifactId>
                <version>3.2</version>
                <configuration>
                    <appsDirectory>apps</appsDirectory>
                    <mainClass>${start-class}</mainClass>
                </configuration>
            </plugin> 
        </plugins>
    </build>
</project>

Класс точки входа:

@SpringBootApplication
@PropertySource("classpath:alerts.properties")
public class WebApplication extends SpringBootServletInitializer {
    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
        return application.sources(WebApplication.class);
    }
}

Я создал WAR с помощью mvn clean install, затем скопировал его из цели dir к wlp/servers/myserver/apps (не dropins)

Наконец я установил server.xml следующим образом:

<server description="Tester">
    <featureManager>
        <feature>servlet-4.0</feature>
        <feature>localConnector-1.0</feature>
        <feature>jsp-2.3</feature>
        <feature>springBoot-2.0</feature>
    </featureManager>

    <httpEndpoint host="*" httpPort="9080" httpsPort="9443"
        id="defaultHttpEndpoint" />

    <library>
        <file id="alerts.properties"
            name="${shared.resource.dir}/alerts.properties" />
    </library>
    <webApplication id="alerts" location="alerts.war"
        name="alerts" contextRoot="/" />
</server>

Сервер Liberty запускается нормально, приложение работает, единственная проблема это то, что отвечает localhost:9080/login, а не localhost:9080/alerts/login. Однако цель вопроса достигнута, я создал файл войны, и он работает на сервере Liberty.

Спасибо всем и особенно благодаря @ScottKurz и @Anjum Fatima.

...