yml文件(yml文件配置数据库配置)

http://www.itjxue.com  2023-01-28 16:05  来源:未知  点击次数: 

单体Spring boot引入外部配置文件yml,properties

我们在做微服务项目时候会引入spring cloud框架,对于配置文件我们就会通过spring cloud config来配置,实现线上环境动态修改配置文件属性而不需要重新打jar 包。 但是对于单体的spring boot工程,我们又希望可以在生产环境中方案修改配置文件属性。

通过引入外部配置文件,应用启动时候设置配置文件的自动加载

1: 在单体工程的root目录下添加一个config目录,然后新建我们的properties, 如:jdbc-db.properties, redis.properties

2: 然后在我们的application启动类上添加@propertySources注解引入我们的外部文件

注意:因为PropertySources 默认只解析.properties文件,如果要解析yml文件,需要指定factory只需要实现org.springframework.core下的 PropertySourceFactory 接口就OK了。

简单的properties配置文件只需要按如下方式配置即可

只需要1,2步骤就可以完成外部文件的加载,如果涉及到线上修改配置就只需要手动修改配置文件,重新启动应用即可生效。

启动 jar 包时指定 yml 文件

把 application.yml 文件放在执行 java -jar 命令所在的目录中;

执行 java -jar xxx.jar 命令,此时 application.yml 应放在 xxx.jar 同级目录;

执行 java -jar /abc/xxx.jar 命令,此时 application.yml 应放在 / 目录;

需要注意的是,自动加载 application.yml 的位置并不与 jar 包相关,而是与 java 命令有关。

通过 --spring.config.location 参数可以指定配置文件的位置。

java -jar /abc/xxx.jar --spring.config.location=/abc/application.yml

yml | ${}的用法

yml文件配置如下:

${key:default_value} 这种表达方式是通过key来获取value,如果获取不到就使用后面默认值。

使用场景:

一些直接通过Jar包启动时,可以在启动时手动配置相关参数,如果没有配置,也会自动获取默认值进行启动,如

当然,${}这种形式本来也可以用来获取值,比如在本yml文件中去获取其他位置定义好的值,也可以去获取相关的环境变量。

YML格式文件用什么程序编辑打开?

YML文件格式是YAML (YAML Aint Markup Language)编写的文件格式,YAML是一种直观的能够被电脑识别的的数据数据序列化格式,他并且容易被人类阅读,容易和脚本语言交互的,可以被支持YAML库的不同的编程语言程序导入,比如: C/C++, Ruby, Python, Java, Perl, C#, PHP等。例如YML文件格式的用法:

文件,通常就是Ruby on Rails 用来保存连接数据库时使用的连接信息文件。

yml文件常见的几种读取方式

最常见的两种

接下来要讲的几种case要用到如下的yml文件

application.yml

application1.yml

借助Spring提供的一个类,org.springframework.core.env.Environment, 它继承了PropertyResolver, 所以可以当作属性解析器使用

Spring提供了YamlPropertiesFactoryBean可以读取自定义配置yml文件,不再拘泥于application.yml及其激活的其他配置文件

存在问题: 那就是只有在这个接口的请求中能够取到这个属性的值,如果再写一个接口,不使用YamlPropertiesFactoryBean读取配置文件,即使之前的方法已经读取过这个yml文件一次了,第二个接口取到的仍然还是空值。

解决方式: 配合PropertySourcesPlaceholderConfigurer使用,它实现了BeanFactoryPostProcessor接口,也就是一个bean工厂后置处理器的实现,可以将配置文件的属性值加载到一个Properties文件中。使用方法如下:

除了使用YamlPropertiesFactoryBean将yml解析成Properties外,其实我们还可以使用YamlMapFactoryBean解析yml成为Map

使用snakeYml,需要引入依赖

使用方式:

使用jackson,需要引入依赖

使用jackson读取yml也非常简单,这里用到了常用的ObjectMapper,在创建ObjectMapper对象时指定使用YAML工厂,之后就可以简单的将yml映射到实体:

jackson还可以生成yml文件

yml 文件中使用环境变量

Spring Boot 中可以用 spring.profiles.active 参数来指定系统环境,让系统加载不同的配置文件。

可以在程序启动的时候加上参数来指定需要的配置

当然我们也可以事先设置好系统的环境变量

然后在 yml 文件中用 active: ${SERVER_EVN} 来动态的获取系统已设置好的数据。这样这台 test 服务器中的再启动 Spring Boot 项目的时候就可以不用每次都去设置参数了。

同时 yml 也支持 ${SERVER_EVN:dev} 这样的方式来设置默认值,此时如果环境变量中没有 SERVER_EVN , active就会默认设置为"dev"。

(责任编辑:IT教学网)

更多

推荐鼠标代码文章