Springboot简单功能示例-6 使用加密数据源并配置日志
springboot-sample
介绍
软件架构(当前发行版使用)
- springboot
- hutool-all 非常好的常用java工具库 官网 maven
- bcprov-jdk18on 一些加密算法的实现 官网 maven
- h2 纯java的数据库,支持内存、文件、网络数据库 官网 maven
安装教程
git clone --branch 6.使用加密数据源并配置日志 git@gitee.com: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();
}
Springboot简单功能示例-6 使用加密数据源并配置日志的更多相关文章
- 接管SpringBoot对Activiti的数据源自动配置
SpringBoot的自动配置真的让人又爱又恨,但还是爱更多一点. SpringBoot想要帮我们自动配置好一切,但是有时候配置的却并不是我们需要的,甚至有时候会默默的坑我们. 我的项目是一个多数据源 ...
- dubbo+zookeeper+springboot简单示例
目录 dubbo+zookeeper+springboot简单示例 zookeeper安装使用 api子模块 生产者producer 消费者consumer @(目录) dubbo+zookeeper ...
- 记录一次简单的springboot发送邮件功能
场景:经常在我们系统中有通过邮件功能找回密码,或者发送生日祝福等功能,今天记录下springboot发送邮件的简单功能 1.引入maven <!-- 邮件开发--><dependen ...
- SpringBoot整合SpringSecurity示例实现前后分离权限注解
SpringBoot 整合SpringSecurity示例实现前后分离权限注解+JWT登录认证 作者:Sans_ juejin.im/post/5da82f066fb9a04e2a73daec 一.说 ...
- springboot简单入门笔记
一.Spring Boot 入门 1.Spring Boot 简介 简化Spring应用开发的一个框架: 整个Spring技术栈的一个大整合: J2EE开发的一站式解决方案: 2.微服务 2014,m ...
- 【springboot spring mybatis】看我怎么将springboot与spring整合mybatis与druid数据源
目录 概述 1.mybatis 2.druid 壹:spring整合 2.jdbc.properties 3.mybatis-config.xml 二:java代码 1.mapper 2.servic ...
- Spring-Boot 多数据源配置+动态数据源切换+多数据源事物配置实现主从数据库存储分离
一.基础介绍 多数据源字面意思,比如说二个数据库,甚至不同类型的数据库.在用SpringBoot开发项目时,随着业务量的扩大,我们通常会进行数据库拆分或是引入其他数据库,从而我们需要配置多个数据源. ...
- 【java】org.apache.commons.lang3功能示例
org.apache.commons.lang3功能示例 package com.simple.test; import java.util.Date; import java.util.Iterat ...
- 【java开发系列】—— spring简单入门示例
1 JDK安装 2 Struts2简单入门示例 前言 作为入门级的记录帖,没有过多的技术含量,简单的搭建配置框架而已.这次讲到spring,这个应该是SSH中的重量级框架,它主要包含两个内容:控制反转 ...
- SpringBoot系列七:SpringBoot 整合 MyBatis(配置 druid 数据源、配置 MyBatis、事务控制、druid 监控)
1.概念:SpringBoot 整合 MyBatis 2.背景 SpringBoot 得到最终效果是一个简化到极致的 WEB 开发,但是只要牵扯到 WEB 开发,就绝对不可能缺少数据层操作,所有的开发 ...
随机推荐
- Java中的金钱陷阱
前言 有多少小伙伴是被标题 骗 吸引进来的呢,我可不是标题党,今天的文章呢确实跟"金钱"有关系. 但是我们说的不是过度追求金钱而掉入陷阱,而是要说一说在Java程序中,各种跟金钱运 ...
- 爬取豆瓣Top250图书数据
爬取豆瓣Top250图书数据 项目的实现步骤 1.项目结构 2.获取网页数据 3.提取网页中的关键信息 4.保存数据 1.项目结构 2.获取网页数据 对应的网址为https://book.douban ...
- 曲线艺术编程 coding curves 第十章 螺旋曲线(SPIRALS)
原作:Keith Peters https://www.bit-101.com/blog/2022/11/coding-curves/ 译者:池中物王二狗(sheldon) 源码:github: ht ...
- CKS 考试题整理 (13)-使用 sysdig 检查容器里里的异常进程
Task 使用运行时检测工具来检测 Pod tomcat 单个容器中频发生成和执行的异常进程 有两种工具可供使用: sysdig falco 注: 这些工具只预装在cluster的工作节点,不在 ma ...
- python3使用pjsua进行呼叫测试
环境:CentOS 7.6_x64 Python版本 :3.9.12 pjsip版本:2.13 之前写过一篇CentOS7环境编译python3.9版本pjsua的文章: https://w ...
- tSNE算法在自然语言处理中的应用:文本降维和可视化
目录 技术原理及概念 t-SNE(Toeplitz-Stochastic Neural Network)是一种常用的文本降维和可视化算法,它的核心思想是将高维文本数据映射到低维空间,同时保持数据的一致 ...
- 如何扩展及优化CI/CD流水线?
如今应用程序的开发通常由多个开发人员组成的团队完成.每个人或团队在项目中发挥自己的作用,然后我们发现在项目的末尾总是有几段代码需要编译,根据每个人的工作方法,管理这种集成可能会浪费很多时间.持续集成和 ...
- -Xmx参数建议设置为系统内存的多少?
在设置 -Xmx 参数时,建议将其设置为系统内存的一定比例.具体的比例需要根据应用程序的特点.系统资源的限制等各种因素进行综合考虑. 如果将 -Xmx 参数设置得过小,可能会导致 JVM 分配的堆内存 ...
- 搭载ChatGPT之后的表格插件又有哪些新的改变——Function calling增强
摘要:本文由葡萄城技术团队于博客园原创并首发.葡萄城为开发者提供专业的开发工具.解决方案和服务,赋能开发者. 在<大火的ChatGPT与SpreadJS结合会有哪些意想不到的效果>一文中提 ...
- ASP.NET Core 6框架揭秘实例演示[42]:检查应用的健康状况
现代化的应用及服务的部署场景主要体现在集群化.微服务和容器化,这一切都建立在针对部署应用或者服务的健康检查上.ASP.NET提供的健康检查不仅可能确定目标应用或者服务的可用性,还具有健康报告发布功能. ...