繁体   English   中英

在春季启动中使用@PropertySource读取属性文件时出错

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM