sfkkxin
sfkkxin
2010-12-29 09:09
浏览 461
已采纳

用ClassPathXmlApplicationContext读取applicationContext.xml在tomcat下运行一段时间报错

用ClassPathXmlApplicationContext读取applicationContext.xml在tomcat下运行一段时间,就报:org.xml.SAMParaseException:An element with the identifier "dataSource2" must appear in the document,请问是怎么回事,能否只初始化一次!

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

4条回答 默认 最新

  • iteye_4873
    iteye_4873 2010-12-29 17:06
    已采纳

    1、
    假设class Utils.java文件中有
    [code="java"]
    public class Utils{
    public static ApplicationContext ctx = new ClassPathXmlApplicationContext("classpath:applicationContext.xml");

    }
    [/code]

    然后其他类就都可以直接使用Utils.ctx了,无需再实例化,
    2、
    也可以这样
    class Utils.java
    [code="java"]
    public class Utils{

    private ApplicationContext ctx = new ClassPathXmlApplicationContext("classpath:applicationContext.xml");

    public Object getBean(String beanName){
    return ctx.getBean(beanName);
    }
    }
    [/code]

    其他类继承,可如下:
    [code="java"]
    public class OtherClass extends Utils{
    public String testMethod(){
    Object obj = getBean("testBeanName");
    }
    }
    [/code]

    排版比较乱,供参考,希望有用

    点赞 评论
  • songfantasy
    songfantasy 2010-12-29 09:35

    看看"dataSource2" 这个bean的配置文件,是否正确?

    点赞 评论
  • iteye_4873
    iteye_4873 2010-12-29 09:36

    把“dataSource2”先注释掉,看是否还报错,会不会是dataSource2配置错误

    点赞 评论
  • iteye_4873
    iteye_4873 2010-12-29 10:34

    每次报错的地方不一样是把?~ 那可能不是配置问题
    还有每次都新建ctx实例吗? 这样有违使用spring的Bean管理的初衷了把,建议改善这个问题,可以用工具类或者继承来避免多次实例化ctx。
    [code="java"]ctx = new ClassPathXmlApplicationContext("classpath:applicationContext.xml"); [/code]

    点赞 评论

相关推荐