赞
踩
这里有一个jdbc.properties配置文件:
jdbc.driverClassName=com.mysql.cj.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/loliDB
jdbc.username=root
jdbc.password=123456
如何配置出一个数据连接池的Bean呢?
<!-- 加载外部资源资源文件 -->
<context:property-placeholder location="classpath:jdbc.properties"/>
<!-- DataSource数据源 -->
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<property name="driverClassName" value="${jdbc.driverClassName}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
</bean>
emmmmm…没什么问题。接着往下看。
xml配置?注解配置?谁才是历史的选择?我们不妨来回顾一下关于Spring配置的历史:
开发者应该对新事物保持追求,敢于抛弃历史遗留物。因此,无论你对xml文件有着多么深厚感情,我还是推荐你尽快玩转注解。
在学习Spring的时候我们就知道,使用原始注解无法彻底删除xml文件。因此又引入了诸多新注解。
具体的思路是:将一个类指定为配置类并加载资源文件,将资源文件的一个个配置参数通过 @Value注解 注入到类中的成员变量上,从而得以在配置类中使用资源文件的配置参数,并最终配置好一个连接池Bean对象。
注解 | 说明 |
---|---|
@Configuration | 标明这是一个Spring配置类 |
@PropertySource | 用于加载资源文件 |
@Bean | 被标注的返回值会直接被放到Spring容器中 |
@Value | 原始注解,用于属性注入 |
代码:
JdbcConfig配置类 ---------------------------------------------------------------------------- @Configuration @PropertySource("classpath:jdbc.properties") public class JdbcConfig { @Value("${jdbc.driverClassName}") String driverClassName; @Value("${jdbc.url}") String url; @Value("${jdbc.username}") String username; @Value("${jdbc.password}") String password; @Bean public DataSource dataSource() { DruidDataSource dataSource = new DruidDataSource(); dataSource.setDriverClassName(driverClassName); dataSource.setUrl(url); dataSource.setUsername(username); dataSource.setPassword(password); return dataSource; } }
上一种使用@Value注入属性的方式有个缺点,那就是只能注入基本数据类型。SpringBoot提供了一种更新的、更强大的配置方式。
具体的思路是:使用 @ConfigurationProperties注解 将一个类指定为属性读取类(也可以叫资源类,该类就成为了application.properties/application.yml资源文件的翻版),再使用 @EnableConfigurationProperties注解 在配置类上引入刚刚的资源类,接着使用set(get())的方式进行Bean对象的配置。
另外注意,资源类默认读取的是application.properties/application.yml,不能再叫jdbc.propeties了。
JdbcProperties资源类 -----------------------------------------------------------------------
@ConfigurationProperties(prefix = "jdbc")
public class JdbcProperties {
private String driverClassName;
private String url;
private String username;
private String password;
// get/set方法省略,但必须要有
// ...
}
JdbcConfig配置类 ---------------------------------------------------------------------------- @Configuration @EnableConfigurationProperties(JdbcProperties.class) public class JdbcConfig { // jdbcProperties对象写在方法的参数里可直接使用(自动注入),在这里手动注入也可以 // @Autowired // private JdbcProperties jdbcProperties; @Bean public DataSource dataSource(JdbcProperties jdbcProperties) { DruidDataSource dataSource = new DruidDataSource(); dataSource.setDriverClassName(jdbcProperties.getDriverClassName()); dataSource.setUrl(jdbcProperties.getUrl()); dataSource.setUsername(jdbcProperties.getUsername()); dataSource.setPassword(jdbcProperties.getPassword()); return dataSource; } }
这种配置方式无比优雅与强大。
如果一组配置参数都是给一个Bean对象使用的,那么我们可以将资源文件写在方法上,SpringBoot会自动调用Bean对象的set方法,完成配置参数的注入。
具体的实现是:使用 @ConfigurationProperties注解 直接将资源文件写在方法上,@Bean返回的对象会自动完成参数注入。
JdbcConfig配置类 ----------------------------------------------------------------------------
@Configuration
public class JdbcConfig {
@Bean
@ConfigurationProperties(prefix = "jdbc")
public DataSource dataSource() {
return new DruidDataSource();
}
}
上面的三种注解配置中,除了第一种(Spring新注解),第二种和第三种(SpringBoot提供)都支持松散绑定。那么,什么是松散绑定?
松散绑定即不严格要求资源文件中的属性名,与真正被注入的属性名完全一致。支持驼峰、中划线、下划线等等转换,甚至支持对象引导。
那么什么又是对象引导?
举个例子很容易明白。@Value注解仅支持简单属性的注入,比如用户的名字(user.name);对象引导则支持更加复杂的层级结构,比如用户的朋友的名字(user.friend.name)。
认识YAML语言
上面的后两种注解注入方式(SpringBoot提供)中使用的application.properties文件,都可以等价替换为application.yml文件。下面,来进一步学习这种YAML语言。
YAML是一种结构清新简单的非标记语言。YAML之所以被称得上清新简单,是因为它使用空白、冒号、缩进、分行等方式组织数据。下面来直观感受一下吧:
jdbc:
driverClassName: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/loliDB
username: root
password: 123456
YAML语法
1.树状的层级结构 2.缩进为2个空格 3.冒号后面必须加一个空格 4.如果是数组/集合等结构的数据,格式如下: loli: name: Alice age: 12 friend: - Mana - Hana 5.如果有多个yml文件,则要用application-xxx.yml命名,然后在application.yml中激活 # 激活其他配置文件 spring: profiles: active: xxx,xxx
YAML规则
❶ SpringBoot允许多个yml文件,但这些文件的命名必须为 application-xxx.yml,并且要在 application.yml 中激活才能使用(如上)。
❷ 如果properties与yml同时存在于SpringBoot项目中,那么这两类文件都生效;如果存在同名的配置项,则以properties文件的为主。
声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop】
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。