我需要在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:Developmentmydir

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: %sn", 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: %sn", myVal);
    return new FlywayMigrationInitializer(flyway, (f) ->{} );
}

Spring Boot:Hibernate 和 Flyway 引导顺序

回答问题

有没有办法查看 Spring 使用什么密码来尝试连接?

可以用application.properties 中的myapp.entry-with-special-characters相关键替换上述 bean 中的键。请记住,密码是秘密。

测试时使用的环境:

  • 春季启动 2.4.1
  • JDK 14.0.2
  • Windows 10 家庭版

以上是我需要在application.properties中转义特殊字符吗?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>