目录
功能:
用法一:@PropertySource + @Value
用法二:@PropertySource 和 @ConfigurationProperties
用法三:@ConfigurationProperties + application.yml
功能:
- 加载指定的属性文件(*.properties)到 Spring 的 Environment 中。可以配合 @Value 和 @ConfigurationProperties 使用。
- @PropertySource 和 @Value组合使用,可以将自定义属性文件中的属性变量值注入到当前类的使用@Value注解的成员变量中。
- @PropertySource 和 @ConfigurationProperties组合使用,可以将属性文件与一个Java类绑 定,将属性文件中的变量值注入到该Java类的成员变量中。
源码
package org.springframework.context.annotation;
import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Repeatable;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import org.springframework.core.io.support.PropertySourceFactory;
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Repeatable(PropertySources.class)
public @interface PropertySource {
String name() default "";
String[] value();
boolean ignoreResourceNotFound() default false;
String encoding() default "";
Class extends PropertySourceFactory> factory() default PropertySourceFactory.class;
}
用法一:@PropertySource + @Value
属性文件:jdbc.properties
jdbc.driverClassName=jdbc.mysql jdbc.url=mysql:jdbc://localhost:3306/ssm_db jdbc.username=root jdbc.password=123
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.PropertySource;
import org.springframework.stereotype.Component;
@Component
@PropertySource(value = {"classpath:jdbc.properties"})
public class JdbcProperty {
private String driverClassName;
private String url;
private String username;
private String password;
public String getDriverClassName() {
return driverClassName;
}
public void setDriverClassName(String driverClassName) {
this.driverClassName = driverClassName;
}
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
@Override
public String toString() {
return "JdbcProperty{" +
"driverClassName='" + driverClassName + ''' +
", url='" + url + ''' +
", username='" + username + ''' +
", password='" + password + ''' +
'}';
}
}
用法二:@PropertySource 和 @ConfigurationProperties
@Component
@PropertySource(value = {"classpath:jdbc.properties"})
@ConfigurationProperties(prefix = "jdbc")
public class JdbcProperty {
private String driverClassName;
private String url;
private String username;
private String password;
public String getDriverClassName() {
return driverClassName;
}
public void setDriverClassName(String driverClassName) {
this.driverClassName = driverClassName;
}
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
@Override
public String toString() {
return "JdbcProperty{" +
"driverClassName='" + driverClassName + ''' +
", url='" + url + ''' +
", username='" + username + ''' +
", password='" + password + ''' +
'}';
}
测试案例:
@RestController
public class UserController {
@Autowired
private UserService userService;
@Autowired
JdbcProperty jdbcProperty;
@PostMapping("/save")
public String save(@RequestParam Map userMap){
System.out.println(jdbcProperty.toString());
// userService.save(userMap);
return "save success";
}
}
测试结果:
JdbcProperty{driverClassName='jdbc.mysql', url='mysql:jdbc://localhost:3306/ssm_db', username='root', password='123'}
用法三:@ConfigurationProperties + application.yml
DbConfig.java
@Configuration
public class DBConfig {
@Bean
@ConfigurationProperties(prefix = "jdbc")
public DataSource dataSource(){
return new DruidDataSource();
}
@Bean
public SqlSessionFactoryBean sqlSessionFactoryBean(DataSource dataSource){
SqlSessionFactoryBean factoryBean = new SqlSessionFactoryBean();
factoryBean.setDataSource(dataSource);
return factoryBean;
}
}
application.yml
server: port: 1111 jdbc: driverClassName: jdbc.mysql url: mysql:jdbc://localhost:3306/ssm_db username: root password: 123
测试案例:



