【问题标题】:@Value returns null@Value 返回空值
【发布时间】:2019-11-24 09:59:38
【问题描述】:

我正在尝试从属性文件中获取一个值,下面是我注入 URL 的尝试。不确定我是否正确执行此操作。

我已经在属性文件中为 URL 设置了一些东西,我很确定我的注入方法是错误的,但我是一个 java 新手,所以我无法真正找出解决方案。

public class DatabaseHelperClass {
    static String URL;

    @Value("${databaseURL}")
    public void propertiesSetter(String URL) {
        DatabaseHelperClass.URL = URL;
    }

    public static Connection getOracleConnection() throws SQLException{


        try {
            Class.forName("oracle.jdbc.driver.OracleDriver").newInstance();
        }
        catch(ClassNotFoundException ex) {
            System.out.println("Error: unable to load driver class");
            System.exit(1);
        }

        catch(IllegalAccessException ex) {
            System.out.println("Error: access problem while loading");
            System.exit(2);
        }
        catch(InstantiationException ex) {
            System.out.println("Error: unable to instantiate driver");
            System.exit(3);
        }




        System.out.print(URL);
        Connection connection = null;
        System.out.println();

        try {
            connection = DriverManager.getConnection(URL);
            System.out.print(connection);
        }
        catch(SQLException e) {
            System.out.println(e.getMessage());
        }

        return connection;
    }

【问题讨论】:

  • 跟Spring有关吗?
  • Value 指的是什么类?如果是 spring,那么你不能在 spring bean 上下文之外使用它
  • 如果你使用 Spring,你最好使用它对 DataSources 的支持,而不是重新发明轮子(很糟糕)。
  • 是的,我正在使用 spring,并且我有多个 .properties 文件。开发、测试等,所以我无法指定属性文件的绝对路径

标签: java spring properties properties-file


【解决方案1】:

如果您使用的是我假设的 Spring 框架,那么简单地编写 @Value 注释是行不通的。您必须编写一个有助于识别属性文件名的调用。我在下面提供一个例子。

@Configuration
@PropertySources({
  @PropertySource("file:config/credentials-config.properties"),
  @PropertySource("file:config/app-config.properties")
})
public class ConfigReader {

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

【讨论】:

    【解决方案2】:

    applicationContext.xml 中,您必须添加要从类路径中读取的属性文件:

    <context:property-placeholder location="classpath:something.properties, classpath:demo.properties" />
    

    如果要添加多个属性文件,只需用逗号分隔即可添加

    像这样更新你的课程:

    public class DatabaseHelperClass {
    
      @Value("${databaseURL}")
      static String URL;
    
    
    public static Connection getOracleConnection() throws SQLException{
    
    
        try {
            Class.forName("oracle.jdbc.driver.OracleDriver").newInstance();
        }
        catch(ClassNotFoundException ex) {
            System.out.println("Error: unable to load driver class");
            System.exit(1);
        }
    
        catch(IllegalAccessException ex) {
            System.out.println("Error: access problem while loading");
            System.exit(2);
        }
        catch(InstantiationException ex) {
            System.out.println("Error: unable to instantiate driver");
            System.exit(3);
        }
    
    
    
    
        System.out.print(URL);
        Connection connection = null;
        System.out.println();
    
        try {
            connection = DriverManager.getConnection(URL);
            System.out.print(connection);
        }
        catch(SQLException e) {
            System.out.println(e.getMessage());
        }
    
        return connection;
    }
    

    【讨论】:

    • 2019 年的 xml 配置?呜呜呜
    • 所以我使用的是 spring,但我有多个 .properties 文件。一个用于测试一个前端开发等,所以我不认为 在这种情况下会起作用
    • 您可以添加多个属性文件。
    猜你喜欢
    • 2017-01-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-04
    • 1970-01-01
    相关资源
    最近更新 更多