idea发布项目到服务器(springboot,maven)

本文介绍了如何将SpringBoot应用从IDEA打包并发布到服务器,包括pom.xml配置、IDEA的Maven操作、上传到服务器的两种方法(sh脚本和自动部署)、服务器连接与应用启动,以及解决部署过程中的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

0.前提

springboot在本地能够服务正常启动,接口调用都能实现。

1.idea操作

首先在pom.xml中增加配置信息

<groupId>com.bonc</groupId>
<artifactId>energy</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>

<build>
        <!--finalName指定最终生成Jar包的名称,如果不指定,则为前面配置    
         artifactId+version(energy.0.0.1-SNAPSHOT.jar)作为jar包的名称-->
        <finalName>energymanagement</finalName>
        <!--配置资源-->
        <resources>
            <resource>
                <directory>src/main/resources</directory>
                <filtering>false</filtering>
                <excludes>
                    <exclude>application*.properties</exclude>
                    <exclude>conf/dev/*</exclude>
                </excludes>
            </resource>
            <resource>
                <directory>src/main/resources/conf/${profileActive}</directory>
            </resource>
        </resources>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                 <!--在添加了该插件之后,当运行“mvn package”进行打包时,会打包成一个可以直接运                                
                   行的 JAR 文件,使用“java -jar”命令就可以直接运行。这在很大程度上简化了应用     
                   的部署,只需要安装了 JRE 就可以运行。-->
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <fork>true</fork>   <!--热部署-->
                </configuration>
            </plugin>
        </plugins>
    </build>

上述的热部署true也可没有
接着在idea右侧,点击maven出现包,选择要打包成jar的包名,选择lifecycle,点击package.
终端会出现build success的字样说明成功。
我在生成jar包时报错,有几个本地的依赖missing,看到missing依赖的路径在lifecycle下面先点击clean,然后install。解决。

2.上传到服务器

此处有两种方法,一种是写sh脚本,另一种是用idea自带的自动部署。
upload.sh文件把当前目录下的jar包复制到服务器上去。

scp target/front-0.0.1-SNAPSHOT.jar root@www.sunagy.cn:/root/sunagyT/maz_demand/maz_demand_front.jar

此文件和pom.xml和target文件夹放在同一目录,修改名字和路径,可能需要端口号,scp -P 222 targetXXXXXX
windows在idea终端直接运行upload.sh
mac在idea终端运行sh upload.sh

第二种自动部署
进入idea,点击Tools/Deployment/Configuration
(connection)添加SFTP的远程服务器信息
mapping下填写本地和远程服务器项目路径
最后用IntelliJ IDEA打开项目,右键点击Deployment,Unpload to 配置名(或者Tools,Deployment,Unpload to), 上传。
此处是项目源码和jar包一起传到服务器
Tools/Deployment/option中可能能设置只传jar包,未测试和研究

3.进入服务器

mac,终端输入ssh -p 端口号 服务器用户名@ip (例如ssh -p 22 userkunyu@119.29.37.63
)回车,此处也可以直接是网址,不一定是ip,接下来是输入密码
windows,借助secure crt工具来连接服务器。

start.sh文件启动程序。

java -jar maz-dict.jar 5 > maz-dict.log &
echo $! > /home/john/iot-center/maz-modules/maz-dict/target/maz-dict.pid

stop.sh文件停止程序。

#!/bin/sh
PID=$(cat /home/john/iot-center/maz-modules/maz-dict/target/maz-dict.pid)
kill -9 $PID

上述两个文件是我手动添加到服务器上的,
在程序jar包的同一个目录下面,运行start.sh正常运行之后不会出现任何提示词,他会自动生成log文件和pid文件,用tail命令查看日志,
结束是用stop.sh

在服务器上常用指令
chmod u+x *.sh 授权
rm -rf test 删除
touch *.sh 创建文件
tail -f xxxx.log查看日志文件

在启动过程中,发现auth的server端口被占用,修改。
又发现admin报这个错
org.springframework.beans.factory.BeanCreationNotAllowedException: Error creating bean with name ‘eurekaAutoServiceRegistration’: Singleton bean creation not allowed while singletons of this factory are in destruction (Do not request a bean from a BeanFactory in a destroy method implementation!)
最后在admin下面添加类,解决

package com.sunagy.maz.security.admin.constant;

import org.springframework.beans.BeansException;
import org.springframework.beans.factory.config.BeanDefinition;
import org.springframework.beans.factory.config.BeanFactoryPostProcessor;
import org.springframework.beans.factory.config.ConfigurableListableBeanFactory;
import org.springframework.stereotype.Component;
import java.util.Arrays;

@Component
public class FeignBeanFactoryPostProcessor implements BeanFactoryPostProcessor {
    private static final String FEIGN_CONTEXT_BEAN_NAME="feignContext";
    private static final String EUREKA_AUTO_SERVICE_REGISTRATION_BEAN_NAME="eurekaAutoServiceRegistration";

    @Override
    public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException {
        if (containsBeanDefinition(beanFactory, FEIGN_CONTEXT_BEAN_NAME, EUREKA_AUTO_SERVICE_REGISTRATION_BEAN_NAME)) {
            BeanDefinition bd = beanFactory.getBeanDefinition(FEIGN_CONTEXT_BEAN_NAME);
            bd.setDependsOn(EUREKA_AUTO_SERVICE_REGISTRATION_BEAN_NAME);
        }
    }

    private boolean containsBeanDefinition(ConfigurableListableBeanFactory beanFactory, String... beans) {
        return Arrays.stream(beans).allMatch(b -> beanFactory.containsBeanDefinition(b));
    }

}

接下来,申请重新映射端口号,配置文件里的server的port号变成另外一个。
最后一步,postman测试。网址加上新映射的端口号加上测试路径。

τελικά,感谢网上技术大神分享!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值