问题描述
我有这样一个需求,一个程序在初次启动的时候,等用户打开浏览器,在浏览器中输入数据库名,链接地址,密码,数据库类型之后开始连接数据库。但现在是hibernate随spring容器启动,怎样才能阻止hibernate启动呢,等我想让hibernate和数据库连接的时候才开始连接?
解决方案
spring配置文件中不配置datasource,sessionFactory,transactionInterceptor,transactionManager等等任何和数据源和事务有关的bean,让spring启动,在界面接收参数后,参考:http://zhyi-12.iteye.com/blog/953295,动态往spring容器中添加datasource,sessionFactory,transactionInterceptor,transactionManager等关于数据源和事务的bean就可以了。
解决方案二:
http://stackoverflow.com/questions/12090406/dynamically-create-spring-beans-and-alter-properties-on-existing-beans
解决方案三:
这是实际工作中的需求吗?怎么会有这种需求,用户哪知道什么数据库地址,密码之类的,而且输入的连接地址你怎么验证是有效的呢?所以我想即便是输入地址,这个地址也是有固定选择的,不能随便写.如果数据库地址是固定的且有多个, 就在spring配置文件中配置多个datasource,给sessionfactory注入datasource时注入一个AbstractRoutingDataSource的子类对象,这样datasource可以根据页面传回的条件自动切换.详见http://dsbjoe.iteye.com/blog/1176779