编辑注意:在调试期间,主类中的自动配置对象始终返回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());
}
}
下面是项目结构
答案 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")));
}
}