音乐网站开发背景及意义,汕头网页搭建,软件开发与程序设计有什么不同,怎么建一个购物网站SpringBoot配置文件
yaml 中的数据是有序的#xff0c;properties 中的数据是无序的#xff0c;在一些需要路径匹配的配置中#xff0c;顺序就显得尤为重要#xff08;例如在 Spring Cloud Zuul 中的配置#xff09;#xff0c;此时一般采用 yaml。
Properties
①、位…SpringBoot配置文件
yaml 中的数据是有序的properties 中的数据是无序的在一些需要路径匹配的配置中顺序就显得尤为重要例如在 Spring Cloud Zuul 中的配置此时一般采用 yaml。
Properties
①、位置问题 默认 resources 目录下就有一个 application.properties 文件 resources目录下的config目录下
当前项目根目录下 当前项目根目录下的config目录下
四个配置优先级依次降低默认会从这四个位置按顺序去查找相关属性并加载。
也可以采用手动加载其他目录下的配置文件 在 resources 目录下创建一个 javaboy 目录目录中存放一个 application.properties 文件。启动 Spring Boot 项目时这个配置文件是不会被自动加载的 开发工具中配置了启动位置通过 spring.config.location 属性来手动的指定配置文件位置指定完成后系统就会自动去指定目录下查找 application.properties 文件 如果项目已经打包成 jar 在启动命令中加入位置参数即可
java -jar properties-0.0.1-SNAPSHOT.jar --spring.config.locationclasspath:/javaboy/②、文件名问题 项目默认是去加载名为 application 的配置文件若配置文件不叫 application需要明确指定配置文件的文件名。 方式和指定路径一致只不过此时的 key 是 spring.config.name 在 resources 目录下创建一个 app.properties 文件然后在 IDEA 中指定配置文件的文件名 允许自定义文件名的配置文件不放在四个默认位置而是放在自定义目录下此时就需要明确指定 spring.config.location 配置文件位置和文件名称可以同时自定义
③、配置文件中属性注入
public class Book {private Long id;private String name;private String author;//省略 getter/setter
}在 application.properties 文件中定义属性
book.name三国演义
book.author罗贯中
book.id1直接通过 Value 注解将这些属性注入到 Book 对象中
Component //Book 对象本身也要交给 Spring 容器去管理如果 Book 没有交给 Spring 容器那么 Book 中的属性也无法从 Spring 容器中获取到值
public class Book {Value(${book.id})private Long id;Value(${book.name})private String name;Value(${book.author})private String author;//省略getter/setter
}配置完成后在 Controller 或者单元测试中注入 Book 对象启动项目就可以看到属性已经注入到对象中了
实际应用application.properties 文件中主要存放系统配置这种自定义配置不建议放在该文件中可以自定义 properties 文件来存在自定义配置。 在 resources 目录下自定义 book.properties 文件
book.name三国演义
book.author罗贯中
book.id1项目启动并不会自动的加载该配置文件如果是在 XML 配置中可以通过如下方式引用该 properties 文件
context:property-placeholder locationclasspath:book.properties/如果是在 Java 配置中可以通过 PropertySource 来引入配置
Component
PropertySource(classpath:book.properties)
public class Book {Value(${book.id})private Long id;Value(${book.name})private String name;Value(${book.author})private String author;//getter/setter
}④、类型安全的属性注入
引入 ConfigurationProperties(prefix “book”) 注解并且配置了属性的前缀此时会自动将 Spring 容器中对应的数据注入到对象对应的属性中就不用通过 Value 注解挨个注入了减少工作量并且避免出错
Component
PropertySource(classpath:book.properties)
ConfigurationProperties(prefix book)
public class Book {private Long id;private String name;private String author;//省略getter/setter
}yml
相较于propertiesyaml 配置目前不支持 PropertySource 注解
①、位置
项目根目录下的 config 目录中 项目根目录下
classpath 下的 config 目录中 classpath 目录下
四个位置中的 application.yaml 文件的优先级按照上面列出的顺序依次降低
②、自定义名称需要指定这样配置之后在项目启动时就会按照上面所说的四个位置按顺序去查找一个名为 app.yaml 的文件 如果项目已经打成 jar 包了则在项目启动时加入如下参数
java -jar myproject.jar --spring.config.nameapp这四个位置也不是一成不变的也可以自己定义有两种方式一个是使用 spring.config.location 属性另一个则是使用 spring.config.additional-location 这个属性在第一个属性中表示自己重新定义配置文件的位置项目启动时就按照定义的位置去查找配置文件这种定义方式会覆盖掉默认的四个位置也可以使用第二种方式第二种方式则表示在四个位置的基础上再添加几个位置新添加的位置的优先级大于原本的位置。
③、数组注入
my:servers:- dev.example.com- another.example.com绑定一个Bean的数组中
ConfigurationProperties(prefixmy)
Component
public class Config {private ListString servers new ArrayListString();public ListString getServers() {return this.servers;}
}项目启动后配置中的数组会自动存储到 servers 集合中。当然yaml 不仅可以存储这种简单数据也可以在集合中存储对象。例如下面这种
redis:redisConfigs:- host: 192.168.66.128port: 6379- host: 192.168.66.129port: 6380Component
ConfigurationProperties(prefix redis)
public class RedisCluster {private ListSingleRedisConfig redisConfigs;//省略getter/setter
}Tomcat
每个Spring Boot版本和内置容器不同结果也不同这里以Spring Boot 2.7.10版本 内置Tomcat容器举例。 在SpringBoot2.7.10版本中内置Tomcat版本是9.0.73SpringBoot内置Tomcat的默认设置如下
Tomcat的连接等待队列长度默认是100Tomcat的最大连接数默认是8192Tomcat的最小工作线程数默认是10Tomcat的最大线程数默认是200Tomcat的连接超时时间默认是20s 相关配置如下
server:tomcat:# 当所有可能的请求处理线程都在使用中时传入连接请求的最大队列长度accept-count: 100# 服务器在任何给定时间接受和处理的最大连接数。一旦达到限制操作系统仍然可以接受基于“acceptCount”属性的连接。max-connections: 8192threads:# 工作线程的最小数量初始化时创建的线程数min-spare: 10# 工作线程的最大数量 io密集型建议10倍的cpu数cpu密集型建议cpu数1绝大部分应用都是io密集型max: 200# 连接器在接受连接后等待显示请求 URI 行的时间。connection-timeout: 20000# 在关闭连接之前等待另一个 HTTP 请求的时间。如果未设置则使用 connectionTimeout。设置为 -1 时不会超时。keep-alive-timeout: 20000# 在连接关闭之前可以进行流水线处理的最大HTTP请求数量。当设置为0或1时禁用keep-alive和流水线处理。当设置为-1时允许无限数量的流水线处理或keep-alive请求。 max-keep-alive-requests: 100