定制"简单" Spring Boot中的错误消息

时间:2017-02-16 03:55:06

标签: java spring spring-boot

编写Spring Boot 1.5.1(非Web)应用程序以提取数据库行。 Tomcat数据源是自动配置的,因为它包含在pom.xml

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-jdbc</artifactId>
        <version>${spring-boot.version}</version>
    </dependency>

因此,这些键是必需的,

spring.datasource.driver-class-name=${db.driver}
spring.datasource.url=${db.url}
spring.datasource.username=${db.username}
spring.datasource.password=${db.password}

当任何这些变量时,例如缺少$ {db.driver}或$ {db.url},应用程序将转储整个错误堆栈。

Caused by: java.lang.IllegalArgumentException: Could not resolve placeholder 'db.driver' in string value "${db.driver}"
    at org.springframework.util.PropertyPlaceholderHelper.parseStringValue(PropertyPlaceholderHelper.java:174)
    at org.springframework.util.PropertyPlaceholderHelper.replacePlaceholders(PropertyPlaceholderHelper.java:126)
    at org.springframework.core.env.AbstractPropertyResolver.doResolvePlaceholders(AbstractPropertyResolver.java:236)
    at org.springframework.core.env.AbstractPropertyResolver.resolveRequiredPlaceholders(AbstractPropertyResolver.java:210)
...

这使得解决简单问题变得困难,因为许多文本被搅动并且弄乱了实际问题。

如果$ {db.driver}或任何变量未在任何位置定义,例如application.properties或JVM环境,如何使我定义的Spring Boot报告自定义简单错误消息?感谢

更新1 我在第一次评论后给出了一些想法。我不是想要更改异常消息,也不是阻止它们被抛出到日志中。我想在传递给要访问的实际模块之前检查或拦截所需的参数。例如,数据源。

1 个答案:

答案 0 :(得分:0)

如果您提供默认值,则非现有占位符不会导致异常。而是使用默认值。

您可以在使用它们的属性文件中设置属性的默认值

spring.datasource.url=${db.url?localhost:123//whatever}

您可以检查@PostConstruct注释方法或ApplicationListener中的属性,然后报告您想要的错误。

但这并没有多大意义,因为当spring尝试创建与数据库的连接时,如果没有正确的配置,它将会失败。 根据您的应用程序,这可能已在应用程序启动期间发生。