2017-01-24 29 views
1
@Configuration 
@PropertySource("classpath:service.properties") 
public class ApplicationConfig{ 
    @Value("PROPERTY_MYSQL_JNDI_NAME") 
    private String jndiName; 
} 

这工作正常。但是,当我注册当ResourceBundleMessageSource bean注册时,Spring 4 @PropertySource不起作用

@Bean 
public MessageSource messageSource() { 
    ResourceBundleMessageSource messageSource = new ResourceBundleMessageSource(); 
    messageSource.setBasenames("resources/authentication"); 
    messageSource.setDefaultEncoding("UTF-8"); 
    return messageSource; 
} 

ApplicationConfig类中的bean以前的属性加载不工作。有什么我能做的事来测试它

回答

0

您为messageSource错了,它应该是如下假设你authentication.properties在src /资源:

@Bean 
public MessageSource messageSource() { 
    ResourceBundleMessageSource messageSource = new ResourceBundleMessageSource(); 
    messageSource.setBasenames("authentication"); 
    messageSource.setDefaultEncoding("UTF-8"); 
    return messageSource; 
} 

你仍然可以使用

@PropertySource("classpath:config.properties") 

假设config.properties在src/resources中

+0

是的。你指出的问题是正确的。谢谢。但我担心的是,当我使用@Bean在springContainer中注册'messageSource'时,由@PropertySource(“classpath:service.properties”)加载的属性文件消失。无法访问该propertyFile – shak

+0

我正在使用@PageSource来加载我的数据库相关的属性。 @Value(CommonConstants.PROPERTY_MYSQL_JNDI_NAME) private String jndiName; public DataSource jndiDataSource(){ JndiDataSourceLookup dsLookup = new JndiDataSourceLookup(); dsLookup.setResourceRef(true); DataSource dataSource = dsLookup.getDataSource(jndiName); 返回dataSource; } ---有没有什么办法来实现这一点。 - – shak

+0

@shak对不起,忽略了我以前的评论我已经再次测试过,它可以与两者兼容,我更新了我的答案。 –

1

我正面临同样的问题。在我的情况下,我错过了添加以下bean:

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

它使属性加载正常工作。