怎么在不重启服务的情况下修改spring配置文件

怎么在不重启服务的情况下修改spring配置文件

问题描述:

我们有个项目要根据不同的注册用户,动态为这个用户生成数据库。所以就必须在系统中生成新的数据源,这一切都要在不重启服务的情况下完成。我现在是根据注册的不同用户,在spring的配置文件内添加数据源配置,可对spring的配置文件修改后不能得到相应的内容。请问怎样才能重新获得修改过的配置文件?或者用别的方案来实现?
[b]问题补充:[/b]
如果根据不同的用户生成相应的配置文件,那我怎么才能根据不同的访问用户获得相应的数据源呢?
[b]问题补充:[/b]
根据不同用户生成配置文件,spring根本就获取不到啊
[b]问题补充:[/b]
Unhandled Exception thrown: class org.springframework.beans.factory.BeanCreationException
[b]问题补充:[/b]
我怎么给spring指定这个数据源,就是操作DAO的时候使用指定的数据源。
[b]问题补充:[/b]
这样配置是不是用的都是一个Sessionfactory?
[b]问题补充:[/b]
问题还是没解决,谁能给说详细一点,给个具体思路。
[b]问题补充:[/b]
谢谢你的帮助,按照你的方案,问题已经解决。我根据不同的用户产生相应的配置文件,然后对相应的用户产生一个ApplicationContext放进Application池进行管理。这样就是每个用户都有一个独立的ApplicationContext。但有个问题同时出现了,就是每次在getBean()时都要指定ApplicationContext,很是麻烦,能有什么好的指导意见吗?

你可以这样嘛,为每个用户生成一个spring配置比如:用户javaeye,就生成javaeye-spring.xml,这个文件可以用dom4j去写spring的数据源配置等,要得到就用spring的ApplicationContext去解析这个文件,把信息读到内存嘛,这样每个用户的配置都是分开的,不会搞在一起很乱

不用在运行时修改spring配置吧,只需要写一个工厂方法,根据用户获得DataSource就可以了啊

你把这个用户对应的spring配置文件加载到spring的ApplicationContext里,再用context.getBeam("javaeye_datasource")不就得到了,"javaeye_datasource"这个就是在javaeye-spring.xml里面配置的datasource的id

ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("path/javaeye-spring.xml");
这样怎么可能得不到

这个当然都是根据用户动态产生的xxx-spring.xml配置文件中配置嘛,这个配置文件是也是你动态创建的嘛

你可以用同一个,这都要看你自己怎么动态 产生xxx-spring.xml配置文件