我正在使用以下代码加载属性文件:
@Bean
public Properties quartzProperties() throws IOException {
PropertiesFactoryBean propertiesFactoryBean = new PropertiesFactoryBean();
propertiesFactoryBean.setLocation(new ClassPathResource("/quartz.properties"));
propertiesFactoryBean.afterPropertiesSet();
return propertiesFactoryBean.getObject();
}
quartz.properties
就像:
org.quartz.jobStore.host = ${jobHost}
我尝试设置jobHost
变量application.properties
文件:
jobHost = localhost
但它可以吸引我:
java.net.UnknownHostException:$ {jobHost}
似乎jobHost
尚未解决。
有什么想法吗?
答案 0 :(得分:0)
由于您直接处理Properties
,因此${jobHost}
不会得到解决。
您可以使用ConfigurationProperties:
@Configuration
@PropertySource("classpath:quartz.properties")
@ConfigurationProperties(prefix = "xxx")
public class QuartzConfigProperties {
// Fields go here
}
或
@Component
@PropertySource("classpath:quartz.properties")
public class QuartzConfigProperties {
@Value("${org.quartz.jobStore.host}")
private String host;
//getters and setters
}
答案 1 :(得分:0)
将属性存储在多个位置可能会使其他程序员感到困惑。 而且密钥应该唯一以保持一致性 我建议决定从哪个属性文件中读取值。
1。从application.properties中读取 在此处查看示例:
How to access a value defined in the application.properties file in Spring Boot
按照@Eugen Covaci与@Component
的建议从任何@Value
访问它:
@Value("${org.quartz.jobStore.host}")
private String name;
2。从quartz.properties中读取 这样,您就可以打开新属性(如果您创建了单独的属性文件,我想您会拥有更多的属性)。 请参阅下面的示例:
QuartzProperties POJO(每个字段都是一个属性)
public class QuartzProperties {
private String jobHost;
public String getJobHost() { return jobHost; }
public void setJobHost(String jobHost) { this.jobHost = jobHost; }
}
配置类
@Configuration
@PropertySource("classpath:quartz.properties")
public class QuartzConfig {
@Value("${org.quartz.jobStore.host}")
String jobHost;
//other properties for Quartz here
@Bean
public QuartzProperties quartzProperties(){
QuartzProperties quartzProperties = new QuartzProperties();
quartzProperties.setJobHost(jobHost);
//setters for other properties here
return quartzProperties;
}
@Bean
public static PropertySourcesPlaceholderConfigurer properties(){
return new PropertySourcesPlaceholderConfigurer();
}
}
通过@Component
中的任何quartzProperties.getJobHost()
访问它。
我只是将其命名为quartzProperties和QuartzConfig,但它可以是jobStoreProperties或JobStoreConfig。取决于这些属性的目的。
或者,如果您要创建2个配置文件(例如,开发和测试),可以按照Spring YAML Configuration
创建它们或者您可以将配置外部化为环境变量/将其作为命令行参数传递。 Externalized Configuration