.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);
}
}
TestCase
@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”无效
答案 0 :(得分:44)
您似乎正在尝试使用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.properties
和application.xml
)是Spring Boot使用的默认配置文件。
您的CassandraClientNew
课程不需要@Value
注释前缀keyspaceApp
属性。您的keyspaceApp
必须有一个setter方法。
@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方法(否则将抛出异常)。
我希望这会有所帮助。
答案 1 :(得分:2)
我不知道&#34; xyz&#34;来自(也许你没有显示你的整个application.yml?)。您通常不会在@Value
中与@ConfigurationProperties
绑定(它无法知道您的前缀是什么)。你真的在@EnableCongigurationProperties
的任何地方吗?您使用SpringApplication
创建应用程序上下文吗?
答案 2 :(得分:0)
http://www.baeldung.com/configuration-properties-in-spring-boot
这仅适用于SB 1.5.4-RELEASE。这很简单。有关详细信息,请参阅上面的帖子。
@Configuration
@ConfigurationProperties(prefix = "mail")
public class ConfigProperties
答案 3 :(得分:0)
# In application.yaml
a:
b:
c: some_string
@Component
@ConfigurationProperties(prefix = "a", ignoreUnknownFiels = false)
public class MyClassA {
public MyClassB theB; // This name actually does not mean anything
// It can be anything
public void setTheB(MyClassB theB) {
this.theB = theB;
}
public static MyClassB {
public String theC;
public void setTheC(String theC) {
this.theC = theC;
}
}
}
确保在上述类中声明了这些公共方法。确保它们具有“公共” 修饰符。
// In MyClassA
public void setTheB(MyClassB theB) {
this.theB = theB;
}
// In MyClassB
public void setTheC(String theC) {
this.theC = theC;
}