web-dev-qa-db-ja.com

Spring Boot REST外部Tomcat 9サーバーにデプロイすると、コントローラーが404を返す

組み込みサーバーで完全に動作するスプリングブートレストWebアプリケーションがあります。ただし、ブログに記載されている手順を実行した後は https://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#howto-create-a-deployable-war-file =、サーバー上のリソースにリクエストを送信すると404エラーメッセージが表示されます。Java 1.8.0_212をローカルで使用し、Java 1.8を使用しました.0_131を作成し、サーバー上のTomcat 9にアプリをデプロイしました。困惑しているのは、CrudRepositoryを拡張するリポジトリにアクセスできることです。以下に、アプリケーションのエントリポイントを示します。

@SpringBootApplication
@ComponentScan(basePackages = "com.dbe.ref")
public class RefmsApplication extends SpringBootServletInitializer {

    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
        return builder.sources(RefmsApplication.class);
    }

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

そして私のpom.xml

<?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>

    <groupId>com.dbe.ref</groupId>
    <artifactId>refms</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>war</packaging>

    <name>refms</name>
    <description>project for Rural electrification fund</description>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>LATEST</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <Java.version>1.8</Java.version>
        <start-class>com.RefmsApplication</start-class>
    </properties>

    <dependencies>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-Tomcat</artifactId>
            <scope>provided</scope>
        </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>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-rest</artifactId>
        </dependency>
        <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>com.Oracle</groupId>
            <artifactId>ojdbc6</artifactId>
            <version>11.2.0.4</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.webjars</groupId>
            <artifactId>jquery</artifactId>
            <version>2.2.1</version>
        </dependency>

        <dependency>
            <groupId>org.webjars</groupId>
            <artifactId>angularjs</artifactId>
            <version>1.4.10</version>
        </dependency>

        <dependency>
            <groupId>org.webjars</groupId>
            <artifactId>bootstrap</artifactId>
            <version>3.3.4</version>
        </dependency>

        <dependency>
            <groupId>org.webjars</groupId>
            <artifactId>font-awesome</artifactId>
            <version>4.7.0</version>
        </dependency>
        <dependency>
            <groupId>eu.michael-simons</groupId>
            <artifactId>wro4j-spring-boot-starter</artifactId>
            <version>0.3.4</version>
        </dependency>
        <dependency>
            <groupId>net.sf.jasperreports</groupId>
            <artifactId>jasperreports</artifactId>
            <version>6.4.0</version>
        </dependency>
        <dependency>
            <groupId>org.Apache.poi</groupId>
            <artifactId>poi</artifactId>
            <version>3.14</version>
        </dependency>

        <dependency>
            <groupId>net.sourceforge.dynamicreports</groupId>
            <artifactId>dynamicreports-core</artifactId>
            <version>5.0.0</version>
        </dependency>

    </dependencies>

    <build>
        <finalName>refms</finalName>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

ここにログの一部があります:

