【问题标题】:Spring Boot Could not resolve placeholder while reading second databaseSpring Boot 在读取第二个数据库时无法解析占位符
【发布时间】:2019-04-04 09:19:12
【问题描述】:

我正在尝试从我的模块中的应用程序属性中读取第二个数据库连接信息。我的配置模块应该读取值。

配置

@Configuration
@PropertySource(value={"classpath:application.properties"})
@ConfigurationProperties(prefix = "spring.second-datasource")
public class DatabaseConfiguration {

    @Value("${url}")
    private String url;
    @Value("${username}")
    private String user;
    @Value("${password}")
    private String password;

    public String getUrl() {
        return url;
    }

    public String getUser() {
        return user;
    }

    public String getPassword() {
        return password;
    }
}

当我在控制器内部调用 DatabaseConfiguration 时,它会报错。

private DatabaseConfiguration databaseConfiguration;
databaseConfiguration.getUrl();
.
.
.

错误

Caused by: java.lang.IllegalArgumentException: Could not resolve placeholder 'url' in value "${url}"

我找到了一些解决方案,例如这个

Spring boot could not resolve placeholder in string

我实现了。

POM.XML

http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0

<artifactId>//artifactID</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>

<name>fraud-core</name>
<description>Demo project for Spring Boot</description>

<parent>
   //Parent
</parent>

<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
    <java.version>1.8</java.version>
    <HMN_CDM_Facade.version>TEST-SNAPSHOT</HMN_CDM_Facade.version>
    <hmn.dependency.scope>compile</hmn.dependency.scope>
</properties>

<dependencies>
    //DEPENDENCIES
</dependencies>

<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
    </plugins>

    <resources>
        <resource>
            <directory>src/main/resources</directory>
            <filtering>true</filtering>
            <includes>
                <include>**/*.properties</include>
            </includes>
        </resource>
    </resources>
</build>

谢谢。

【问题讨论】:

  • 请添加您的 application.properties 文件
  • 删除@Value 注释以及@PropertySource
  • 而不是 ${url} 使用 ${spring.datasource.url}
  • 看看这个答案。虽然是关于 Spring Batch,但它展示了如何使用辅助数据源:stackoverflow.com/a/48982583/3046834

标签: java spring-boot


【解决方案1】:

您在 spring-boot 中混合了两种读取配置数据的方式。

@Value 当你有一个必须在@Component 中访问的单个属性时应该使用。基本上它是一个类似

的东西
 Ex: max.threads=10
 Which can be accessed in a component using @Value.

配置属性的方式是当您有多个值并按功能分组时。

Ex: server.names:
     -
      server1
     -
      server2

现在,您应该使用配置属性。

不要将两者混用。您不应该在配置属性 java 文件中使用 @Value。

【讨论】:

    【解决方案2】:

    @Value("${url}") ,这种写法对应于'application.propertice'或'application.yml'文件。下面是正确的写法。

    【讨论】:

    • 我相信没有“正确的方法”来命名属性。在这种情况下,.yml.properties 中的正确属性名称恰好是 spring.second-datasource.url ...
    猜你喜欢
    • 1970-01-01
    • 2018-02-20
    • 2018-06-17
    • 1970-01-01
    • 1970-01-01
    • 2016-12-25
    • 2016-01-20
    • 1970-01-01
    • 2016-07-24
    相关资源
    最近更新 更多