2016-06-20 11 views
1

埋め込みTomcatを含む動作中のSpringアプリケーションがあります。実行可能な戦争として、それは正常に動作します。私はAngularJをフロントエンドに使うつもりで、Springプロジェクトを実行可能なjarファイルにするのはあまり実用的ではありません。ブラウザでデバッグし、jsソースファイルをすばやく編集したいからです。それらがアーカイブに保存されている場合、これは迷惑です。TomcatにデプロイされたSpringブートは開始されません

私はそれを展開可能にしたいので、それはtomcatで解凍されます。それは簡単なようですが、私はそれを働かせることはできません。

コンテキストは常に明らかに2回ロードされます。そのため、私はリポジトリ(@Repository)を使用しています(すでにブロックされています)。もう1つの例外は春からです。「すでにルートアプリケーションコンテキストが存在するためコンテキストを初期化できません。

私はすでに読んだとおり、私は混乱しています。これはSpringが2つのコンテキスト、特にMVCを作成することはかなり正常です。しかし、なぜその例外はなぜですか?

マイSpringAppクラスは、私は私のプロジェクトにこのクラスを追加したことが展開可能にするために、この

@EnableWebMvc 
@ComponentScan 
@EnableAutoConfiguration 
public class LAuthServerApplication extends WebMvcConfigurerAdapter { 

    @Autowired 
    Environment env; 

    public static void main(String[] args) { 
    System.out.println("#################### Startup parameters ##############"); 
    for (String s : args) { 
     System.out.println("Parameter: " + s); 
    } 
    System.out.println("######################################################"); 
    SpringApplication.run(LAuthServerApplication.class, args); 
    } 

    @Override 
    public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) { 
    configurer.enable(); 
    } 

    @Bean 
    public InternalResourceViewResolver viewResolver() { 
    InternalResourceViewResolver viewResolver = new InternalResourceViewResolver(); 
    viewResolver.setPrefix("/WEB-INF/pages/"); 
    viewResolver.setSuffix(".jsp"); 
    return viewResolver; 
    } 

次のようになります。

@Configuration 
public class AppServletInitializer extends SpringBootServletInitializer { 
    @Override 
    protected SpringApplicationBuilder configure(SpringApplicationBuilder application) { 
     return application.sources(Application.class); 
    } 
} 

はPOM:

<?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>ch.comlab.comweb</groupId> 
    <artifactId>LAuth</artifactId> 
    <version>1.0.0</version> 
    <packaging>war</packaging> 
    <properties> 
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 
    <maven.compiler.source>1.8</maven.compiler.source> 
    <maven.compiler.target>1.8</maven.compiler.target> 

    </properties> 
    <parent> 
    <groupId>org.springframework.boot</groupId> 
    <artifactId>spring-boot-starter-parent</artifactId> 
    <version>1.3.5.RELEASE</version> 
    </parent> 

    <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> 
     <scope>provided</scope> 
    </dependency> 
    <dependency> 
     <groupId>javax.servlet</groupId> 
     <artifactId>jstl</artifactId> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework.security</groupId> 
     <artifactId>spring-security-web</artifactId> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework.security</groupId> 
     <artifactId>spring-security-config</artifactId> 
    </dependency> 
    <dependency> 
     <groupId>ch.comlab.comweb</groupId> 
     <artifactId>Infrastructure</artifactId> 
     <version>1.2.6</version> 
    </dependency> 

    </dependencies> 
    <build> 
    <plugins> 
     <plugin> 
     <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-war-plugin</artifactId> 
     <version>2.6</version> 
     <configuration> 
      <webResources> 
      <resource> 
       <directory>src/main/webapp</directory> 
       <filtering>true</filtering> 
      </resource> 
      </webResources> 
     </configuration> 
     </plugin> 
     <plugin> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-maven-plugin</artifactId> 
     <configuration> 
      <resources> 
      <resource> 
       <filtering>true</filtering> 
       <directory>src/main/resources/</directory> 
      </resource> 
      </resources> 
     </configuration> 
     </plugin> 
    </plugins> 
    </build> 
    <repositories> 
    <repository> 
     <id>spring-releases</id> 
     <url>https://repo.spring.io/libs-release</url> 
    </repository> 
    </repositories> 
    <pluginRepositories> 
    <pluginRepository> 
     <id>spring-releases</id> 
     <url>https://repo.spring.io/libs-release</url> 
    </pluginRepository> 
    </pluginRepositories> 
    <name>LAuth</name> 
</project> 
+1

