为了存我的小黄图,最近在做一款图床服务,集成了各种第三方云存储服务,目前正在内部测试阶段。项目是以Jar的形式运行在腾讯云上,不要问我为什么使用腾讯云了,因为阿里云老用户和狗不得入内。
因为内测期间代码逻辑会经常变动,这就免不了重新打包上传,虽然家庭是百兆带宽,奈何云服务器上行带宽有限制啊,总有那么几分钟不开心。
瘦身前,项目差不多得 54MB
的样子,以后可能越来越肥胖!!!那怎么办? 程序员作为一个懒人职业,总会想到一些办法来搞定问题。
首先我们正常打包,解压 Jar
包,把 BOOT-INF
目录下的 lib
目录拷贝出来,这个后面会用到。
然后排除项目第三方依赖包,pom.xml 引入:
<plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> <mainClass>com.itstyle.picture.Application</mainClass> <layout>ZIP</layout> <!--排除项目第三方依赖包--> <includes> <include> <groupId>nothing</groupId> <artifactId>nothing</artifactId> </include> </includes> </configuration> <executions> <execution> <goals> <goal>repackage</goal> </goals> </execution> </executions> </plugin>
打包完成之后, target
目录下生成了一个仅有 7.5MB
的文件,不要问我为什么还这么大,因为静态资源占了大部分,其实业务代码仅有几百KB而已。
你以为这样就完了吗,显然没有。对于解压后十几兆的静态文件我们完全可以排除掉, pom.xml
继续引入:
<!-- 排除静态资源 爪哇笔记:https://blog.52itstyle.vip --> <resources> <resource> <filtering>true</filtering> <directory>src/main/resources</directory> <excludes> <exclude>static/**</exclude> </excludes> </resource> </resources>
这时候 target
目录下生成的是一个仅仅有 356KB
的小东西!!!以后,无论什么云都是秒传了。
虽然项目秒传了,但是要想让它正常访问,我们还需要做一步,把静态文件单独上传,放置到 Nginx
服务下,实现项目的动静分离。
server { listen 80; server_name www.cloudbed.vip; location / { proxy_pass http://127.0.0.1:8080; } #静态文件交给nginx处理 location ~ .*/.(gif|jpg|jpeg|png|bmp|swf|ioc|rar| zip|txt|flv|mid|doc|ppt|pdf|xls|mp3|wma)$ { root /cloudbed/static; expires 30d; } location ~ .*/.(js|css)?$ { root /cloudbed/static; expires 1h; } error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } }
把 lib
目录和瘦身的 Jar
包,上传到项目目录下,运行下面命令:
java -Dloader.path=/cloudbed/lib -jar /cloudbed/cloudbed.jar
从 54MB
到 7.5MB
再到 356KB
是不是爽翻了!!!编译速度也从十几秒下降到两三秒,基本上来说是秒编。以后,如果需要变更业务逻辑,编译、打包、上传秒秒中搞定。对于程序员来说,时间真的很宝贵,几秒中搞定的事情,绝对不能让它过分。