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;
}
}