补习系列(1)-springboot项目基础搭建课

扫码关注公众号:Java 技术驿站

发送:vip
将链接复制到本浏览器,永久解锁本站全部文章

【公众号:Java 技术驿站】 【加作者微信交流技术,拉技术群】
目录 * [前言][Link 1] * [一、基础结构][Link 2] * [二、添加代码][Link 3] * [三、应用配置][Link 4] * [四、日志配置][Link 5] * [五、打包部署][Link 6] * [小结][Link 7] ## 前言 ## springboot 最近火的不行,目前几乎已经是 spring 家族最耀眼的项目了。抛开微服务、技术社区这些推广因素不说,框架本身的确有非常多的优点。比如 * 更简化的配置,摒除了许多繁杂的xml配置(事实证明,越简单的东西越容易让人记住); * 内置Servlet容器,不再依赖外部环境 * 大量的starter模块,随手拈来 * 支持热部署 作为一名老程序员来说,仍然需要保持一个积极学习的态度。 哎,简单点说就是少点伤感,认清现实。你曾经引以为傲的某某EE 技术已经被颠覆了,赶紧换车道 ….. 废话不多说,以下内容主要讲的是怎么利用springboot 这个脚手架搭建一个最精简的项目。 其中几个模块会非常实用,这包括结构、配置、日志、部署.. ## 一、基础结构 ## springboot 项目仍然是使用maven 进行初始化及构建,下面是一个典型的结构: | 目录文件|说明| | :-----: | :-----: | | pom.xml | 依赖文件 | | src/main/java | 代码目录 | | src/main/resources | 配置目录,包含application.properties、log4j2.xml | | src/main/build | 定义构建文件目录 | | src/test/java | 测试代码 | | src/test/resources | 测试配置 | 大致看一下就行了,不了解maven的话,[点击这里][Link 8]先学习入门,项目的构建工具是一定要先了解的。 可以通过eclipse 或idea 创建一个maven项目,再引入springboot依赖,pom文件的定义参考如下: ``` 4.0.0 org.zales dmo-boot 0.0.1-SNAPSHOT UTF-8 1.5.1.RELEASE 1.8 org.springframework.boot spring-boot-dependencies ${spring-boot.version} pom import org.springframework.boot spring-boot-starter-web ${spring-boot.version} org.springframework.boot spring-boot-starter-logging org.springframework.boot spring-boot-starter-log4j2 ${spring-boot.version} org.springframework.boot spring-boot-starter-test ${spring-boot.version} org.springframework.boot spring-boot-devtools ${spring-boot.version} true org.springframework.boot spring-boot-starter-thymeleaf ${spring-boot.version} org.apache.maven.plugins maven-compiler-plugin ${java.version} ${java.version} ${project.build.sourceEncoding} ``` springboot 官方的示例是让你继承一个spring-boot-parent,但这个很鸡肋,通常的项目都会有自己的继承结构。 所以我们间接利用spring-boot-dependencies将所有依赖引入,其他模块的引入都是按需。 **maven-compiler-plugin**的定义用于将项目指定为[Java1.8的编译级别][Java1.8]。 **其他途径** 你还可以利用spring的在线网站初始化一个springboot项目,[点击这里][Link 9] ## 二、添加代码 ## 启动代码非常简单,新建一个名为”DemoBoot\*\*的类: ``` /** * 入口类 * */ @SpringBootApplication public class DemoBoot { public static void main(String[] args) throws Exception { SpringApplication app = new SpringApplication(DemoBoot.class); // 指定PID生成,默认输出到application.pid app.addListeners(new ApplicationPidFileWriter()); app.run(args); } } ``` 再创建一个**DemoController**类: ``` @Controller public class DemoController { @RequestMapping("/") @ResponseBody String home() { return "Hello World! "; } } ``` 至此,我们已经完成了框架代码! **热部署** 我们在定义项目依赖时添加了springboot-devtools,该模块可以实现热部署的功能,即在开发过程中可以不重启应用令代码生效,非常方便 livereload 组件会定时扫描类路径下的class,一旦发现变更即重启服务,默认1000毫秒检测一次。 在定义依赖时指定optional 选项使得该模块仅在开发时启用。 livereload 在扫描会自动忽略以下范围的变更: ``` META-INF/maven/** META-INF/resources/** resources/**,static/** public/** templates/** **/*Test.class **/*Tests.class git.properties META-INF/build-info.properties ``` ## 三、应用配置 ## 在src/main/resources/下新建一个application.properties文件,内容如下: **application.properties** ``` server.address=0.0.0.0 server.port=8090 ``` | 参数名称|参数说明| | :-----: | :-----: | | server.address | 监听地址,不配置或0.0.0.0即不限制 | | server.port | 监听端口 | 此时在IDE执行”DemoBoot”,你应该可以看到一些描述程序启动的日志信息,访问本机的8090端口能看到”HelloWorld“输出。 application.properties可包含大量的配置,你可以在[这里][Link 10]找到全部的配置 ## 四、日志配置 ## 接下来需要为应用准备一个日志配置用于定制,springboot 默认是使用logback的,但由于更加熟悉log4j的缘故,我们选用了log4j2.x 在src/main/resources/下新建一个log4j2.xml文件,内容如下: **log4j2.xml** ``` log application ``` 这里配置了两个日志记录方式,Console是控制台打印,RollingRandomAccessFile 指向一个日志文件,我们为该日志文件设定了滚动的规则: 1. 当大小超过50M时会生成新的日志; 2. 每小时生成一个新的日志; 指定了最多存在20个日志文件。 之后,我们为主模块(这里是org.zales,你可以定义自己的包名)和ROOT都分别做了关联和日志级别定义。 关于log4j2的用法,可以[参考这个文章][Link 11] ## 五、打包部署 ## 应用最终需要发布到某个环境,那么我们怎么对springboot应用进行打包呢? 利用[spring-boot-maven-plugin][]可以将springboot项目达成jar包。 随后执行***java -jar xxx.jar***的方式即可以启动应用。 这看起来好像很美好,但真实的项目发布并非这么简单。 * 首先是配置,springboot的maven插件会将所有配置文件都打进jar包内,而某些配置可能与环境相关。 比如应用端口,安全证书、或是日志配置等,这时我们希望在jar包外部存放这些文件; * 其次是执行脚本,在云环境上发布应用,通常需要提供启停脚本,包括一些监控功能脚本,这些需要作为项目打包的一部分 * 最后,将应用程序发布为tgz或zip格式的压缩包会更加灵活,你可以添加更多的东西。 为实现灵活的打包方式,我们需要同时引用spring-boot-maven-plugin和maven-assembly-plugin两个插件,如下: **pom.xml** ``` org.springframework.boot spring-boot-maven-plugin repackage org.apache.maven.plugins maven-assembly-plugin 2.4 bundle package single ${basedir}/src/main/build/assembly.xml ``` plugin可以实现在maven的某个生命周期绑定一组动作,如上面的两个插件都绑定到了package阶段,执行顺序由声明的先后决定。 于是项目在执行***mvn package***这样的命令时,会先执行springboot插件的repackage动作,将程序打包成jar文件;随后通过assembly插件执行bundle任务, 再作最终的组装。 ***/src/main/build/assembly.xml***定义了程序包的结构,如下: ``` bundle tar.gz false ${basedir}/src/main/build/config application*.properties log4j2.xml 0644 / ${basedir}/src/main/build/bin *.sh 0755 / ${project.build.directory} / ${project.artifactId}-${project.version}.jar 0755 ``` assembly文件的定义比较简单,目标程序包中除了jar文件之外,还会包含几个脚本和配置文件。 * 启动脚本 ***/src/main/build/bin/start.sh*** ``` nohup java -jar dmo-boot-0.0.1-SNAPSHOT.jar > console.log & tail -n100 -f console.log ``` * 停止脚本 ***/src/main/build/bin/stop.sh*** ``` kill `cat application.pid` rm application.pid ``` * 配置文件 ***/src/main/build/application.properties*** ***/src/main/build/log4j2.xml*** 最终执行”mvn package”打包,会输出压缩包文件,结构如下: ``` dmo-boot.0.0.1-SNAPSHOT.jar application.properties log4j2.xml start.sh stop.sh ``` ## 小结 ## 本文将一个springboot项目从初始化、开发、配置、打包的整个流程进行了详细介绍,希望读者对该框架能产生整体性的了解。 由于篇幅有限,部分章节仅做了简单说明。springboot是一个优秀的脚手架,借助于框架可以快速的完成各种特性的实现。 在随后的文章里,将会跟大家一起继续深入学习,欢迎随时关注”美码师的补习系列-springboot篇” ![20191102100868\_1.png][20191102100868_1.png] 作者: [zale][] 出处: [http://www.cnblogs.com/littleatp/][zale], 如果喜欢我的文章,请**关注我的公众号** 本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出 原文链接 如有问题, 可留言咨询. [Link 1]: https://yq.aliyun.com/articles/617219/#%E5%89%8D%E8%A8%80 [Link 2]: https://yq.aliyun.com/articles/617219/#%E4%B8%80%E5%9F%BA%E7%A1%80%E7%BB%93%E6%9E%84 [Link 3]: https://yq.aliyun.com/articles/617219/#%E4%BA%8C%E6%B7%BB%E5%8A%A0%E4%BB%A3%E7%A0%81 [Link 4]: https://yq.aliyun.com/articles/617219/#%E4%B8%89%E5%BA%94%E7%94%A8%E9%85%8D%E7%BD%AE [Link 5]: https://yq.aliyun.com/articles/617219/#%E5%9B%9B%E6%97%A5%E5%BF%97%E9%85%8D%E7%BD%AE [Link 6]: https://yq.aliyun.com/articles/617219/#%E4%BA%94%E6%89%93%E5%8C%85%E9%83%A8%E7%BD%B2 [Link 7]: https://yq.aliyun.com/articles/617219/#%E5%B0%8F%E7%BB%93 [Link 8]: https://www.w3cschool.cn/maven/u7oe1ht0.html [Java1.8]: https://yq.aliyun.com/articles/617219/%28https%3A//www.cnblogs.com/littleatp/p/5812767.html%29 [Link 9]: https://start.spring.io/ [Link 10]: https://docs.spring.io/spring-boot/docs/current/reference/html/common-application-properties.html [Link 11]: https://www.cnblogs.com/littleatp/p/9260784.html [spring-boot-maven-plugin]: https://docs.spring.io/spring-boot/docs/current/maven-plugin/repackage-mojo.html [20191102100868_1.png]: https://gitee.com/chenssy/blog-home/raw/master/image/series-images/springboot/20191102100868_1.png [zale]: http://www.cnblogs.com/littleatp/ ------- 来源:[http://ddrv.cn](http://ddrv.cn)
赞(0) 打赏
版权归原创作者所有,任何形式的转载请联系博主:daming_90:Java 技术驿站 » 补习系列(1)-springboot项目基础搭建课

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