1. 程式人生 > >Spring混合配置時,遇到配置文件路徑NotFound,使用PathMatchingResourcePatternResolver解決

Spring混合配置時,遇到配置文件路徑NotFound,使用PathMatchingResourcePatternResolver解決

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解決