导读: 1.1 概论 1.2 Springboot 配置方面 1.3 Springboot 注解方面 1.4 Springboot 处理异常 1.5 Springboot 处理跨域 1.6 Springboot 其它相关问题
1.1 概论1. 什么是Springboot Spring Boot 是在 Spring 的基础之上产生的(确切的说是在 Spring4.0 的版本的基础之上), 其中“Boot”的意思就是“引导”,意在简化开发模式,是开发者能够快速的开发出基于 Spring 的应用。2. 说说没有用Springboot 开发时项目项目是什么样的?
在项目中存在大量的 xml 文件,配置相当繁琐
整合第三方框架时的配置问题
低效的开发效率与部署效率问题
3. 说说Springboot 解决了什么(就是变相的问你优点)
Spring Boot 使配置简单
Spring Boot 使编码简单
Spring Boot 使部署简单 3.4Spring Boot 使监控简单
1.2 Springboot 配置方面
1. 修改内嵌web服务器的端口号的命令是什么?(因为特基础,最常问)
server: port: 8888
2. SpringBoot 如何进行自定义属性配置
// 在配置文件中定义test: Hello World// 然后在代码中以 @Value 接收@Value("${test}")private String test;
3. 配置的变量之间怎么进行引用 // 在配置变量间使用 ${变量名} 进行引用test: Hello msg: ${test} World// 然后在代码中以 @Value 接收@Value("${msg}")private String msg;
4. 配置的变量如何配置成随机值 // 使用random 进行随机变量的配置// 注意,只生成一次 ,巨坑,会特意问你这个num: ${random.int}
5. 配置随机端口号,也是常问的,因为在spring cloud 中这个端口一般是随机的 server: port: ${random.int[1024,9999]}
6. Spring Boot配置文件你一般使用什么 使用 yml 配置文件,因为是 Spring Boot 中新增的一种配置文件格式。特点:具备天然的树状结构7. 能说说 yml 和 properties 文件的区别吗 配置文件的扩展名有变化
配置文件中的语法有变化
8. 接上一题,一般他会就问你,能说说yml文件的语法吗?
在 properties 文件中是以“.”进行分割,在 yml 中使用“:” 进行分割
yml 的数据格式和 json 的格式很像,是通过“:”赋值
在 yml 中缩进一定不能使用 TAB 键,否则会报错。
每个 K 的冒号后面一定要加一个空格
9. 你知道多环境配置吗?如何进行配置
// profile:代表的就是一个环境变量// 语法结构就是 application-{profile}.properties// application-dev.properties 开发环境 // application-test.properteis 测试环境 // application-prod.properteis 生产环境
10. 可以讲一讲Spring Boot的自动配置原理吗? // 首先在Springboot启动的时候加载主配置类,并且开启了@EnableAutoConfiguration// 然后@EnableAutoConfiguration的作用是利用AutoConfigurationImportSelector给容器中导入一些组件。// 通过protected List getCandidateConfigurations(AnnotationMetadata metadata,AnnotationAttributes attributes)获取候选的配置,这个是扫描所有jar包类路径下"META-INF/spring.factories";// 然后把扫描到的这些文件包装成Properties对象。// 从properties中获取到EnableAutoConfiguration.class类名对应的值,然后把他们添加在容器中。// 整个过程就是将类路径下"META-INF/spring.factories"里面配置的所有EnableAutoConfiguration的值加入到容器中。
1.3 Springboot 常用注解1. 一般就会问如下几个注解,别的基本上和Spring相似 @SpringBootApplication:代表是 SpringBoot 的启动类。
@SpringBootConfiguration:通过 bean 对象来获取配置信息
@Configuration:通过对 bean 对象的操作替代 spring 中 xml 文件
@EnableAutoConfiguration:完成一些初始化环境的配置
@ComponentScan:来完成 spring 的组件扫描
@RestController :表示当前这个 Controller 下的所有的方法都会以 json 格式的数据响应。
1.4 Springboot 处理异常
1. 怎么使用Springboot 处理异常
使用 @ControllerAdvice 和 @ExceptionHandler 注解处理异常
// 代码类似下面@ControllerAdvice public class MyControllerAdvice { @ResponseBody @ExceptionHandler(value=java.lang.Exception.class) public Map myException(Exception ex) { Map map = new HashMap<>(); map.put("code", 500); map.put("msg", "出错了。"); return map; }}
1.5 Springboot 如何解决跨域
跨域可以在前端通过 JSONP 来解决,但是 JSONP 只可以发送 GET 请求,无法发送其他类型的请求,在 RESTful 风格的应用中,就显得非常鸡肋,因此我们推荐在后端通过 (CORS,Cross-origin resource sharing) 来解决跨域问题。这种解决方案并非 Spring Boot 特有的,在传统的 SSM 框架中,就可以通过 CORS 来解决跨域问题,只不过之前我们是在 XML 文件中配置 CORS ,现在可以通过实现WebMvcConfigurer接口然后重写addCorsMappings方法解决跨域问题。
// 代码类似下方@Configurationpublic class CorsConfig implements WebMvcConfigurer { @Override public void addCorsMappings(CorsRegistry registry) { registry.addMapping("/**") .allowedOrigins("*") .allowCredentials(true) .allowedMethods("GET", "POST", "PUT", "DELETE", "OPTIONS") .maxAge(3600); }}
1.x 其它
1. 说说Springboot的启动器都可以放在什么位置
启动器存放的位置。启动器可以和 controller 位于同一个包下,或者位于 controller 的上一级 包中,但是不能放到 controller 的平级以及子包下。
2. Springboot 如何进行热部署 在pom.xml中添加如下插件 org.springframework.boot spring-boot-devtools
3. Springboot 的Starter是什么? Spring Boot 中的starter 只不过是把我们某一模块,比如web 开发时所需要的所有JAR 包打包好给我们而已。不过它的厉害之处在于,能自动把配置文件搞好,不用我们手动配置。4. Springboot 打包是Jar包还是War包 Spring Boot 项目最终打包成的 jar 是可执行 jar ,这种 jar 可以直接通过 java -jar xxx.jar 命令来运行,这种 jar 不可以作为普通的 jar 被其他项目依赖,即使依赖了也无法使用其中的类。5. Springboot 需要容器运行吗 不需要 内置了 Tomcat/ Jetty 等容器。 6. 你用过Spring Boot 的定时任务吗 - 定时任务也是一个常见的需求,Spring Boot 中对于定时任务的支持主要还是来自 Spring 框架。
- 在 Spring Boot 中使用定时任务主要有两种不同的方式,一个就是使用 Spring 中的 @Scheduled 注解,另一个则是使用第三方框架 Quartz。
- 使用 Spring 中的 @Scheduled 的方式主要通过 @Scheduled 注解来实现。
- 使用 Quartz ,则按照 Quartz 的方式,定义 Job 和 Trigger 即可。