半步多 玄玉的博客

idea运行多模块的springbootjsp

2016-07-29
玄玉

  • 2016-11-08 13:40 更新内容如下:

    昨天又遇到这个问题了,结果直到现在(2017-03-06 19:00)才想起来
    同事知道了还跟我说:我刚来公司的时候,你还帮我弄过这个呢
    将近两天的时间呐,都白瞎了,哎我这脑子啊。。

现象

1、idea里面整个工程只有一个MavenModule的情况下,访问SpringBoot应用的JSP页面,没任何问题

2、多个MavenModule情况下,idea启动SpringBootApplication之后,无法访问JSP页面,总是提示404

  而其它资源如 js、css、controller 等都可访问(jsp 是放在 src/main/webapp/ 下的)

  同样的代码,同事的 STS(Run as Spring Boot App) 启动后访问JSP页面,没任何问题

解决

这东西一共搞了我12个小时,才找到解决方案,还是年轻啊。。

参考了这两个链接:jetbrainsstackoverflow

RUN模式

1、pom配置spring-boot-maven-plugin

<build>
   <plugins>
      <plugin>
         <groupId>org.springframework.boot</groupId>
         <artifactId>spring-boot-maven-plugin</artifactId>
         <version>1.3.7.RELEASE</version>
         <configuration>
            <mainClass>com.jadyer.union.youqian.boss.common.BootStrap</mainClass>
         </configuration>
      </plugin>
   </plugins>
</build>

BootStrap.java代码如下

package com.jadyer.union.youqian.boss.common;

import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.context.web.SpringBootServletInitializer;
import org.springframework.context.annotation.Bean;
import org.springframework.web.filter.CharacterEncodingFilter;

import javax.servlet.Filter;

@SpringBootApplication(scanBasePackages="com.jadyer.union")
public class BootStrap extends SpringBootServletInitializer {
    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
        return builder.sources(getClass());
    }

    @Bean
    public Filter characterEncodingFilter(){
        return new CharacterEncodingFilter("UTF-8", true);
    }

    public static void main(String[] args) {
        new SpringApplicationBuilder().sources(BootStrap.class).profiles("local").run(args);
    }
}

2、配置启动方式

idea顶部菜单-->Run-->Edit Configurations--> + -->选择Maven

最好在下面的Before launch: Activate tool window一栏增加 Build 操作,这里就不截图了

  • 注意Module运行时的工作空间依赖问题

    建议勾选Resolve Workspace artifacts,否则启动时该Module只会找本地仓库的依赖,不找workspace里的submodule。光这个问题就搞了我5个小时,后来还是在stackoverflow找到的解决方法

3、启动

有两个位置(实际执行的都一样),见下方截图

(若在Maven Projects视图执行,还可展开main-boss–>Plugins–>spring-boot–>spring-boot:run–>Run)

DEBUG模式

1、pom中配置spring-boot-maven-plugin时增加jvmArguments配置(注意UTF-8参数,否则控制台中文会乱码)

<build>
   <plugins>
      <plugin>
         <groupId>org.springframework.boot</groupId>
         <artifactId>spring-boot-maven-plugin</artifactId>
         <version>1.3.7.RELEASE</version>
         <configuration>
            <mainClass>com.jadyer.union.youqian.boss.common.BootStrap</mainClass>
            <jvmArguments>-Dfile.encoding=UTF-8 -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5005</jvmArguments>
         </configuration>
      </plugin>
   </plugins>
</build>

2、配置启动方式

idea顶部菜单-->Run-->Edit Configurations--> + -->选择Remote使用默认的配置并命名为BossRunRemote

3、启动

BossRun点击Run运行(不用点DebugRun)成功后,再选择BossRunRemote点击Debug运行,即可。


上一篇 Windows安装MySQL

下一篇 MySQL命令小结

Content