Spring Boot学习笔记-实践建言
2019独角兽企业重金招聘Python工程师标准>>>
本文延续《Spring Boot学习笔记-快速示例》,从开发指南中摘出一些实践经验可供参考。这也是笔者看到的眼前一亮之处,开发的实践经验不是读书可以学来的,除了看别人的开源源码(当然一般公司内部的代码不允许对外公开的),大多时候得靠自己摸索了。Spring Boot开发指南能从实战的角度提出一些建言,值得赞扬。
构建工具
利用Spring Boot开发应用,之前就建议选择一种构建工具。笔者习惯Maven,在此只提及Maven。当我们的pom.xml中继承了spring-boot-starter-parent,就会得到一些默认配置,如下所示。
- 默认编译级别为Java 1.6
- 源码编码为UTF-8
- 一个依赖管理节点,允许你省略普通依赖的 <version> 标签,继承自spring-boot-dependencies POM。
- 合适的资源过滤
- 合适的插件配置(exec插件,surefire,Git commit ID,shade)针对 application.properties 和 application.yml 的资源过滤
**ps:**由于默认配置文件接收Spring风格的占位符(${...}),Maven filtering改用 @..@ 占位符(你可以使用Maven属性 resource.delimiter 来覆盖它) 。
熟悉Maven的使用者,可以覆盖上述的默认配置。
项目包结构
- 项目包结构中,不推荐将类建在default package下,并应该尽量避免它。建议遵循Java包命名规范,使用反转域名作为包路径的根包,例如:cn.chace.www。
- 通常建议将应用的main类放在根包下。如下所示。main类放在根包下,@ComponentScan默认会扫描根包下的所有标有@Component、@Service等Spring组件类。main类放在根包下,可以使用@SpringBootApplication注解。通常使用 @EnableAutoConfiguration 注解你的 main类,并且暗地里为某些项定义了一个基础“search package”。例如,如果你正在编写一个JPA应用,被@EnableAutoConfiguration注解的类所在包将被用来搜索 @Entity 项。
项目的启动类
Spring的常用的配置方式有XML和Java类两种。Spring Boot建议使用Java配置的方式,并用@Configuration类作为主要源,通常定义main方法的类是主要源的一个很好候选。
笔者之前使用的是XML的配置方式,项目里会有多个Spring的xml配置文件,但applicationContext.xml会import其他的配置文件,其实这就相当于主要源。
@Configuration
@EnableAutoConfiguration
@ComponentScan
public class Application {public static void main(String[] args) throws Exception {SpringApplication.run(Application.class, args);}
}
参见上面的代码,综合上述的内容,可以看出通常一个Spring Boot应用,需要一个启动的入口,我们可以称为启动类,它包含main方法,负责SpringApplication.run()方法来运行应用。@Configuration标识启动类作为主要配置源。由于启动类位于根包下,@ComponentScan不需要配置basePackage属性,默认扫描根包下的所有Spring组件类,包括其他的@Configuration类。@EnableAutoConfiguration注解可以根据我们依赖的包,推测并自动配置相关的内容以供使用。这也是上篇文章中快速示例的代码,会如此简洁,几乎0配置便可运行应用的原因!
Spring配置方式
这里其实牵涉到Spring Java配置方式的应用,所以建议大家去熟悉一下该方面的内容。
有人会问,如果我确实需要xml配置文件呢?我们不排除特殊情况下Java配置方式无解的时刻,你当然可以导入xml配置内容。只需要在@Configuration类上使用@ImportResource注解即可。
虽然笔者以往习惯使用xml配置方式,但也不由自主地下定决定尽量转向Java配置方式,以符合Spring Boot使用习惯,使用xml配置作为辅助手段。
刚才上面笔者提到了@EnableAutoConfiguration具有自动配置的“神奇特效”。但有时自动配置的内容并非我们所期望的那样,我们完全可以自定义相同的内容去覆盖自动配置中的那些。
你只需要打开控制台输出的debug日志,即可看到一份自动配置报告,列出了所有的自动配置项。如何输出debug日志,可参考笔者的另一篇文章。
如果发现应用了你不想要的特定自动配置类,你可以使用@EnableAutoConfiguration注解的排除属性来禁用它们。
@Configuration
@EnableAutoConfiguration(exclude={DataSourceAutoConfiguration.class})
public class MyConfiguration {
}
@ComponentScan注解会扫描到Spring组件并自动注册bean,需要使用的时候跟平常一样,使用@Autowired等注解直接标注即可。
一般情况下,很多Spring Boot开发者总是使用@Configuration,@EnableAutoConfiguration和@ComponentScan注解他们的main类的。如果你遵循了上述建言更是如此。因此为了方便,Spring Boot提供了@SpringBootApplication注解,它就相当于@Configuration,@EnableAutoConfiguration和@ComponentScan注解,一个顶三个!那么我们的启动类更简单了。
@SpringBootApplication
public class Application {public static void main(String[] args) throws Exception {SpringApplication.run(Application.class, args);}
}
转载于:https://my.oschina.net/angerbaby/blog/551501
Spring Boot学习笔记-实践建言相关推荐
- Spring Boot学习笔记-进阶(3)
文章目录 Spring Boot学习笔记-进阶(3) 一.Spring Boot与缓存 二.Spring Boot与消息 三.Spring Boot与检索 四.Spring Boot与任务 异步任务 ...
- Spring Boot学习笔记-基础(2)
Spring Boot学习笔记-基础(2) Spring Boot 优点: – 快速创建独立运行的Spring项目以及与主流框架集成 – 使用嵌入式的Servlet容器,应用无需打成WAR包 – st ...
- Spring Boot学习笔记(1)
文章目录 Spring Boot学习笔记(1) Spring Boot 整合 JSP Spring Boot HTML Thymeleaf 常用语法 Spring Boot 数据校验 Spring B ...
- Vue + Spring Boot 学习笔记02:引入数据库实现用户登录功能
Vue + Spring Boot 学习笔记02:引入数据库实现用户登录功能 在学习笔记01里,我们利用跨域打通了前端的Vue与后端的Spring Boot,实现了用户登录功能,但是后台的登录控制器在 ...
- Vue + Spring Boot 学习笔记01:实现用户登录功能
Vue + Spring Boot 学习笔记01:实现用户登录功能 一.创建后端Spring Boot项目Book Management 二.创建前端Vue项目bm-vue 三.修改后端项目Book ...
- 超赞:不愧是阿里内部“Spring boot学习笔记”从头到尾,全是精华
spring boot为何会出现? 随着动态语言的流行(Ruby.Groovy. Scala. Node.js),Java 的开发显得格外的笨重:繁多的配置.低下的开发效率.复杂的部署流程以及第三方技 ...
- Spring Boot学习笔记 [完结]
Spring Boot 文章目录 Spring Boot 1.微服务 1.1 什么是微服务? 1.2 单体应用架构 1.3 微服务架构 2. 第一个SpringBoot程序 2.1.原理 2.2 原理 ...
- Spring Boot学习笔记-Nginx+Jar包部署项目
写在前面 之前用Spring Boot写的获取英雄联盟战绩的小项目,只是上传到了Github上,Github地址:lol-api.一直没时间部署到服务器上.今天,找时间部署好了,网址是:api.51c ...
- Spring Boot 学习笔记--整合Thymeleaf
1.新建Spring Boot项目 添加spring-boot-starter-thymeleaf依赖 1 <dependency> 2 <groupId>org.spring ...
最新文章
- stanford coursera 机器学习编程作业 exercise 3(逻辑回归实现多分类问题)
- 回文字符串啊~---太搞了 少年 DXH
- java基础----String、StringBuffer、StringBuilder
- 双端队列 HDOJ 3530 Subsequence
- Kubernetes pod状态出现ImagePullBackOff的原因
- Sharepoint WebService引用
- 2018.08.22 NOIP模拟 string(模拟)
- Attention Please
- python3怎么查看帮助文档pydoc?
- 你知道 FW 工程师 是做什么的吗?
- netcfg.hlp 官方版
- 乐优商城(四十八)评论微服务(一)
- ffmpeg截取视频指定帧方法
- BI报表工具FineReport的使用1【FineReport使用,看过这篇就够了】
- 【个人学年总结】大一——“蛰伏”的一年
- 软考中项第三章 信息系统集成专业知识
- 用paypal付款手续费一般是多少?
- 微信小程序-云函数获取用户openid
- Windows 更新:服务堆栈更新
- UVa 243 - Theseus and the Minotaur (II)
热门文章
- 注册中心ZooKeeper、Eureka、Consul 、Nacos
- python删除排序数组中的重复项
- Java中的引用与C中的指针
- Android之----Log详解(Log.v,Log.d,Log.i,Log.w,Log.e)
- 关闭服务器 找不到文件,在服务器上找不到文件时阻止代码崩溃的方法?
- JavaScript比较数组的方法
- 2021-05-10 如何修改Docker的默认镜像存储位置
- 2021-01-13 Linux下安装lua开发环境 Ubuntu
- Echarts组件 tooltip提示formatter函数
- 【查看hadoop镜像】