有時候需要自己定義一些配置,比如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文件,在配置文件中寫相關配置時就有提示啦(如果已存在該配置項,則不會提示)。
