2013-05-15 174 views
0

我得到了一个Spring MVC应用程序。它运行在Tomcat 7服务器上。无法访问属性

我想创建一个props.properties文件,所以我的应用程序可以在Beans初始化过程中访问属性。

所以,我做了以下内容:

1.创建一个上下文参数,以我的web.xml

<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目录中

当我开始我的应用程序时,它d idnt抛出异常(文件未找到) - 所以我beleave它看到属性文件。但在bean初始化期间,我的字段(dbHost,dbLogin等)仍为空。

我怎样才能把属性文件的值放到我的字段中?

请帮助我。

回答

3

PropertySourcesPlaceholderConfigurer的注解工厂方法必须是一个静态方法:

@Bean 
public static PropertySourcesPlaceholderConfigurer propertySourcesPlaceholderConfigurer() { 
    return new PropertySourcesPlaceholderConfigurer(); 
} 

Spring API Reference manual of @Bean备注此。

一点点更详细的解释:

这是因为PropertySourcesPlaceholderConfigurerBeanFactoryPostProcessor(BFPP)。 BFPP在其他(普通)bean被实例化和初始化之前对bean工厂进行后处理。所以,需要创建BFPP才能工作,之前MainConfigbean被实例化。将此工厂方法标记为静态方法,我们可以在不实例化MainConfig的情况下调用此方法。

+0

我做了更改(有问题的更新代码)。但是,当调用pgsqlDataSource()时,仍然有空值... – user2160696

+0

使用'@ Value'注释注入的字段必须不是静态**。静态字段不是占位符处理器的目标。 –

-2
# form user login properties 
userName.required = User Name is required 

在控制器端,您只声明userName.required。这就是你如何声明它。