问题描述
看来您正在尝试使用Spring Boot Typesafe配置属性功能。
因此,为了使其正常工作,您必须对代码进行一些更改:
首先,您的CommonDataApplication
班级应该有@EnableConfigurationProperties
注解,例如
@EnableAutoConfiguration
@ComponentScan
@PropertySource("application.yml")
@EnableConfigurationProperties
public class CommonDataApplication {
public static void main(String[] args) {
// ...
}
}
我不认为您需要@PropertySource("application.yml")
注释,因为application.yml
(以及application.properties
和application.xml
)是Spring
Boot使用的默认配置文件。
您的CassandraClientNew
类不需要具有@Value
注释前缀keyspaceApp
属性。而且您keyspaceApp
。
@Component
@ConfigurationProperties(prefix="cassandra")
public class CassandraClientNew {
private String keyspaceApp;
public void setKeyspaceApp(final String keyspaceApp) {
this.keyspaceApp = keyspaceApp;
}
}
顺便说一句,如果您使用List
或Set
且初始化了集合(例如List<String> values = new
ArrayList<>();
),则仅需要getter。如果未初始化集合,则还需要提供setter方法(否则将引发异常)。
我希望这会有所帮助。
解决方法
.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。
看起来像前缀=“ cassandra”不起作用