在使用springboot项目开发的时候,像数据库配置信息这些我们更希望他配置在专门的文件,这样发版可以方便运维来进行维护,下面提供以下几种方式供大家学习。
作用:告诉SpringBoot将本类中的所有属性和配置文件中相关的配置进行绑定;
这是本人的另一篇博客,对该注解讲解了一下基本用法。
链接: 相关讲解.
application.properties,用yml文件也是可以的。
这里填写数据库链接信息
datasource.url=123
datasource.username=456
datasource.password=789
datasource.gw-url=127.0.0.1
存放数据库信息的表,这里我们将它注入到容器当中,用的时候直接从容器当中取即可。
@Component
public class DruidDBConfig {
@Value("${datasource.url}")
private String url;
@Value("${datasource.username}")
private String username;
@Value("${datasource.password}")
private String password;
@Value("${datasource.gw-url}")
private String gwUrl;
}
junit测试,成功获取到配置文件注入的值
他的实际原理其实就是跟xml当中的bean一样,依靠set方法对bean进行赋值,并存放到容器。
<bean class="Person">
<property name="lastName" value="字面量/${key}从环境变量、配置文件中获取值/#{SpEL}"></property>
<bean/>
这个指的是驼峰命名。
假如用的@ConfigurationProperties方式:properties当中写的person.last-name,而java当中的属性名称private String lastName;写成这样照样可以注入值,而@Value注解是不可以的。
SpEL(Spring Expression Language),即Spring表达式语言,是比JSP的EL更强大的一种表达式语言。为什么要总结SpEL,因为它可以在运行时查询和操作数据,尤其是数组列表型数据,因此可以缩减代码量,优化代码结构。
@Value("#{表达式}")
public String arg;
@Value("#{11*2}")
private Integer age;
JSR-303 是 JAVA EE 6 中的一项子规范,叫做 Bean Validation,官方参考实现是Hibernate Validator。
此实现与 Hibernate ORM 没有任何关系。 JSR 303 用于对 Java Bean 中的字段的值进行验证。
在类上添加@Validated这个注解然后就开启了校验注解。然后我们就可以使用他的一些特殊注解,比如@Email
@ConfigurationProperties可以对map以及list等集合赋值,而@Value是不可以的。
作用:加载指定的配置文件;
上面所述的两个注解都是注入值,并且值都是在application主配置文件配置,才能注入。
我们可以使用@PropertySource来将一些固定信息配置独立出来一个配置文件。
他是可以和@ConfigurationProperties和@Value一起来使用的。
用法详解:
创建DruidDBConfig.properties
datasource.url=123
datasource.username=456
datasource.password=789
datasource.gw-url=127.0.0.1
package com.atguigu.springboot.bean;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.PropertySource;
import org.springframework.stereotype.Component;
@Component
@PropertySource(value = {"classpath:DruidDBConfig.properties"})
public class DruidDBConfig {
@Value("${datasource.url}")
private String url;
@Value("${datasource.username}")
private String username;
@Value("${datasource.password}")
private String password;
@Value("${datasource.gw-url}")
private String gwUrl;
@Override
public String toString() {
return "DruidDBConfig [url=" + url + ", username=" + username + ", password=" + password + ", gwUrl=" + gwUrl
+ "]";
}
}
junit测试依然可以取到值
有一些小伙伴在使用过程当中老是弄混他和@PropertySource的区别
@ImportResource作用::导入Spring的配置文件,让配置文件里面的内容生效;
还有一个跟这个注解相似,那就是@Import,他可以直接加载类配置文件,使用这个注解加载的类会直接存放到IOC容器当中。
@ImportResource可以用来加载xml配置文件
想让Spring的xml配置文件生效,加载进来;@ImportResource标注在一个配置类上,启动类也是可以的。
@ImportResource(locations = {"classpath:beans.xml"})
导入Spring的配置文件让其生效
编写Spring的配置文件
<?xml version="1.0" encoding="UTF‐8"?>
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema‐instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring‐beans.xsd">
<bean id="helloService" class="com.gzl.springboot.service.HelloService"></bean>
</beans>