Springboot簡單功能示例-6 使用加密數據源並配置日誌

来源:https://www.cnblogs.com/xiuligong-net/archive/2023/09/26/17731352.html
-Advertisement-
Play Games

0. 數據說明 本項目所用數據集包含了一個家庭6個月的用電數據,收集於2007年1月至2007年6月。 這些數據包括有功功率、無功功率、電壓、電流強度、分項計量1(廚房)、分項計量2(洗衣房)和分項計量3(電熱水器和空調)等信息。該數據集共有260,640個測量值,可以為瞭解家庭用電情況提供重要的見 ...


springboot-sample

介紹

springboot簡單示例 跳轉到發行版 查看發行版說明

軟體架構(當前發行版使用)

  1. springboot
  2. hutool-all 非常好的常用java工具庫 官網 maven
  3. bcprov-jdk18on 一些加密演算法的實現 官網 maven
  4. h2 純java的資料庫,支持記憶體、文件、網路資料庫 官網 maven

安裝教程

git clone --branch 6.使用加密數據源並配置日誌 [email protected]:simen_net/springboot-sample.git
 

功能說明

  1. 配置logback
  2. 配置了數據源,對資料庫賬號密碼進行加密
  3. 增加了系統啟動配置

發行版說明

  1. 完成基本WEB服務 跳轉到發行版
  2. 完成了KEY初始化功能和全局錯誤處理 跳轉到發行版
  3. 完成了基本登錄驗證 跳轉到發行版
  4. 完成了自定義加密進行登錄驗證 跳轉到發行版
  5. 完成了使用JWT進行授權認證 跳轉到發行版
  6. 完成了使用加密數據源並配置日誌 跳轉到發行版 查看發行版說明

使用加密數據源並配置日誌

配置logback

配置logback.xml,規範日誌輸出格式,配置info和error日誌輸出為文件(保存30天)

配置數據源

  1. application-dev.yaml中配置數據源

    # spring基本配置
    spring:
      # 資料庫連接池配置
      datasource:
        driver-class-name: org.h2.Driver
        # 使用H2資料庫,此處不配置url,在com.strong.config.DataSourceConfig中配置本地目錄資料庫
        # url: jdbc:h2:mem:simen
        # url: jdbc:h2:./simen
        username: BKkV4rITSiMsMBEZtIoNeLivkfJYjRNPJjX0EJ21hxMQ/oflQL5Qk3u8B7RhqfD+KIkOkPHDSNx3c67q78lTwLqTOCuYkltDI2R9kES3d4yXb+bFxtXAm9qs7m+EMLX85MRX
        password: BDNZEUz2C0XDhU0y3OtKUCVkoLKVlTo5EXEIhBtKHwAGT5heBYyKkkd0I5J8A1PBRGkczhA86MqI2SQTXXuJ+b+ki4jqhlNhELG+ts6T/VZugd6pKs5bbqcSDWqT5s0XEpbgJ1Ah7aE56AbazjVaBX5U3FsEU/KhWHQ3qx0KoN47
        # 連接池類型
        type: com.alibaba.druid.pool.DruidDataSource
        # 參數配置
        druid:
          # 初始化時建立物理連接的個數
          initialSize: 5
          # 最小連接池數量
          minIdle: 20
          # 最大連接池數量
          maxActive: 50
          # 獲取連接時最大等待時間,單位:毫秒
          maxWait: 60000
    
          # 是否緩存PSCache,PSCache對支持游標的資料庫性能提升巨大
          poolPreparedStatements: true
          # 啟用PSCache,必須配置大於0
          maxPoolPreparedStatementPerConnectionSize: 20
    
          # 用來檢測連接是否有效的sql
          validationQuery: select 1
          # 檢測連接是否有效的超時時間,單位:秒
          validationQueryTimeout: 5
          # 申請連接時執行validationQuery檢測連接是否有效,會降低性能
          testOnBorrow: false
          # 歸還連接時執行validationQuery檢測連接是否有效,會降低性能
          testOnReturn: false
          # 申請連接的時候檢測連接是否有效
          testWhileIdle: true
    
          # 空閑時間超過minEvictableIdleTimeMillis,是否強制keepAlive
          keepAlive: false
          # 空閑時間大於等於minEvictableIdleTimeMillis則關閉物理連接,單位是毫秒
          timeBetweenEvictionRunsMillis: 60000
          # 連接保持空閑而不被驅逐的最小時間,單位毫秒
          minEvictableIdleTimeMillis: 30000
    
          # 物理連接初始化的時候執行的sql。
          connectionInitSqls: select 0
    
          # 常用的插件有:監控統計用的filter:stat、日誌用的filter:log4j、防禦sql註入的filter:wall
          filters: stat,wall,slf4j
    
          # 通過connectProperties屬性來打開mergeSql功能;慢SQL記錄
          connectionProperties: |-
            druid.stat.mergeSql=false;
            druid.stat.slowSqlMillis=5000
     
  2. 增加資料庫配置DataSourceConfig,對賬號密碼進行加密,解決項目源碼提交到公共git造成賬號密碼泄露的問題。

    /**
     * 從預設參數配置數據源
     *
     * @return {@link DataSource}
     */
    @Bean
    @ConfigurationProperties(prefix = "spring.datasource.druid")
    public DataSource getDataSource() {
        DruidDataSource druidDataSource = DruidDataSourceBuilder.create().build();
        // 如果是H2資料庫,則註入載入
        if (StrUtil.equals(org.h2.Driver.class.getName(), driverClassName)) {
            // 配置資料庫URL
            String strJdbcUrl = "jdbc:h2:tcp://localhost:9092/" +
                    StrongUtils.getStaticPath(STR_DIRECTORY_STATICS, databaseName);
            druidDataSource.setUrl(strJdbcUrl);
            log.info("成功連接H2資料庫[{}]", strJdbcUrl);
        }
        // 使用私鑰解密賬號密碼,註入數據源
        druidDataSource.setUsername(SM2_OBJ.decryptStr(username, KeyType.PrivateKey));
        druidDataSource.setPassword(SM2_OBJ.decryptStr(password, KeyType.PrivateKey));
        return druidDataSource;
    }
     
    • 使用DruidDataSource從application-dev.yaml中載入數據源配置參數DruidDataSource druidDataSource = DruidDataSourceBuilder.create().build();
    • 在使用H2資料庫時,使用項目名為資料庫名,資料庫文件保存在當前項目所在目錄中的static
    • application-dev.yaml中讀取加密後的資料庫賬號密碼,使用私鑰解密後註入數據源

