无法使用弹簧检索属性

时间:2016-06-09 10:08:05

标签: java spring spring-annotations

编辑注意:在调试期间,主类中的自动配置对象始终返回null

我正在尝试使用Configuration类和主类构建一个简单的spring应用程序,该类基本上从要在主类中使用的外部application.properties文件中获取值。因为我刚接触春天,可能我错过了一些基本的东西,所以我很感激任何帮助。非常感谢提前。

这是application.properties(与Config.java文件位于同一文件夹中)

kinesis.consumer.transaction.streamName = sample-stream-name
kinesis.consumer.transaction.applicationName = sample-application-name

Config.java文件

import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;
import org.springframework.context.support.PropertySourcesPlaceholderConfigurer;


@Configuration
@PropertySource("classpath:application.properties")
public class Config {

    @Value("${kinesis.consumer.transaction.streamName}")
    private
    String transactionStreamName;

    @Value("${kinesis.consumer.transaction.applicationName}")
    private
    String transactionApplicationName;


    public String getTransactionStreamName() {
        return transactionStreamName;
    }

    public void setTransactionStreamName(String transactionStreamName)
    {
        this.transactionStreamName = transactionStreamName;
    }

    public String getTransactionApplicationName()
    {
        return transactionApplicationName;
    }

    public void setTransactionApplicationName(String transactionApplicationName)
    {
        this.transactionApplicationName = transactionApplicationName;
    }

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

最后是主类

public class TransactionProcessor {

    @Autowired
    private static Config config;

    public static void main (String args[]) {
       System.out.println(config.getTransactionApplicationName()+" " + config.getTransactionStreamName());
    }
}

下面是项目结构

structure

4 个答案:

答案 0 :(得分:1)

请注意,默认情况下,类路径上提供以下文件夹:

/src/main/java/
/src/main/resources/
/src/main/test/

现在我的方式是我的/ src / main / resources /有我的application.properties文件,而我的/ src / main / java有一个包com.mypackage.config,它有我的Config.java文件。我引用它的方式如下:

@PropertySource("classpath:application.properties")

这适合我。

答案 1 :(得分:0)

将application.properties放在src/main/resources

答案 2 :(得分:0)

我猜测Config.java在一个包中。说:“com.kinesis.app”。如果配置文件位于同一目录中,则可以通过以下方式加载:

@PropertySource("classpath:com/kinesis/app/application.properties")

然而,另一篇文章是对的。大多数java工具都会使用

中的文件
  

的src /主/资源

将它们复制到您创建的jar中的正确位置。你是如何构建应用程序的?

答案 3 :(得分:0)

尝试加载当前应用程序正在运行的环境。模拟应用程序环境的两个关键方面:配置文件和属性。

@Configuration
@PropertySource({ "classpath:application.properties" })
public class PersistenceJPAConfig {

@Autowired
private Environment env;

public void properties() {
    Preconditions.checkNotNull(env
            .getProperty("kinesis.consumer.transaction.streamName")));
    Preconditions.checkNotNull(env
            .getProperty("kinesis.consumer.transaction.applicationName")));

    }
}