SpringBoot面试题总结
什么是SpringBoot?
Spring Boot 是Spring开源组织下的子项目,是Spring组件一站式解决方案,主要是简化了使用Spring的难度,避免了繁重的配置,提供了各种各样的启动器,开发者能够快速上手。Spring Boot可以帮助我们以最少的工作量,更加健壮地使用现有的Spring功能。
Spring Boot有哪些优点?
Spring Boot的主要优点有:
- 使用Spring Boot可以创建独立的Spring应用程序;
- 在Spring Boot中直接嵌入了 Tomcat、Jetty、Undertow等Web容器,在使用Spring Boot做Web开发的时候,不需要部署WAR文件;
- 通过提供自己的启动器(Starter)依赖,简化项目构建配置;提供了一系列大型项目通用的非业务性功能,例如:内嵌服务器、安全管理、运行数据监控、运行状况检查和外部化配置等;
- 尽量的自动配置Spring和第三方库,避免大量的MAVEN导入和各种版本冲突;
- 绝对没有代码生成,也不需要XML配置文件;使用JavaConfig有助于避免使用XML;
备注:需要更少的配置因为没有web.xml文件,只需要添加用@Configuration
注释的类,然后添加用@Bean
注释的方法,Spring将自动加载对象并像以前一样对其进行管理。
开发者甚至可以将@Autowired
添加到bean
方法中,以使Spring自动装入需要的依赖关系中。基于环境的配置使用这些属性,您可以将您正在使用的环境传递到应用程序:Dspring.profiles.active = {enviornment}
。在加载住应用成功徐属性文件后,Spring将在(application{environment}.properties)
中加载后续的应用程序属性文件。
什么是JavaConfig?
Spring JavaConfig是Spring社区的产品,它提供了配置Spring IoC容器的纯Java方法。因此它有助于避免使用XML配置。使用JavaConfig的优点在于:
- 面向对象的配置。由于配置被定义为JavaConfig中的类,因此用户可以充分利用Java中的面向对象功能。一个配置类可以继承给另一个,重写它的
@Bean
方法等。 - 减少或消除XML配置。基于依赖注入原则的外化配置的好处已被证明。但是,许多开发者不希望在XML和Java之间来回切换。JavaConfig为开发人员提供了一种纯Java方法来配置与XML配置概念相似的Spring容器。虽然从技术角度来讲,只是用JavaConfig配置类来配置容器是可行的,但实际上很多人认为将JavaConfig与XML混合匹配是理想状态。
- 类型安全和重构友好。JavaConfig提供了一种类型安全的方法来配置Spring容器。由于Java 5.0对泛型的支持,现在可以按类型而不是名称检索bean,不需要任何强制转换或基于字符串的查找。
如何重新加载Spring Boot上的更改,而无需重新启动服务器?
这可以通过使用DEV工具来实现。通过这种依赖关系,您可以节省任何更改,嵌入式tomcat将重新启动。Spring Boot有一个开发工具(DevTools)模块,它有助于提高开发人员的生产力。Java开发人员面临的一个主要挑战是将文件更改自动部署到服务器并自动重启服务器。
开发人员可以重新加载Spring Boot上的更改,而无需重新启动服务器,这将消除每次手动部署更改的需要,Spring Boot在发布它的第一个版本时并没有这个功能,DevTools模块完全满足开发人员的需求,该模块在生产环境中将被禁用。
如何在自定义端口上运行Spring Boot的应用程序?
Spring Boot支持在外部文件中设置端口号,为了在自定义端口上运行Spring Boot应用程序,您可以在application.properties/application.yml文件中指定端口,server.port=8090
。
什么是YAML?
YAML是一种人类可读的数据序列化语言,通常用于配置文件。
与属性文件相比,如果我们想要在配置文件中添加复杂的属性,YAML文件就更加结构化,而且更少混淆。可以看出YAML具有分层配置数据的功能。
YAML的语法和其他高级语言类似,并且可以简单表达清单、散列表、标量等数据形态。它使用空白符号缩进和大量依赖外观的特色,特别适合用来表达或编辑数据结构、各种配置文件、文件大纲等,后缀名为 .yml
,例如application.yml
。
基本语法
- 大小写敏感
- 使用缩进表示层级关系
- 缩进不允许tab,只允许空格
- 缩进的空格数不重要,只要相同层级的元素左对齐即可;
#
表示注释
spring:
datasource:
# 使用阿里的Druid连接池
type: com.alibaba.druid.pool.DruidDataSource
driver-class-name: com.mysql.cj.jdbc.Driver
# 填写你数据库的url、登录名、密码和数据库名
url: jdbc:mysql://127.0.0.1:3306/mydb?useSSL=false&useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai
username: root
password: 123456
druid:
# 连接池的配置信息
# 初始化大小,最小,最大
initial-size: 5
min-idle: 5
maxActive: 20
# 配置获取连接等待超时的时间
maxWait: 60000
# 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
timeBetweenEvictionRunsMillis: 60000
# 配置一个连接在池中最小生存的时间,单位是毫秒
minEvictableIdleTimeMillis: 300000
validationQuery: SELECT 1
testWhileIdle: true
testOnBorrow: false
testOnReturn: false
# 打开PSCache,并且指定每个连接上PSCache的大小
poolPreparedStatements: true
maxPoolPreparedStatementPerConnectionSize: 20
# 配置监控统计拦截的filters,去掉后监控界面sql无法统计,'wall'用于防火墙
filters: stat,wall,slf4j
# 通过connectProperties属性来打开mergeSql功能;慢SQL记录
connectionProperties: druid.stat.mergeSql\=true;druid.stat.slowSqlMillis\=5000
# 配置DruidStatFilter
web-stat-filter:
enabled: true
url-pattern: "/*"
exclusions: "*.js,*.gif,*.jpg,*.bmp,*.png,*.css,*.ico,/druid/*"
# 配置DruidStatViewServlet
stat-view-servlet:
url-pattern: "/druid/*"
# IP白名单(没有配置或者为空,则允许所有访问)
allow:
# IP黑名单 (存在共同时,deny优先于allow)
deny:
# 禁用HTML页面上的“Reset All”功能
reset-enable: false
# 登录名
login-username: admin
# 登录密码
login-password: 123456
什么是FreeMarker模板?
FreeMarker是一个基于Java的模板引擎,最初专注于使用MVC软件架构进行动态网页的生成,使用FreeMarker的主要优点是表示层和业务层的完全分离。程序员可以处理应用程序代码,而设计人员可以处理html页面设计。最后使用FreeMarker可以将这些结合起来,给出最终的输出页面。
持续更新,如果错误,欢迎大家指出,共同学习…