springboot:框架想学好,属性配置和使用你都明白了吗?
Spring Boot 属性配置和使用
简单的说,Spring Boot 就是允许通过外部配置让你在不同的环境使用同一应用程序的代码,或许说就是可以通过配置文件来注入属性或者修改默认的配置。
Spring Boot 支持多种外部配置方式
这些方式优先级如下:
命令行参数
来自java:comp/env的JNDI属性
Java系统属性(System.getProperties())
操作系统环境变量
RandomValuePropertySource配置的random.*属性值
jar包外部的application-{profile}.properties或application.yml(带spring.profile)配置文件
jar包内部的application-{profile}.properties或application.yml(带spring.profile)配置文件
jar包外部的application.properties或application.yml(不带spring.profile)配置文件
jar包内部的application.properties或application.yml(不带spring.profile)配置文件
@Configuration注解类上的@PropertySource
通过SpringApplication.setDefaultProperties指定的默认属性
命令行参数
通过java -jar app.jar --name="Spring" --server.port=9090方式来传递参数。
参数用--xxx=xxx的形式传递。
可以使用的参数可以是我们自己定义的,也可以是Spring Boot中默认的参数。 -很多人可能会关心如web端口如何配置这样的问题,这些都是Spring Boot中提供的参数,部分可用参数如下:
LOGGING
logging.path=/var/logs logging.file=myapp.log logging.config= # location of config file (default classpath:logback.xml for logback) logging.level.*= # levels for loggers, e.g. "logging.level.org.springframework=DEBUG" (TRACE, DEBUG, INFO, WARN, ERROR, FATAL, OFF) # EMBEDDED SERVER CONFIGURATION (ServerProperties) server.port=8080 server.address= # bind to a specific NIC server.session-timeout= # session timeout in seconds server.context-parameters.*= # Servlet context init parameters, e.g. server.context-parameters.a=alpha server.context-path= # the context path, defaults to '/' server.servlet-path= # the servlet path, defaults to '/'
复制代码
注意:命令行参数在app.jar的后面!
可以通过SpringApplication.setAddCommandLineProperties(false)禁用命令行配置。
操作系统环境变量
配置过JAVA_HOME的应该都了解这一个。
这里需要注意的地方,有些OS可以不支持使用.这种名字,如server.port,这种情况可以使用SERVER_PORT来配置。
应用配置文件(.properties或.yml)
在配置文件中直接写: name=Isea533 server.port=8080
.yml格式的配置文件如: name: Isea533 server: port: 8080
当有前缀的情况下,使用.yml格式的配置文件更简单。关于.yml配置文件用法请看这里
注意:使用.yml时,属性名的值和冒号中间必须有空格,如name: Isea533正确,name:Isea533就是错的。
属性配置文件的位置
spring会从classpath下的/config目录或者classpath的根目录查找application.properties或application.yml。
/config优先于classpath根目录
@PropertySource
这个注解可以指定具体的属性配置文件,优先级比较低。
SpringApplication.setDefaultProperties
例如:
SpringApplication application = new SpringApplication(Application.class);
Map defaultMap = new HashMap();
defaultMap.put("name", "Isea-Blog");
//还可以是Properties对象
application.setDefaultProperties(defaultMap);
application.run(args);
复制代码
应用(使用)属性
@Value(“${xxx}”)
这种方式是最简单的,通过@Value注解可以将属性值注入进来。
@ConfigurationProperties
Spring Boot 可以方便的将属性注入到一个配置对象中。例如:
my.name=Isea533
my.port=8080
my.servers[0]=dev.bar.com
my.servers[1]=foo.bar.com
复制代码
对应对象:
@ConfigurationProperties(prefix="my")
public class Config {
private String name;
private Integer port;
private List servers = new ArrayList();
public String geName(){
return this.name;
}
public Integer gePort(){
return this.port;
}
public List getServers() {
return this.servers;
}
}
复制代码
Spring Boot 会自动将prefix="my"前缀为my的属性注入进来。
Spring Boot 会自动转换类型,当使用List的时候需要注意在配置中对List进行初始化!
Spring Boot 还支持嵌套属性注入,例如: name=isea533 jdbc.username=root jdbc.password=root ...
对应的配置类:
@ConfigurationProperties
public class Config {
private String name;
private Jdbc jdbc;
class Jdbc {
private String username;
private String password;
//getter...
}
public Integer gePort(){
return this.port;
}
public Jdbc getJdbc() {
return this.jdbc;
}
复制代码
}
jdbc开头的属性都会注入到Jdbc对象中。
在@Bean方法上使用@ConfigurationProperties
例如: @ConfigurationProperties(prefix = "foo") @Bean public FooComponent fooComponent() { ... }
Spring Boot 会将foo开头的属性按照名字匹配注入到FooComponent对象中。
这种方式比较少见,我们在整合mybatis那章结合Druid的配置来具体演示。
属性占位符
例如: app.name=MyApp app.description=${app.name} is a Spring Boot application
可以在配置文件中引用前面配置过的属性(优先级前面配置过的这里都能用)。
通过如${app.name:默认名称}方法还可以设置默认值,当找不到引用的属性时,会使用默认的属性。
由于${}方式会被Maven处理。如果你pom继承的spring-boot-starter-parent,
Spring Boot 已经将maven-resources-plugins默认的${}方式改为了@ @方式,例如@name@。
如果你是引入的Spring Boot,你可以修改使用其他的分隔符
通过属性占位符还能缩短“命令行”参数
例如修改web默认端口需要使用--server.port=9090方式,如果在配置中写上: server.port=${port:8080}
那么就可以使用更短的--port=9090,当不提供该参数的时候使用默认值8080。
属性名匹配规则
例如有如下配置对象:
@Component
@ConfigurationProperties(prefix="person")
public class ConnectionSettings {
private String firstName;
}
复制代码
firstName可以使用的属性名如下:
person.firstName,标准的驼峰式命名
person.first-name,虚线(-)分割方式,推荐在.properties和.yml配置文件中使用
PERSON_FIRST_NAME,大写下划线形式,建议在系统环境变量中使用
需要java学习路线图的私信笔者“java”领取哦!另外喜欢这篇文章的可以给笔者点个赞,关注一下,每天都会分享Java相关文章!还有不定时的福利赠送,包括整理的学习资料,面试题,源码等~~
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
如何在 Flink 1.9 中使用 Hive?
Apache Flink 从 1.9.0 版本开始增加了与 Hive 集成的功能,用户可以通过 Flink 来访问 Hive 的元数据,以及读写 Hive 中的表。本文将主要从项目的设计架构、最新进展、使用说明等方面来介绍这一功能。 Flink on Hive 介绍 SQL 是大数据领域中的重要应用场景,为了完善 Flink 的生态,发掘 Flink 在批处理方面的潜力,我们决定增强 FlinkSQL 的功能,从而让用户能够通过 Flink 完成更多的任务。 Hive 是大数据领域最早出现的 SQL 引擎,发展至今有着丰富的功能和广泛的用户基础。之后出现的 SQL 引擎,如 Spark SQL、Impala 等,都在一定程度上提供了与 Hive 集成的功能,从而方便用户使用现有的数据仓库、进行作业迁移等。因此我们认为提供与 Hive 交互的能力对于 FlinkSQL 也是非常重要的。 设计架构 与 Hive 集成主要包含了元数据和实际表数据的访问,因此我们会从这两方面介绍一下该项目的架构。 元数据 为了访问外部系统的元数据,Flink 提供了 ExternalCatalog 的概念。但...
- 下一篇
阿里云安全肖力:云原生安全定义下一代安全架构
全面上云的拐点已至,企业上云后将带来IT基础设施云化、核心技术互联网化、应用数据化和智能化,企业架构正在因云原生技术红利而发生变革。 近日在2019网络安全生态峰会上,阿里云智能安全事业部总经理肖力提出,承云之势,云原生安全能力将定义企业下一代安全架构,助力企业打造更可控、更透明、更智能新安全体系。 阿里云智能安全事业部总经理肖力 新拐点 新安全 IDC最近发布的《全球云计算IT基础设施市场预测报告》显示:2019年全球云上的IT基础设施占比超过传统数据中心,成市场主导者。企业上云已成功完成从被动到主动的转变。企业上云后不仅可以享受云的便捷性、稳定性和弹性扩展能力,而且云的原生安全能够帮助企业更好解决原来在线下IDC无法解决的困难和挑战。 同时,Gartner相关报告也指出:与传统 IT 相比,公共云的安全能力将帮助企业减少60%的安全事件
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Mario游戏-低调大师作品
- Docker安装Oracle12C,快速搭建Oracle学习环境
- Red5直播服务器,属于Java语言的直播服务器
- CentOS7,CentOS8安装Elasticsearch6.8.6
- CentOS8编译安装MySQL8.0.19
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- CentOS6,CentOS7官方镜像安装Oracle11G
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- SpringBoot2更换Tomcat为Jetty,小型站点的福音