0. 數據說明 本項目所用數據集包含了一個家庭6個月的用電數據,收集於2007年1月至2007年6月。 這些數據包括有功功率、無功功率、電壓、電流強度、分項計量1(廚房)、分項計量2(洗衣房)和分項計量3(電熱水器和空調)等信息。該數據集共有260,640個測量值,可以為瞭解家庭用電情況提供重要的見 ...
springboot-sample
介紹
軟體架構(當前發行版使用)
- springboot
- hutool-all 非常好的常用java工具庫 官網 maven
- bcprov-jdk18on 一些加密演算法的實現 官網 maven
- h2 純java的資料庫,支持記憶體、文件、網路資料庫 官網 maven
安裝教程
git clone --branch 6.使用加密數據源並配置日誌 [email protected]:simen_net/springboot-sample.git
功能說明
- 配置logback
- 配置了數據源,對資料庫賬號密碼進行加密
- 增加了系統啟動配置
發行版說明
- 完成基本WEB服務 跳轉到發行版
- 完成了KEY初始化功能和全局錯誤處理 跳轉到發行版
- 完成了基本登錄驗證 跳轉到發行版
- 完成了自定義加密進行登錄驗證 跳轉到發行版
- 完成了使用JWT進行授權認證 跳轉到發行版
- 完成了使用加密數據源並配置日誌 跳轉到發行版 查看發行版說明
使用加密數據源並配置日誌
配置logback
配置logback.xml,規範日誌輸出格式,配置info和error日誌輸出為文件(保存30天)
配置數據源
-
在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
-
增加資料庫配置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中讀取加密後的資料庫賬號密碼,使用私鑰解密後註入數據源
- 使用DruidDataSource從application-dev.yaml中載入數據源配置參數
系統啟動配置
- 在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(); }