spring - 我需要转义 application.properties 中的特殊字符吗?
问题描述
我在数据源密码字段中有特殊字符,例如“(双引号)、@、~、!、%、&、}、]。当我运行我的 springboot 应用程序并尝试连接到数据库时,我遇到了 -
com.microsoft.sqlserver.jdbc.SQLServerException: The driver could not establish a secure connection to SQL Server by using Secure Sockets Layer (SSL) encryption. Error: "problem accessing trust store"
Caused by: java.security.KeyStoreException: problem accessing trust store
Caused by: java.io.IOException: Keystore was tampered with, or password was incorrect
Caused by: java.security.UnrecoverableKeyException: Password verification failed
我的问题是:
(1)有没有办法查看 Spring 用来尝试连接的密码?
(2) 我是否需要转义密码中的任何特殊字符application.properties
?
我能够使用独立的 java 程序连接到数据库,但我不得不转义密码中的双引号。我在后端使用 Springboot-2.0.4、Flyway-5.2.4、jdk 1.8 和 MS-SQL 服务器。
谢谢。
解决方案
application.properties:您指定的字符不需要转义。
如果您使用例如反斜杠,则需要使用另一个反斜杠对其进行转义,如下所示:C:\\Development\\mydir
application.yml :像这样"
嵌入和转义的环绕值"
\"
注意:application.yml 是 OP 之外的问题。使用application.properties 或 application.yml,不要同时使用。
使用application.properties中的此条目进行测试和验证
myapp.entry-with-special-characters=@~!%&=""
并在application.yml中使用此条目再次测试
myapp:
entry-with-special-characters: "@~!%&=\"\""
像这样将值输出到控制台(将代码放在例如用 注释的类中@SpringBootApplication
,将在应用程序启动时运行)
@Bean
public CommandLineRunner propertiesTest(@Value("${myapp.entry-with-special-characters}") String myVal) {
return args -> System.out.printf("Test-output for StackOverflow: %s\n", myVal);
}
使用 Flyway,试试这个
/**
* Override default flyway initializer to do nothing
*/
@Bean
FlywayMigrationInitializer flywayInitializer(Flyway flyway, @Value("${myapp.entry-with-special-characters}") String myVal) {
System.out.printf("Test-output for StackOverflow: %s\n", myVal);
return new FlywayMigrationInitializer(flyway, (f) ->{} );
}
Spring Boot:Hibernate 和 Flyway 启动顺序
回答问题
有没有办法查看 Spring 用来尝试连接的密码?
可以将myapp.entry-with-special-characters
上述 bean 中的键替换为application.properties中的相关键。请记住,密码是秘密。
测试时使用的环境:
- 春季启动 2.4.1
- JDK 14.0.2
- Windows 10 家庭版
推荐阅读
- java - 在不对所有记录执行循环的情况下从数据库中检索特定数据的最有效方法是什么?
- javascript - 角度服务中的业务规则?
- google-cloud-platform - 我们可以在通过 Google BigQuery 运行的查询上实现数据沿袭吗?
- python - TypeError:不可散列的类型:'LineString'
- python - Python - 如何在不是积分值的积分中绘制参数
- sql - 在 JSON 中搜索 MSSQL
- java - Spring AOP 和 Final 类抛出“无法生成 CGLIB 子类”的问题
- docker - Docker swarm - 更新服务时找到正确的 swarm.Version
- r - ggplot 将汇总摘要添加到条形图中
- vb.net - 'System.Collections.Generic.IEnumerable(Of System.Xml.Linq.XElement)' 类型的表达式不可查询