Spring混合配置时,遇到配置文件路径NotFound,使用PathMatchingResourcePatternResolver解决

在将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);

    }

}
时间: 2024-10-20 05:19:10

Spring混合配置时,遇到配置文件路径NotFound,使用PathMatchingResourcePatternResolver解决的相关文章

spring 通过启动命令配置文件路径

公司使用dubbo开发,提供了很多的服务,每个服务中一些配置都是一样的,比如注册中心地址,公共码表库等一下配置,这样在部署每一个程序的时候,修改每一个服务的配置增加很多的工作量.且领导不想对程序有大的改动(不然可以引用配置中心解决).在此情况下使用spring加载放在服务外的配置的方式来解决这个问题. 1.代码中指定 测试代码中: String path = AppTest.class.getClassLoader().getResource("").toString(); Syste

spring结合时,web.xml的配置

<!-- 1. web.xml配置 <context-param> <param-name>webAppRootKey</param-name> <param-value>webapp.root</param-value> </context-param> "webapp.root"这个字符串可以随便写任何字符串.如果不配置默认值是"webapp.root". 可以用System.getP

struts2与spring集成时,关于class属性及成员bean自动注入的问题

正常来说按照Spring官方配置,在struts2与spring整合时,struts配置文件中class属性指向spring配置的bean id,但是在class指向类路径时,依然能注入service. public class LoginAction extends ActionSupport{ private LoginService loginService; public void setLoginService(LoginService loginService) { System.o

Mybatis与Spring集成时都做了什么?

Mybatis是java开发者非常熟悉的ORM框架,Spring集成Mybatis更是我们的日常开发姿势. 本篇主要讲Mybatis与Spring集成所做的事情,让读过本文的开发者对Mybatis和Spring的集成过程,有清晰的理解. 以mybatis-spring-2.0.2为例,工程划分六个模块. 一.annotation 模块 定义了@MapperScan和@MapperScans,用于注解方式扫描mapper接口.以及mapper扫描注册器(MapperScannerRegistrar

Spring Boot加载配置文件的完整步骤

这篇文章主要给大家介绍了关于Spring Boot加载配置文件的完整步骤,文中通过示例代码介绍的非常详细,对大家的学习或者使用Spring Boot具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧 前言 本文针对版本2.2.0.RELEASE来分析SpringBoot的配置处理源码,通过查看SpringBoot的源码来弄清楚一些常见的问题比如: SpringBoot从哪里开始加载配置文件? SpringBoot从哪些地方加载配置文件? SpringBoot是如何支持yaml和proper

【MySQL】查看MySQL配置文件路径及相关配置

1)关于配置文件路径 有时候,我发现虽然尝试修改了配置文件的一些变量,但是并没有生效.后来才发现原来是因为修改的文件并非MySQL服务器读取的配置文件. 如果不清楚MySQL当前使用的配置文件路径,可以尝试这样查看: 从上图可以看出, 服务器首先会读取/etc/my.cnf文件,如果发现该文件不存在,再依次尝试从后面的几个路径进行读取. (2)关于配置文件配置项分段 配置文件my.cnf通常会分成好几部分,如[client],[mysqld], [mysql]等等.MySQL程序通常是读取与它同

Struts2中使用Velocity模板时模板资源路径配置问题

在Struts2中使用Velocity模板时,如何以相对与Web工程的路径来配置模板资源文件路径这个问题网上千篇一律的来自Velocity官方文档.官方文档中指出如果是Web工程的话,模板的相对路径是工程根路径,今天在使用的时候有如下配置: Velocity.properties(默认在WEB-INF下): resource.loader =file, classclass.resource.loader.description = Velocity Classpath Resource Loa

linux中查看nginx、apache、php、mysql配置文件路径的方法

转自:http://www.phper163.com/archives/368 如何在linux中查看nginx.apache.php.mysql配置文件路径了,如果你接收一个别人配置过的环境,但没留下相关文档.这时该怎么判断找到正确的加载文件路径了.可以通过以下来判断1.判断apache首先执行命令找到httpd路径ps aux | grep httpd如httpd路径为 /usr/local/apache/bin/httpd然后执行以下命令/usr/local/apache/bin/http

spring autowired时发生异常情况

spring beanFactory那些就不说了,这次发生这个异常纠结好了好久,网上找了很多资料看,终于发现问题. 自动装配bean注入的时候,如果Spring配置定义了aop声明式事务,类似如下方式 <aop:config>  <aop:pointcut id="serviceMethods2"   expression="execution(public * net.villion.framework..*(..))" />  <a