系統啟動配置

  1. SpringbootSampleApplication.java中配置啟動
    public static void main(String[] args) {
        // 測試加解密、簽名字元串
        SecurityUtils.testPasswordEncode();
    
        // 生成數據密碼加密後字元串
        String strDatabaseUsername = "sa";
        String strDatabasePassword = "123456";
        log.info("\n使用公鑰加密資料庫賬號密碼,需將加密字元串配置到application.yaml\n資料庫用戶名[{}] 加密後[{}]\n密碼[{}] 加密後[{}]\n",
                strDatabaseUsername, SM2_OBJ.encryptBase64(strDatabaseUsername, KeyType.PublicKey),
                strDatabasePassword, SM2_OBJ.encryptBase64(strDatabasePassword, KeyType.PublicKey)
        );
    
        // 啟動H2伺服器
        H2Utils.startH2Server();
        // 設置當前時區
        TimeZone.setDefault(TimeZone.getTimeZone(STR_TIME_ZONE_ASIA_SHANGHAI));
        // 獲取系統對象
        SpringApplication application = new SpringApplication(SpringbootSampleApplication.class);
        // 系統pid記錄文件
        String strPidFile = StrongUtils.getStaticPath(STR_FILE_APP_PID);
        // 將pid監聽信息寫入記錄文件,使用 cat /xxxx/app.id | xargs kill 停止服務
        application.addListeners(new ApplicationPidFileWriter(strPidFile));
        log.info("將pid監聽信息寫入記錄文件{}", strPidFile);
        // 啟動系統
        application.run();
    }

     


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 這裡給大家分享我在網上總結出來的一些知識,希望對大家有所幫助 前言 前兩天我的新同事告訴我一個困擾著他的問題,就是低代碼平臺中存在很多模塊,這些模塊的渲染是由模塊自身處理的,簡言之就是組件請求了自己的數據,一個兩個模塊還好,要是一次請求了幾十個模塊,就會出現請求阻塞的問題,而且模塊的請求都特別大。 ...
  • 頁面效果 具體實現 新增 1、監聽滑鼠抬起事件,通過window.getSelection()方法獲取滑鼠用戶選擇的文本範圍或游標的當前位置。 2、通過 選中的文字長度是否大於0或window.getSelection().isCollapsed (返回一個布爾值用於描述選區的起始點和終止點是否位於 ...
  • 標簽組件的效果如下 組件作用 這是一個div,包含了兩個文本框,後面是添加和刪除按鈕 添加按鈕複製出新的div,除了文本框沒有內容,其它都上面一樣 刪除按鈕將當前行div刪除 組件實現 <template> <div> <template v-for="(item,index) in tags"> ...
  • 用到的技術 父組件向子組件的傳值 類型檢查和預設值:您可以為props指定類型檢查和預設值。這可以確保傳遞給子組件的數據符合期望的類型,以及在沒有傳遞數據時具有合理的預設值。例如: props: { message: { type: String, default: 'Default Message ...
  • 首先,先說說我要實現的內容:如下圖,點“新增”會添加一個灰框內容,form表單是一個數組,一個灰框為一個對象,各對象保存時各自校驗自己表單里的內容,互不幹擾! 上頁面代碼(看部分代碼就懂了): 1 <div v-for="(item,index) in formList" :key="index"> ...
  • 我們是袋鼠雲數棧 UED 團隊,致力於打造優秀的一站式數據中台產品。我們始終保持工匠精神,探索前端道路,為社區積累並傳播經驗價值。 本文作者:空山 什麼是沙箱 沙箱即 SandBox,它是一種安全機制,用於嚴格控制訪問資源。通過在程式中創建一個獨立的運行環境,把一些來源不可信、具有破壞力或者又是無法 ...
  • 最近在做性能優化,具體優化手段,網上鋪天蓋地,這裡就不重覆了。性能優化可分為以下幾個維度:代碼層面、構建層面、網路層面。本文主要是從代碼層面探索前端性能,主要分為以下 4 個小節。使用 CSS 替代 JS、深度剖析 JS、前端演算法、電腦底層 ...
  • 集合概述 為了保存數量不確定的數據,以及保存具有映射關係的數據,Java 提供了集合類。集合類主要負責保存、盛裝其他數據,因此集合類也被稱為容器類。所有的集合都位於java.util包下 Java 的集合類主要由兩個介面派生而出:Collection和Map,Collection和Map 是 Jav ...
一周排行
    -Advertisement-
    Play Games
  • 前言 微服務架構已經成為搭建高效、可擴展系統的關鍵技術之一,然而,現有許多微服務框架往往過於複雜,使得我們普通開發者難以快速上手並體驗到微服務帶了的便利。為瞭解決這一問題,於是作者精心打造了一款最接地氣的 .NET 微服務框架,幫助我們輕鬆構建和管理微服務應用。 本框架不僅支持 Consul 服務註 ...
  • 先看一下效果吧: 如果不會寫動畫或者懶得寫動畫,就直接交給Blend來做吧; 其實Blend操作起來很簡單,有點類似於在操作PS,我們只需要設置關鍵幀,滑鼠點來點去就可以了,Blend會自動幫我們生成我們想要的動畫效果. 第一步:要創建一個空的WPF項目 第二步:右鍵我們的項目,在最下方有一個,在B ...
  • Prism:框架介紹與安裝 什麼是Prism? Prism是一個用於在 WPF、Xamarin Form、Uno 平臺和 WinUI 中構建鬆散耦合、可維護和可測試的 XAML 應用程式框架 Github https://github.com/PrismLibrary/Prism NuGet htt ...
  • 在WPF中,屏幕上的所有內容,都是通過畫筆(Brush)畫上去的。如按鈕的背景色,邊框,文本框的前景和形狀填充。藉助畫筆,可以繪製頁面上的所有UI對象。不同畫筆具有不同類型的輸出( 如:某些畫筆使用純色繪製區域,其他畫筆使用漸變、圖案、圖像或繪圖)。 ...
  • 前言 嗨,大家好!推薦一個基於 .NET 8 的高併發微服務電商系統,涵蓋了商品、訂單、會員、服務、財務等50多種實用功能。 項目不僅使用了 .NET 8 的最新特性,還集成了AutoFac、DotLiquid、HangFire、Nlog、Jwt、LayUIAdmin、SqlSugar、MySQL、 ...
  • 本文主要介紹攝像頭(相機)如何採集數據,用於類似攝像頭本地顯示軟體,以及流媒體數據傳輸場景如傳屏、視訊會議等。 攝像頭採集有多種方案,如AForge.NET、WPFMediaKit、OpenCvSharp、EmguCv、DirectShow.NET、MediaCaptre(UWP),網上一些文章以及 ...
  • 前言 Seal-Report 是一款.NET 開源報表工具,擁有 1.4K Star。它提供了一個完整的框架,使用 C# 編寫,最新的版本採用的是 .NET 8.0 。 它能夠高效地從各種資料庫或 NoSQL 數據源生成日常報表,並支持執行複雜的報表任務。 其簡單易用的安裝過程和直觀的設計界面,我們 ...
  • 背景需求: 系統需要對接到XXX官方的API,但因此官方對接以及管理都十分嚴格。而本人部門的系統中包含諸多子系統,系統間為了穩定,程式間多數固定Token+特殊驗證進行調用,且後期還要提供給其他兄弟部門系統共同調用。 原則上:每套系統都必須單獨接入到官方,但官方的接入複雜,還要官方指定機構認證的證書 ...
  • 本文介紹下電腦設備關機的情況下如何通過網路喚醒設備,之前電源S狀態 電腦Power電源狀態- 唐宋元明清2188 - 博客園 (cnblogs.com) 有介紹過遠程喚醒設備,後面這倆天瞭解多了點所以單獨加個隨筆 設備關機的情況下,使用網路喚醒的前提條件: 1. 被喚醒設備需要支持這WakeOnL ...
  • 前言 大家好,推薦一個.NET 8.0 為核心,結合前端 Vue 框架,實現了前後端完全分離的設計理念。它不僅提供了強大的基礎功能支持,如許可權管理、代碼生成器等,還通過採用主流技術和最佳實踐,顯著降低了開發難度,加快了項目交付速度。 如果你需要一個高效的開發解決方案,本框架能幫助大家輕鬆應對挑戰,實 ...