springboot发布到Tomcat运行

建议用Springboot自带的,做法很简单,什么都不用改,cmd---cd 项目目录---mvn package=xxx.jar,用的时候就java xxx.jar,清清爽爽。

用第三方的Tomcat,除了网上常说有继承还有packaging改成war

@SpringBootApplication
@ServletComponentScan
@EnableTransactionManagement
public class SpringbootApplication extends SpringBootServletInitializer {
    public static void main(String[] args) {
        SpringApplication.run(SpringbootApplication.class, args);
    }

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

之外,还有些配置要改:

1.去掉Spring-boot自带的logback,否则会报StackOverflowError,因为log4j和logback都实现了slf的某个类,导致死循环。

2.去掉tomcat,因为第三方Tomcat已经有了tomcat相关的lib。报很奇怪的异常,总之这个一定要去掉。

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

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

不想去掉可以把他们写在dependencies里面,然后把scope设置为provided,也行。去掉的本质就是这个。

3.顺序,如果用log4j2的依赖配置一定把它放在spring-boot-web的下面。

4.要用tomcat 8,如果用7的话,报classnotfound:javax.el.elmanager,当把idea安装目录下lib下jasper2.1下的el-api包复制到tomcat的lib下替换掉时,最后还是报java.lang.NoSuchMethodError: javax.el.ExpressionFactory.newInstance(),因为tomcat7的包版本老了,把jasper2.1的包全部复制到tomcat7后他直接无法启动了,所以还是用8好了。

5.在pom.xml文件的build加

<finalName>xxx</finalName>作为项目名

打包的方法一致,把打出的war包放到webapp下即可。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值