見たことがあります[春ブーツデベロッパーツール](のhttp:// docs.spring.io/spring-boot/docs/current/reference/html/using-boot-devtools.html)? IDEでアプリケーションをデバッグするときにjsファイルのようなファイルをデバッグしたり編集したりすることができます(jarファイルにパッケージ化されていない場合)。デバッグのためにTomcatにデプロイする必要はありません。 – Jesper

+0

@HerrあなたのPOMファイルを表示できますか?私はすでにTomcatに配備される戦争構成のプロジェクトを行った。私はあなたと分かち合うことができます – cralfaro

+0

[Tomcatに展開されたSpring Boot War]の重複の可能性があります(http://stackoverflow.com/questions/27904594/spring-boot-war-deployed-to-tomcat) – Mudassar

答えて

-1

:あなたは

<?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>ch.comlab.comweb</groupId> 
<artifactId>LAuth</artifactId> 
<version>1.0.0</version> 
<packaging>war</packaging> 
<properties> 
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 
<maven.compiler.source>1.8</maven.compiler.source> 
<maven.compiler.target>1.8</maven.compiler.target> 

</properties> 
<parent> 
<groupId>org.springframework.boot</groupId> 
<artifactId>spring-boot-starter-parent</artifactId> 
<version>1.3.5.RELEASE</version> 
</parent> 

<dependencies> 
<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> 
<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-el</artifactId> 
    <scope>provided</scope> 
</dependency> 
<dependency> 
    <groupId>javax.servlet</groupId> 
    <artifactId>jstl</artifactId> 
    <version>1.2</version> 
</dependency> 
<dependency> 
    <groupId>org.springframework.security</groupId> 
    <artifactId>spring-security-web</artifactId> 
</dependency> 
<dependency> 
    <groupId>org.springframework.security</groupId> 
    <artifactId>spring-security-config</artifactId> 
</dependency> 
<dependency> 
    <groupId>ch.comlab.comweb</groupId> 
    <artifactId>Infrastructure</artifactId> 
    <version>1.2.6</version> 
</dependency> 

</dependencies> 
<build> 
<plugins> 
    <plugin> 
    <groupId>org.springframework.boot</groupId> 
    <artifactId>spring-boot-maven-plugin</artifactId> 
    <configuration> 
     <resources> 
     <resource> 
      <filtering>true</filtering> 
      <directory>src/main/resources/</directory> 
     </resource> 
     </resources> 
    </configuration> 
    </plugin> 
</plugins> 
</build> 
<repositories> 
<repository> 
    <id>spring-releases</id> 
    <url>https://repo.spring.io/libs-release</url> 
</repository> 
</repositories> 
<pluginRepositories> 
<pluginRepository> 
    <id>spring-releases</id> 
    <url>https://repo.spring.io/libs-release</url> 
</pluginRepository> 
</pluginRepositories> 
<name>LAuth</name> 

2

私はにその原因と考えていますspring-boot-tomcatから来る組み込みサーバ。

組み込みのtomcatを除外して試すことはできますか? 例:

<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の依存関係を削除。

2

Springブートを使用すると、構成が少し混乱し、冗長になります。

プラグインのリストからmaven-war-pluginを削除する必要があります。 spring-boot-maven-pluginは既にそれらのものを世話している(そして親もまた)。

次に、コードの一部を削除し、LAuthServerApplicationとスターターを1つにマージします。 1つの注釈の代わりに@SpringBootApplicationを使用してください(コードを保存します)。で

@SpringBootApplication 
public class LAuthServerApplication extends SpringBootServletInitializer { 

    @Autowired 
    Environment env; 

    public static void main(String[] args) { 
     System.out.println("#################### Startup parameters ##############"); 
     for (String s : args) { 
      System.out.println("Parameter: " + s); 
     } 
     System.out.println("######################################################"); 
     SpringApplication.run(LAuthServerApplication.class, args); 
    } 

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

} 

application.propertiesすでにあなたのためのSpring MVCを構成し、あなたがそれを妨げる

spring.mvc.view.prefix=/WEB-INF/pages/ 
spring.mvc.view.suffix=.jsp 

春ブーツを追加します。非常に特殊なニーズがない限り、デフォルトを上書きしないでください。

アプリケーションを再構築して再起動します。

注:実際にソースファイルを編集したいので、アンパックファイルをtomcatに直接編集することは非常に悪い考えです。あなたの周りをハッキングする代わりに、JHipsterプロジェクトを見てみてください。このプロジェクトは、JSとSpring Bootの開発を統合しています。私は最終的にそれが以下POMとM.DeniumとDhanabalanから提案されコードの変更と、実行するようになった

+0

ありがとうございました、あなたの提案された変更を試みました。私はまだ "ルートアプリケーションのコンテキストが存在するため、コンテキストを初期化できません"というメッセージを表示しています。 jcatファイルをtomcatで直接編集するのはなぜ悪い考えですか?それは私が見ているように多くの時間を節約します。 –

+0

デプロイ済みのファイルを再編集するため、最終的な成果物を準備するためにワークスペースにコピーバックする必要があります。これは、将来のある時点であなたを噛んでしまいます。クラスパスに 'web.xml'や別の' WebApplicationInitializer'がありますか? –

関連する問題