雖然spring boot提供了4種資料來源的配置,但是如果要使用其他的資料來源怎麼辦?例如,有人就是喜歡druid可以監控的強大功能,有些人專案的需要使用c3p0,那麼,我們就沒辦法了嗎?我們就要程式設計式新建一個資料來源了嗎?不用了!spring boot 1.4.1.RELEASE為我們提供了簡潔的方式使用自己想要的資料來源。
網上也有其他資料來源的配置方法,但是都是程式設計式新建一個資料來源,太繁瑣了。我在這裡記錄一下官網的做法:
1、Configure a DataSource
官網介紹:http://docs.spring.io/spring-boot/docs/current-SNAPSHOT/reference/htmlsingle/#howto-configure-a-datasource
@Configuration @EnableConfigurationProperties(DataSourceProperties.class) public class DruidConfiguration { @Bean @ConfigurationProperties(prefix="spring.datasource.druid") public DataSource dataSource(DataSourceProperties properties) { return properties.initializeDataSourceBuilder() // additional customizations .build(); } }
說明:@ConfigurationProperties(prefix="spring.datasource.druid"),字首可以自己隨意。
2、配置檔案
spring: datasource: name: test url: jdbc:mysql://localhost:3306/test username: root password: root # 使用druid資料來源 type: com.alibaba.druid.pool.DruidDataSource driver-class-name: com.mysql.jdbc.Driver druid: filters: stat,wall,log4j maxActive: 20 initialSize: 1 maxWait: 60000 minIdle: 1 timeBetweenEvictionRunsMillis: 60000 minEvictableIdleTimeMillis: 300000 validationQuery: SELECT 1 FROM DUAL testWhileIdle: true testOnBorrow: false testOnReturn: false poolPreparedStatements: true maxOpenPreparedStatements: 20
以上步驟就配置好druid了,在驗證druid的配置屬性是否有成功注入的時候,可以注入DataSource,斷點觀察DataSource的屬性validationQuery是否和你寫的一樣。
3、配置提示
有強迫症可以看看,這個是配置提示的功能,不是必要項。
新增依賴:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-configuration-processor</artifactId> <optional>true</optional> </dependency>
在resources下新建META-INF,在建一個additional-spring-configuration-metadata.json檔案
{ "properties": [ { "name": "spring.datasource.druid.maxActive", "type": "java.lang.String", "description": "Description for spring.datasource.druid.maxActive." }, { "name": "spring.datasource.druid.initialSize", "type": "java.lang.String", "description": "Description for spring.datasource.druid.initialSize." }, { "name": "spring.datasource.druid.filters", "type": "java.lang.String", "description": "Description for spring.datasource.druid.filters." }, { "name": "spring.datasource.druid.maxWait", "type": "java.lang.String", "description": "Description for spring.datasource.druid.maxWait." }, { "name": "spring.datasource.druid.minIdle", "type": "java.lang.String", "description": "Description for spring.datasource.druid.minIdle." }, { "name": "spring.datasource.druid.timeBetweenEvictionRunsMillis", "type": "java.lang.String", "description": "Description for spring.datasource.druid.timeBetweenEvictionRunsMillis." }, { "name": "spring.datasource.druid.minEvictableIdleTimeMillis", "type": "java.lang.String", "description": "Description for spring.datasource.druid.minEvictableIdleTimeMillis." }, { "name": "spring.datasource.druid.validationQuery", "type": "java.lang.String", "description": "Description for spring.datasource.druid.validationQuery." }, { "name": "spring.datasource.druid.testWhileIdle", "type": "java.lang.String", "description": "Description for spring.datasource.druid.testWhileIdle." }, { "name": "spring.datasource.druid.testOnBorrow", "type": "java.lang.String", "description": "Description for spring.datasource.druid.testOnBorrow." }, { "name": "spring.datasource.druid.testOnReturn", "type": "java.lang.String", "description": "Description for spring.datasource.druid.testOnReturn." }, { "name": "spring.datasource.druid.poolPreparedStatements", "type": "java.lang.String", "description": "Description for spring.datasource.druid.poolPreparedStatements." }, { "name": "spring.datasource.druid.maxOpenPreparedStatements", "type": "java.lang.String", "description": "Description for spring.datasource.druid.maxOpenPreparedStatements." } ] }
這樣在使用druid的時候IDEA就會出現提示了。
注意:如果沒有出現提示,可以斷點資料來源,觀察相應的配置就行了(大概):)
4、druid監控
網上有很多例子,這個就不多說了。
/** * 註冊一個StatViewServlet * @return */ @Bean public ServletRegistrationBean druidStatViewServle(){ //org.springframework.boot.context.embedded.ServletRegistrationBean提供類的進行註冊. ServletRegistrationBean servletRegistrationBean = new ServletRegistrationBean(new StatViewServlet(),"/druid/*"); //新增初始化引數:initParams //白名單: //servletRegistrationBean.addInitParameter("allow","127.0.0.1"); //IP黑名單 (存在共同時,deny優先於allow) : 如果滿足deny的話提示:Sorry, you are not permitted to view this page. //servletRegistrationBean.addInitParameter("deny","192.168.1.73"); //登入檢視資訊的賬號密碼. //servletRegistrationBean.addInitParameter("loginUsername","admin2"); //servletRegistrationBean.addInitParameter("loginPassword","123456"); //是否能夠重置資料. servletRegistrationBean.addInitParameter("resetEnable","false"); return servletRegistrationBean; } /** * 註冊一個:filterRegistrationBean * @return */ @Bean public FilterRegistrationBean druidStatFilter(){ FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean(new WebStatFilter()); //新增過濾規則. filterRegistrationBean.addUrlPatterns("/*"); //新增不需要忽略的格式資訊. filterRegistrationBean.addInitParameter("exclusions","*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*"); return filterRegistrationBean; }
怎麼使用可以看druid官網。