Java分布式模拟面试题库-V1.0
1、SpringBoot核心注解?(其中有包含哪些注解分别有什么作用?)
核心启动类上面的注解是@SpringBootApplication,它也是 Spring Boot 的核心注解,主要组合包含了以下 3 个注解:
@SpringBootConfiguration:组合了 @Configuration 注解,实现配置文件的功能。
@EnableAutoConfiguration:打开自动配置的功能,也可以关闭某个自动配置的选项,如关闭数据源自动配置功能: @SpringBootApplication(exclude = { DataSourceAutoConfiguration.class })。
@ComponentScan:Spring组件扫描。
整理其它注解:
@Controller:用于定义控制器类,在spring项目中由控制器负责将用户发来的URL请求转发到对应的服务接口(service层),一般这个注解在类中,通常方法需要配合注解@RequestMapping。
@RestController:用于标注控制层组件(如struts中的action),@ResponseBody和@Controller的合集。
@ResponseBody:获取json数据,加上@Responsebody后,会直接返回json数据。该注解一般会配合@RequestMapping一起使用。注意要添加Jackson或者Gson的依赖。
@RequestMapping:提供路由信息,负责URL到Controller中的具体函数的映射。
@Configuration:相当于传统的xml配置文件,如果有些第三方库需要用到xml文件,建议仍然通过@Configuration类作为项目的配置主类——可以使用@ImportResource注解加载xml配置文件。
@Import:用来导入其他配置类。
@ImportResource:用来加载xml配置文件。
@Autowired:自动导入依赖的bean
@Service:一般用于修饰service层的组件
@Repository:使用@Repository注解可以确保DAO或者repositories提供异常转译,这个注解修饰的DAO或者repositories类会被ComponetScan发现并配置,同时也不需要为它们提供XML配置项。
@Component:普通组件,当组件不好归类的时候,我们可以使用这个注解进行标注。
@Bean:用@Bean标注方法等价于XML中配置的bean。放在方法的上面,而不是类,意思是产生一个bean,并交给spring管理,bean的id就是方法名。
@Value:注入application.properties配置的属性的值。
@Inject:等价于默认的@Autowired,只是没有required属性;
@AutoWired:自动导入依赖的bean。byType方式。把配置好的Bean拿来用,完成属性、方法的组装,它可以对类成员变量、方法及构造函数进行标注,完成自动装配的工作。当加上(required=false)时,就算找不到bean也不报错。
@Qualifier:当有多个同一类型的Bean时,可以用@Qualifier(“name”)来指定。与@Autowired配合使用。@Qualifier限定描述符除了能根据名字进行注入,但能进行更细粒度的控制如何选择候选者
@Resource没有括号内内容的话,默认byName。与@Autowired干类似的事。
等等。。。。
2、SpringBoot核心配置文件有几种格式,优先级是?
配置文件格式和同目录下优先级
SpringBoot使用一个以application命名的配置文件作为默认的全局配置文件。支持properties后缀结尾的配置文件或者以yml/yaml后缀结尾的YAML的文件配置。
properties配置优先级 > yml配置优先级
注意@PropertySource注解不支持加载yaml文件,支持properties文件。
配置文件目录
SpringBoot配置文件可以放置在多种路径下,不同路径下的配置优先级有所不同。
可放置目录(优先级从高到低)
file:./config/ (当前项目路径config目录下);
file:./ (当前项目路径下);
classpath:/config/ (类路径config目录下);
classpath:/ (类路径config下).
优先级由高到底,高优先级的配置会覆盖低优先级的配置;
SpringBoot会从这四个位置全部加载配置文件并互补配置;
3、SpringBoot配置文件application.properties,你都配置过哪些内容?
server.port=xxx
可以指定springboot内嵌容器启动的端口,默认使用tomcat容器时在8080端口
spring.profiles.active=xxxx
可以指明要使用的配置文件,一般应用于多环境配置分离,如生产环境(production),开发环境(development),测试环境(test)等,可以自定义,如开发环境配置文件为application-dev.properties,则spring.profiles.active=dev,在启动时会加载application-dev.properties配置文件。
集成Mybatis(引入maven:mybatis-spring-boot-starter )
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/edocdb
spring.datasource.username=root
spring.datasource.password=xxxx
spring数据源的配置,使用jdbcTemplate进行数据库操作(使用jdbcTempate,会自动提示导入spring-boot-starter-jdbc等依赖)\
适用xml映射文件配置
mybatis.config-location=classpath:mybatis/mybatis-config.xml
mybatis.mapper-locaitons=classpath:mybatis/mappings/*.xml
# mybatis
mybatis.configuration.map-underscore-to-camel-case=true
Redis配置(引入spring-boot-starter-data-redis自动集成)
#spring.redis.url=
#上面url形式等同下面
spring.redis.host=localhost
spring.redis.port=6379
Dubbo配置
# 提供服务名称
dubbo.application.name=xxx-provider
# 注册中心地址
dubbo.registry.address=127.0.0.1:2181
# 注册中心协议
dubbo.registry.protocol=zookeeper
# 通信端口,可以单独指定接口,一般都是20880,如果设置为-1,代表自动查找接口,从20880开始,依次递增
dubbo.protocol.port=-1
# 指定扫描包路径
dubbo.scan.base-packages=com.kgc
文件上传配置
#默认true
#spring.http.mutipart.enabled=true
#上传中转文件位置,
#spring.http.multipart.location=
#最大上传文件大小,默认1MB
spring.http.multipart.max-file-size=5MB
#最大请求大小,默认10MB
spring.http.multipart.max-request-size=20MB
等等,自主增加
4、SpringBoot从配置文件中获取自定义值的常用方式?区别是?
有两种方式,@CofigurationProperties是批量获取的,@Value是单个获取的
二者对比:
@ConfigurationProperties | @Value | |
---|---|---|
功能 | 批量注入配置文件中的属性 | 一个个指定 |
松散绑定(松散语法) | 支持 | 不支持 |
SpEL(#{11*2}) | 不支持 | 支持 |
JSR303数据校验 | 支持 | 不支持 |
复杂类型封装(map) | 支持 | 不支持 |
松散绑定语法:比如有个属性是lastName的驼峰命名,可以支持last-name或者last_name进行绑定
JSR303数据校验,注释掉@value注解,然后放开@ConfigurationProperties,给person实体增加注解@Validated,然后给name属性增加注解@Email,代表校验实体输入值,必