[英]Spring boot - logging to file using @PropertySource not working
[英]Error while reading property file using @PropertySource in spring boot
我是Spring-Boot应用程序的新手,并尝试在Spring Boot应用程序中读取外部属性文件,该文件位于application.properties 之外的资源文件夹中 ,但出现以下异常,
Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanDefinitionStoreException: Failed to parse configuration class [com.test.config.MyInetgrationApplicationConfig]; nested exception is java.io.FileNotFoundException: Could not open ServletContext resource [/myIntegration.properties]
2017-09-06 17:27:04.866 ERROR 10512 --- [ost-startStop-1] o.s.b.f.s.DefaultListableBeanFactory : Destroy method on bean with name 'org.springframework.boot.autoconfigure.internalCachingMetadataReaderFactory' threw an exception
java.lang.IllegalStateException: ApplicationEventMulticaster not initialized - call 'refresh' before multicasting events via the context: org.springframework.boot.context.embedded.AnnotationConfigEmbeddedWebApplicationContext@225fa519: startup date [Wed Sep 06 17:27:04 IST 2017]; root of context hierarchy
at org.springframework.context.support.AbstractApplicationContext.getApplicationEventMulticaster(AbstractApplicationContext.java:414) [spring-context-4.3.10.RELEASE.jar:4.3.10.RELEASE]
at org.springframework.context.support.ApplicationListenerDetector.postProcessBeforeDestruction(ApplicationListenerDetector.java:97) ~[spring-context-4.3.10.RELEASE.jar:4.3.10.RELEASE]
at org.springframework.beans.factory.support.DisposableBeanAdapter.destroy(DisposableBeanAdapter.java:253) ~[spring-beans-4.3.10.RELEASE.jar:4.3.10.RELEASE]
我的Config类如下
@Configuration
@PropertySource(name="myIntegrationProperties", value ="myIntegration.properties")
public class MyInetgrationApplicationConfig {
/**
* Rest template.
*
* @return the rest template
*/
@Bean
public RestTemplate restTemplate() {
return new RestTemplate();
}
@Value("${datasource.name}")
private String dataSourceName;
@Value("${datasource.driver}")
private String dataSourceDriver;
@Value("${datasource.url}")
private String dataSourceUrl;
@Value("${datasource.username}")
private String dataSourceUserName;
@Value("${datasource.password}")
private String dataSourcePassword;
@Bean
@Primary
public DataSource dataSource() {
DataSource dataSource = new DataSource();
dataSource.setName(dataSourceName);
dataSource.setUrl(dataSourceUrl);
dataSource.setDriverClassName(dataSourceDriver);
dataSource.setUsername(dataSourceUserName);
dataSource.setPassword(dataSourcePassword);
return dataSource;
}
}
我的应用程序类
@SpringBootApplication(scanBasePackages = { "com.test" })
public class MyInetgrationApplication extends SpringBootServletInitializer {
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
return application.sources(MyInetgrationApplication.class);
}
}
您需要添加claapath:
@PropertySource("classpath:myIntegration.properties")
myIntegration.properties
文件应放在/ src / main / resources下,以便在运行时可在classpath
上使用。
尝试为您的资源文件路径提供classpath引用,如下所示:
@PropertySource(value = { "classpath:myIntegration.properties" }, name="myIntegrationProperties")
我无法使用@Value("${datasource.name}")
来获取值,因此我尝试在自动装配Environment
后再使用environment.getProperty("datasource.name")
对我@Value("${datasource.name}")
。 以下是示例代码,
@Configuration
@PropertySource("classpath:myIntegration.properties")
public class MyInetgrationApplicationConfig {
@Autowired
private Environment environment;
@Bean
@Primary
public DataSource dataSource() {
DataSource dataSource = new DataSource();
dataSource.setName(environment.getProperty("datasource.name"));
dataSource.setUrl(environment.getProperty("datasource.url"));
.
.
.
.
return dataSource;
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.