官網:https://projects.spring.io/spring-data-jpa/css
1.什麼是spring-data-jpahtml
Spring Data JPA, part of the larger Spring Data family, makes it easy to easily implement JPA based repositories. This module deals with enhanced support for JPA based data access layers. It makes it easier to build Spring-powered applications that use data access technologies.java
Spring Data JPA是Spring Data系列的一部分,能夠輕鬆實現基於JPA的存儲庫。該模塊處理對基於JPA的數據訪問層的加強支持。這使得構建使用數據訪問技術的Sprin應用程序變得更加容易。mysql
2.spring-data-jpa有什麼git
繼承關係圖:github
基本的HelloWorld完整代碼在springboot快速入門中已有介紹,參考這裏web
不過因爲當時沒有引入數據庫鏈接池,這裏對它進行改進,使用阿里巴巴druid做爲數據源,添加監控spring
阿里Druid:https://github.com/alibaba/druidsql
整合參考:https://www.jianshu.com/p/e84e2709f383數據庫
1.引入依賴
<!-- alibaba-druid -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.6</version>
</dependency>
// 其餘依賴請參見前文
2.在application.yml配置文件中配置數據源
官方參考配置:點擊查看
各配置項解析:http://www.javashuo.com/article/p-okqpuopk-dg.html
spring:
datasource:
type: com.alibaba.druid.pool.DruidDataSource
driverClassName: com.mysql.jdbc.Driver
url: jdbc:mysql://127.0.0.1:3306/sakila
username: root
password: root
# druid配置項,默認spring-boot不支持,故須要config類來解析
initialSize: 5
minIdle: 5
maxActive: 20
maxWait: 60000
timeBetweenEvictionRunsMillis: 60000
minEvictableIdleTimeMillis: 300000
validationQuery: SELECT 1 FROM DUAL
testWhileIdle: true
testOnBorrow: false
testOnReturn: false
poolPreparedStatements: true
maxPoolPreparedStatementPerConnectionSize: 20
filters: stat,wall,log4j
connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000
jpa:
hibernate:
ddl-auto: update
show-sql: true
3.添加Druid配置類
package com.example.demo.dao; import com.alibaba.druid.pool.DruidDataSource; import com.alibaba.druid.support.http.StatViewServlet; import com.alibaba.druid.support.http.WebStatFilter; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.web.servlet.FilterRegistrationBean; import org.springframework.boot.web.servlet.ServletRegistrationBean; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Primary; import javax.sql.DataSource; import java.sql.SQLException; /** * 阿里Druid配置類 * * @author zcc ON 2018/2/11 **/ @Configuration public class DruidConfig { private static final Logger log = LoggerFactory.getLogger(DruidConfig.class); @Value("${spring.datasource.url}") private String dbUrl; @Value("${spring.datasource.username}") private String username; @Value("${spring.datasource.password}") private String password; @Value("${spring.datasource.driverClassName}") private String driverClassName; @Value("${spring.datasource.initialSize}") private int initialSize; @Value("${spring.datasource.minIdle}") private int minIdle; @Value("${spring.datasource.maxActive}") private int maxActive; @Value("${spring.datasource.maxWait}") private int maxWait; @Value("${spring.datasource.timeBetweenEvictionRunsMillis}") private int timeBetweenEvictionRunsMillis; @Value("${spring.datasource.minEvictableIdleTimeMillis}") private int minEvictableIdleTimeMillis; @Value("${spring.datasource.validationQuery}") private String validationQuery; @Value("${spring.datasource.testWhileIdle}") private boolean testWhileIdle; @Value("${spring.datasource.testOnBorrow}") private boolean testOnBorrow; @Value("${spring.datasource.testOnReturn}") private boolean testOnReturn; @Value("${spring.datasource.poolPreparedStatements}") private boolean poolPreparedStatements; @Value("${spring.datasource.maxPoolPreparedStatementPerConnectionSize}") private int maxPoolPreparedStatementPerConnectionSize; @Value("${spring.datasource.filters}") private String filters; @Value("{spring.datasource.connectionProperties}") private String connectionProperties; @Bean @Primary public DataSource dataSource() { DruidDataSource datasource = new DruidDataSource(); log.info("----------- druid datasource ----------"); datasource.setUrl(this.dbUrl); datasource.setUsername(username); datasource.setPassword(password); datasource.setDriverClassName(driverClassName); datasource.setInitialSize(initialSize); datasource.setMinIdle(minIdle); datasource.setMaxActive(maxActive); datasource.setMaxWait(maxWait); datasource.setTimeBetweenEvictionRunsMillis(timeBetweenEvictionRunsMillis); datasource.setMinEvictableIdleTimeMillis(minEvictableIdleTimeMillis); datasource.setValidationQuery(validationQuery); datasource.setTestWhileIdle(testWhileIdle); datasource.setTestOnBorrow(testOnBorrow); datasource.setTestOnReturn(testOnReturn); datasource.setPoolPreparedStatements(poolPreparedStatements); datasource.setMaxPoolPreparedStatementPerConnectionSize(maxPoolPreparedStatementPerConnectionSize); try { datasource.setFilters(filters); } catch (SQLException e) { e.printStackTrace(); } datasource.setConnectionProperties(connectionProperties); return datasource; } @Bean public ServletRegistrationBean registrationBean() { ServletRegistrationBean servletRegistrationBean = new ServletRegistrationBean(new StatViewServlet()); // 添加初始化參數:initParams
servletRegistrationBean.addUrlMappings("/druid/*"); // 白名單
servletRegistrationBean.addInitParameter("allow", "127.0.0.1"); // 黑名單
servletRegistrationBean.addInitParameter("deny", "192.168.0.101"); // 登陸查看信息的帳號密碼.
servletRegistrationBean.addInitParameter("loginUsername", "admin"); servletRegistrationBean.addInitParameter("loginPassword", "123456"); // 可重置數據.
servletRegistrationBean.addInitParameter("resetEnable", "false"); return servletRegistrationBean; } @Bean public FilterRegistrationBean filterRegistrationBean() { FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean(new WebStatFilter()); // 添加過濾規則.
filterRegistrationBean.addUrlPatterns("/*"); // 添加不須要忽略的格式信息.
filterRegistrationBean.addInitParameter("exclusions", "*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*"); return filterRegistrationBean; } }
其中,@Configuration註解該類,等價 與XML中配置beans;用@Bean標註方法等價於XML中配置bean
@Primary //在一樣的DataSource中,首先使用被標註的DataSource
4.配置QueryDsl
後面介紹JPA進行補充!
5.測試
正常調試項目接口(使用IDEA自帶插件或者Postman)
查看監控頁面(監控頁面由Druid生成)
訪問:127.0.0.1:8080/druid/login.html
其中,IP白名單(爲空則爲全部)與監控登陸信息在Druid配置中!