2014-02-28 13 views
1

在我的Java主,我有以下幾點:加載使用Spring動態特性在Java中

ApplicationContext context = new AnnotationConfigApplicationContext(SpringConfig.class); 

SpringConfig.java看起來是這樣的:

@Configuration 
@EnableAspectJAutoProxy 
@EnableTransactionManagement 
@ComponentScan(basePackages = {"...", "..."}) 
@PropertySource("classpath:prod.properties") 
public class SpringConfig { 
    @Autowired 
    private Environment env; 

    @Autowired 
    private DataSource dataSource; 

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

    @Configuration 
    static class DatabaseConfig { 

     @Value("${jdbc.url}") 
     private String jdbcUrl; 
     @Value("${jdbc.username}") 
     private String jdbcUsername; 
     @Value("${jdbc.password}") 
     private String jdbcPassword; 
     @Value("${jdbc.driverClassName}") 
     private String jdbcDriverClassName; 

     @Bean 
     public DataSource dataSource() { 
      DriverManagerDataSource source = new DriverManagerDataSource(jdbcUrl, 
       jdbcUsername, jdbcPassword); 
      source.setDriverClassName(jdbcDriverClassName); 
      return source; 
     } 

}

的問題是我希望部署最終JAR的人員指定所有數據庫屬性,因此我不想將該屬性文件保留在類路徑中。

在運行時加載某些東西並將其注入Spring上下文之前,我有哪些選擇可以開始解決所有這些Spring EL @Value字段?

謝謝!

+0

我不明白你的用例。你能澄清一下嗎?問題是我會希望部署最終JAR的人員指定所有的數據庫屬性,所以我不想將該屬性文件留在classpath上。 –

回答

0

如果要讀取的文件類路徑之外,你可以使用file: pseudourl代替classpath: pseudourl在PropertySource註釋例如爲:

@PropertySource("file:/path/to/prod.properties") 

這告訴春天,該文件is to be loaded as a URL, from the filesystem;那麼你可以根據你的需要交換文件。如果你需要根據不同的環境加載不同的文件,你可能需要的是profiles

配置文件允許您根據用來啓動應用程序的配置文件加載bean。我要做的就是根據使用我的路徑替換輪廓運行加載一個文件:

@PropertySource("file:${user.home}/project/config.${spring.profiles.active:dev}.properties") 

在這種情況下,我用一個佔位符,將解決個人資料(如果沒有配置文件是活動的,那麼它將默認加載dev)。例如,如果督促情景模式下的文件路徑將會被解析成這樣:

/home/eldermael/project/config.prod.properties 

,如果沒有配置文件被發現,則:

/home/eldermael/project/config.dev.properties 

但是,這有一個缺點,如果你有幾個配置文件,它們都將連接在文件路徑中。

+0

我不太確定配置文件如何工作的,因爲多個配置文件可以一次激活(這將打破文件動態加載)。這可能是Spring框架最令人沮喪的事情,因爲它不支持簡單的屬性方法。 –