在开发过程中,配置,是必不可少的,虽然SpringBoot已经为我们简化了大量的配置,但有时候并不能满足我们的需求,所以,需要我们开发人员自行配置。
在SpringBoot中推荐使用Java配置的方式,下面我会把配置阿里的Druid连接池作为实例,与大家分享。
1、先来看看pom文件,如下:
<dependencies>
<!-- web组件 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- mysql驱动 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.47</version>
</dependency>
<!-- druid连接池 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.0.9</version>
</dependency>
<!-- lombok,简化代码,如getter/setter -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
</dependencies>
pom文件中添加的依赖相信大家都不陌生,并且我也添加了相关注释,我们继续往下。
2、在application.yml配置文件中添加我们的数据库连接信息,如下:
spring:
datasource:
url: jdbc:mysql://127.0.0.1:3306/my_db?characterEncoding=utf-8&useSSL=false
driverClassName: com.mysql.jdbc.Driver
username: root
password: 123456
3、创建我们的Druid配置类DruidConfig,如下:
@Configuration //声明该类是一个配置类
public class DruidConfig {
// @Value该注解可以读取配置文件,把值注入到我们的变量当中
@Value("${spring.datasource.url}")
private String url;
@Value("${spring.datasource.driverClassName}")
private String driverClassName;
@Value("${spring.datasource.username}")
private String username;
@Value("${spring.datasource.password}")
private String password;
@Bean //实例化一个bean,该注解会把方法的返回值注入到spring容器中,bean名称默认为方法的名称
//@Bean("你要修改的bean名称") 我们也可以自行制定bean的名称
public DataSource dataSource(){
DruidDataSource dataSource = new DruidDataSource(); //Druid数据源对象
dataSource.setUrl(url);
dataSource.setDriverClassName(driverClassName);
dataSource.setUsername(username);
dataSource.setPassword(password);
return dataSource;
}
}
需要说明的我都写在注释里啦。
我们在return语句处打个断点(不会debug模式的小伙伴赶紧去学学吧,开发必备,真的,我读书也不多,但不会骗你!),使用Debug模式启动我们的应用,当程序停止在断点处,在IDEA的控制台找到我们的datasource对象,可以发现,我们在配置文件中设置的连接信息成功设置到该对象中,如下:
是不是很简单呢?
4、使用外部配置文件
如果想把数据库连接信息单独放在一个配置文件,很简单,在我们的DruidConfig类上添加个注解即可,如下:
@Configuration //声明该类是一个配置类
@PropertySource("classpath:db.properties") //指定外部配置文件
public class DruidConfig {
// @Value该注解可以读取配置文件,把值注入到我们的变量当中
@Value("${spring.datasource.url}")
private String url;
@Value("${spring.datasource.driverClassName}")
private String driverClassName;
@Value("${spring.datasource.username}")
private String username;
@Value("${spring.datasource.password}")
private String password;
@Bean //实例化一个bean,该注解会把方法的返回值注入到spring容器中,bean名称默认为方法的名称
//@Bean("你要修改的bean名称") 我们也可以自行制定bean的名称
public DataSource dataSource(){
DruidDataSource dataSource = new DruidDataSource();
dataSource.setUrl(url);
dataSource.setDriverClassName(driverClassName);
dataSource.setUsername(username);
dataSource.setPassword(password);
return dataSource;
}
}
在resources目录下创建db.properties文件,其内容如下:
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/my_db?characterEncoding=utf-8&useSSL=false
spring.datasource.driverClassName=com.mysql.jdbc.Driver
spring.datasource.username=root
spring.datasource.password=123456
这样,我们同样可以读取到配置文件中的数据库连接信息。
5、更优雅的配置方式
以上这两种方式虽然很简单,但有时候我们的配置信息并不会仅仅只在一个类中使用,这种情况下,使用上述方式,我们的代码会大量重复,下面我们来看看SpringBoot为我们提供的更为优雅的配置方式。
我们新建一个JdbcProperties类,其内容如下:
@Data //lombok注解,省略getter/setter等方法
//声明该类是一个属性配置文件,同时指定属性在配置文件中的前缀
@ConfigurationProperties(prefix = "spring.datasource")
// 属性名要与配置文件中保持一致
public class JdbcProperties {
private String url;
private String driverClassName;
private String username;
private String password;
}
@ConfigurationProperties注解可以用于指定读取一组配置文件中的信息,注入到我们的属性当中,prefix指定我们配置信息的前缀。
在我们的DruidConfig中使用我们的属性配置文件,如下:
@Configuration //声明该类是一个配置类
//@PropertySource("classpath:db.properties") //指定外部配置文件
//启用我们的JdbcProperties属性配置文件
@EnableConfigurationProperties(JdbcProperties.class)
public class DruidConfig {
@Autowired
private JdbcProperties jdbcProperties; //注入我们的属性配置文件
@Bean //实例化一个bean,该注解会把方法的返回值注入到spring容器中,bean名称默认为方法的名称
//@Bean("你要修改的bean名称") 我们也可以自行制定bean的名称
public DataSource dataSource(){
DruidDataSource dataSource = new DruidDataSource();
dataSource.setUrl(jdbcProperties.getUrl());
dataSource.setDriverClassName(jdbcProperties.getDriverClassName());
dataSource.setUsername(jdbcProperties.getUsername());
dataSource.setPassword(jdbcProperties.getPassword());
return dataSource;
}
@EnableConfigurationProperties用于指定使用哪一个Java属性配置文件。
我们也可以在方法的参数中直接使用,如下:
public DataSource dataSource(JdbcProperties jdbcProperties)
还有一种更为简洁的方式:
@Bean //实例化一个bean,该注解会把方法的返回值注入到spring容器中,bean名称默认为方法的名称
@ConfigurationProperties(prefix = "spring.datasource")
public DataSource dataSource(){
return new DruidDataSource();
}
@ConfigurationProperties注解可以直接作用于方法,但前提配置文件中的名称要与目标对象的属性名称保持一致。就我个人而言,不推荐使用这种方式,虽然可以省去不少代码,但可读性太差。
源码链接:
https://github.com/devilyang123/SpringBoot-Learning/tree/master/springboot-javaconfig
欢迎关注我的个人公众号“笑笑是一个码农”,第一时间获取最新文章。
您的关注,就是支持我持续写作的最大动力!
还可以免费领取前后端全站学习视频资料呦~
个人微信号,如需添加微信,请备注来源,因为妈妈从小就告诉我不要随便跟陌生人聊天!(嘿嘿~)