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文件,在配置文件中写相关配置时就有提示啦(如果已存在该配置项,则不会提示)。

 

posted @ 2020-04-12 15:57  chy_18883701161  阅读(3958)  评论(0编辑  收藏  举报