目錄
Spring Boot? 數(shù)據(jù)庫操作
應(yīng)用實(shí)例-需求
創(chuàng)建測(cè)試數(shù)據(jù)庫和表
進(jìn)行數(shù)據(jù)庫開發(fā), 在pom.xml 引入data-jdbc starter
參考官方文檔
需要在pom.xml 指定導(dǎo)入數(shù)據(jù)庫驅(qū)動(dòng)
在application.yml 配置操作數(shù)據(jù)源的信息
創(chuàng)建bean\Furn.java
測(cè)試結(jié)果
整合Druid 到Spring-Boot?
官方文檔
Durid 基本使用
修改pom.xml , 引入druid 依賴
創(chuàng)建DruidDataSourceConfig.java 配置類
完成測(cè)試,運(yùn)行ApplicationTests.java , 觀察數(shù)據(jù)源的運(yùn)行類型
Durid 監(jiān)控功能-SQL 監(jiān)控
?完成測(cè)試
修改DruidDataSourceConfig.java , 加入監(jiān)控功能?
?創(chuàng)建DruidSqlController.java
SQL 監(jiān)控?cái)?shù)據(jù)-測(cè)試頁面
Durid 監(jiān)控功能-Web 關(guān)聯(lián)監(jiān)控
Web 關(guān)聯(lián)監(jiān)控配置-Web 應(yīng)用、URI 監(jiān)控
為了測(cè)試方便,修改/WebConfig.java, 放行/sql 請(qǐng)求
重啟項(xiàng)目,看看Web 應(yīng)用和URI 監(jiān)控頁面
Durid 監(jiān)控功能-SQL 防火墻
?修改DruidDataSourceConfig.java ,加入防火墻監(jiān)控
?完成測(cè)試,重啟項(xiàng)目,看看SQL 防火墻監(jiān)控是否生效
Durid 監(jiān)控功能-Session 監(jiān)控
Session 監(jiān)控
Druid Spring Boot Starter
基本介紹
修改pom.xml 注銷druid 的依賴
注銷DruidDataSourceConfig.java
查看druid 文檔https://github.com/alibaba/druid,引入druid starter
確認(rèn)druid starter 引入哪些依賴
?編輯
修改resources/application.yml 增加配置參數(shù)?
重啟項(xiàng)目,完成測(cè)試
Spring Boot? 數(shù)據(jù)庫操作
JDBC+HikariDataSource
應(yīng)用實(shí)例-需求
● 需求:演示Spring Boot 如何通過jdbc+HikariDataSource 完成對(duì)Mysql 操作
說明: HikariDataSource : 目前市面上非常優(yōu)秀的數(shù)據(jù)源, 是springboot2 默認(rèn)數(shù)據(jù)源
創(chuàng)建測(cè)試數(shù)據(jù)庫和表
-- 創(chuàng)建furns_ssm
DROP DATABASE IF EXISTS spring_boot;
CREATE DATABASE spring_boot;
USE spring_boot;
-- 創(chuàng)建家居表
CREATE TABLE furn(
`id` INT(11) PRIMARY KEY AUTO_INCREMENT, ## id
`name` VARCHAR(64) NOT NULL, ## 家居名
`maker` VARCHAR(64) NOT NULL, ## 廠商
`price` DECIMAL(11,2) NOT NULL, ## 價(jià)格
`sales` INT(11) NOT NULL, ## 銷量
`stock` INT(11) NOT NULL, ## 庫存
`img_path` VARCHAR(256) NOT NULL ## 照片路徑
);
-- 初始化家居數(shù)據(jù)
INSERT INTO furn(`id` , `name` , `maker` , `price` , `sales` , `stock` , `img_path`)
VALUES(NULL , ' 北歐風(fēng)格小桌子' , ' 熊貓家居' , 180 , 666 , 7 ,
'assets/images/product-image/1.jpg');
INSERT INTO furn(`id` , `name` , `maker` , `price` , `sales` , `stock` , `img_path`)
VALUES(NULL , ' 簡約風(fēng)格小椅子' , ' 熊貓家居' , 180 , 666 , 7 ,
'assets/images/product-image/2.jpg');
INSERT INTO furn(`id` , `name` , `maker` , `price` , `sales` , `stock` , `img_path`)
VALUES(NULL , ' 典雅風(fēng)格小臺(tái)燈' , ' 螞蟻家居' , 180 , 666 , 7 ,
'assets/images/product-image/3.jpg');
INSERT INTO furn(`id` , `name` , `maker` , `price` , `sales` , `stock` , `img_path`)
VALUES(NULL , ' 溫馨風(fēng)格盆景架' , ' 螞蟻家居' , 180 , 666 , 7 ,
'assets/images/product-image/4.jpg');
SELECT * FROM furn;
進(jìn)行數(shù)據(jù)庫開發(fā), 在pom.xml 引入data-jdbc starter
參考官方文檔
https://docs.spring.io/spring-boot/docs/current/reference/html/using.html#using.build-syst
ems.starters .
<!--進(jìn)行數(shù)據(jù)庫開發(fā),引入data-jdbc starter-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jdbc</artifactId>
</dependency>
?
?
需要在pom.xml 指定導(dǎo)入數(shù)據(jù)庫驅(qū)動(dòng)
因?yàn)镾pring Boot 不知道項(xiàng)目要操作Mysql 還是Oracle , 需要在pom.xml 指定導(dǎo)入數(shù)據(jù)庫驅(qū)動(dòng), 并指定對(duì)應(yīng)版本.
<!--引入mysql的驅(qū)動(dòng)
1. 說明這里沒有使用版本仲裁 <mysql.version>8.0.26</mysql.version>
2. 指定的版本是5.1.49
-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.49</version>
</dependency>
在application.yml 配置操作數(shù)據(jù)源的信息
spring:
servlet:
multipart:
max-file-size: 10MB
max-request-size: 50MB
datasource: #配置數(shù)據(jù)源
# 說明: 如果你沒有指定useSSL=true ,啟動(dòng)項(xiàng)目會(huì)報(bào)紅警告, 環(huán)境的問題,要靈活處理
url: jdbc:mysql://localhost:3306/spring_boot?useSSL=true&useUnicode=true&characterEncoding=UTF-8
username: root
password: 自己的密碼
driver-class-name: com.mysql.jdbc.Driver
創(chuàng)建bean\Furn.java
public class Furn {
private Integer id;
private String name;
private String maker;
private BigDecimal price;
private Integer sales;
private Integer stock;
private String imgPath = "assets/images/product-image/1.jpg";
public Furn(Integer id, String name, String maker, BigDecimal price, Integer sales, Integer stock, String imgPath) {
this.id = id;
this.name = name;
this.maker = maker;
this.price = price;
this.sales = sales;
this.stock = stock;
this.imgPath = imgPath;
}
public Furn() {
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getMaker() {
return maker;
}
public void setMaker(String maker) {
this.maker = maker;
}
public BigDecimal getPrice() {
return price;
}
public void setPrice(BigDecimal price) {
this.price = price;
}
public Integer getSales() {
return sales;
}
public void setSales(Integer sales) {
this.sales = sales;
}
public Integer getStock() {
return stock;
}
public void setStock(Integer stock) {
this.stock = stock;
}
public String getImgPath() {
return imgPath;
}
public void setImgPath(String imgPath) {
this.imgPath = imgPath;
}
@Override
public String toString() {
return "Furn{" +
"id=" + id +
", name='" + name + '\'' +
", maker='" + maker + '\'' +
", price=" + price +
", sales=" + sales +
", stock=" + stock +
", imgPath='" + imgPath + '\'' +
'}';
}
}
測(cè)試結(jié)果
test 目錄下的usersys/ApplicationTests.java , 完成測(cè)試
如果不知道JdbcTemplate請(qǐng)看一下spring的博客文章?
使用BeanPropertyRowMapper時(shí),是給query()方法傳遞一個(gè)BeanPropertyRowMapper對(duì)象讓JdbcTemplate幫我們把執(zhí)行sql語句的結(jié)果集自動(dòng)幫我們封裝到對(duì)應(yīng)的屬性
@SpringBootTest
public class ApplicationTests {
//如果不知道JdbcTemplate請(qǐng)看一下spring的博客文章
@Resource
private JdbcTemplate jdbcTemplate;
@Test
public void contextLoads() {
BeanPropertyRowMapper<Furn> rowMapper =
new BeanPropertyRowMapper<>(Furn.class);
List<Furn> furns = jdbcTemplate.query("SELECT * FROM `furn`", rowMapper);
for (Furn furn : furns) {
System.out.println(furn);
}
System.out.println(jdbcTemplate.getDataSource().getClass());
}
}
整合Druid 到Spring-Boot?
官方文檔
使用手冊(cè): https://github.com/alibaba/druid?
中文手冊(cè): https://github.com/alibaba/druid/wiki/%E5%B8%B8%E8%A7%81%E9%97%AE%E9%A2%98
基本介紹
1. HiKariCP: 目前市面上非常優(yōu)秀的數(shù)據(jù)源, 是springboot2 默認(rèn)數(shù)據(jù)源
2. Druid: 性能優(yōu)秀,Druid 提供性能卓越的連接池功能外 這個(gè)在專題javaEE的數(shù)據(jù)庫和jdbc的這篇博客中有說明 鏈接
,還集成了SQL 監(jiān)控,黑名單攔截等功能,強(qiáng)大的監(jiān)控特性,通過Druid 提供的監(jiān)控功能,可以清楚知道連接池和SQL 的工作情況,所以根據(jù)項(xiàng)目需要,我們也要掌握Druid 和SpringBoot 整合
3. 整合Druid 到Spring-Boot 方式
????????● 自定義方式
????????● 引入starter 方式
Durid 基本使用
需求: 將Spring-Boot 的數(shù)據(jù)源切換成Druid
修改pom.xml , 引入druid 依賴
<!--引入druid starter-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.1.17</version>
</dependency>
創(chuàng)建DruidDataSourceConfig.java 配置類
@Configuration
public class DruidDataSourceConfig {
//編寫方法,注入DruidDataSource
//還有說明一下為什么我們注入自己的DataSource , 默認(rèn)的HiKariDatasource失效?
//1. 默認(rèn)的數(shù)據(jù)源是如配置? @ConditionalOnMissingBean({ DataSource.class, XADataSource.class })
// 解讀通過@ConditionalOnMissingBean({ DataSource.class}) 判斷如果容器有DataSource Bean 就不注入默認(rèn)的HiKariDatasource
@ConfigurationProperties("spring.datasource")
@Bean
public DataSource dataSource() throws SQLException {
//1. 配置了 @ConfigurationProperties("spring.datasource")
// 就可以讀取到application.yml的配置
//2. 我們就不需要調(diào)用DruidDataSource 對(duì)象的setXxx, 會(huì)自動(dòng)關(guān)聯(lián)
DruidDataSource druidDataSource = new DruidDataSource();
return druidDataSource;
}
}
完成測(cè)試,運(yùn)行ApplicationTests.java , 觀察數(shù)據(jù)源的運(yùn)行類型
Durid 監(jiān)控功能-SQL 監(jiān)控
需求: 配置Druid 的監(jiān)控功能,包括SQL 監(jiān)控、SQL 防火墻、Web 應(yīng)用、Session 監(jiān)控等?
修改DruidDataSourceConfig.java , 增加druid 監(jiān)控功能
地址:
https://github.com/alibaba/druid/wiki/%E9%85%8D%E7%BD%AE_StatViewServlet%E9%85%8D%E7%BD%AE?
//配置druid的監(jiān)控頁功能
@Bean
public ServletRegistrationBean statViewServlet() {
//創(chuàng)建StatViewServlet
StatViewServlet statViewServlet = new StatViewServlet();
ServletRegistrationBean<StatViewServlet> registrationBean =
new ServletRegistrationBean<>(statViewServlet, "/druid/*");
//設(shè)置init-parameter, 設(shè)置用戶名和密碼
registrationBean.addInitParameter("loginUsername", "wyx");
registrationBean.addInitParameter("loginPassword", "666666");
return registrationBean;
}
?完成測(cè)試
訪問http://localhost:10000/druid/index.html 不會(huì)被攔截, 如果沒有問題,會(huì)看到這個(gè)頁面
修改DruidDataSourceConfig.java , 加入監(jiān)控功能?
參考: https://github.com/alibaba/druid/wiki/%E9%85%8D%E7%BD%AE_StatFilter
?創(chuàng)建DruidSqlController.java
@Controller
public class DruidSqlController {
@Resource
private JdbcTemplate jdbcTemplate;
@ResponseBody
@GetMapping("/sql")
public List<Furn> crudDB() {
BeanPropertyRowMapper<Furn> rowMapper = new BeanPropertyRowMapper<>(Furn.class);
List<Furn> furns = jdbcTemplate.query("select * from `furn`", rowMapper);
for (Furn furn : furns) {
System.out.println(furn);
}
return furns;
}
}
SQL 監(jiān)控?cái)?shù)據(jù)-測(cè)試頁面
● 完成測(cè)試, 觀察SQL 監(jiān)控?cái)?shù)據(jù), 瀏覽器http://localhost:10000/druid/sql.html
Durid 監(jiān)控功能-Web 關(guān)聯(lián)監(jiān)控
需求: 配置Web 關(guān)聯(lián)監(jiān)控配置:Web 應(yīng)用、URI 監(jiān)控
官方文檔
https://github.com/alibaba/druid/wiki/%E5%B8%B8%E8%A7%81%E9%97%AE%E9%A2%98
Web 關(guān)聯(lián)監(jiān)控配置-Web 應(yīng)用、URI 監(jiān)控
DruidDataSourceConfig.java , 注入/ 增加WebStatFilter 用于采集web-jdbc 關(guān)聯(lián)監(jiān)控的數(shù)據(jù)
//配置WebStatFilter, 用于采集web-jdbc關(guān)聯(lián)的監(jiān)控?cái)?shù)據(jù)
@Bean
public FilterRegistrationBean webStatFilter() {
//創(chuàng)建 WebStatFilter
WebStatFilter webStatFilter = new WebStatFilter();
FilterRegistrationBean<WebStatFilter> filterRegistrationBean =
new FilterRegistrationBean<>(webStatFilter);
//默認(rèn)對(duì)所有的url請(qǐng)求進(jìn)行監(jiān)控
filterRegistrationBean.setUrlPatterns(Arrays.asList("/*"));
//排除指定的url
filterRegistrationBean.addInitParameter("exclusions", "*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*");
return filterRegistrationBean;
}
為了測(cè)試方便,修改/WebConfig.java, 放行/sql 請(qǐng)求
重啟項(xiàng)目,看看Web 應(yīng)用和URI 監(jiān)控頁面
完成測(cè)試,重啟項(xiàng)目,看看Web 應(yīng)用和URI 監(jiān)控是否生效
?
?
Durid 監(jiān)控功能-SQL 防火墻
需求: 配置SQL 防火墻
官方文檔https://github.com/alibaba/druid/wiki/%E5%B8%B8%E8%A7%81%E9%97%AE%E9%A2%98
?
?修改DruidDataSourceConfig.java ,加入防火墻監(jiān)控
@ConfigurationProperties("spring.datasource")
@Bean
public DataSource dataSource() throws SQLException {
//1. 配置了 @ConfigurationProperties("spring.datasource")
// 就可以讀取到application.yml的配置
//2. 我們就不需要調(diào)用DruidDataSource 對(duì)象的setXxx, 會(huì)自動(dòng)關(guān)聯(lián)
DruidDataSource druidDataSource = new DruidDataSource();
//加入監(jiān)控功能, 加入了sql防火墻監(jiān)控
druidDataSource.setFilters("stat,wall");
return druidDataSource;
}
?完成測(cè)試,重啟項(xiàng)目,看看SQL 防火墻監(jiān)控是否生效
?
Durid 監(jiān)控功能-Session 監(jiān)控
需求: 配置Session 監(jiān)控
官方文檔https://github.com/alibaba/druid/wiki/%E5%B8%B8%E8%A7%81%E9%97%AE%E9%A2%98?
??
Session 監(jiān)控
重啟項(xiàng)目, 先登錄管理系統(tǒng)
完成測(cè)試, 查看監(jiān)控頁需要輸入用戶名和密碼, 點(diǎn)擊Session 監(jiān)控,可以看到相關(guān)信息
(注意要登錄用戶系統(tǒng),才能看到Session 監(jiān)控信息)
?
?
Druid Spring Boot Starter
基本介紹
1. 前面我們使用的是自己引入druid+配置類方式整合Druid 和監(jiān)控
2. Druid Spring Boot Starter 可以讓程序員在Spring Boot 項(xiàng)目中更加輕松集成Druid 和監(jiān)控?
修改pom.xml 注銷druid 的依賴
注銷DruidDataSourceConfig.java
這時(shí)測(cè)試,druid 失效?
查看druid 文檔https://github.com/alibaba/druid,引入druid starter
確認(rèn)druid starter 引入哪些依賴
修改resources/application.yml 增加配置參數(shù)?
spring:
servlet:
multipart:
max-file-size: 10MB
max-request-size: 50MB
datasource: #配置數(shù)據(jù)源
# 說明: 如果你沒有指定useSSL=true ,啟動(dòng)項(xiàng)目會(huì)報(bào)紅警告, 環(huán)境的問題,靈活處理
url: jdbc:mysql://localhost:3306/spring_boot?useSSL=true&useUnicode=true&characterEncoding=UTF-8
username: root
password: 自己的密碼
driver-class-name: com.mysql.jdbc.Driver
#配置druid和監(jiān)控功能
druid:
stat-view-servlet:
enabled: true
login-username: jack
login-password: 666
reset-enable: false
web-stat-filter: #配置web監(jiān)控
enabled: true
url-pattern: /*
exclusions: '*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*'
filter:
stat: #sql監(jiān)控
slow-sql-millis: 1000
log-slow-sql: true
enabled: true
wall: #配置sql防火墻
enabled: true
config:
drop-table-allow: false
select-all-column-allow: false
重啟項(xiàng)目,完成測(cè)試
文章來源:http://www.zghlxwxcb.cn/news/detail-462308.html
測(cè)試完成后,記得改回成原來的代碼.(個(gè)人習(xí)慣) ...文章來源地址http://www.zghlxwxcb.cn/news/detail-462308.html
到了這里,關(guān)于Spring Boot 數(shù)據(jù)庫操作Druid和HikariDataSource的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!