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 属性设置到返回的对象中解决。
测试这样使用是可以正确注入的。

即文件名和路径都是正确的。

阅读 6.8k
3 个回答

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

在@Configuration类是用于配置容器的主要机制,仍然可能有必要使用至少一些XML。在这些场景中,只需使用@ImportResource和定义尽可能多的XML即可。这样做可以实现“以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 =

用的maven吗,之前有遇到过有小朋友写pom build的时候,没有include resource的配置文件,导致代码里面获取不到配置文件,看一下是不是这个问题

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题