java - 如何在Spring Boot中从属性文件中读取限定符?

标签 java spring-boot properties qualifiers

我有一个预选赛,我从中阅读

public class TestController{
     @Autowired
     @Qualifier("jdbc")
     private JdbcTemplate jtm;
     //.....
}

限定符“jdbc”是定义为

的 bean
@Bean(name = "jdbc")
@Autowired
public JdbcTemplate masterJdbcTemplate(@Qualifier("prod") DataSource prod) {
            return new JdbcTemplate(prod);
        }

这是返回该限定符的数据源并且工作正常。

现在我想从 application.properties 中读取限定符名称。所以我将代码更改为

public class TestController{
     @Autowired
     @Qualifier("${database.connector.name}")
     private JdbcTemplate jtm;
     //.....

}

其中 database.connector.name=jdbc 在我的 application.properties 中。

但是当我这样做时,会引发错误

APPLICATION FAILED TO START

Description:

Field userService in main.java.rest.TestController required a bean of type 'org.springframework.jdbc.core.JdbcTemplate' that could not be found.

Action:

Consider defining a bean of type 'org.springframework.jdbc.core.JdbcTemplate' in your configuration.

感谢任何帮助。

最佳答案

限定符无法解析占位符。您可以将您的 TestController 类编写为

public class TestController {

    @Value("${database.connector.name}")
    private String name;

    private JdbcTemplate jtm;

    @Autowired
    public void setJdbcTemplate(ApplicationContext context) {

        jtm = (JdbcTemplate) context.getBean(name);
    }
}

关于java - 如何在Spring Boot中从属性文件中读取限定符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50208018/

相关文章:

c# - 只读自动实现的属性是否可能?

java - 分别运行具有不同主题的 2 个消费者时出现 Kafka CommitFailedException

java - 如何迭代 invoke() 调用的返回结果?

java - 使用php更新mysql中的数据时出错

java - 有没有办法在 Spring XML 中指定默认属性值?

Python 属性也作为类属性

java - Jsoup 清洁器不删除元素

java - 如何使用 Angular 从java接收文件csv

spring-boot - GCP PubSub Spring Boot 重复提取消息

java - Spring Boot在Controller中调用Rest API时出现404错误