2017-09-19 10:38:20.564  INFO 6660 --- [           main] o.s.b.w.servlet.FilterRegistrationBean   : Mapping filter: 'errorPageFilter' to: [/*]
2017-09-19 10:38:20.565  INFO 6660 --- [           main] o.s.b.w.servlet.FilterRegistrationBean   : Mapping filter: 'characterEncodingFilter' to: [/*]
2017-09-19 10:38:20.566  INFO 6660 --- [           main] o.s.b.w.servlet.FilterRegistrationBean   : Mapping filter: 'hiddenHttpMethodFilter' to: [/*]
2017-09-19 10:38:20.568  INFO 6660 --- [           main] o.s.b.w.servlet.FilterRegistrationBean   : Mapping filter: 'httpPutFormContentFilter' to: [/*]
2017-09-19 10:38:20.568  INFO 6660 --- [           main] o.s.b.w.servlet.FilterRegistrationBean   : Mapping filter: 'requestContextFilter' to: [/*]
2017-09-19 10:38:20.571  INFO 6660 --- [           main] .s.DelegatingFilterProxyRegistrationBean : Mapping filter: 'springSecurityFilterChain' to: [/*]
2017-09-19 10:38:20.571  INFO 6660 --- [           main] o.s.b.w.servlet.FilterRegistrationBean   : Mapping filter: 'configurableWroFilter' to urls: [/wro4j/*]
2017-09-19 10:38:20.572  INFO 6660 --- [           main] o.s.b.w.servlet.ServletRegistrationBean  : Mapping servlet: 'dispatcherServletRegistration' to [/refms/*]
2017-09-19 10:38:20.573  INFO 6660 --- [           main] o.s.b.w.servlet.ServletRegistrationBean  : Mapping servlet: 'dispatcherServlet' to [/]
9
MikiEthiopia

デフォルトで組み込みサーバーと外部サーバーにアプリケーションをデプロイする場合、少し違いがあります。

組み込みサーバーでは、以下を使用してアプリケーションにアクセスできます。

http://localhost:<port>/<resourceName>

一方、warを別のコンテナーにデプロイする場合は、次のようなバージョンのアプリケーション名を追加する必要があります。

http://localhost:<port>/<applicationNameWithVersion>/<resourceName>

たとえば、この example をデプロイすると、組み込みサーバーのURLは次のようになります。

http://localhost:8080/greeting

また、次のように外部にデプロイされたアプリケーションのURL:

http://localhost:8999/gs-rest-service-0.1.0/greeting

注:このURLは私のアプリケーションサーバーのものであるため、変更される可能性があります。

ヘルプが必要な場合はコメントしてください。

8
Sunil Kanzar

かどうかを確認します

<build>
     <finalName>refms</finalName>
         ...
</build>

pom.xml内の

server.contextPath=/refms

application.propertiesで、

<Context path="/refms"/>

context.xml。おそらく、デプロイ後のTomcatのルートコンテキストは異なっていました。

さらに、この依存関係を変更します

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

これで

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
    <exclusions>
        <exclusion>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-Tomcat</artifactId>
        </exclusion>
    </exclusions>   
</dependency>

外部Tomcatの場合

3
Ednilson Campos

src/main/Javaのルートパッケージを確認します。これは、POMグループIDで言及されているパッケージ名と同じである必要があります。 com.dbe.ref同じ問題が発生するよりも不一致がある場合。

1
Vikas Bharti

アプリケーションをTomcatにデプロイする場合、URLはアプリケーションがデプロイされるコンテキストパスによって異なります。ほとんどの場合、これはTomcatの「webapps」ディレクトリに配置したwarファイルの名前と完全に一致します。名前は「webapps」ディレクトリで確認できます。あなたのwarファイルは、おそらくディレクトリに今も使われています。

FinalNameをmavenビルドセクションに追加したので、warファイルの名前はrefms.warにする必要があります。これにより、アプリケーションは次の場所で実行されます。

http:// Host:port/refms /

私の想定では、Tomcatにコピーする前にwarファイルの名前をROOT.warに変更していないので、アプリケーションはnotが実行されている:

http:// Host:port /

そうすると、アプリケーションは組み込みのTomcatインスタンスと同様に実行されます。ルートコンテキスト。

ログファイルから、認証エンドポイントが/ refms /にマッピングされていることがわかります

Mapping servlet: 'dispatcherServletRegistration' to [/refms/*]

これは、アプリケーションのコンテキストルートに関連しています。したがって、warファイルの名前を変更しなかった場合、404を受け取る認証エンドポイントはおそらく以下になります。

http://localhost:8080/refms/refms/api/account/authenticate
0
Jeroen

あなたのコメントで/ authenticateが404を与えていると言ったのは、ログインプロセスのURLを「authenticate」に設定したためです。これは、ログインフォームが投稿されるURLです。指定しない場合、デフォルトで/ loginになります。 Spring SecurityフレームワークはそのURLをインターセプトし、ログインとパスワードのパラメーターを取得します。

0
prabhat

Spring Bootアプリケーションにコンテキストパスが追加されていることを確認してください。通常、src\main\resources内のapplication.propertiesファイルにあります。そのプロパティファイルに、プロパティを追加します。

server.contextPath=/refms

次のリンクを使用してアプリケーションにアクセスできるはずですlocalhost:8080/refms/api/account/authenticateまたはlocalhost:8080/refms-xxxx/api/account/authenticate(xxxxはアーティファクトのバージョンです)

0
utpal416