¿Cómo implementar múltiples bases de datos con hibernate + spring + tomcat en un proyecto web java?
Contexto de la aplicación.
& ltbean id = " fuente de datos principal " class = " org . Apache . commons . dbcp . fuente de datos básica " destroy-method = " close " >
<! -Establecer el valor inicial del grupo de conexiones->
& ltproperty name = "inicial size" value = " 5 "/>
& lt! -Establecer el grupo de conexiones máximo-& gt;
& ltproperty name = " max active " value = " 5 "/& gt;
& lt! -Establecer el valor mínimo de inactividad del grupo de conexiones-& gt;
& ltproperty name = " minIdle " value = " 2 "/& gt; -Establecer el valor máximo de inactividad del grupo de conexiones-& gt;
& ltproperty name = " maxIdle " value = " 5 "/>
& lt/bean & gt;
& ltbean id = " session factory " class = " org . spring framework . ORM . hibernate 3 . annotation . annotationsessionfactorybean " & gt;
& ltproperty name = " fuente de datos " ref = " fuente de datos "/& gt;
& ltproperty name = " propiedades de hibernación " & gt;
& ltvalue& gt
& lt! -Establecer dialecto de base de datos->
hibernate dialect = org . -Enviar sentencias SQL a la consola-& gt;
hibernate.show_sql=true
& lt! -Declaración SQL desde formato de impresión a consola->;
hibernate.format_sql=true
</value>
</property >
& ltproperty nombre = " paquetesToScan " valor = " com . zxw . enlace . negocio . " * *.
Entidad" ></property>
</bean>
<bean id = "fuente de datos" class = "com.zxw.link.commons fuente de datos dinámicos " >.
& ltproperty name = " fuentes de datos de destino " >>p>
& ltmap key-type = " Java . lang . string " & gt; p>
& ltentry key = " zxw " value-ref = " zxw _ fuente de datos "/& gt;
& ltentry key = " new _ back " value-ref = " new _ back _ fuente de datos "/& gt;
& lt!-Más fuentes de datos, escriba otra fuente de datos de acuerdo con el siguiente archivo de configuración y configure las entradas aquí->
& lt /map & gt;
& lt/property & gt;
& ltproperty name = "defaulttargetdata source" ref = "zxw_data source"/& gt;
</bean>
<bean id = "zxw_data source" parent = "fuente de datos principal">
<! - Configurar nombre del controlador JDBC ->
& ltproperty name = " controlador nombre de clase " valor = " controlador JDBC de Oracle "/& gt;
& lt! Establecer URL de conexión JDBC ->
& ltnombre de propiedad = " URL ". value = " JDBC:Oracle:thin:@ 148. 20. 20. 17:1521:oradb "/& gt; p>
& lt! -Establecer nombre de usuario de la base de datos-& gt;
& ltnombre de propiedad = " nombre de usuario " valor = " Zhou "/& gt;
& lt! -Establecer contraseña de base de datos-& gt;
& ltproperty name = " contraseña " valor = " Zhou "/& gt;
& lt/bean & gt;
<! -# # # # # # # # # # # # # # #Nueva copia de seguridad# # # # # # # # # #->
& ltbean id = " new _ back _ data source " padre = " fuente de datos principal ">
<! -Establecer nombre del controlador JDBC ->
& ltproperty name = " nombre de clase de controlador " valor = " Oracle . JDBC . controlador . Controlador Oracle "/& gt; -Establecer URL de conexión JDBC->
<proper
ty nombre = " URL " valor = " JDBC:Oracle:thin:@ 148 . 20 . 20 . 15:1521:ora 10 "/>
& lt! -Establecer nombre de usuario de la base de datos->
<Attribute name = " nombre de usuario " valor = " informe "/& gt;
<! -Establecer contraseña de base de datos-& gt;
& ltproperty name = " contraseña " valor = " informe "/& gt;
& lt/bean & gt;
<! -# # # # # # # # # # # # # # #Nueva Copia de Seguridad# # # # # # # # # ->
Fuente de datos dinámica. java:
La clase pública DynamicDataSource extiende AbstractRoutingDataSource {
Objeto protegido determineCurrentLookupKey() {
//TODO código auxiliar de método generado automáticamente
Regresar customercontextholder.getcustomertype();
}
}
CustomerContextHolder. java:
Clase pública CustomerContextHolder {
Hilo final estático privado ContextHolder local =
nuevo hilo local();
Vacío estático público setCustomerType(String customerType){
titular del contexto . set(tipo de cliente);
}
Cadena estática pública getCustomerType() {
return(String)titular de contexto . get();
}
Vuelo estático público clearCustomerType() {
titular de contexto remove(); p>
}
}
Llamado a la acción
Clase pública ZzhAction {
@Resource
Privado ZzhService zzhService
@RequestMapping("/zzh/test.do ")
Prueba de anulación pública(){
Lista & ltZzh & gtzzhs = zzh service . get all();
system . println(zzhs . size());
//Establezca la fuente de datos, los parámetros están en el archivo de configuración.
//<entry key = " new _ back " value-ref = " new _ back _ data source "/& gt;palabra clave
customercontextholder setcustomertype( " new _. atrás ");
}
}