【上线问题总结】springboot打jar包,本地可以运行,java -jar 不能启动


第一次部署项目,报错
Action:
Consider revisiting the entries above or defining a bean of type ‘org.redisson.api.RedissonClien’ in your configuration


一看到这个错,第一反应是缺少jar包了。

但是,添加了redisson的包还是报一样的错。。。没有办法了,只能一通百度,奈何百度上都说是缺少包或者启动类没有扫描到。

我这个菜菜,检查发现启动类和包都是对的,就不知所措了

这时候,架构师来了。他一通操作,打断点看redis配置有没有进去,加载redis的启动类数据有没有,检查pom文件,看我的build配置。最后将apollo本地opt中该服务删除,重新打包,apollo本地缓存中没有生成文件。检查了半天,没找到问题。(虽然他最后没找到原因,我还是决定记录下他解决问题的方式,毕竟,我只会百!度!)

架构师运行我的项目,和我本地运行不一样,他的机子上断电调试,根本没有获取到配置的数据。

最后的最后,一个小哥哥帮我找到了问题。

解压jar包,打开BOOT-INF目录下的classes,里面是这样的

有经验的小伙伴可能一眼就看出了问题所在。。。

没有打包资源文件,正常的classes里面应该是

为什么呢?

原因在

pom文件中打包配置资源文件,resourses的路径我写错了,少加了个s!!!!!
build的时候,自然加载不到配置文件。
我居然会犯这么低级的错误

追本求源,我是怎么犯了这个错误的呢

那天,组长让我重新架构这个项目

我很高兴

因为,可以更熟悉springboot+apollo+dubbo+zk这个架构

然后,我开始了漫长的重构之路。

这个依赖是不是可以不用?api里已经有了,就不用了吧~ 这个我要自己敲一遍,加深理解~~~(心里暗自得意,我太认真了)然后,各种错误层出不穷,我开始了漫长的找不同····

最后,项目运行起来了,我以为一切都该归于平静~

没想到,部署上线还有各种bug,每天我都胆战心惊,会出现什么问题,报什么错。架构上,配置上很多东西没有深入理解它的原理,遇到错误,就很慌,不能只会百度啊,有时候百度解决不了问题的

嗯,小白总是要一步步成长的,不经历风雨,怎么见彩虹。

借此机会,了解下jar包各组成部分

SpringBoot-Maven插件打包的目录结构(jar包)

各层含义:

BOOT-INF : 包含classes文件lib包

  • classes目录存放应用程序的代码和一些配置文件。可以理解为repackage将原始Maven打包的jar文件中的除META-INF以外的内容放置到该目录下打包。
  • lib下存放应用程序依赖的其他的jar包(pom.xml配置的内容)

META-INF :项目maven参数配置

  • pom文件

  • 项目中META-INF目录下的配置文件,其中就有apollo中需要的服务名。

  • MANIFEST.MF。jar包必要的配置文件。
    这里将Main-Class设置成org.springframework.boot.loader.JarLauncher,JarLauncher类会创建一个spring自己的ClassLoader: LaunchedURLClassLoader, 这个classloader 就能通过URL来加载上面BOOT-INF/lib里面所依赖的包,并通过反射里面的start-class里面定义的类,invoke这个类里面的main方法。

org:springboot应用jar加载和启动相关的类

项目中的pom打包配置

<build>
       <!--使用springboot-maven-plugin方式打包。若使用maven package打包,缺少项目依赖的jar包-->
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <mainClass>com.aaa.aaa.aaa.aaaApplication</mainClass>
                </configuration>
                <executions>
                    <execution>
                        <goals>
                            <goal>repackage</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
        
       <!--配置资源文件的位置-->
        <resources>
             <!--本项目将mapper.xml文件和mapper.java放在一起。利用maven打包,就需要加这个配置,把mapper.xml一起放进jar包-->
            <resource>
                <directory>src/main/java</directory>
                <includes>
                    <include>**/*.xml</include>
                </includes>
            </resource>
            <resource>
                <directory>${basedir}/src/main/resources</directory>
                <excludes>
                    <exclude>/**</exclude>
                </excludes>
            </resource>
        </resources>
    </build>

<goal>repackage</goal> 作用

  1. 在原始maven打包形成jar包的基础上,重新进行打包,新形成的jar包不但包含应用类文件和配置文件,而且还会包含应用所依赖的jar包以及Springboot启动相关类(loader等),以此来满足SpringBoot独立应用的特性。
  2. 将原始Maven打包的jar重命名为XXX.jar.orginal作为原始文件

写在最后

jar包里都没有资源文件,apollo缓存就读取不到配置,有时候却能读取配置。
另外,别的的服务(portal)还能调用这个服务呢,有时候install成功,有时候不成功,不该每次都不成功吗?

不明白的点实在太多~慢慢学呗

将vue与springboot分离开发的项目打包上线可以分为以下几个步骤: 1. 打包vue项目:在vue项目根目录下,使用命令行运行`npm run build`,该命令会在项目根目录下生成一个dist目录,里面包含了打包后的静态文件。 2. 拷贝vue打包文件:将打包生成的dist目录中的所有文件拷贝到springboot项目的静态资源目录下,一般是springboot项目的resources/static目录。 3. 在springboot启动vue静态资源:在springboot项目的Controller中新增一个RequestMapping,使其映射到vue的首页。例如,可以在HomeController中添加如下代码: ``` @Controller public class HomeController { @RequestMapping(value = {"/", "/index"}) public String index() { return "index.html"; } } ``` 这样访问项目的根路径或/index路径时,就会自动访问vue的首页。 4. 打包springboot项目:使用springboot内置的打包功能将整个项目打包成一个可执行的jar文件。可以使用如下命令进行打包: ``` mvn clean package ``` 打包完成后,在项目的target目录下会生成一个以.jar结尾的可执行文件。 5. 部署上线:将打包生成的jar文件上传到部署服务器上,并安装Java运行环境。然后使用命令行运行以下命令启动springboot项目: ``` java -jar yourjarfilename.jar ``` 项目就会在服务器上运行起来,可以通过访问服务器IP地址+配置的端口号来访问项目了。 通过以上步骤,就可以将vue与springboot分离开发的项目打包上线。将vue的静态资源打包到springboot项目中,并在springboot启动静态资源。然后使用springboot内置的打包功能将整个项目打包成一个可执行的jar文件,最终将jar文件部署到服务器上运行
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值