天天看點

SpringBoot使用properties檔案配置連接配接池的方式

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