spring boot+jpa+druid 多数据源+多数据源的密码加密
spring boot和jpa整合,使用druid作为连接池,在单数据源时加密比较容易,但是多数据源时加密遇到问题,搜索了几个博文
https://blog.csdn.net/ooobama/article/details/80752223
文中给到了解决方案,就是手动解密。
该博文已经明确了解决方案,这里不在重复,但是博文没有说清楚多数据源的配置和配置文件的详情,我这里把我跑成功的贴一下。
package com.***;import com.alibaba.druid.pool.DruidDataSource;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;import javax.sql.DataSource;/*** Created by chenglong on 2018-12-26 13:58*/
@Configuration
public class DataSourceConfig {private static final Logger logger = LoggerFactory.getLogger(DataSourceConfig.class);@Value("${spring.datasource.primary.jdbc-url}")private String dbUrl;@Value("${spring.datasource.primary.username}")private String username;@Value("${spring.datasource.primary.password}")private String password;@Value("${spring.datasource.primary.driver-class-name}")private String driverClassName;@Value("${spring.datasource.secondary.jdbc-url}")private String dbUrl2;@Value("${spring.datasource.secondary.username}")private String username2;@Value("${spring.datasource.secondary.password}")private String password2;@Value("${spring.datasource.secondary.driver-class-name}")private String driverClassName2;@Value("${spring.datasource.primary.type}")private String dbType;@Value("${spring.druid.initial-size}")private int initialSize;@Value("${spring.druid.min-idle}")private int minIdle;@Value("${spring.druid.max-active}")private int maxActive;@Value("${spring.druid.max-wait}")private int maxWait;@Value("${spring.druid.time-between-eviction-runs-millis}")private int timeBetweenEvictionRunsMillis;@Value("${spring.druid.min-evictable-idle-time-millis}")private int minEvictableIdleTimeMillis;@Value("${spring.druid.validation-query}")private String validationQuery;@Value("${spring.druid.test-while-idle}")private boolean testWhileIdle;@Value("${spring.druid.test-on-borrow}")private boolean testOnBorrow;@Value("${spring.druid.test-on-return}")private boolean testOnReturn;@Value("${spring.druid.pool-prepared-statements}")private boolean poolPreparedStatements;@Value("${spring.druid.max-pool-prepared-statement-per-connection-size}")private int maxPoolPreparedStatementPerConnectionSize;@Value("${spring.datasource.primary.connection-properties}")private String connectionProperties;@Value("${spring.datasource.secondary.connection-properties}")private String connectionProperties2;@Value("${spring.druid.password-callback}")private String passwordCallbackClassName;@Bean(name = "primaryDataSource")@Primary@ConfigurationProperties(prefix="spring.datasource.primary")public DataSource primaryDataSource() {DruidDataSource datasource = new DruidDataSource();datasource.setUrl(dbUrl);datasource.setUsername(username);datasource.setPassword(password);datasource.setDriverClassName(driverClassName);datasource.setInitialSize(initialSize);datasource.setMinIdle(minIdle);datasource.setMaxActive(maxActive);datasource.setMaxWait(maxWait);datasource.setTimeBetweenEvictionRunsMillis(timeBetweenEvictionRunsMillis);datasource.setMinEvictableIdleTimeMillis(minEvictableIdleTimeMillis);datasource.setValidationQuery(validationQuery);datasource.setTestWhileIdle(testWhileIdle);datasource.setTestOnBorrow(testOnBorrow);datasource.setTestOnReturn(testOnReturn);datasource.setPoolPreparedStatements(poolPreparedStatements);datasource.setMaxPoolPreparedStatementPerConnectionSize(maxPoolPreparedStatementPerConnectionSize);datasource.setConnectionProperties(connectionProperties);datasource.setDbType(dbType);try {datasource.setPasswordCallbackClassName(passwordCallbackClassName);} catch (Exception e) {logger.error("druid configuration initialization passwordCallbackClassName", e);}return datasource;}@Bean(name = "secondaryDataSource")@ConfigurationProperties(prefix="spring.datasource.secondary")public DataSource secondaryDataSource() {DruidDataSource datasource = new DruidDataSource();datasource.setUrl(dbUrl2);datasource.setUsername(username2);datasource.setPassword(password2);datasource.setDriverClassName(driverClassName2);datasource.setInitialSize(initialSize);datasource.setMinIdle(minIdle);datasource.setMaxActive(maxActive);datasource.setMaxWait(maxWait);datasource.setTimeBetweenEvictionRunsMillis(timeBetweenEvictionRunsMillis);datasource.setMinEvictableIdleTimeMillis(minEvictableIdleTimeMillis);datasource.setValidationQuery(validationQuery);datasource.setTestWhileIdle(testWhileIdle);datasource.setTestOnBorrow(testOnBorrow);datasource.setTestOnReturn(testOnReturn);datasource.setPoolPreparedStatements(poolPreparedStatements);datasource.setMaxPoolPreparedStatementPerConnectionSize(maxPoolPreparedStatementPerConnectionSize);datasource.setDbType(dbType);datasource.setConnectionProperties(connectionProperties);try {datasource.setPasswordCallbackClassName(passwordCallbackClassName);} catch (Exception e) {logger.error("druid configuration initialization passwordCallbackClassName", e);}return datasource;}
}
application.yml配置文件
spring:datasource:#本地数据库primary:driver-class-name: com.mysql.jdbc.Drivertype: com.alibaba.druid.pool.DruidDataSourcejdbc-url: jdbc:mysql://***/***?characterEncoding=utf8&useSSL=falseusername: ***password: G0jxH***auCnXwjsEHZX4ueA41C4KA==# 配置 connection-properties,启用加密,配置公钥。connection-properties: config.decrypt=true;publickey=${spring.datasource.primary.publickey};password=${spring.datasource.primary.password}# 公钥publickey: MFwwDQYJ***RxcJ1Ch77tBggspntMwQgTyVRgMU/Z2NAMBN0wM1x1Ux+T/Pqxsu9ra++GgbM910CAwEAAQ==#外部数据库secondary:driver-class-name: com.mysql.jdbc.Driverjdbc-url: jdbc:mysql://***/***?characterEncoding=utf8&useSSL=falseusername: ***password: VJa9HBxSKFKM6z3cUg+GmD***7xCHrBx+IHKtb3DQpZRMHism6NBRLMP99nfu/A==type: com.alibaba.druid.pool.DruidDataSource# 配置 connection-properties,启用加密,配置公钥。connection-properties: config.decrypt=true;publickey=${spring.datasource.secondary.publickey};password=${spring.datasource.secondary.password}# 公钥publickey: MFwwDQYJKo******WbG2nyHEqv5Txpegdu6B9e6VuvTU6Qy8fE0C***+95oHED028CAwEAAQ==druid:initial-size: 2max-active: 15min-idle: 2max-wait: 1234pool-prepared-statements: truemax-pool-prepared-statement-per-connection-size: 5validation-query: select 1 from dualvalidation-query-timeout: 1test-on-borrow: truetest-on-return: truetest-while-idle: truetime-between-eviction-runs-millis: 10000min-evictable-idle-time-millis: 30001async-close-connection-enable: truefilter:stat:db-type: h2log-slow-sql: trueslow-sql-millis: 2000# 启动ConfigFilterconfig:enabled: truepassword-callback: com.***.data.common.utils.DbPasswordCallbackjpa:database: MYSQLshow-sql: truehibernate:ddl-auto: updatenaming:implicit-strategy: org.springframework.boot.orm.jpa.hibernate.SpringImplicitNamingStrategyproperties:hibernate:dialect: org.hibernate.dialect.MySQL5Dialect
spring boot+jpa+druid 多数据源+多数据源的密码加密相关推荐
- Spring Boot + MyBatis + Druid + PageHelper 实现多数据源并分页
点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试资料 作者 | 虚无境 链接 | cnblogs.com/xuwujin ...
- 学习Spring Boot:(十四)spring-shiro的密码加密
前言 前面配置了怎么使用 shiro ,这次研究下怎么使用spring shiro的密码加密,并且需要在新增.更新用户的时候,实现生成盐,加密后的密码进行入库操作. 正文 配置凭证匹配器 @Beanp ...
- Spring Boot 集成 Druid 监控数据源
关注"Java后端技术全栈" 回复"面试"获取全套大厂面试资料 Druid 介绍 Druid 是阿里巴巴开源平台上的一个项目,整个项目由数据库连接池.插件框架和 ...
- Spring Boot Jpa 配置多个数据源,并读取其中一个表的具体数据
总体简介: Spring Boot Jpa配置多个数据源(此次两个mysql数据库),访问其中一个库 alime_counsel_assign_log下的assign_data_backflow表,实 ...
- Spring Boot使用spring-data-jpa配置Mysql多数据源
转载请注明出处 :Spring Boot使用spring-data-jpa配置Mysql多数据源 我们在之前的文章中已经学习了Spring Boot中使用mysql数据库 在单数据源的情况下,Spri ...
- Spring boot 加Mybatis加dubble多数据源配置
Spring boot 整合Mybatis+dubble +maven单数据源的例子很多,但是多数据源配置需要将原本封装好的重写一遍,有点麻烦,对框架的理解要求比较高, 在这详细给大家介绍下如何配置使 ...
- Spring Boot 中使用 Hikari连接各类数据源
Spring Boot 中使用 Hikari连接各类数据源 1,连接hive集群 HikariConfig中各属性设置 {"allowPoolSuspension": false, ...
- Spring Boot下Druid连接池的使用配置分析
引言: 在Spring Boot下默认提供了若干种可用的连接池,Druid来自于阿里系的一个开源连接池,在连接池之外,还提供了非常优秀的监控功能,这里讲解如何与Spring Boot实现集成. 1. ...
- spring boot配置druid(德鲁伊)
spring boot配置druid(德鲁伊) 关于druid的介绍请看 阿里巴巴温少访谈 1.引入相关依赖,全部依赖是上一篇spring boot+mybatis依赖的基础上,再加上下边的依赖,如下 ...
最新文章
- kafka 监控(eagle)
- 【转】后勤常用查询报告
- Spark常规性能调优三:并行度调节
- udl 连mysql_自己如何正确获取MYSQL的ADO连接字符串
- MapReduce:Job性能调优总结
- 为DbHelper工具类添加关闭资源的方法 jdbc 20210412_212728.mp4
- 圣诞海报模板|给设计师点灵感
- .iOS APP Project or Mac APP Project编译错误提示: My Mac 64-bit is not valid for Running the scheme...
- mmap文件做成html,mmap()映射到文件的一些总结
- 实用主义学python百度网盘_麻瓜编程:实用主义学Python(5套全)(火评)
- 爱普生传真服务器网页,爱普生传真机如何发传真 爱普生传真机快速发传真技巧【详解】...
- 详细分析MOS管缓启动电路及其原理详解
- MAE平均绝对误差和MSE均方误差
- linux 编辑文件出现E45readonly option is set (add! to .....)
- html embed如何禁止自动播放,html embed用法
- flash builder 找不到所需要的AdobeFlashPlayer调试器版本
- 基础复习——TextView——文本显示——字体颜色——背景颜色——字体大小——@color/teal_200——@string/hello...
- 光速入门MyBatis-Plus
- QLabel设置字体颜色
- 前端对用户身份证号码进行验证以及模糊显示
热门文章
- Linux 查看查找文件
- PKPM学习:板生成的问题
- Java中如何使用帮助文档(API)
- 【Java】文如何制作帮助文档
- 网上书城源代码java_javaweb网上书城源码(包含数据库) 一个web课设——基于JSP的网上书城 - 下载 - 搜珍网...
- 谈谈javascript中的多线程
- java,jbutton
- Dubbo (二) ---------- Dubbo 框架
- cmd命令行中文显示乱码解决办法
- 机器学习(四)——逻辑斯蒂回归(Logistic Regression)