【架构师面试-Java编程基本功-20】-Spring Boot配置与事务
Spring Boot 有哪几种读取配置的方式?Spring Boot 可以通过 @PropertySource,@Value,@Environment, ConfigurationPropertie 注解来绑定变量什么是 JavaConfigSpring JavaConfig 是 Spring 社区的产品,Spring 3.0 引入了他,它提供了配置 Spring IOC 容器的纯 Java 方
Spring Boot 有哪几种读取配置的方式?
Spring Boot 可以通过 @PropertySource,@Value,@Environment, ConfigurationPropertie 注解来绑定变量
什么是 JavaConfig
Spring JavaConfig 是 Spring 社区的产品,Spring 3.0 引入了他,它提供了配置 Spring IOC 容器的纯 Java 方法。因此它有助于避免使用XML 配置。
使用 JavaConfig 的优点在于:
面向对象的配置。由于配置被定义为 JavaConfig 中的类,因此用户可以充分利用 Java 中的面向对象功能。一个配置类可以继承另一个,重写它的@Bean 方法等。
减少或消除 XML 配置。基于依赖注入原则的外化配置的好处已被证明。但是,许多开发人员不希望在 XML 和 Java 之间来回切换。JavaConfig 为开发人员提供了一种纯 Java 方法来配置与 XML配置概念相似的 Spring 容器。从技术角度来讲,只使用JavaConfig 配置类来配置容器是可行的,但实际上很多人认为将JavaConfig 与 XML 混合匹配是理想的。
类型安全和重构友好。JavaConfig 提供了一种类型安全的方法来配置 Spring 容器。由于 Java 5.0 对泛型的支持,现在可以按类型而不是按名称检索 bean,不需要任何强制转换或基于字符串的查找。
常用的 Java config:
@Configuration:在类上打上写下此注解,表示这个类是配置类
@ComponentScan:在配置类上添加 @ComponentScan 注解。该注解默认会
扫描该类所在的包下所有的配置类,相当于之前的<context:component-scan >。
@Bean:bean 的注入:相当于以前的< bean id="objectMapper" class="org.codehaus.jackson.map.ObjectMapper" />
@EnableWebMvc:相当于 xml 的<mvc:annotation-driven >
@ImportResource: 相当于 xml 的 < import resource="applicationContext-cache.xml">
SpringBoot 的自动配置原理是什么
主要是 Spring Boot 的启动类上的核心注解 SpringBootApplication 注解主配置类,有了这个主配置类启动时就会为 SpringBoot 开启一个@EnableAutoConfiguration 注解自动配置功能。
有了这个 EnableAutoConfiguration 的话就会:
1. 从配置文件 META_INF/Spring.factories 加载可能用到的自动配置类
2. 去重,并将 exclude 和 excludeName 属性携带的类排除
3. 过滤,将满足条件(@Conditional)的自动配置类返回
你如何理解 Spring Boot 配置加载顺序?
在 Spring Boot 里面,可以使用以下几种方式来加载配置。
1.properties 文件;
2.YAML 文件;
3.系统环境变量;
4.命令行参数;
什么是 YAML?
YAML 是一种人类可读的数据序列化语言。它通常用于配置文件。与属性文件相比,如果我们想要在配置文件中添加复杂的属性,YAML 文件就更加结构化,而且更少混淆。可以看出 YAML 具有分层配置数据。
YAML 配置的优势在哪里
YAML 现在可以算是非常流行的一种配置文件格式了,无论是前端还是后端,都可以见到 YAML 配置。那么 YAML 配置和传统的 properties 配置相比到底有哪些优势呢?
配置有序,在一些特殊的场景下,配置有序很关键
简洁明了,他还支持数组,数组中的元素可以是基本数据类型也可以是对象
相比 properties 配置文件,YAML 还有一个缺点,就是不支持@PropertySource 注解导入自定义的 YAML 配置。
Spring Boot 是否可以使用 XML 配置
Spring Boot 推荐使用 Java 配置而非 XML 配置,但是 Spring Boot 中也可以使用XML 配置,通过 @ImportResource 注解可以引入一个 XML 配置。
Spring boot 核心配置文件是什么?bootstrap.properties 和application.properties 有何区别 ?
单纯做 Spring Boot 开发,可能不太容易遇到 bootstrap.properties配置文件,但是在结合 Spring Cloud 时,这个配置就会经常遇到了,特别是在需要加载一些远程配置文件的时侯。
spring boot 核心的两个配置文件:
bootstrap (. yml 或者 . properties):boostrap 由父 ApplicationContext 加载的,比 applicaton 优先加载,配置在应用程序上下文的引导阶段生效。一般来说我们在 Spring Cloud 配置就会使用这个文件。且 boostrap 里面的属性不能被覆盖;
application (. yml 或者 . properties):由 ApplicatonContext 加载,用于 springboot 项目的自动化配置。
什么是 Spring Profiles?
在项目的开发中,有些配置文件在开发、测试或者生产等不同环境中可能是不同的,例如数据库连接、redis 的配置等等。那我们如何在不同环境中自动实现配置的切换呢?Spring 给我们提供了 profiles 机制给我们提供的就是来回切换配置文件的功能
Spring Profiles 允许用户根据配置文件(dev,test,prod 等)来注册 bean。因此,当应用程序在开发中运行时,只有某些 bean 可以加载,而在 PRODUCTION 中,某些其他 bean 可以加载。假设我们的要求是 Swagger 文档仅适用于 QA 环境,并且禁用所有其他文档。这可以使用配置文件来完成。Spring Boot 使得使用配置文件非常简单。
SpringBoot 多数据源拆分的思路
先在 properties 配置文件中配置两个数据源,创建分包 mapper,使用@ConfigurationProperties 读取 properties 中的配置,使用@MapperScan 注册到对应的 mapper 包中
SpringBoot 多数据源事务如何管理
第一种方式是在 service 层的@TransactionManager 中使用transactionManager 指定 DataSourceConfig 中配置的事务
第二种是使用 jta-atomikos 实现分布式事务管理保护
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)