提问者:小点点

Spring Boot在读取第二个数据库时无法解析占位符


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

@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无法解析字符串中的占位符

我实现了它。

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

<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>

谢谢


共2个答案

匿名用户

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

@当必须在@Component内访问单个属性时,应使用Value。。基本上这是一个

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

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

Ex: server.names:
     -
      server1
     -
      server2

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

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

匿名用户

@值(“${url}”),这种写入方式对应于“应用程序”。“属性”或“应用程序”。yml文件。下面是正确的写作方式。