springboot-sample

介绍

springboot简单示例 跳转到发行版 查看发行版说明

软件架构(当前发行版使用)

  1. springboot
  2. hutool-all 非常好的常用java工具库 官网 maven
  3. bcprov-jdk18on 一些加密算法的实现 官网 maven
  4. h2 纯java的数据库,支持内存、文件、网络数据库 官网 maven

安装教程

git clone --branch 6.使用加密数据源并配置日志 git@gitee.com: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();
    }

Springboot简单功能示例-6 使用加密数据源并配置日志的更多相关文章

  1. 接管SpringBoot对Activiti的数据源自动配置

    SpringBoot的自动配置真的让人又爱又恨,但还是爱更多一点. SpringBoot想要帮我们自动配置好一切,但是有时候配置的却并不是我们需要的,甚至有时候会默默的坑我们. 我的项目是一个多数据源 ...

  2. dubbo+zookeeper+springboot简单示例

    目录 dubbo+zookeeper+springboot简单示例 zookeeper安装使用 api子模块 生产者producer 消费者consumer @(目录) dubbo+zookeeper ...

  3. 记录一次简单的springboot发送邮件功能

    场景:经常在我们系统中有通过邮件功能找回密码,或者发送生日祝福等功能,今天记录下springboot发送邮件的简单功能 1.引入maven <!-- 邮件开发--><dependen ...

  4. SpringBoot整合SpringSecurity示例实现前后分离权限注解

    SpringBoot 整合SpringSecurity示例实现前后分离权限注解+JWT登录认证 作者:Sans_ juejin.im/post/5da82f066fb9a04e2a73daec 一.说 ...

  5. springboot简单入门笔记

    一.Spring Boot 入门 1.Spring Boot 简介 简化Spring应用开发的一个框架: 整个Spring技术栈的一个大整合: J2EE开发的一站式解决方案: 2.微服务 2014,m ...

  6. 【springboot spring mybatis】看我怎么将springboot与spring整合mybatis与druid数据源

    目录 概述 1.mybatis 2.druid 壹:spring整合 2.jdbc.properties 3.mybatis-config.xml 二:java代码 1.mapper 2.servic ...

  7. Spring-Boot 多数据源配置+动态数据源切换+多数据源事物配置实现主从数据库存储分离

    一.基础介绍 多数据源字面意思,比如说二个数据库,甚至不同类型的数据库.在用SpringBoot开发项目时,随着业务量的扩大,我们通常会进行数据库拆分或是引入其他数据库,从而我们需要配置多个数据源. ...

  8. 【java】org.apache.commons.lang3功能示例

    org.apache.commons.lang3功能示例 package com.simple.test; import java.util.Date; import java.util.Iterat ...

  9. 【java开发系列】—— spring简单入门示例

    1 JDK安装 2 Struts2简单入门示例 前言 作为入门级的记录帖,没有过多的技术含量,简单的搭建配置框架而已.这次讲到spring,这个应该是SSH中的重量级框架,它主要包含两个内容:控制反转 ...

  10. SpringBoot系列七:SpringBoot 整合 MyBatis(配置 druid 数据源、配置 MyBatis、事务控制、druid 监控)

    1.概念:SpringBoot 整合 MyBatis 2.背景 SpringBoot 得到最终效果是一个简化到极致的 WEB 开发,但是只要牵扯到 WEB 开发,就绝对不可能缺少数据层操作,所有的开发 ...

随机推荐

  1. 【LeetCode专题#基本计算器】基本计算器I,图解中序表达式转逆波兰表达式,太难了

    基本计算器 https://leetcode.cn/problems/basic-calculator/?envType=list&envId=cKNEfNsF 给你一个字符串表达式 s ,请 ...

  2. 如何使用idea来查找所有未使用的代码?

    背景 项目组需要对开发的项目进行一次清理,把一些未被引用的代码清理掉. 我们知道一段代码未被引用,那么代码通常是灰色的. 但是一个完整的项目,会存在成千上万个Java文件,如果一个一个看去需要花费太多 ...

  3. GPT3的应用领域:机器翻译、文本生成、文本摘要

    目录 1. 引言 2. 技术原理及概念 3. 实现步骤与流程 3.1 准备工作:环境配置与依赖安装 3.2 核心模块实现 3.3 集成与测试 4. 应用示例与代码实现讲解 4.1 机器翻译 4.2 文 ...

  4. Jmeter学习之七_使用influxdb2.7和grafana10进行Jmeter测试结果展示的方法

    Jmeter学习之七_使用influxdb2.7和grafana10进行Jmeter测试结果展示的方法 摘要 前几天验证了 线程组内的-监听器 jp@gc 相关的组件 以及验证了 server-age ...

  5. 兰姆达 x AnayticDB 降本30%的数据湖最佳实践

    1. 客户介绍 上海兰姆达数据科技有限公司(简称"兰姆达数据")是一家提供卓越的数据科学软件产品和解决方案的初创高科技公司.兰姆达核心团队专注于大数据,机器学习算法和精准营销Saa ...

  6. 代码发布平台jenkins中Check-out Strategy选项功能意义

    第一个选项:Use'svn update' as much as possible  这个选项能实现快速发布:Use 'svn update' whenever possible, making th ...

  7. 一体化元数据管理平台——OpenMetadata入门宝典

    大家好,我是独孤风,一位曾经的港口煤炭工人,目前在某国企任大数据负责人,公众号大数据流动主理人.在最近的两年的时间里,因为公司的需求,还有大数据的发展趋势所在,我开始学习数据治理的相关知识.今天给大家 ...

  8. CF1580C Train Maintenance题解

    我们以 \(\sqrt m\) 为分界点来进行平衡. 设当前在进行第 \(k\) 次操作,询问 \(i\). 对于 \(x_i + y_i \leq \sqrt m\),可以在 \(last_{x_i ...

  9. REST API 设计最佳实践:为什么不要在URI中使用动词?

    总的来说,HTTP协议出现以来Web服务也就存在了.但是,自从云计算出现后,才成为实现客户端与服务和数据交互的普遍方法. 作为一名开发者,我很幸运能够在工作中使用一些仍然存在的SOAP服务.但是,我主 ...

  10. 1.简述Hibernate的工作原理。

    (1).首先,Configuration读取Hibernate的配置文件和映射文件中的信息,即加载配置文件和映射文件,并通过Hibernate配置文件生成一个多线程的SessionFactory对象: ...