Idea 打war包并部署tomcat9运行

  • 干净的项目结构


    image.png

1、修改项目pom

##### 1 修改打包方式
    com.ljw.xd
    wechatpay
    0.0.1-SNAPSHOT
    wechatpay
    
    
    Demo
##### 2 移除内置的tomcat插件
# 方式1
        
        
            org.springframework.boot
            spring-boot-starter-tomcat
            compile
        
        
# 方式2

    org.springframework.boot
    spring-boot-starter-web
    
        
            org.springframework.boot
            spring-boot-starter-tomcat
        
    

##### 3 修改打包的名称(war和jar)
    
        
        wechatpay
        
            
                org.springframework.boot
                spring-boot-maven-plugin
            
        
    
##### 这里pom配置结束

##### 需要再修改项目主类WechatpayApplication
1、继承 SpringBootServletInitializer
2、重写 configure

@SpringBootApplication
// 限定扫描位置,提高效率,可以省去写@Mapper注解。默认的是都扫描,哪个带有@Mapper就加载进来
@MapperScan(value = {"com.ljw.xd.wechatpay.mapper"})
public class WechatpayApplication extends SpringBootServletInitializer {

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

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

2、配置项目File--->ProjectStructure

  • 1 进入ProjectStructure


    image.png
  • 2 选择Artifacts,选中上面的+号


    image.png
  • 3 这里说明不同的war的方式
    • web application Exploded,这个是以文件夹形式(War Exploded)发布项目,选择这个,发布项目时就会自动生成文件夹在指定的output directory,
    • web application Archive,就是war包形式,每次都会重新打包全部的,将项目打成一个war包在指定位置;
image.png

一方法,直接配置成war包的Exploded方式

  • 1、From Modules种直接创建,这种省事


    image.png

    image.png
  • 2、这里就直接使用了


    image.png

    image.png
  • 结果如下,直接放在tomcat的webapps下面即可,稍等片刻即可访问项目,不用重启tomcat


    image.png

二种打包方式,这个出来就是xxx.war包

  • 1、需要使用到上面一种的方式生成的wares:war exploded


    image.png
  • 2、接下来就是。到这点击ok就可以了


    image.png
  • 3、接下来就是


    image.png
  • 4、生成如图


    image.png
  • 5、拖拽到tomcat的webapps下面即可,稍等片刻即可看到war包自动解压出来了,但是这个时候访问是访问不到项目的。这个和直接放置war包解压出来的文件不同。
    • 直接放置war包解压出来的文件,项目稍等5秒左右即可访问,不用重启tomcat。
    • 直接使用war的,需要重启tomcat或者找个任意工程,更新下里面的文件,这个时候tomcat检测到文件改变,则会再次加载下webapps里面的文件,这个时候就可以访问了。

运行在tomcat9下。

  • 可以配置在如图所示,这里的配置只需要tomcat启动一次就行。localhost文件夹下面的东西或者名字修改了,tomcat会自动加载。很是方便
  • 在使用server.xml配置的话,修改了server.xml则需要每次重启才有效果
    image.png

    访问项目则是:http://localhost:8888/bb/
  • 图上:bb.xml中的bb则是对应项目的虚拟路径。里面的Context则是规定了真实项目的位置。tomcat就会去docBase这里启动需要的项目


tomcat介绍如下

  • 在conf-->server.xml。可以看到如下几个标签


    image.png
  • 可以在server里面配置自己的项目,但是在这里的配置,需要重启tomcat才会生效。这里配置了两个服务,对应不同的项目
    • Context:配置运行在当前服务下的单个web应用
    • reloadable="true":默认是false,reloadable检测到classes下面的文件修改了,则会自动加载
    • path:配置访问的虚拟路径。注意这里配置以后,再xx.properties里面的server.servlet.context-path则会失效。如果配置了这样:path="/aa",则访问方式就是ip:port/aa
    • docBase:真实项目所在位置
image.png
  • 以上问题也可以保持默认,使用不用的port来访问同一个项目或者不同项目。
    • 1、直接放在webapps里面
    • 2、使用/conf/Catalina/localhost目录下放置xx.xml
      如下是使用配置多个端口,访问项目的时候就是
http://192.168.31.220:8080/xx/wares/data/test
http://192.168.31.220:8888/xx/wares/data/test
image.png
  • 配置项目使用虚拟主机
    • 需要先修改主机的host
    • mac修改如下 vim /etc/hosts
# 添加
127.0.0.1 www.ljw.com
  • 配置tomcat的server.xml如下:


    image.png
  • 重启tomcat则会运行这两个web项目

配置如下

    
    
    
    
    
      
        
      
      
        
        
      
    
  
    
    
    
    
    
      
        
      
      
        
        
      
    
  

Tomcat部署多个Sring Boot项目时出现org.springframework.jmx.export.UnableToRegisterMBeanException: Unable to register MBean

简单来说,是JMX出现了问题。Spring 默认JMX是开启的,所以解决方法之一就是在application.properties或者application.yml里配置spring.jmx.enabled=false;

还有一种解决方法便是为spring.jmx.default-domain赋值;
这样就能解决重名问题啦;

添加nginx后的访问

使用ip:port访问就是如下
# 使用ip:port访问就是如下
http://192.168.31.220:8080/qqq/wares/data/test
  • 8080是tomcat其中一个service的port
  • qqq是利用conf/Catalina/localhost/qqq.xml配置的路径,这里对应如下,就会去找docBase对应的项目


  • wares/data/test是项目里面的具体路径了,返回信息如下
{
"code": 0,
"msg": "success",
"data": "test 就是 tomcat"
}
使用nginx的访问
# nginx的配置如下

server {
        listen       80;
        server_name  15a7d9a6a585.ngrok.io;
location /m80 {
                proxy_pass http://127.0.0.1:8080/;
                proxy_set_header Host $host;
                proxy_set_header X-Real-IP $remote_addr;
                proxy_set_header REMOTE-HOST $remote_addr;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                client_max_body_size 5000M;
        }
location /m88 {
                proxy_pass http://127.0.0.1:8888/;
                proxy_set_header Host $host;
                proxy_set_header X-Real-IP $remote_addr;
                proxy_set_header REMOTE-HOST $remote_addr;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                client_max_body_size 5000M;
        }       
location / {
            root   /usr/share/nginx/html;
            index  index.html index.htm;
        }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   /usr/share/nginx/html;
        }
    }
  • 这样配置后,访问项目的路径就是
http://15a7d9a6a585.ngrok.io/m80/qqq/wares/data/test
http://15a7d9a6a585.ngrok.io/m88/aaa/wares/data/test
  • qqq和aaa是不同的项目
  • http://15a7d9a6a585.ngrok.io/m80这样访问就会转到nginx哪里,变成了http://localhost:8080。
  • 最终访问路径http://localhost:8080/qqq/wares/data/test

你可能感兴趣的:(Idea 打war包并部署tomcat9运行)