SpringBoot-Java配置
尝试java配置
java配置主要靠java类和一些注解,比较常用的注解有:
@Configuration
:声明一个类作为配置类,代替xml文件@Bean
:声明在方法上,将方法的返回值加入Bean容器,代替<bean>
标签@Value
:属性注入@PropertySource
:指定外部属性文件,
我们接下来用java配置来尝试实现连接池配置:
首先引入Druid连接池依赖:
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.6</version>
</dependency>
创建一个jdbc.properties文件,编写jdbc属性:
jdbc.driverClassName=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/saas-export?characterEncoding=utf-8
jdbc.username=root
jdbc.password=root
然后编写代码:
@Configuration
@PropertySource("classpath:jdbc.properties")
public class JdbcConfig {
@Value("${jdbc.url}")
String url;
@Value("${jdbc.driverClassName}")
String driverClassName;
@Value("${jdbc.username}")
String username;
@Value("${jdbc.password}")
String password;
@Bean
public DataSource dataSource() {
DruidDataSource dataSource = new DruidDataSource();
dataSource.setUrl(url);
dataSource.setDriverClassName(driverClassName);
dataSource.setUsername(username);
dataSource.setPassword(password);
return dataSource;
}
}
解读:
@Configuration
:声明我们JdbcConfig
是一个配置类, 类似于于一个 xml 配置文件的存在@PropertySource
:指定属性文件的路径是:classpath:jdbc.properties
- 通过
@Value
为属性注入值 - 通过@Bean将
dataSource()
方法声明为一个注册Bean的方法,Spring会自动调用该方法,将方法的返回值加入Spring容器中。
然后我们就可以在任意位置通过@Autowired
注入DataSource了!
我们在HelloController
中测试:
@RestController
public class HelloController {
@Autowired
private DataSource dataSource;
@GetMapping("hello")
public String hello() {
System.out.println("dataSource: " + dataSource);
return "hello, spring boot!";
}
}
然后打断点,Debug运行并查看:
属性注入成功了!
SpringBoot的属性注入
SpringBoot强调的是约定大于配置,因此遵循约定,我们就能节省很多配置:
- 首先,属性文件的名称有变化,文件名必须是:application.properties
- 其次,要注入的属性的变量名要和配置文件中的属性名的最后一部分保持一致
- 最后,要在类上声明这些属性在属性文件中的共同的前缀,并提供getter和setter方法
修改属性文件名称
属性文件的名称有变化,文件名必须是:application.properties,SpringBoot会自动加载这个文件,无需我们指定加载的文件的名称。
将JdbcConfig中的注解//@PropertySource("classpath:jdbc.properties")可以去掉,测试后还是可以正常打印datasouce的信息
Yaml配置文件
基本用法
配置文件除了可以使用application.properties类型,还可以使用后缀名为:.yml或者.yaml的类型,也就是:application.yml或者application.yaml
正如YAML所表示的YAML Ain't Markup Language,YAML是一种简洁的非标记语言。 YAML以数据为中心,使用空白缩进,分行组织数据,从而使得表示更加简洁易读。
基本格式:
jdbc:
driverClassName: com.mysql.jdbc.Driver
url: jdbc:mysql://localhost:3306/saas-export?characterEncoding=utf-8
username: root
password: root
如果两个配置文件都有,会把两个文件的配置合并,如果有重复属性,以Properties中的为准。