Spring混合配置時,遇到配置文件路徑NotFound,使用PathMatchingResourcePatternResolver解決
阿新 • • 發佈:2017-05-10
perl mapper mat add 配置 spa ner log addall
在將spring的xml配置改為java配置的過程中,遇到了一些問題,block時間比較長的一個問題是資源(.xml, .properties)的路徑找不到,最後是使用PathMatchingResourcePatternResolver解決的。
背景:Spring+MyBatis
入口:
@Configuration @Import({ DalConfig.class XXDBConfig.class }) @ImportResource(locations = {"classpath*:spring/applicationContext.xml", "classpath*:spring-dao/applicationContext.xml"})public class Config { @Bean public PathMatchingResourcePatternResolver pathMatchingResourcePatternResolver(){ return new PathMatchingResourcePatternResolver(); } }
DalConfig
@Configuration public class DalConfig { @Bean public DalDataSourceFactory xxDalDataSource() {return new DalDataSourceFactory(); } @Bean public PropertyPlaceholderConfigurer configBean( PathMatchingResourcePatternResolver pathMatchingResourcePatternResolver) throws IOException { List<Resource> resources = new ArrayList<>(); resources.addAll(Arrays.asList(pathMatchingResourcePatternResolver.getResources("classpath*:config.properties"))); resources.addAll(Arrays.asList(pathMatchingResourcePatternResolver.getResources("classpath*:/META-INF/app.properties"))); PropertyPlaceholderConfigurer propertyPlaceholderConfigurer = new PropertyPlaceholderConfigurer(); propertyPlaceholderConfigurer.setLocations(resources.toArray(new Resource[resources.size()])); propertyPlaceholderConfigurer.setIgnoreUnresolvablePlaceholders(true); return propertyPlaceholderConfigurer; } }
XXDBConfig
@Configuration public class XXDBConfig { @Bean public DataSource dataSourceXXXDB( @Value("${DBDataCenter}") String dbDataCenter, @Value("${CFX_DataSource_ServiceUrl}") String cfxDataSourceServiceUrl, @Value("${app.id}") String appId, DalDataSourceFactory xxxDalDataSource) throws Exception { return xxxxDalDataSource.createDataSource( "xxx" + dbDataCenter, cfxDataSourceServiceUrl, appId); } @Bean public SqlSessionFactoryBean sqlSessionFactoryXXXDB( DataSource dataSourceXXXDB, PathMatchingResourcePatternResolver pathMatchingResourcePatternResolver) throws IOException { SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean(); sqlSessionFactoryBean.setDataSource(dataSourceXXXDB); sqlSessionFactoryBean.setMapperLocations( pathMatchingResourcePatternResolver.getResources("classpath:com/xx/xxxdb/mapper/**/*.xml") //**表示叠代查找 ); return sqlSessionFactoryBean; } @Bean public MapperScannerConfigurer mapperScannerConfigurerXXXDB() { MapperScannerConfigurer mapperScannerConfigurer = new MapperScannerConfigurer(); return mapperScannerConfigurer; } }
Test
@RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(classes=Config.class) public class DBConfigTest { @Autowired private ApplicationContext ctx; @Autowired private Environment env; @Test public void checkXXXDB(){ MapperScannerConfigurer mapperScannerConfigurerXXXDB = (MapperScannerConfigurer)ctx.getBean("mapperScannerConfigurerXXXDB"); assertNotNull(mapperScannerConfigurerXXXDB); } }
Spring混合配置時,遇到配置文件路徑NotFound,使用PathMatchingResourcePatternResolver解決