java - @ConfigurationProperties 前缀不起作用

标签 java spring spring-boot

.yml 文件

cassandra:
    keyspaceApp:junit
solr:
    keyspaceApp:xyz

bean

@Component
@ConfigurationProperties(prefix="cassandra")
public class CassandraClientNew {
   @Value("${keyspaceApp:@null}") private String keyspaceApp;

主方法文件

@EnableAutoConfiguration
@ComponentScan
@PropertySource("application.yml")
public class CommonDataApplication {
    public static void main(String[] args) {
        ConfigurableApplicationContext context = new SpringApplicationBuilder(CommonDataApplication.class)
                .web(false).headless(true).main(CommonDataApplication.class).run(args);
    }
}

测试用例

@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(classes = CommonDataApplication.class)
@IntegrationTest
@EnableConfigurationProperties
public class CassandraClientTest {

    @Autowired
    CassandraClientNew cassandraClientNew;

    @Test
    public void test(){
        cassandraClientNew.getSession();
        System.out.println(" **** done ****");
    }
}

它没有将 junit 设置为 keyspaceApp,而是设置 xyz。

看起来 prefix="cassandra"不起作用

最佳答案

您似乎正在尝试使用 Spring Boot Typesafe Configuration Properties功能。

因此,为了使其正常工作,您必须对代码进行一些更改:

首先,您的CommonDataApplication类应该有 @EnableConfigurationProperties注释例如

@EnableAutoConfiguration
@ComponentScan
@PropertySource("application.yml")
@EnableConfigurationProperties
public class CommonDataApplication {

    public static void main(String[] args) {
        // ...
    }
}

我不相信你需要 @PropertySource("application.yml")注释为 application.yml (以及 application.propertiesapplication.xml )是 Spring Boot 使用的默认配置文件。

您的CassandraClientNew类不需要有@Value注释前缀 keyspaceApp属性(property)。还有你的keyspaceApp 必须有一个 setter 方法

@Component
@ConfigurationProperties(prefix="cassandra")
public class CassandraClientNew {

   private String keyspaceApp;

   public void setKeyspaceApp(final String keyspaceApp) {
       this.keyspaceApp = keyspaceApp;
   }
}

顺便说一句,如果您使用的是 List的或 Set s 并且您初始化集合(例如 List<String> values = new ArrayList<>(); ),那么只需要 getter。如果一个集合没有初始化,那么你也需要提供一个 setter 方法(否则会抛出异常)。

我希望这会有所帮助。

关于java - @ConfigurationProperties 前缀不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27416327/

相关文章:

java - 使用递归统计从 "cur"节点到列表末尾value字段在min和max之间(含)的节点数

java - 在Windows中使用ORMLite for SQLite成功,但在Mac中失败

java - 使用spring boot生成MySql数据库

java - Spring @RestController、spring-boot 出现意外错误(类型= Not Acceptable ,状态=406)

java - 是什么导致此错误 (java) : "Invalid memory access of location 0x0 rip=0x106282bae"

java - (Java) 添加到计数器变量的代码

javascript - Spring请求映射错误: the server responded with a status of 404 (Not Found)

java - 您是否应该在 server.xml 或 context.xml 中设置数据库连接属性

java - Jackson:获取反序列化的空引用

amazon-web-services - 如何在AWS托管的Docker容器内通过Spring Boot加载静态文件?