文章目录
注意:
- SpringBoot默认会读取 classpath:application.properties 这个配置文件
- 如若加载其他配置文件,需要显示的指明出来
1. @Value
db.properties数据源配置文件
spring.datasource.username=root
spring.password: 123456
spring.url=jdbc:mysql://localhost:3306/springcloud?serverTimezone=UTC
spring.driver-class-name=com.mysql.jdbc.Driver
一个普通的JavaBean - 从配置文件中进行实例一个student对象,交给容器管理
@Component
@ConfigurationProperties(prefix = "student")
public class Student {
String name;
pulic String getName() { return name; }
public void setName(String name) { this.name = name; }
}
1.1 @Value("${属性名}") - 获取已加载的配置文件的属性
@Controller
public class BookController {
@Value("${spring.url}")
public String url;
}
1.2 @Value("#{对象1.属性名}") - 获取JavaBean对象的属性值
- 前提是这个 对象1 是被Spring容器所管理的
@Controller
public class BookController {
@Value("${student.name")
public String name;
}
1.3 @Value(“字面量”) - 直接进行属性赋值
public class Book {
@Value("1f423423443")
String id; // 订单流水号
}
2. @PropertySource – 加载配置文件,并将其进行解析
默认只能解析xml、properties类型的配置文件
2.1 使其具有解析yml文件的能力
源码:
MyPropertySourceFactory - yml解析器
public class MyPropertySourceFactory implements PropertySourceFactory {
@Override
public PropertySource<?> createPropertySource(String name, EncodedResource resource) throws IOException {
if(resource == null) {
return null;
}else {
String fileName = resource.getResource().getFilename();
Resource r = resource.getResource();
PropertySource p = new YamlPropertySourceLoader().load(fileName, r).get(0);
return p;
}
}
}
Student - JavaBean
@Component //Student类交给容器管理
@ConfigurationProperties(prefix="student") //配置文件前缀为student赋值给Student类属性字段上
@PropertySource(value="classpath:student.yml", factory= MyPropertySourceFactory.class)
public class Student {
String name;
Integer years;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getYears() {
return years;
}
public void setYears(Integer years) {
this.years = years;
}
@Override
public String toString() {
return "Student{" +
"name='" + name + '\'' +
", years=" + years +
'}';
}
}
在启动类测试Spring容器是否有赋值给Student对象
@SpringBootApplication
public class App
{
public static void main( String[] args ) throws SQLException {
ConfigurableApplicationContext context = SpringApplication.run(App.class, args);
Student bean = context.getBean(Student.class);
System.out.println(bean);
}
}
3. @ConfigurationProperties - 将已经解析好的配置文件中的属性,赋值到该被Spring管理的类中
4. @Import - 导入配置类
JavaConfig配置文件类
// 配置文件类 - 默认自动加载application.yml、application.properties
@Configuration
@Import({DataSourceConfig.class})
public class JavaConfig {
//读取applicaiton配置文件的键值对,并赋值
@Value("#{student.name}")
String name;
@Bean
public User getUser() {
User user =new User();
user.setId(1);
user.setName(name);
return user;
}
}
DataSourceConfig配置文件,需要导入的JavaConifg配置文件
// 指定读取其他配置文件
@PropertySource(value="classpath:db.properties", ignoreResourceNotFound = true)
public class DataSourceConfig {
@Value("${db.userName}")
String userName;
@Value("${db.password}")
String password;
@Value("${db.driverClass}")
String driverClass;
@Value("${db.url}")
String url;
@Bean
public DruidDataSource getDataSource() {
DruidDataSource dds = new DruidDataSource();
dds.setUsername(userName);
dds.setPassword(password);
dds.setDriverClassName(driverClass);
dds.setUrl(url);
return dds;
}
}