注意如果需要使用表达式只有@Value才可以,@Value("#{10*2}) 结果为:20
两种方式的区别:
文章插图
两种方式的适用场合:
当只需要为某个值提供注入时,推荐使用@Value方式 。
当需要对整个对象的整体进行赋值时,使用@ConfigurationProperties 。
加载外部配置文件
如果我们将所有的配置信息都写在application.yml文件中,则到时候yml文件会变得非常庞大,不太方便我们进行维护 。
我们可以对配置中的内容进行拆分,拆分到多个文件中 。这样就提高了配置的可维护性 。
引入外部配置文件:
- @PropertySource(value=https://www.isolves.com/it/cxkf/yy/JAVA/2019-09-18/{"classpath:student.properties"})
- @ImportResource(locations={"classpath:spring.xml"}
- @Configuration和@Bean方式 。(SpringBoot推荐方式)
第二种方式:@ImportResource方式首先添加一个spring的配置文件,在里面添加需要映射的类 。在启动的SpringBootApplication前面使用该注解
第三种方式:@Configuration和@Bean方式添加一个自定义配置类 。
//第三种方式@Configurationpublic class MyConfig { //将方法的返回值添加到容器中;容器中这个组件默认的id就是方法名 @Bean public MySQLInfo mySQLInfo(){ System.out.println("配置类@Bean给容器中添加组件了..."); return new MySQLInfo(); }}切换多个外部配置文件
真实环境中,有时候需要配置多个配置文件,可以使用spring.profile.active来进行切换 。
比如现在我们有三个配置文件:
- application.yml
- application-dev.yml
- application-prod.yml
或者我们可以通过maven将项目打成jar包通过命令行使用以下命令来指定环境
java –jar springboot02-0.0.1-SHAPSHOT.jar –spring.profiles.active=dev</span class="hljs-attribute">
文档块
在yml文档中,可以适用---来将一个文档拆分为多个文档块 。可以在不同文档块中分别定义不同的环境 。
然后通过spring.profiles=xxx来对文档块进行命名 。最后通过第一个文档块制定spring.profiles.active=xxx来指定到底激活哪个文档块 。
#application.ymlspring: profiles: active: dev #指定激活dev文档---server: port: 8081spring: profiles: dev #给文档命名为dev配置文件加载位置和顺序
springboot启动会扫描一下位置的配置文件作为springboot的默认配置文件 。
- 项目路径下的config文件夹
- 项目路径下
- classpath路径下config文件夹
- classpath路径下
我们也可以通过配置spring.config.location来改变默认配置 。使用命令行方式加载,否则优先级不够 。
java –jar xxxx.jar –spring.config.location=配置文件路径
外部配置加载顺序
pringBoot也可以从以下位置加载配置;优先级从高到低,高优先级的配置覆盖低优先级的配置,所有配置形成互补配置 。
- 命令行参数
- 来自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指定的默认属性
springboot自动配置
SpringBoot启动会加载大量的自动配置类
我们看我们需要的功能有没有SpringBoot默认写好的自动配置类;
我们再来看这个自动配置类中到底配置了哪些组件;(只要我们要用的组件有,我们就不需要再来配置了)
给容器中自动配置类添加组件的时候,会从properties类中获取某些属性 。我们就可以在配置文件中指定这些属性的值;
推荐阅读
- 网络密钥交换与公钥分发的方法
- 能够以假乱真、媲美实时光线追踪的AMD显卡新技术—动态全局光照
- 以日环食为令:OPPO、vivo在行动,小米、荣耀在行动
- 紫甘蓝、蓝莓、黑莓…它们的作用你知道吗?
- 干锅酱、煲仔酱、广式烧汁、鲍汁、各种万能酱汁配方,超实用
- 保证手机流畅稳定运行的使用小技巧、适用于所有手机
- 小米手环 7 爆料:更大的屏幕,支持息屏显示、GPS、智能闹钟等
- PHP实现站内信
- 安全漏洞XSS、CSRF、SQL注入以及DDOS攻击
- 分布式、高并发、多线程,这些概念还傻傻分不清吗?
