Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/317.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Spring4-在jar>war中加载属性文件_Java_Spring_Spring Mvc_Spring 4 - Fatal编程技术网

Java Spring4-在jar>war中加载属性文件

Java Spring4-在jar>war中加载属性文件,java,spring,spring-mvc,spring-4,Java,Spring,Spring Mvc,Spring 4,我无法加载jar project.service.jar中的db.properties,它由war文件project-web.war引用。输出war在WEB-INF/lib/project.service.jar中有jar。servicesjar包含web应用程序使用的服务和dao类。RESTWAR也使用jar,它使用jar中的一些服务。战争开始时,我无法加载位于服务jar文件中的db.properties。prop文件具有要在jndi中查找的数据源名称 战争形态 AppConfig.java

我无法加载jar project.service.jar中的db.properties,它由war文件project-web.war引用。输出war在WEB-INF/lib/project.service.jar中有jar。servicesjar包含web应用程序使用的服务和dao类。RESTWAR也使用jar,它使用jar中的一些服务。战争开始时,我无法加载位于服务jar文件中的db.properties。prop文件具有要在jndi中查找的数据源名称

战争形态

AppConfig.java

@Bean
public static PropertyPlaceholderConfigurer propertyConfigurer()
        throws IOException {
    PropertyPlaceholderConfigurer props = new PropertyPlaceholderConfigurer();
    props.setLocations(new Resource[] { new ClassPathResource(
            "application.properties") });
    return props;
}
service.jar

@Component
@Configuration
//@ComponentScan(basePackages={ "com.mgage.mvoice" })
@PropertySource(value = { "classpath:db.properties" })
public class DatabaseConfig {
    @Autowired
    Environment environment;

    private @Value(value = "${voice.datasource}") String dataSourceString;

    @Bean
public DataSource getDataSource() {
    JndiDataSourceLookup lookup = new JndiDataSourceLookup();
    try {
        DataSource dataSource = lookup.getDataSource(dataSourceString); //this always is null
        return dataSource;
    } catch (DataSourceLookupFailureException e) {
        return null;
    }
}

    @Bean
    public PropertySourcesPlaceholderConfigurer propertyPlaceHolderConfigurer() {
        return new PropertySourcesPlaceholderConfigurer();
    }
}

如果AppConfig.java导入DataSourceConfig.java,我尝试了,但仍然得到了空环境。我遗漏了什么吗?将服务分离为jar文件以使其可用于REST、Web应用程序和报表应用程序是否正确?还是建议对所有服务、rest、报表类进行一次单独的war?

AFAIK,一个spring应用程序上下文只使用一个PropertySourcesplaceConfigurer。由于@PropertySourcevalue={classpath:db.properties}似乎没有填充环境,我只能看到另一种解决方案:明确地将其添加到AppConfig.java中的位置列表中:

但我必须承认,这与其说是一个干净的解决方案,不如说是一个变通办法

编辑:


但通常情况下,如果是由spring配置机器扫描DataSourceConfig.java,@PropertySourcevalue={classpath:db.properties}应该填充环境。

您需要在任何jar中指定类路径, 试试这个:
@PropertySourcevalue={classpath*:db.properties}

您是否尝试简单地添加@Autowired Environment;在AppConfig.java中,查看是否填充了db.properties?我试过了。没有注入任何内容,它是空的。我想应该扫描DataSourceConfig.java?我想,Serge,这就是问题所在。我没有扫描那个组件。现在组件获得了属性。我编辑帖子以反映它。
    props.setLocations(new Resource[] { new ClassPathResource(
        "application.properties"), new ClassPathResource("db.properties")});