web-dev-qa-db-ja.com

Spring BootをTomcatにデプロイする

だから私は春に初めてです-だから、私は春のブートを試してみよう

Mavenを使用して構築しています-ビューリクエストを設定します。「App」として実行すると、Tomcat自体が起動し、デフォルトの8080ポートにサービスがあるため、localhost:8080/serviceを呼び出すとすべて良い。

しかし、サーバーに展開するためにWARとしてパッケージ化しようとすると動作しません

だから私は基本に戻ってローカルにTomcatサーバーに展開し、何が起こるか見てみようと思った

最初は何も起こりませんでした-404-少しグーグルでやったので、このようなWebエントリポイントを含める必要があります-これが私のメインクラスです

@ComponentScan
@EnableAutoConfiguration
public class App extends SpringBootServletInitializer
{

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

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

    private static Class<App> appClass = App.class;
}

だからそれはうまくいったようで、コンソールで赤いカタリナの起動テキストを見ることができ、それからSpringブートが起動するのを見ました(以前は見ていませんでした)

ただし、サービスlocalhost:8080/serviceを呼び出そうとすると、404が表示されます

「アプリ」として実行すると、おもしろい

私がしなければならない明白な何かがありますか?私はちょうど戦争を作成する

  1. pom xmlパッケージタイプをwarに変更しました
  2. 上記のコードスニペットにオーバーライドを含めました
  3. 戦争として輸出

私はWARを解凍し、うまく見えました-WEB-INFと依存関係のセットなどがあります.

誰かがスプリングブートアプリをWARとして展開するときに同様の問題を抱えていたので、どんな助けでもいいでしょうか?

***更新****

これで、ローカルのTomcat 7サーバーに正しくデプロイするための戦争を取得できますが、外部でホストされているTomcatコンテナーにデプロイしようとすると、

at       org.springframework.web.SpringServletContainerInitializer.onStartup(SpringServletContainerInitializer.Java:175)
at org.Apache.catalina.core.StandardContext.startInternal(StandardContext.Java:5262)
at org.Apache.catalina.util.LifecycleBase.start(LifecycleBase.Java:150)
... 15 more
Jul 14, 2014 1:49:01 PM org.Apache.catalina.startup.HostConfig deployDirectory
SEVERE: Error deploying web application directory /usr/local/shared/Tomcat/thecookpot/webapps/cookpot
Java.lang.IllegalStateException: ContainerBase.addChild: start: org.Apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/cookpot]]
at org.Apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.Java:898)
at org.Apache.catalina.core.ContainerBase.access$000(ContainerBase.Java:130)
at org.Apache.catalina.core.ContainerBase$PrivilegedAddChild.run(ContainerBase.Java:153)
at org.Apache.catalina.core.ContainerBase$PrivilegedAddChild.run(ContainerBase.Java:142)
at Java.security.AccessController.doPrivileged(Native Method)
at org.Apache.catalina.core.ContainerBase.addChild(ContainerBase.Java:869)
at org.Apache.catalina.core.StandardHost.addChild(StandardHost.Java:615)
at org.Apache.catalina.startup.HostConfig.deployDirectory(HostConfig.Java:1095)
at org.Apache.catalina.startup.HostConfig$DeployDirectory.run(HostConfig.Java:1617)
at Java.util.concurrent.Executors$RunnableAdapter.call(Executors.Java:441)
at Java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.Java:303)
at Java.util.concurrent.FutureTask.run(FutureTask.Java:138)
at Java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.Java:886)
at Java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.Java:908)
at Java.lang.Thread.run(Thread.Java:619)
Jul 14, 2014 1:49:01 PM org.Apache.catalina.startup.HostConfig deployDirectory
INFO: Deploying web application directory /usr/local/shared/Tomcat/thecookpot/webapps/examples
Jul 14, 2014 1:49:01 PM org.Apache.catalina.startup.HostConfig deployDirectory
INFO: Deploying web application directory /usr/local/shared/Tomcat/thecookpot/webapps/Host-manager
Jul 14, 2014 1:49:01 PM org.Apache.catalina.startup.HostConfig deployDirectory
INFO: Deploying web application directory /usr/local/shared/Tomcat/thecookpot/webapps/CookPot
Jul 14, 2014 1:49:02 PM org.Apache.catalina.loader.WebappClassLoader validateJarFile
INFO: validateJarFile(/usr/local/shared/Tomcat/thecookpot/webapps/CookPot/WEB-INF/lib/Tomcat-embed-core-7.0.52.jar) - jar not loaded. See Servlet Spec 2.3, section 9.7.2. Offending class: javax/servlet/Servlet.class
Jul 14, 2014 1:49:02 PM org.Apache.catalina.loader.WebappClassLoader validateJarFile
INFO: validateJarFile(/usr/local/shared/Tomcat/thecookpot/webapps/CookPot/WEB-INF/lib/Tomcat-embed-el-7.0.52.jar) - jar not loaded. See Servlet Spec 2.3, section 9.7.2. Offending class: javax/el/Expression.class
Jul 14, 2014 1:49:06 PM org.Apache.catalina.core.ContainerBase addChildInternal
SEVERE: ContainerBase.addChild: start:
org.Apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/CookPot]]
at org.Apache.catalina.util.LifecycleBase.start(LifecycleBase.Java:154)
at org.Apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.Java:895)
at org.Apache.catalina.core.ContainerBase.access$000(ContainerBase.Java:130)
at org.Apache.catalina.core.ContainerBase$PrivilegedAddChild.run(ContainerBase.Java:153)
at org.Apache.catalina.core.ContainerBase$PrivilegedAddChild.run(ContainerBase.Java:142)
at Java.security.AccessController.doPrivileged(Native Method)
at org.Apache.catalina.core.ContainerBase.addChild(ContainerBase.Java:869)
at org.Apache.catalina.core.StandardHost.addChild(StandardHost.Java:615)
at org.Apache.catalina.startup.HostConfig.deployDirectory(HostConfig.Java:1095)
at org.Apache.catalina.startup.HostConfig$DeployDirectory.run(HostConfig.Java:1617)
at Java.util.concurrent.Executors$RunnableAdapter.call(Executors.Java:441)
at Java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.Java:303)
at Java.util.concurrent.FutureTask.run(FutureTask.Java:138)
at Java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.Java:886)
at Java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.Java:908)
at Java.lang.Thread.run(Thread.Java:619)
Caused by: Java.security.AccessControlException: access denied (Java.util.PropertyPermission Java.awt.headless write)
at Java.security.AccessControlContext.checkPermission(AccessControlContext.Java:323)
at Java.security.AccessController.checkPermission(AccessController.Java:546)
at Java.lang.SecurityManager.checkPermission(SecurityManager.Java:532)
at Java.lang.System.setProperty(System.Java:727)
at org.springframework.boot.SpringApplication.run(SpringApplication.Java:263)
at org.springframework.boot.builder.SpringApplicationBuilder.run(SpringApplicationBuilder.Java:130)
at org.springframework.boot.context.web.SpringBootServletInitializer.createRootApplicationContext(SpringBootServletInitializer.Java:89)
at org.springframework.boot.context.web.SpringBootServletInitializer.onStartup(SpringBootServletInitializer.Java:51)
at org.springframework.web.SpringServletContainerInitializer.onStartup(SpringServletContainerInitializer.Java:175)
at org.Apache.catalina.core.StandardContext.startInternal(StandardContext.Java:5262)
at org.Apache.catalina.util.LifecycleBase.start(LifecycleBase.Java:150)
... 15 more
Jul 14, 2014 1:49:06 PM org.Apache.catalina.startup.HostConfig deployDirectory
SEVERE: Error deploying web application directory /usr/local/shared/Tomcat/thecookpot/webapps/CookPot
Java.lang.IllegalStateException: ContainerBase.addChild: start: org.Apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/CookPot]]
at org.Apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.Java:898)
at org.Apache.catalina.core.ContainerBase.access$000(ContainerBase.Java:130)
at org.Apache.catalina.core.ContainerBase$PrivilegedAddChild.run(ContainerBase.Java:153)
at org.Apache.catalina.core.ContainerBase$PrivilegedAddChild.run(ContainerBase.Java:142)
at Java.security.AccessController.doPrivileged(Native Method)
at org.Apache.catalina.core.ContainerBase.addChild(ContainerBase.Java:869)
at org.Apache.catalina.core.StandardHost.addChild(StandardHost.Java:615)
at org.Apache.catalina.startup.HostConfig.deployDirectory(HostConfig.Java:1095)
at org.Apache.catalina.startup.HostConfig$DeployDirectory.run(HostConfig.Java:1617)
at Java.util.concurrent.Executors$RunnableAdapter.call(Executors.Java:441)
at Java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.Java:303)
at Java.util.concurrent.FutureTask.run(FutureTask.Java:138)
at Java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.Java:886)
at Java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.Java:908)
at Java.lang.Thread.run(Thread.Java:619)
Jul 14, 2014 1:49:06 PM org.Apache.catalina.startup.HostConfig deployDirectory
INFO: Deploying web application directory /usr/local/shared/Tomcat/thecookpot/webapps/ROOT
Jul 14, 2014 1:49:06 PM org.Apache.catalina.startup.HostConfig deployDirectory
INFO: Deploying web application directory /usr/local/shared/Tomcat/thecookpot/webapps/manager
Jul 14, 2014 1:49:06 PM org.Apache.catalina.startup.HostConfig deployDirectory
INFO: Deploying web application directory /usr/local/shared/Tomcat/thecookpot/webapps/docs
Jul 14, 2014 1:49:06 PM org.Apache.catalina.startup.HostConfig deployDirectory
INFO: Deploying web application directory /usr/local/shared/Tomcat/thecookpot/webapps/Cookpot
Jul 14, 2014 1:49:06 PM org.Apache.catalina.loader.WebappClassLoader validateJarFile
INFO: validateJarFile(/usr/local/shared/Tomcat/thecookpot/webapps/Cookpot/WEB-INF/lib/Tomcat-embed-core-7.0.52.jar) - jar not loaded. See Servlet Spec 2.3, section 9.7.2. Offending class: javax/servlet/Servlet.class
Jul 14, 2014 1:49:06 PM org.Apache.catalina.loader.WebappClassLoader validateJarFile
INFO: validateJarFile(/usr/local/shared/Tomcat/thecookpot/webapps/Cookpot/WEB-INF/lib/Tomcat-embed-el-7.0.52.jar) - jar not loaded. See Servlet Spec 2.3, section 9.7.2. Offending class: javax/el/Expression.class
Jul 14, 2014 1:49:09 PM org.Apache.coyote.AbstractProtocol start
INFO: Starting ProtocolHandler ["http-bio-6350"]
Jul 14, 2014 1:49:09 PM org.Apache.coyote.AbstractProtocol start
INFO: Starting ProtocolHandler ["ajp-bio-4350"]
Jul 14, 2014 1:49:09 PM org.Apache.catalina.startup.Catalina start
INFO: Server startup in 17529 ms
29
philthomas26

Spring Bootリファレンスドキュメントの章 実行可能jarおよびwarファイルのパッケージ化

実行可能かつ外部コンテナにデプロイ可能なwarファイルをビルドするには、埋め込みコンテナの依存関係を「提供済み」としてマークする必要があります。例:

<?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">
    <!-- ... -->
    <packaging>war</packaging>
    <!-- ... -->
    <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>
        <!-- ... -->
    </dependencies>
</project>
35
James

以下のコードは、Tomcatに依存せずにTomcat8展開で正常に機能しました。

@SpringBootApplication
@EnableAutoConfiguration
@ComponentScan
public class ManufacturingRegionApplication extends SpringBootServletInitializer {

public static void main(String[] args) {
    new SpringApplicationBuilder(ManufacturingRegionApplication.class).application().run(args);
}

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

private static Class<ManufacturingRegionApplication> application = ManufacturingRegionApplication.class;

}

以下の依存関係は必要ありません。

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

 @RestController
 @RequestMapping(value = "/manufacturing-region-service")
 public class ManufacturingRegionService {

@Resource
private ManufacturingRegionDao manufacturingRegionDao;

@ResponseBody
@Transactional(readOnly = true)
@RequestMapping(value = "/region-codes/{abbr}", method = GET, produces = "application/json")

http:// localhost:8080/manufacturing-region-api/manufacturing-region-service/region-codes/ABBRVALUE

5
Sandeep M

Spring Bootを選択する場合、WARを生成する必要はありません。 ルートページ から:

Spring Boot makes it easy to create stand-alone [...] 
Applications that can you can "just run".
Embed Tomcat or Jetty directly (no need to deploy WAR files)

編集:だから、目的が「Spring Bootを試す」ことなら、WARファイルを生成しないことをお勧めします。

本当にWARファイルを作成する必要がある場合(SpringBootに対してビルドされたコードを保持し、任意の標準サーブレットコンテナで実行できるファイルを作成する...)、ドキュメントを読む必要があります Converting a Spring Boot JAR Application to WAR

ビルドプロセスにspring-boot-maven-pluginを含めましたか?このステップについては説明しませんでした...

0
mcoolive