我有一个Spring MVC应用程序。它运行在Tomcat 7服务器上。
我想创建一个props.properties文件,因此我的应用程序可以在Bean初始化过程中访问属性。
所以我做了以下事情:
1.为我的web.xml创建一个context-parameter
<context-param>
<param-name>mainProps</param-name>
<param-value>${catalina.home}/conf/props.properties</param-value>
</context-param>
2。我创建了一个MainCobfig类
@Configuration
@PropertySource("classpath:/racoonsoft/wish/properties/props.properties")
@Import({WebConfig.class })
public class MainConfig {
@Autowired
Environment env;
@Value("${db.host}")
static String dbHost;
@Value("${db.name}")
static String dbName;
@Value("${db.login}")
static String dbLogin;
@Value("${db.password}")
static String dbPassword;
@Value("${ozon.login}")
static String ozonLogin;
@Value("${ozon.password}")
static String ozonPassword;
@Value("${ozon.apiurl}")
static String ozonApiUrl;
@Value("${payture.apihost}")
static String paytureApiHost;
@Value("${payture.merchant}")
static String paytureMerchant;
@Bean
public static PropertySourcesPlaceholderConfigurer propertySourcesPlaceholderConfigurer() {
return new PropertySourcesPlaceholderConfigurer();
}
@Bean
public ScheduledAnnotationBeanPostProcessor scheduledAnnotationBeanPostProcessor() {
return new ScheduledAnnotationBeanPostProcessor();
}
@Bean
public OzonProcessor apiProcessor() {
return new OzonProcessor(ozonLogin, ozonPassword, ozonApiUrl);
}
@Bean
public PGSQLDataSource pgsqlDataSource() throws Exception{
PGSQLDataSource result = new PGSQLDataSource(dbHost,dbName,5432,dbLogin,dbPassword,"org.postgresql.Driver","jdbc:postgresql:");
result.loadSettings();
if(FacebookController.dbProc==null)
{
FacebookController.dbProc = result;
}
//FacebookController.dbProc = result;
return result;
}
@Bean
public PaytureProcessor paytureProcessor()
{
PaytureProcessor proc = new PaytureProcessor(paytureApiHost,paytureMerchant);
return proc;
}
}
3 - 我创建了props.properties文件并将其放入/ conf目录
当我启动我的应用程序时,它没有抛出异常(找不到文件) - 所以我发现它看到了属性文件。但是在bean初始化期间,我的字段(dbHost,dbLogin等)仍然是null。
如何将属性文件中的值放到我的字段中?
请帮帮我。
答案 0 :(得分:3)
PropertySourcesPlaceholderConfigurer
的带注释工厂方法必须是静态方法:
@Bean
public static PropertySourcesPlaceholderConfigurer propertySourcesPlaceholderConfigurer() {
return new PropertySourcesPlaceholderConfigurer();
}
Spring API Reference manual of @Bean说明这一点。
更详细的解释:
这是因为PropertySourcesPlaceholderConfigurer
是BeanFactoryPostProcessor
(BFPP)。
BFPP在其他(普通)bean被实例化和初始化之前就对bean工厂进行了后处理。因此,需要创建BFPP才能工作, 之前实例化MainConfig
bean 。将此工厂方法标记为静态方法,我们可以在不实例化MainConfig
的情况下调用此方法。
答案 1 :(得分:-2)
# form user login properties
userName.required = User Name is required
在控制器端,您只声明userName.required
。这就是你宣布它的方式。