SpringBoot配置连接池
准备:创建返回dataSource的方法,在类上添加注解@Configuration,表示这是个配置类,并且在方法上配置Bean注解,表示将返回的对象交给bean容器
@Configuration
public class DataSourceConfig {
@Bean
public DataSource dataSource(){
DruidDataSource druidDataSource = new DruidDataSource();
return druidDataSource;
}
}
方式一:使用db.propertoes,利用@Value("${jdbc.XX}")在dataSource中直接注入属性
1.创建db.properties
jdbc.driver=com.mysql.driver
jdbc.url=jdbc:mysql://localhost:3306/springBoot?characterEncoding=utf-8
jdbc.username=root
jdbc.password=123456
2.在dataSource配置的类上贴上注解
@PropertySource(“classpath:db.properties”)
在类的内部就可以直接注入属性
@Configuration
@PropertySource("classpath:db.properties")
public class DataSourceConfig {
@Value("${jdbc.driver}")
private String driver;
@Value("${jdbc.username}")
private String username;
@Value("${jdbc.password}")
private String password;
@Value("${jdbc.url}")
private String url;
@Bean
public DataSource dataSource(){
DruidDataSource druidDataSource = new DruidDataSource();
druidDataSource.setDriverClassName(driver);
druidDataSource.setUsername(username);
druidDataSource.setPassword(password);
druidDataSource.setUrl(url);
return druidDataSource;
}
}
这时其他类在使用datasource时,这里的dataSource里面的属性就已经是自动注入的了
问题:这样注入其他地方在想获取properties配置文件中的属性就很麻烦,这就可以使用方式二
方式二:使用对象封装的形式将配置文件的属性封装出来,其他类就可很方便的使用
2.1这种方式的前提是配置文件的名称必须为application.properties
jdbc.driver=com.mysql.driver
jdbc.url=jdbc:mysql://localhost:3306/springBoot?characterEncoding=utf-8
jdbc.username=root
jdbc.password=123456
2.2此时需要封装一个对象来封装这些属性,这些对象必须有getter和setter方法,由于我已经引入lombok这里直接用了@Data
注意:这里引入配置文件的注解是@ConfigurationProperties,而且由于在配置文件中有前缀jdbc,所有必须指明前缀才可注入
package com.dongpo.config;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
@ConfigurationProperties(prefix = "jdbc")
@Data
public class JdbcBean {
private String username;
private String password;
private String driver;
private String url;
}
2.3 在需要使用这个封装好的这个Bean,必须在当前类加上
@EnableConfigurationProperties(JdbcBean.class),后面为封装的bean的字节码,这时才可以用@Autowaired来注入对象属性,或者在方法上加入JdbcBean jdbcBean;也就是对象类型的一个引用,这样Springboot会自动注入,前提类上必须有@EnableConfigurationProperties(JdbcBean.class)注解
@Configuration
@EnableConfigurationProperties(JdbcBean.class)
public class DataSourceConfig {
@Autowired
private JdbcBean jdbcBean;
@Bean
public DataSource dataSource(){
DruidDataSource druidDataSource = new DruidDataSource();
druidDataSource.setDriverClassName(jdbcBean.getDriver());
druidDataSource.setUsername(jdbcBean.getUsername());
druidDataSource.setPassword(jdbcBean.getPassword());
druidDataSource.setUrl(jdbcBean.getUrl());
return druidDataSource;
}
}
或者
@Configuration
@EnableConfigurationProperties(JdbcBean.class)
public class DataSourceConfig {
@Bean
public DataSource dataSource(JdbcBean jdbcBean){
DruidDataSource druidDataSource = new DruidDataSource();
druidDataSource.setDriverClassName(jdbcBean.getDriver());
druidDataSource.setUsername(jdbcBean.getUsername());
druidDataSource.setPassword(jdbcBean.getPassword());
druidDataSource.setUrl(jdbcBean.getUrl());
return druidDataSource;
}
}
方式三:当某一个配置是私有的,比如数据库配置,这里可以用直接属性注入的方式
如下,这里需要注意,配置问价中的名称必须和对象的属性一直不如driverClassName,在配置文件中必须是jdbc.driverClassName
@Configuration
public class DataSourceConfig {
@Bean
@ConfigurationProperties(prefix = "jdbc")
public DataSource dataSource(){
DruidDataSource druidDataSource = new DruidDataSource();
return druidDataSource;
}
}