原文来源于:程序员恰恰
如有侵权,联系删除
介绍一下Springboot加载配置文件的几种方法!
首先介绍几个注解:
@Configuration:声明一个类作为配置类,代替xml文件
@Bean:声明在方法上,将方法的返回值加入Bean容器,代替<bean>标签
@value:属性注入
@PropertySource:指定外部属性文件。
接下来以读取数据库的配置文件为例介绍几种读取配置文件的方法。
方法一
1、jdbc.properties配置文件方法
在resources目录下,创建jdbc.properties文件
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/springboot?characterEncoding=utf-8
jdbc.username=root
jdbc.password=1234
2、在java目录下创建config目录,然后再创建JdbcConfig配置类
/*
@Configuration:声明一个类作为配置类,代替xml文件
@Bean:声明在方法上,将方法的返回值加入Bean容器,代替<bean>标签
@value:属性注入
@PropertySource:指定外部属性文件,
**/
@Configuration
@PropertySource("classpath:jdbc.properties")
public class JdbcConfig {
@Value("${jdbc.url}")
private String url;
@Value("${jdbc.driver}")
private String driver;
@Value("${jdbc.username}")
private String username;
@Value("${jdbc.password}")
private String password;
@Bean
public DataSource dataSource(JdbcProperties jdbcProperties){
DruidDataSource druidDataSource = new DruidDataSource();
druidDataSource.setUrl(jdbcProperties.getUrl());
druidDataSource.setPassword(jdbcProperties.getPassword());
druidDataSource.setDriverClassName(jdbcProperties.getDriver());
druidDataSource.setUsername(jdbcProperties.getUsername());
return druidDataSource;
}
}
编写测试类测试:
@RestController
public class MyController {
@Autowired
private DataSource dataSource;
@RequestMapping("/hello")
public String hello(){
System.out.println(dataSource);
return "hello spring boot123456789";
}
}
断点调试:可以看到已经读取到了数据源。
方法二
上面的方法虽然能够读取配置文件,但是不够通用,不可能在每个用到数据源的代码中都写上上面的代码吧,接下来引入第二种方法。
在resources目录下application.properties
jdbc.driverClassName=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/springboot?characterEncoding=utf-8
jdbc.username=root
jdbc.password=1234
编写与之对应的配置类,注意@ConfigurationProperties(prefix = "jdbc"),prefix指定配置文件的前缀“jdbc”,同时需要提供get/set方法,本例子中使用的是lombok的@data注解。
@ConfigurationProperties(prefix = "jdbc")//指定前缀
//提供getset方法
@Data
public class JdbcProperties {
private String url;
private String driver;
private String username;
private String password;
}
编写配置类:JdbcConfig,注解:通过@EnableConfigurationProperties(JdbcProperties.class),指定配置类。
@Configuration
@EnableConfigurationProperties(JdbcProperties.class)
public class JdbcConfig {
@Autowired
private JdbcProperties jdbcProperties;
@Bean
public DataSource dataSource(JdbcProperties jdbcProperties) {
DruidDataSource druidDataSource = new DruidDataSource();
druidDataSource.setUrl(jdbcProperties.getUrl());
druidDataSource.setPassword(jdbcProperties.getPassword());
druidDataSource.setDriverClassName(jdbcProperties.getDriver());
druidDataSource.setUsername(jdbcProperties.getUsername());
return druidDataSource;
}
}
编写测试类测试:可以看到已经OK了。
注意:可以将@autowared自动注入方式换成,参数方式。
方法三、属性直接注入
在resources目录下application.properties
jdbc.driverClassName=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/springboot?characterEncoding=utf-8
jdbc.username=root
jdbc.password=1234
然后加上下面的这个配置类即可,其中@ConfigurationProperties(prefix = "jdbc"的注解可以直接读取配置文件文件的中信息。
@Configuration
public class JdbcConfig3 {
@Bean
@ConfigurationProperties(prefix = "jdbc")
public DataSource dataSource() {
DruidDataSource druidDataSource = new DruidDataSource();
return druidDataSource;
}
}
断点调试:可以看到已经读取到了数据源。
方法四、Yaml文件
在resources目录下创建application.ymlwem文件。
jdbc:
driverClassName: com.mysql.jdbc.Driver
url: jdbc:mysql://localhost:3306/springboot?characterEncoding=utf-8
username: root
password: 1234
arrayPros: 1,2,3,4 #数组
listPros: #list
- listvalue1
- listvalue2
mapPros: #map
mapkey1: mapvalue1
mapkey2: mapvalue2
listMapPros: #list<map>
- listmap1key1: listmap1value1
listmap1key2: listmap1value2
- listmap2key1: listmap2value1
listmap2key22: listmap2value2
spring:
mvc:
servlet:
load-on-startup: 1
jdbc:
driverClassName: com.mysql.jdbc.Driver
url: jdbc:mysql://localhost:3306/springboot?characterEncoding=utf-8
username: root
password: 1234
arrayPros: 1,2,3,4 #数组
listPros: #list
- listvalue1
- listvalue2
mapPros: #map
mapkey1: mapvalue1
mapkey2: mapvalue2
listMapPros: #list<map>
- listmap1key1: listmap1value1
listmap1key2: listmap1value2
- listmap2key1: listmap2value1
listmap2key22: listmap2value2
spring:
mvc:
servlet:
load-on-startup: 1
创建与之对应的配置类。
@Component
@ConfigurationProperties(prefix = "jdbc")
@Data
public class MyProperties {
private String url;
private String driverClassName;
private String username;
private String password;
private String[] arrayPros;
private List<String> listPros;
private Map<String,String> mapPros;
private List<Map<String,String>> listMapPros;
}
编写测试类,已经读取到数据。