Springboot配置绑定三种方式
方式一: @Component 和 @ConfigurationProperties(prefix = " ")组合的方式
使用方法如下演示
1.application.yml文件中添加需要配置的属性,注意缩进
Myyml:
username: cs
password: 123456
url: jdbc:mysql://localhost:3306/test
driver: com.mysql.jdbc.Driver
2.新建一个类,@Component注解表明是组件,可被自动发现,@ConfigurationProperties注解之前是location属性表明配置文件位置,prefix表示读取的配置信息的前缀,但新版本中废除了location属性(网上说是1.5.2之后),故只写前缀,默认读取application.yml中数据。重点!!一定要在这个类中写getter和setter,否则配置中的属性值无法自动注入
@Component
@ConfigurationProperties(prefix = "Myyml")
public class User{
//数据库连接相关
private String url;
private String driver;
private String username;
private String password;
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url;
}
public String getDriver() {
return driver;
}
public void setDriver(String driver) {
this.driver = driver;
}
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;
}
}
3.其他的类中执行自动注入,获取属性来使用
//自动注入
@Autowired
private User user;
//方法体内获取属性值
String url=user.getUrl();
System.out.print(url);
方式二:@ConfigurationProperties 和 @EnableConfigurationProperties的组合方式
使用方法如下演示
一.创建一个属性读取类:JdbcProperties
/**
* 属性读取类
* prefix: 为application.properties文件中的前缀
*/
@ConfigurationProperties(prefix = "jdbc") //读取配置文件,声明一个类是读取配置类
public class JdbcProperties {
private String driverClassName; //配置文件中的属性名称
private String url;
private String username;
private String password;
//get、set方法
}
- 在类上通过@ConfigurationProperties注解声明当前类为属性读取类
- prefix="jdbc"读取属性文件中,前缀为jdbc的值。
- 在类上定义各个属性,名称必须与属性文件中jdbc.后面部分一致,并且必须具有getter和setter方法
- SpringBoot默认会读取文件名为application.properties的资源文件,所以配置文件名必须为application.properties
二.创建另一个类JdbcConfiguration使用这个属性
1.第一种使用方式,@Autowired注入
//通过@EnableConfigurationProperties(JdbcProperties.class)来声明要使用JdbcProperties这个类的对象
@Configuration //声明一个类为Java配置类,相当于一个xml文件
@EnableConfigurationProperties(JdbcProperties.class) //启用属性读取类
public class JdbcConfiguration {
@Autowired
private JdbcProperties jdbcProperties; //注入读取类
@Bean //把方法返回值注入到spring容器
public DataSource dataSource(){
DruidDataSource dataSource = new DruidDataSource();
dataSource.setDriverClassName(this.jdbcProperties.getDriverClassName());
dataSource.setUrl(this.jdbcProperties.getUrl());
dataSource.setUsername(this.jdbcProperties.getUsername());
dataSource.setPassword(this.jdbcProperties.getPassword());
return dataSource;
}
}
2.第二种使用方式,构造函数注入
@Configuration
@EnableConfigurationProperties(JdbcProperties.class)
public class JdbcConfiguration {
private JdbcProperties jdbcProperties;
public JdbcConfiguration(JdbcProperties jdbcProperties){
this.jdbcProperties = jdbcProperties;
}
@Bean
public DataSource dataSource() {
// 略
}
}
3.第三种使用方式,@Bean方法的参数注入
@Configuration
@EnableConfigurationProperties(JdbcProperties.class)
public class JdbcConfiguration {
@Bean
public DataSource dataSource(JdbcProperties jdbcProperties) {
// ...
}
}
在实际开发过程中,以上三种使用配置属性任选一种即可,根据自己的实际需求来选择。
方式三:@Value的方式
使用方法如下演示
1.通过@value来注入对应的值,直接在字段上添加@value 获取application.properties文件中的值,然后可以把这个DemoConfig 注入到其他类中使用例如controller或者service中。
@Configuration
public class DemoConfig {
@Value("${jdbc.driver}")
private String driver;
@Value("${jdbc.url}")
private String url;
@Value("${jdbc.username}")
private String username;
@Value("${jdbc.password}")
private String password;
public DemoConfig() {
System.out.println(password);
}
public String getDriver() {
return driver;
}
public void setDriver(String driver) {
this.driver = driver;
}
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;
}
}
@Controller
public class HomeController {
@Autowired
private DemoConfig demoConfig;
@RequestMapping("/")
public String index() {
}
}
2.或者直接在controller等类中使用
@Controller
public class HomeController {
@Value("${jdbc.url}")
private String url ;
@RequestMapping("/")
public String index() {
}
}
本作品采用 知识共享署名-相同方式共享 4.0 国际许可协议 进行许可。