war ファイル (project-web.war) によって参照される jar (project.service.jar) 内にある db.properties をロードできませんでした。出力 war には、WEB-INF/lib/project.service.jar 内に jar があります。サービス jar には、Web アプリで使用されるサービスと dao クラスが含まれています。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 をインポートする必要があります。試してみましたが、それでも環境が null になります。何か不足していますか?サービスを jar ファイルとして分離して、REST、Web アプリケーション、およびレポート アプリケーションで使用できるようにすることは正しいですか? それとも、すべてのサービス、休息、レポートのクラスで単一の戦争を行うことをお勧めしますか?