SpringBoot 自定義配置


 

有時候需要自己定義一些配置,比如SpringBoot沒有提供Druid連接池的配置,需要我們自己寫配置。

以在springboot中使用Druid為例。

 

依賴

        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>1.1.8</version>
        </dependency>

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.19</version>
        </dependency>

 

 

 

配置文件

#指定數據源類型為Druid
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource

##########druid連接池配置#########
spring.datasource.druid.url=jdbc:mysql://127.0.0.1/db_xm_mall?serverTimezone=UTC
spring.datasource.druid.driverClassName=com.mysql.cj.jdbc.Driver
spring.datasource.druid.username=chy
spring.datasource.druid.password=abcd
##初始連接數,默認0
spring.datasource.druid.initialSize=10
#最大連接數,默認8
spring.datasource.druid.maxActive=30
spring.datasource.druid.minIdle=10
#獲取連接的最大等待時間,單位毫秒
spring.datasource.druid.maxWait=2000
#緩存PreparedStatement,默認false
#spring.datasource.druid.poolPreparedStatements=true
#緩存PreparedStatement的最大數量,默認-1(不緩存)。大於0時會自動開啟緩存PreparedStatement,所以可以省略上一句設置
spring.datasource.druid.maxOpenPreparedStatements=20

 

 

 

配置類

/**
 * 初始化Druid連接池
 */
@ConfigurationProperties("spring.datasource.druid")  //指定前綴
@Component  //也可以使用@Configuration,@Configuration包含了@Component
@Setter  //Lombok的注解。流程是調用空參構造器創建對象,再調用setter方法注入屬性值,也可以使用@Data
public class DruidConfig {
    //屬性名要與springboot配置文件中屬性名一致
    private String url;
    private String driverClassName;
    private String username;
    private String password;
    private int initialSize;
    private int maxActive;
    private int minIdle;
    private int maxWait;
    // private boolean poolPreparedStatements;
    private int maxOpenPreparedStatements;

    @Bean  //放到Spring容器中
    // @Primary  //聲明為主數據源,如果配置了多個數據源,未顯式指定使用哪個數據源時,自動使用主數據源
    public DataSource dataSource() {
        DruidDataSource datasource = new DruidDataSource();

        datasource.setUrl(url);
        datasource.setDriverClassName(driverClassName);
        datasource.setUsername(username);
        datasource.setPassword(password);
        datasource.setInitialSize(initialSize);
        datasource.setMaxActive(maxActive);
        datasource.setMinIdle(minIdle);
        datasource.setMaxWait(maxWait);
        // datasource.setPoolPreparedStatements(poolPreparedStatements);
        datasource.setMaxOpenPreparedStatements(maxOpenPreparedStatements);

        return datasource;
    }

}

三點:

  • 指定前綴。如果不需要指定前綴,可以省略這一步
  • 提供空參構造器、setter方法
  • @Component放到Spring容器中

 

 

 

如果要寫配置文件時有相應的提示,需要加一個依賴

        <!-- 自定義配置的提示 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-configuration-processor</artifactId>
            <optional>true</optional>
        </dependency>

編譯,target/classes/META-INF下會生成一個spring-configuration-metadata.json文件,在配置文件中寫相關配置時就有提示啦(如果已存在該配置項,則不會提示)。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM