最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

spring boot基于DRUID實(shí)現(xiàn)數(shù)據(jù)源監(jiān)控過(guò)程解析

 更新時(shí)間:2019年12月09日 09:31:07   作者:if年少有為  
這篇文章主要介紹了spring boot基于DRUID實(shí)現(xiàn)數(shù)據(jù)源監(jiān)控過(guò)程解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下

這篇文章主要介紹了spring boot基于DRUID實(shí)現(xiàn)數(shù)據(jù)源監(jiān)控過(guò)程解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下

隨著需求和技術(shù)的日益革新,spring boot框架是越來(lái)越流行,她也越來(lái)越多地出現(xiàn)在我們的項(xiàng)目中,當(dāng)然最主要的原因還是因?yàn)閟pring boot構(gòu)建項(xiàng)目實(shí)在是太爽了,構(gòu)建方便,開發(fā)簡(jiǎn)單,而且效率高。今天我們并不是來(lái)專門學(xué)習(xí)spring boot項(xiàng)目的,我們要講的是數(shù)據(jù)源的加密和監(jiān)控,監(jiān)控到好說(shuō),就是不監(jiān)控也沒什么問(wèn)題,但是數(shù)據(jù)源加密卻涉及到我們的系統(tǒng)安全。

對(duì)于平時(shí)的學(xué)習(xí)測(cè)試,我們?cè)陧?xiàng)目中配置數(shù)據(jù)庫(kù)明文密碼是沒什么問(wèn)題的,因?yàn)槲覀兊臄?shù)據(jù)不重要,也就無(wú)所謂,但是在現(xiàn)實(shí)環(huán)境下的生產(chǎn)平臺(tái),配置明文密碼極有可能會(huì)造成我們數(shù)據(jù)庫(kù)密碼泄露,最終導(dǎo)致我們的生產(chǎn)數(shù)據(jù)泄露,這也就體現(xiàn)了生產(chǎn)環(huán)境數(shù)據(jù)源加密的必要性。下面我們就來(lái)看看如何實(shí)現(xiàn)數(shù)據(jù)源加密吧。

創(chuàng)建spring boot項(xiàng)目

創(chuàng)建過(guò)程就不贅述了,下面是我的項(xiàng)目依賴:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.2.1.RELEASE</version>
    <relativePath/> <!-- lookup parent from repository -->
  </parent>
  <groupId>io.githu.syske</groupId>
  <artifactId>druid-datasouce-decrypt</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <name>druid-datasouce-decrypt</name>
  <description>Demo project for Spring Boot</description>

  <properties>
    <java.version>1.8</java.version>
  </properties>

  <dependencies>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
      <groupId>org.mybatis.spring.boot</groupId>
      <artifactId>mybatis-spring-boot-starter</artifactId>
      <version>2.1.1</version>
    </dependency>

    <dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
      <scope>runtime</scope>
    </dependency>

    <!-- 阿里巴巴druid -->
    <dependency>
      <groupId>com.alibaba</groupId>
      <artifactId>druid-spring-boot-starter</artifactId>
      <version>1.1.10</version>
    </dependency>

    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-test</artifactId>
      <scope>test</scope>
      <exclusions>
        <exclusion>
          <groupId>org.junit.vintage</groupId>
          <artifactId>junit-vintage-engine</artifactId>
        </exclusion>
      </exclusions>
    </dependency>
  </dependencies>

  <build>
    <plugins>
      <plugin>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-maven-plugin</artifactId>
      </plugin>
    </plugins>
  </build>

</project>

如果你的數(shù)據(jù)庫(kù)是Oracle,那么你要把mysql的數(shù)據(jù)庫(kù)驅(qū)動(dòng)替換成Oracle驅(qū)動(dòng)

修改spring boot項(xiàng)目配置信息

server:
 port: 8083

我采用的是yaml的方式,然后啟動(dòng)你的項(xiàng)目,因?yàn)闆]有controller和其他的代碼,所以沒什么效果,但是項(xiàng)目可以正常啟動(dòng)。

加密數(shù)據(jù)源密碼,創(chuàng)建publickey

這里沒什么好講的,我直接放代碼:

import org.junit.Test;

/**
 * @program: druid-datasouce-decrypt
 * @description:
 * @author: liu yan
 * @create: 2019-12-02 18:34
 */
public class DBencrydtTest {
  @Test
  public void test() {
    String[] args = {"root"};
    try {
      com.alibaba.druid.filter.config.ConfigTools.main(args);
    } catch (Exception e) {

    }

    System.out.println();
  }
}

需要說(shuō)明的是,args數(shù)組中放置的是密碼,直接運(yùn)行上面的代碼,你會(huì)看到控制臺(tái)會(huì)打印如下信息:

privateKey:MIIBVAIBADANBgkqhkiFWERAERFrterfgdggE6AgEAAkEAqboz+iNXPv1jgKAhDW7W+L/NwqG6GDTo49BjmlMg3WxBg4w9h4RC3oRO40EOjL7+DtEBBlCZ6OHZfZWKh17FmwIDAQABAkA/azwQszPebX/IiAzRoCDjQYf4ucV3Vg3PUgZlm7okAbsXrxz2xrdnM8Er08YKm3vUOmWQmSvaOI3CqdrK1f2BAiEA4XbEkCOxWVxbDLihyudClvrgLbZZyODlx5E2phn4gXMCIQDAtvMeJiXlGQBxFr/ci0r99FiYUeag/ZFwOjyhIzWBOQIgYg3bEqzTNn/aAUBS7QGCjlLxKDBD//7/L7nRwI9O6k0CIQCdBnUiY8MM4UpS206JzZXVR3vI4TMiinovD8THJ4E5QQIgRM1QlD1PG5YTxBxZMrLm2weBxsqXhvdJuTc1GXmoUxg=
publicKey:MFwwDQYJKoZIhvcewrwerfrrgfg43534M/ojVz79Y4CgIQ1u1vi/zcKhuhg06OPQY5pTIN1sQYOMPYeEQt6ETuNBDoy+/g7RAQZQmejh2X2ViodexZsCAwEAAQ==
password:O9JBjc86r9IhEoIE6jevJtgsgCXZAKCWH2UtO0tbG62zqIK5G5qJOCm1u9ju+lnno15vmq+TO5WqEWGzvkDNGg==

privateKey是你的私鑰,publicKey是公鑰,password就是你加密后的密碼。我們用到的配置有兩個(gè),一個(gè)是公鑰,一個(gè)是密碼,配置公鑰的原因是要通過(guò)公鑰進(jìn)行解密。將如上信息保存好,后面再spring boot的配置中要用到。

增加數(shù)據(jù)源相關(guān)配置

增加數(shù)據(jù)源配置信息:

# 阿里巴巴druid數(shù)據(jù)源配置
spring:
 datasource:
 # 數(shù)據(jù)源驅(qū)動(dòng)類型,這里是druid
  type: com.alibaba.druid.pool.DruidDataSource
  # sql腳本編碼
  sql-script-encoding: utf-8
  druid:
  # 驅(qū)動(dòng)的類名
   driver-class-name: com.mysql.cj.jdbc.Driver
   # 數(shù)據(jù)庫(kù)連接密碼
   username: root
   # 數(shù)據(jù)庫(kù)地址
   url: jdbc:mysql://127.0.0.1:3307/spring?characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull&allowMultiQueries=true&serverTimezone=Asia/Shanghai
   # 這里配置的是前面我們生成的密碼
   password: Y2YOft/vPjw/JFPkevqZZKi8pCHu5ambR2ivSxgipTbL76pOoxNw3Un5Hcarbe9AqUImr+wS7YI6TjJZOVYjzA==
   # 這里設(shè)置連接配置,key配置的是我們前面生成的publicKey
   connection-properties: config.decrypt=true;config.decrypt.key=MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAJI/xqbyvpVttxfAKulKeSTIb7tZAGaFcPyTnE2r7AHTQ8kOnqKXDda4u59umt9XBFxi7db28KxeVooB138zuRUCAwEAAQ==
   filter:
    config:
    # 啟用druid的攔截器
     enabled: true
   # 連接池的配置信息
   # 初始化時(shí)建立物理連接的個(gè)數(shù)
   initial-size: 3
   # 連接池最小連接數(shù)
   min-idle: 3
   # 連接池最大連接數(shù)
   max-active: 20
   # 獲取連接時(shí)最大等待時(shí)間,單位毫秒
   max-wait: 60000
   # 申請(qǐng)連接的時(shí)候檢測(cè),如果空閑時(shí)間大于timeBetweenEvictionRunsMillis,執(zhí)行validationQuery檢測(cè)連接是否有效。
   test-while-idle: true
   # 既作為檢測(cè)的間隔時(shí)間又作為testWhileIdel執(zhí)行的依據(jù)
   time-between-connect-error-millis: 60000
   # 銷毀線程時(shí)檢測(cè)當(dāng)前連接的最后活動(dòng)時(shí)間和當(dāng)前時(shí)間差大于該值時(shí),關(guān)閉當(dāng)前連接
   min-evictable-idle-time-millis: 30000
   # 用來(lái)檢測(cè)連接是否有效的sql 必須是一個(gè)查詢語(yǔ)句
   # mysql中為 select 'x'
   # oracle中為 select 1 from dual
   validationQuery: select 'x'
   # 申請(qǐng)連接時(shí)會(huì)執(zhí)行validationQuery檢測(cè)連接是否有效,開啟會(huì)降低性能,默認(rèn)為true
   test-on-borrow: false
   # 歸還連接時(shí)會(huì)執(zhí)行validationQuery檢測(cè)連接是否有效,開啟會(huì)降低性能,默認(rèn)為true
   test-on-return: false
   # 是否緩存preparedStatement,mysql5.5+建議開啟
   pool-prepared-statements: true
   # 當(dāng)值大于0時(shí)poolPreparedStatements會(huì)自動(dòng)修改為true
   max-pool-prepared-statement-per-connection-size: 20
   # 合并多個(gè)DruidDataSource的監(jiān)控?cái)?shù)據(jù)
   use-global-data-source-stat: false
   # 配置擴(kuò)展插件
   #監(jiān)控統(tǒng)計(jì)攔截的filters
   filters: stat,wall,slf4j
   # 通過(guò)connectProperties屬性來(lái)打開mergeSql功能;慢SQL記錄
   connect-properties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000
   # 定時(shí)輸出統(tǒng)計(jì)信息到日志中,并每次輸出日志會(huì)導(dǎo)致清零(reset)連接池相關(guān)的計(jì)數(shù)器。
   time-between-log-stats-millis: 300000
   # 配置DruidStatFilter
   web-stat-filter:
    enabled: true
    url-pattern: '/*'
    exclusions: '*.js,*.gif,*.jpg,*.bmp,*.png,*.css,*.ico,/druid/*'
   # 配置DruidStatViewServlet
   stat-view-servlet:
    # 是否啟用StatViewServlet(監(jiān)控頁(yè)面)默認(rèn)值為false(考慮到安全問(wèn)題默認(rèn)并未啟動(dòng),如需啟用建議設(shè)置密碼或白名單以保障安全)
    enabled: true
    url-pattern: '/druid/*'
    # IP白名單(沒有配置或者為空,則允許所有訪問(wèn))
    allow: 127.0.0.1,192.168.0.1
    # IP黑名單 (存在共同時(shí),deny優(yōu)先于allow)
    deny: 192.168.0.128
    # 禁用HTML頁(yè)面上的“Reset All”功能
    reset-enable: false
    # 登錄名
    login-username: admin
    # 登錄密碼
    login-password: admin

上面?zhèn)渥⒁呀?jīng)很詳細(xì)了,這里要強(qiáng)調(diào)的有兩個(gè)地方,一個(gè)是key那里配置的是publicKey,不要配錯(cuò)了,一個(gè)是要注意 validationQuery這里mysql和Oracle是不一樣的,當(dāng)然你要可以移除該配置。

上面還加了數(shù)據(jù)源監(jiān)控的配置信息,注釋已經(jīng)夠詳細(xì)了。以上配置完成后就可以啟動(dòng)你的項(xiàng)目了,如果沒有報(bào)錯(cuò),那說(shuō)明你的配置沒有問(wèn)題,如果啟動(dòng)的時(shí)候報(bào)錯(cuò),說(shuō)明你的配置有問(wèn)題。

項(xiàng)目啟動(dòng)后,要進(jìn)入druid數(shù)據(jù)源監(jiān)控頁(yè)面,只需要輸入如下你的項(xiàng)目地址+/druid即可,比如我的地址:

http://localhost:8083/druid

然后輸入你在配置信息里面加入的用戶名和密碼,你就可以看見監(jiān)控頁(yè)面了,如果要查看sql相關(guān)監(jiān)控信息,你還要完善自己的項(xiàng)目,引入mybatis,配置你的sql。

結(jié)語(yǔ)

至此,我們的項(xiàng)目就已經(jīng)完成了,根據(jù)以上過(guò)程,我們發(fā)下數(shù)據(jù)源加密和監(jiān)控的核心是要添加正確的配置信息。如果在實(shí)際開發(fā)過(guò)程中發(fā)下錯(cuò)誤,最主要的還是要檢查我們的配置是否正確。

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • java中JSONObject轉(zhuǎn)換為HashMap(方法+main方法調(diào)用實(shí)例)

    java中JSONObject轉(zhuǎn)換為HashMap(方法+main方法調(diào)用實(shí)例)

    這篇文章主要介紹了java中JSONObject轉(zhuǎn)換為HashMap(方法+main方法調(diào)用實(shí)例),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-11-11
  • RabbitMQ集群實(shí)現(xiàn)消息的高可用性和負(fù)載均衡

    RabbitMQ集群實(shí)現(xiàn)消息的高可用性和負(fù)載均衡

    文章解釋了RabbitMQ集群的概念及其構(gòu)建目的,詳細(xì)闡述了其底層原理,包括Erlang/OTP的分布式基因、ErlangCookie認(rèn)證和分布式進(jìn)程管理,感興趣的朋友跟隨小編一起看看吧
    2026-04-04
  • Spring data JPA只查詢部分字段問(wèn)題及解決

    Spring data JPA只查詢部分字段問(wèn)題及解決

    這篇文章主要介紹了Spring data JPA只查詢部分字段問(wèn)題及解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-08-08
  • 詳解Java編程JDialog窗體的用法及實(shí)例

    詳解Java編程JDialog窗體的用法及實(shí)例

    這篇文章主要介紹了Java編程中JDialog窗體的用法及實(shí)例,描述了其特征,具有一定參考價(jià)值,需要的朋友可以了解下。
    2017-09-09
  • log4j 詳解異步日志的配置和測(cè)試

    log4j 詳解異步日志的配置和測(cè)試

    這篇文章主要介紹了 log4j 詳解異步日志的配置和測(cè)試的相關(guān)資料,需要的朋友可以參考下
    2017-01-01
  • java執(zhí)行shell并獲取shell輸出日志方式

    java執(zhí)行shell并獲取shell輸出日志方式

    這篇文章主要介紹了java執(zhí)行shell并獲取shell輸出日志方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-04-04
  • Mybatis的詳細(xì)使用教程

    Mybatis的詳細(xì)使用教程

    這篇文章主要介紹了Mybatis的詳細(xì)使用教程,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下
    2016-12-12
  • Spring多線程通過(guò)@Scheduled實(shí)現(xiàn)定時(shí)任務(wù)

    Spring多線程通過(guò)@Scheduled實(shí)現(xiàn)定時(shí)任務(wù)

    這篇文章主要介紹了Spring多線程通過(guò)@Scheduled實(shí)現(xiàn)定時(shí)任務(wù),@Scheduled?定時(shí)任務(wù)調(diào)度注解,是spring定時(shí)任務(wù)中最重要的,下文關(guān)于其具體介紹,需要的小伙伴可以參考一下
    2022-05-05
  • Java反射(Class類,Class對(duì)象獲取)

    Java反射(Class類,Class對(duì)象獲取)

    下面是對(duì)Java反射機(jī)制是在程序的運(yùn)行過(guò)程中,Java語(yǔ)言的反射機(jī)制的超詳細(xì)解說(shuō),點(diǎn)進(jìn)來(lái)的小伙伴不要錯(cuò)過(guò)奧
    2021-08-08
  • java 多線程與并發(fā)之volatile詳解分析

    java 多線程與并發(fā)之volatile詳解分析

    volatile這個(gè)關(guān)鍵字可能很多朋友都聽說(shuō)過(guò),或許也都用過(guò)。在Java 5之前,它是一個(gè)備受爭(zhēng)議的關(guān)鍵字,因?yàn)樵诔绦蛑惺褂盟鶗?huì)導(dǎo)致出人意料的結(jié)果。在Java 5之后,volatile關(guān)鍵字才得以重獲生機(jī)
    2021-11-11

最新評(píng)論

南昌县| 佳木斯市| 徐汇区| 洮南市| 靖远县| 青龙| 织金县| 岢岚县| 饶阳县| 莲花县| 甘孜县| 遵义市| 永仁县| 门头沟区| 双城市| 健康| 兴仁县| 广饶县| 永城市| 镶黄旗| 轮台县| 黔西县| 昆山市| 鄂温| 辉县市| 文水县| 昭通市| 彭山县| 策勒县| 聊城市| 南投市| 余姚市| 泸州市| 青田县| 闻喜县| 甘泉县| 长垣县| 兰州市| 隆化县| 卫辉市| 苏尼特左旗|