建站哪家公司比较好而且不贵,只要做好关键词优化,seo网站自动发布外链工具,网络自助服务平台一、配置文件作用
整个项目中所有重要的数据都是在配置文件中配置的#xff0c;比如#xff1a; 数据库的连接信息#xff08;包含用户名和密码的设置#xff09;#xff1b; 项目的启动端口#xff1b; 第三方系统的调用秘钥等信息#xff1b; 用于发现和定位问题的…一、配置文件作用
整个项目中所有重要的数据都是在配置文件中配置的比如 数据库的连接信息包含用户名和密码的设置 项目的启动端口 第三方系统的调用秘钥等信息 用于发现和定位问题的普通日志和异常日志等。
想象一下如果没有配置信息那么 Spring Boot 项目就不能连接和操作数据库甚至是不能保存可以用于排查问题的关键日志所以配置文件的作用是非常重要的 二、配置文件的分类 系统的配置文件比如连接字符串、比如日志的相关设置是系统定义好的 用户自定义的 三、配置文件的格式与规则
1、格式
Spring Boot 配置文件主要分为以下两种格式 .properties .yml 这就好像连锁店里面的统一服装一样有两种不同的款式properties 类型的配置文件就属于老款“服饰”也是创建 Spring Boot 项目时默认的文件格式主要是由于仓库里还有库存而 yml 属于新版款式如果用户了解情况直接指定要新款服饰那么就直接发给他 2、规则 理论上讲 properties 可以和 yml 一起存在于一个项目当中当 properties 和 yml 一起存在一个项目中时如果配置文件中出现了同样的配置比如 properties 和 yml 中都配置了“server.port”那么这个时候会以 properties 中的配置为主也就是 .properties 配置文件的优先级最高但加载完 .properties 文件之后也会加载 .yml 文件的配置信息。 虽然理论上来讲 .properties 可以和 .yml 共存但实际的业务当中我们通常会采取一种统一的配置文件格式这样可以更好的维护降低故障率减少开发者难度。这就好像连锁店的服饰一样不管是老款的服装还是新款的服装一定要统一了才好看 3、为配置文件安装提示插件
如果 properies 文件没有提升信息那么就需要安装spring tools插件了
IDEA 社区版安装 Spring Assistant 插件之后就可以正常创建 Spring Boot 项目了并且 yml 的配置文件就有提示了。但默认情况下是不⽀持 properties 格式的日志提示的这个时候需要安装了 SpringTools 插件才会有相应的提示 四、读取配置文件
1、properties
1.1、properties 配置文件说明
properties 配置文件是最早期的配置文件格式也是创建 Spring Boot 项目默认的配置文件 1.1、properties 基本语法
properties 是以键值的形式配置的key 和 value 之间是以 “” 连接的keyvalue如 application.properties
# 系统的配置文件
server.port9090
spring.datasource.urljdbc:mysql://127.0.0.1:3306/testdb?characterEncodingutf8mb4useSSLtrue
characterEncodingutf8
spring.datasource.usernameroot
spring.datasource.password123# 自定义配置项
cctalk.tokenxxx想要查看 Spring Boot 更多系统配置项访问官网Common Application Properties
PS不加空格可能会被当做 value 的一部分
小技巧配置文件中使用“#”来添加注释信息 1.2、关于 properies 中文乱码的问题处理
1). 配置当前项目中文乱码的问题 Settings
2). 配置新创建项目的中文乱码问题 New Projects Settings 3). 将原来的 application. properies 删除掉重新再创建一个 application. properieso
因为之前的配置文件已经是不支持中文编码的文件格式化设置编码再创建 application.properies 之后所以后设置的编码不会改变原来的旧的 application.properies 文件所以需要先将之前的配置文件删除掉重新创建。
经过上面的 3 步之后才能创建一个不是中文乱码的 application. properies 文件并且以后在创建 application. properies 不会出现中文乱码 1.3、读取配置文件
如果在项目中想要主动的读取配置文件中的内容可以使用 Value 注解来实现。 Value 注解使用 “${}” 的格式读取如下代码所示
Controller
public class UserController {Value(${server.port}) // 读取配置项private String port;ResponseBodyRequestMapping(/sayhi)public String sayhi() {return hello, word —— port: port;}
}访问 http://localhost:8080/sayhi最终执行效果hello, word —— port: 8080
Component 在 Spring Boot 启动时候会注入到框架中注入到框架中时会执行 PostConstruct 初始化方法这个时候就能读取到配置信息了
1.4、properties 缺点分析
读取多个配置文件 properties 配置是以 key-value 的形式配置的
从上述配置key看出properties 配置文件中会有很多的冗余的信息
spring.datasource.usernameroot spring.datasource.password123
想要解决这个问题就可以使用 yml 配置文件的格式化了 2、yml
2.1、yml 配置文件说明 yml 是 YAML 是缩写它的全称 Yet Another Markup Language 翻译成中文就是 “另一种标记语言” yml 是一个写法简单可读性高易于理解用来表达数据序列化的格式。它的语法和其他高级语言类似 支持更多的数据类型可以简单表达清单数组、散列表标量等数据形态。它使用空白符号缩进和大量依赖外观的特色特别适合用来表达或编辑数据结构、各种配置文件等。 yml 最大的优势是可以跨语言不止是 Java 中可以使用 golang、python 都可以使用 yaml 作为配置文件 2.2、yml 基本语法
yml 是树形结构的配置文件它的基础语法是“key: value”注意 key 和 value 之间使用英文冒汗加空格的方式组成的其中的空格不可省略。
基础语法如下
其中第一项的配置为正确的key 也是高亮显示的而第二项没有空格是错误的使用方式第二项的key 也没有高亮显示 2.3、使用 yml 连接数据库
application.yml
# 连接数据库
spring:datasource:url: jdbc:mysql://127.0.0.1:3306/testdb?characterEncodingutf8mb4useSSLtruename: rootpassword: 123yml 和 properties 连接数据库的配置对比 3、yml 使用进阶
3.1 yml 配置不同数据类型及 null
# 字符串
string.value: Hello# 布尔值true或false
boolean.value: true
boolean.value1: false# 整数
int.value: 10
int.value1: 0b1010_0111_0100_1010_1110 # 二进制# 浮点数
float.value: 3.14159
float.value1: 314159e-5 # 科学计数法# Null~代表null
null.value: ~3.2、配置读取
yml 读取配置的方式和 properties 相同使用 Value 注解即可实现代码如下
Component
public class ReadYml {Value(${string.hello})private String hello;PostConstructpublic void postConstruct() {System.out.println(Read YML,Hello: hello);}
}使用代码测试一下读取值为 null 的配置和根本不存在的配置结果是否一致 3.3、value 值加单双引号
字符串默认不用加上单引号或者双引号如果加英文的单双引号可以表示特殊的含义
尝试在 application.yml 中配置如下信息
mystring1: hello\nword
mystring2: hello\nword
mystring3: hello\nword读取程序实现代码如下
Controller
public class UserController {Value(${mystring1}) // 读取配置项private String mystring1;Value(${mystring2})private String mystring2;Value(${mystring3})private String mystring3;ResponseBodyRequestMapping(/sayhi)public String sayhi() {System.out.println(mystring1: mystring1);System.out.println(mystring2: mystring2);System.out.println(mystring3: mystring3);}
}访问 http://localhost:8080/sayhi执行结果 如果在 mystring3 中加入转义符 \ mystring3: hello\\nword
结果mystring3: hello\nword
从上述结果可以看出
字符串默认不用加上单引号或者双引号单引号会转义特殊字符特殊字符最终只是一个普通的字符串数据如果不加或者加了单引号那么默认会将字符串中的特殊字符进行转义比如\n - \ ln转义处理yml 中如果使用了双引号就会按照原语义执行双引号不会转义字符串里面的特殊字符特殊字符会作为本身想表示的意思 3.4、yml 对象配置和读取
——application.yml
# 对象写法 1
student:id: 1name: 张三age: 20# 对象写法 2行内写法与上面的写法作用一致
student2: {id: 2,name: 李四,age: 20}这个时候就不能用 Value 来读取配置中的对象了此时要使用另一个注解 ConfigurationProperties 来读取 常见类 Student具体实现如下
Data 中包含了 gettersettertoString 等
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;Data
ConfigurationProperties(prefix student) // 读取配置文件中的对象 在项目启动时读取
Component // 不能省略
public class Student {private int id;private String name;private int age;
}——调用类的实现如下
Controller
public class UserController {Autowiredprivate Student student; // 属性注入ResponseBodyRequestMapping(/sayhi)public String sayhi() {return student: student;}
}访问执行效果student: Student(id1, name张三, age20)
读李四修改Student 类ConfigurationProperties(prefix “student2”)。 3.5、yml 配置集合
——application.yml
# 集合写法 1
dbtypes:
name:- mysql- sqlserver- db2# 集合写法 2行内写法与上面的写法作用一致
dbtype: {name: [mysql,sqlserver,db2]}——集合的读取和对象一样也是使用 ConfigurationProperties 来读取的创建类 ReadList 具体实现如下
Component
Data
ConfigurationProperties(dbtype) // 读取配置文件中的集合
public class ReadList {private ListString name;
}——打印类的实现如下
Controller
public class UserController {Resourceprivate ReadList readList;ResponseBodyRequestMapping(/sayhi)public String sayhi() {return readList: readList.getName();}
}访问执行效果readList: [mysql, sqlserver, db2] 4、properties VS yml 总结
properties 是以 keyvalue 的形式配置的键值类型的配置文件而 yml 使用的是类似 json 格式的树形配置方式进行配置的yml 层级之间使用换行缩进的方式配置key 和 value 之间使用“: ”英文冒号加空格的方式设置并且空格不可省略。
properties 为早期并且默认的配置文件格式但其配置存在一定的冗余数据使用 yml 可以很好的解决数据冗余的问题。
yml 通用性更好⽀持更多语言如 Java、Go、Python 等如果是云服务器开发可以使用一份配置文件作为 Java 和 Go 的共同配置文件。
yml 虽然可以和 properties 共存但一个项目中建议使用统一的配置类型文件 五、SpringBoot有几种读取配置文件的方法?
Spring Boot 中读取配置文件有以下 5 种方法 使用Value 读取配置文件 使用ConfigurationProperties读取配置文件 使用Environment读取配置文件 使用PropertySource 读取配置文件 使用PropertySource 注解可以用来指定读取某个配置文件比如指定读取application.properties配置文件的配置内容 PropertySource 注解默认只支持 properties 格式配置文件的读取
springBootApplication
PropertySource( classpath:application.properties, encodingutf-8)
public class DemoApplication implements InitializingBean {Value(${profile.name})private string name;public static void main(String[ ] args) {SpringApplication.run(DemoApplication.class, args );}Overridepublic void afterPropertiesSet( ) throws Exception {System.out.println(Name: name ) ;}使用原生方式读取配置文件