鍍金池/ 問答/Java/ SpringBoot2.0.3 引用外部配置文件取不到值

SpringBoot2.0.3 引用外部配置文件取不到值

使用 @Configuration 來加載配置文件,獲取不到 properties 中定義的值

@Configuration
@PropertySource(value = "classpath:jdbc.properties", encoding = "UTF-8")
@ConfigurationProperties(prefix = "jdbc")
public class DataSourceConfig {
  private String url;
  private String driverClassName;
  private String username;
  private String password;
  
  // 省略 getter setter

  @Bean
  public DataSource dataSource() {
    DriverManagerDataSource ds = new DriverManagerDataSource();
    ds.setDriverClassName(driverClassName);
    ds.setUrl(url);
    ds.setUsername(username);
    ds.setPassword(password);
    return ds;
  }
}

嘗試直接使用注入 Environment 取值,還是 null;
直接寫在全局的 application.properties(yml) ,然后取,也還是 null


目前通過在方法上使用 @ConfigurationProperties(prefix="mysql") 直接將自定義的 properties 屬性設(shè)置到返回的對象中解決。
測試這樣使用是可以正確注入的。

即文件名和路徑都是正確的。

回答
編輯回答
拼未來

在@Configuration類是用于配置容器的主要機制,仍然可能有必要使用至少一些XML。在這些場景中,只需使用@ImportResource和定義盡可能多的XML即可。這樣做可以實現(xiàn)“以Java為中心”的方法來配置容器并將XML保持在最低限度。
例如:

@Configuration
@ImportResource("classpath:/com/acme/properties-config.xml")
public class AppConfig {

    @Value("${jdbc.url}")
    private String url;

    @Value("${jdbc.username}")
    private String username;

    @Value("${jdbc.password}")
    private String password;

    @Bean
    public DataSource dataSource() {
        return new DriverManagerDataSource(url, username, password);
    }
}

properties-config.xml


<beans>
    <context:property-placeholder location="classpath:/com/acme/jdbc.properties"/>
</beans>

jdbc.properties

jdbc.properties
jdbc.url = JDBC:HSQLDB:HSQL://本地主機/ XDB
jdbc.username = SA
jdbc.password =
2017年8月22日 19:24
編輯回答
執(zhí)念

如果用ConfigurationProperties,需要添加依賴spring-boot-configuration-processor,而且要添加setter方法。如果直接用@Value的話,我這里是可以的

2017年12月5日 16:51
編輯回答
厭惡我

用的maven嗎,之前有遇到過有小朋友寫pom build的時候,沒有include resource的配置文件,導(dǎo)致代碼里面獲取不到配置文件,看一下是不是這個問題

2018年4月6日 11:44