我在Spring Boot Application示例中有以下代码
@Configuration
@PropertySource("classpath:second.properties")
public class PropertyConfig {
@Value("#{guru.username}")
String user;
@Value("#{guru.password}")
String password;
@Value("#{guru.url}")
String url;
@Bean
FakeDataSource getFakeDataSource() {
FakeDataSource fk = new FakeDataSource();
fk.setName(user);
fk.setPassword(password);
fk.setUrl(url);
return fk;
}
@Bean
PropertySourcesPlaceholderConfigurer getPropertySourcesPlaceholderConfigurer() {
PropertySourcesPlaceholderConfigurer placeholderConfigurer= new PropertySourcesPlaceholderConfigurer();
//placeholderConfigurer.setLocation(new ClassPathResource("second.properties"));
return placeholderConfigurer;
}
}
FakeDataSource是一个简单的pojo,名称为passowrd,url属性。
然后是我的主要应用程序
@SpringBootApplication
public class SpringGuru101DependencyInjectionApplication {
public static void main(String[] args) {
ApplicationContext ctx = SpringApplication.run(SpringGuru101DependencyInjectionApplication.class, args);
// Step 2: Make Class
FakeDataSource fakeDataSource = ctx.getBean(FakeDataSource.class);
System.out.println(fakeDataSource.getName());
}
}
但是sout语句打印为null, 我的second.properties文件存在于我的资源目录中,其中包含以下内容
guru.username=Saurabh
guru.password=ido
guru.url=http://example.com
答案 0 :(得分:1)
有两个地方应该纠正:
(1)正如我在您的问题的评论中所说,您应该将井口标志(#)替换为美元符号($),以便从配置文件中读取值。例如:@Value("${guru.username}")
。
(2)您在方法public static
前面错过了getPropertySourcesPlaceholderConfigurer
这个修改过的方法应该如下所示:
@Bean
public static PropertySourcesPlaceholderConfigurer getPropertySourcesPlaceholderConfigurer() {
PropertySourcesPlaceholderConfigurer placeholderConfigurer= new PropertySourcesPlaceholderConfigurer();
//placeholderConfigurer.setLocation(new ClassPathResource("second.properties"));
return placeholderConfigurer;
}
答案 1 :(得分:0)
如果您使用的是Spring-boot,则可以使用其他方法来读取Spring引导建议的配置。这将帮助您摆脱所有@Value符号,允许弹簧注入属性而无需额外的提示。
您可以执行以下操作:
{{1}}
}
上面的POJO定义了以下属性:
foo.enabled,默认为false foo.remote-address,具有可以从String强制转换的类型 foo.security.username,带有嵌套的“安全性”,其名称由属性名称决定。特别是返回类型根本没有使用,可能是SecurityProperties foo.security.password foo.security.roles,带有String
的集合更多详情:https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-external-config.html