背景:
在對已有項目搭建本地環境,修改了本地ip端口和數據庫帳號密碼(使用了明文)。
然后項目一直跑不起來,還拋出各種異常,經過分析發現主要錯在這里:druid java.lang.IllegalArgumentException: Failed to decrypt.
解密失敗?哪里要解密?想了一下,原來的這么長的密碼是密文,現在被我改成了這么短的明文。
解決方案:
1、不使用密文
將數據庫配置中的<property name = "filters" value = "config" />刪除。如有value的值有多個(比如<property name="filters" value="stat,slf4j,config"/>),刪除其中的config。
2、使用密文(對明文加密)
找到maven本地庫druid的jar包所在路徑,該路徑下打開cmd命令窗口。
java -cp druid-1.0.27.jar com.alibaba.druid.filter.config.ConfigTools yourpassword
其中druid-1.0.27.jar替換成你的版本,yourpassword替換成你的密碼。
然后會出現
privateKey:MIIBVQIBADANBgkqhkiG9w0BAQEFAASCAT8wggE7AgEAAkEA1j7Oorws/mu2MmHl4qy/8wxpo+E6ypn/cfatwIrrblTw1m/KIHvlNug1JX7S/+6oH8flqLziLadu5FPtCAxD/QIDAQABAkBDPdkq2Dai73lynKlDGIbyKG4rgjAqkGTNBugHq1IzASC1UlSK/rfuKc7Az4ee/mS6X0LRdFoCL566fMUcX8PdAiEA8aMMrhCk22Zy26DJyD56BZ6tGyrhGqo+rtegUr22328CIQDi+vHHYDZjLWuRd69sbLlAqE819zQ9OFcNnHh295HdUwIhAJo/NfnrYAE57bnrcsNjtmrd9qyv+5AU+vyLYqlOt2z7AiEAnnbH+YPINLFvGd3PEQlOxD89HdX6GIuO6yfESnpI0ZUCIDB9bCRYKMI7KXx3l1dxVUVjwrW6kpeWMlAqdhV5gMl8 publicKey:MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBANY+zqK8LP5rtjJh5eKsv/MMaaPhOsqZ/3H2rcCK625U8NZvyiB75TboNSV+0v/uqB/H5ai84i2nbuRT7QgMQ/0CAwEAAQ== password:d3hCh7tS8Fy9d0hpZ4AuaRx7tfusY1Db+7TGZeHuDNclWob24eqMgUpa0ZofLU/GXumb8qR0RLJfuGYDgK4cxQ==
最后替換原來的密文和公鑰。
整體的數據庫配置展示:
<bean id = "dataSource" class = "com.alibaba.druid.pool.DruidDataSource" destroy-method = "close" > <!-- 數據庫基本信息配置 --> <property name = "url" value = "${url}" /> <property name = "username" value = "${username}" /> <property name = "password" value = "${password}" /> **主要看這里!!!** 第一 <property name = "driverClassName" value = "${driverClassName}" /> <property name = "filters" value = "config" /> **主要看這里!!!!** 第二 <!-- 最大並發連接數 --> <property name = "maxActive" value = "${maxActive}" /> <!-- 初始化連接數量 --> <property name = "initialSize" value = "${initialSize}" /> <!-- 配置獲取連接等待超時的時間 --> <property name = "maxWait" value = "${maxWait}" /> <!-- 最小空閑連接數 --> <property name = "minIdle" value = "${minIdle}" /> <!-- 配置間隔多久才進行一次檢測,檢測需要關閉的空閑連接,單位是毫秒 --> <property name = "timeBetweenEvictionRunsMillis" value ="${timeBetweenEvictionRunsMillis}" /> <!-- 配置一個連接在池中最小生存的時間,單位是毫秒 --> <property name = "minEvictableIdleTimeMillis" value ="${minEvictableIdleTimeMillis}" /> <property name = "validationQuery" value = "${validationQuery}" /> <property name = "testWhileIdle" value = "${testWhileIdle}" /> <property name = "testOnBorrow" value = "${testOnBorrow}" /> <property name = "testOnReturn" value = "${testOnReturn}" /> <property name = "maxOpenPreparedStatements" value ="${maxOpenPreparedStatements}" /> <!-- 打開 removeAbandoned 功能 --> <property name = "removeAbandoned" value = "${removeAbandoned}" /> <!-- 1800 秒,也就是 30 分鍾 --> <property name = "removeAbandonedTimeout" value ="${removeAbandonedTimeout}" /> <!-- 關閉 abanded 連接時輸出錯誤日志 --> <property name = "logAbandoned" value = "${logAbandoned}" /> <property name="connectionProperties" value="config.decrypt=true;config.decrypt.key=${publicKey}" /> **還有這里!!!**第三 </bean>
參考:https://blog.csdn.net/woshfhsefksdf/article/details/54412375