关闭

Spring系统访问多数据库

标签: spring数据库报表
494人阅读 评论(0) 收藏 举报
分类:

Spring连接多数据库

在比较大的项目中,特别偏报表类的项目,一般会连接好多数据库,有时候需要给不同的service配置不同的数据库。

spring配置文件

applicationContext.xml

   <!-- 配置C3P0连接池的参见参数 -->

   <bean id="c3p0DataSource" abstract="true">

      <!--初始化时获取的连接数,取值应在minPoolSizemaxPoolSize之间。Default: 3 -->

      <property name="initialPoolSize" value="10" />

      <!--连接池中保留的最小连接数。 -->

      <property name="minPoolSize" value="3" />

      <!--连接池中保留的最大连接数。Default: 15 -->

      <property name="maxPoolSize" value="50" />

      <!--最大空闲时间,60秒内未使用则连接被丢弃。若为0则永不丢弃。Default: 0 -->

      <property name="maxIdleTime" value="60" />

      <!--当连接池中的连接耗尽的时候c3p0一次同时获取的连接数。Default: 3 -->

      <property name="acquireIncrement" value="5" />

      <!--60秒检查所有连接池中的空闲连接。Default: 0 -->

      <property name="idleConnectionTestPeriod" value="60" />

   </bean>

  

   <!-- 配置一个dataSource连接数据库:最核心的数据库 -->

   <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close" parent="c3p0DataSource">

        <property name="driverClass" value="oracle.jdbc.driver.OracleDriver" />

        <property name="jdbcUrl" value="jdbc:oracle:thin:user/password@111:1521:F1" />

        <property name="user" value="test" />

       <property name="password" value="test" />

    </bean>

  

   <!-- 配置HIBERNATE工厂 -->

   <bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">

      <property name="dataSource" ref="dataSource" />

      <property name="hibernateProperties">

         <props>

            <prop key="hibernate.dialect">org.hibernate.dialect.Oracle10gDialect</prop>

            <prop key="hibernate.show_sql">true</prop>

            <prop key="hibernate.format_sql">true</prop>

            <!-- 自动创建、更新、验证数据库表结构。如果不是此方面的需求建议 value=none -->

            <prop key="hibernate.hbm2ddl.auto">none</prop>

            <prop key="show_sql">true</prop>

         </props>

      </property>

   </bean>

  

   <!-- 配置JDBC连接数据库 -->

   <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate" abstract="false"

      lazy-init="false" autowire="default">

      <property name="dataSource" ref="dataSource" />

   </bean>

  

   <!-- 配置HIBERNATE连接数据库 -->

   <bean id="hibernateTemplate" class="org.springframework.orm.hibernate3.HibernateTemplate">

      <property name="sessionFactory">

         <ref bean="sessionFactory" />

      </property>

   </bean>

数据库配置文件

这里连接两种数据库

applicationContextDB.xml

<bean id="jdbcTemplate1" class="org.springframework.jdbc.core.JdbcTemplate">

      <property name="dataSource">

         <bean class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close" parent="c3p0DataSource">

            <property name="driverClass" value="oracle.jdbc.driver.OracleDriver" />

              <property name="jdbcUrl" value="jdbc:oracle:thin:user/password@111:1521:C1" />

              <property name="user" value="app" />

              <property name="password" value="app" />

         </bean>

      </property>

   </bean>

   <bean id="jdbcTemplate2" class="org.springframework.jdbc.core.JdbcTemplate">

      <property name="dataSource">

         <bean class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close" parent="c3p0DataSource">

            <property name="driverClass" value="oracle.jdbc.driver.OracleDriver" />

              <property name="jdbcUrl" value="jdbc:oracle:thin:user/password@111:1521:a1" />

              <property name="user" value="test" />

              <property name="password" value="test" />

         </bean>

      </property>

   </bean>

配置Service文件

这里一个service连接一个数据库

applicationContextService.xml

<!-- 1.配置获取数据的Service -->

   <bean id="getDataService" class="com.cloud.impl.GetDataImple">

      <property name="jdbcTemplate" ref="jdbcTemplate" />

      <property name="hibernateTemplate" ref="hibernateTemplate" />

   </bean>

   <!-- 2.配置获取菜单的Service -->

   <bean id="getMenuService" class="com.cloud.impl.GetMenuImpl">

      <property name="jdbcTemplate1" ref="jdbcTemplate1" />

   </bean>

   <!-- 3.配置获取用户的Service -->

   <bean id="getUserService" class="com.cloud.impl.GetUserImpl">

      <property name="jdbcTemplate2" ref="jdbcTemplate2" />

   </bean>

配置定时器

这里定时器的执行规则是定点执行,秒、分、时

quart.xml

 <!-- 配置第一个定时器 -->

    <bean id="getDataClock" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">

       <property name="targetObject" ref="getDataService" />

       <property name="targetMethod" value="getData" />

       <property name="concurrent" value="false" />

    </bean>

    <bean id="getDataTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">

       <property name="jobDetail" ref="getDataClock" />

       <property name="cronExpression">

          <value>0 40 17 ? * *</value>

       </property>

    </bean>

    <!-- 配置第二个定时器 -->

    <bean id="getMenuClock" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">

       <property name="targetObject" ref="getMenuService" />

       <property name="targetMethod" value="getMenu" />

       <property name="concurrent" value="false" />

    </bean>

    <bean id="getMenuTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">

       <property name="jobDetail" ref="getMenuClock" />

       <property name="cronExpression">

          <value>0 39 17 ? * *</value>

       </property>

    </bean>

    <!-- 配置第三个定时器 -->

    <bean id="getUserClock" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">

       <property name="targetObject" ref="getUserService" />

       <property name="targetMethod" value="getUser" />

       <property name="concurrent" value="false" />

    </bean>

    <bean id="getUserTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">

       <property name="jobDetail" ref="getUserClock" />

       <property name="cronExpression">

          <value>0 41 17 ? * *</value>

       </property>

    </bean>

    <!-- 启动配置的定时器 -->

    <bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">

       <property name="triggers">

          <list>

             <ref bean="getDataTrigger"/>

             <ref bean="getMenuTrigger"/>

             <ref bean="getUserTrigger"/>

          </list>

       </property>

    </bean>

</beans>

连接数据库封装

package com.cloud.Common;

import org.springframework.jdbc.core.JdbcTemplate;

import org.springframework.orm.hibernate3.HibernateTemplate;

public class BaseJdbcSupport {

   private HibernateTemplate hibernateTemplate;

   private JdbcTemplate jdbcTemplate;

   public HibernateTemplate getHibernateTemplate() {

      return hibernateTemplate;

   }

   public void setHibernateTemplate(HibernateTemplate hibernateTemplate) {

      this.hibernateTemplate = hibernateTemplate;

   }

   public JdbcTemplate getJdbcTemplate() {

      return jdbcTemplate;

   }

   public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {

      this.jdbcTemplate = jdbcTemplate;

   }

}

定时器执行代码

package com.cloud.impl;

import java.util.List;

import com.cloud.Common.BaseJdbcSupport;

public class GetDataImple extends BaseJdbcSupport{

   @SuppressWarnings("rawtypes")

   public void getData(){

      List list = this.getJdbcTemplate().queryForList("select t.*, t.rowid from AP_USER t where t.user_code='B11302246'");

      System.out.println("查询数据库一:"+list);

   }

}

package com.cloud.impl;

import java.util.List;

import org.springframework.jdbc.core.JdbcTemplate;

public class GetMenuImpl {

   private JdbcTemplate jdbcTemplate1;

   public JdbcTemplate getJdbcTemplate1() {

      return jdbcTemplate1;

   }

   public void setJdbcTemplate1(JdbcTemplate jdbcTemplate1) {

      this.jdbcTemplate1 = jdbcTemplate1;

   }

   @SuppressWarnings("rawtypes")

   public void getMenu(){

      List list = this.getJdbcTemplate1().queryForList("select t.*, t.rowid from AP_MENU t where t.menu_name='揽收报表'");

      System.out.println("查询数据库二:"+list);

   }

}

package com.cloud.impl;

import org.springframework.jdbc.core.JdbcTemplate;

public class GetUserImpl {

   private JdbcTemplate jdbcTemplate2;

   public JdbcTemplate getJdbcTemplate2() {

      return jdbcTemplate2;

   }

   public void setJdbcTemplate2(JdbcTemplate jdbcTemplate2) {

      this.jdbcTemplate2 = jdbcTemplate2;

   }

   public void getUser(){

      int count = this.jdbcTemplate2.queryForInt("select count(*) from D_USER");

      System.out.println("查询数据库三:"+count);

   }

}

0
0
查看评论

Spring Boot 微框架学习(利用Spring Boot编写一个访问数据库的helloword)

Spring Boot 项目旨在简化创建产品级的 Spring 应用和服务。你可通过它来选择不同的 Spring 平台。可创建独立的 Java 应用和 Web 应用,对于创建的Web应用甚至不需要启动Tomcat等容器
  • canot
  • canot
  • 2016-05-19 00:19
  • 4379

Spring JPA多数据库访问

转一篇关于spring-data-jpa链接多数据库的文章。转自:http://www.baeldung.com/spring-data-jpa-multiple-databases 1. Overview In this tutorial we’ll implement a s...
  • cnhome
  • cnhome
  • 2015-03-06 07:28
  • 1325

springboot整合mybatis实现多数据库的切换

springboot整合mybatis: 第一步配置数据源 在application.properties文件中配置数据源,如下配置: spring.datasource.jdbcUrl=jdbc:oracle:thin:@10.21.16.140:1521:ora11g spring.d...
  • qq_34389619
  • qq_34389619
  • 2017-06-29 16:56
  • 688

Hibernate+Spring连接多个数据库

Hibernate数据源配置 连接多数据的配置就是在配置文件中配置两个数据源,两个事务,DAO配置文件中调用哪个就连哪个数据库。 配置如下: 数据源1:        <property name="url&q...
  • tony8829
  • tony8829
  • 2012-06-20 17:21
  • 9216

Spring + Mybatis配置多数据库

本文主要介绍如何使用spring+mybatis连接多个数据库。
  • tangtong1
  • tangtong1
  • 2016-04-01 16:45
  • 4393

实现spring多数据源以支持saas或手机App的多公司模式

当我们开发saas或手机应用程序,涉及多公司时,要求每个公司使用一个数据库,如何配置spring数据源使得每个公司使用不同的数据库连接? 实现原理: 自己新建一个MultiClientDataSource类(实现DataSource接口)去代替原来注入dataSource的ComboPooledDa...
  • kingofworld
  • kingofworld
  • 2015-03-30 20:37
  • 1675

spring 配置多数据库和数据源

Spring的多数据源配置(Spring+iBATIS + Oracle环境下) [日期:2012-02-29] 来源:Linux社区  作者:baolong47 [字体:大 中 小]    电信的业务逻辑是复杂的,数据库的相互调用是不可避免。同一个应用项目中,...
  • pingfanwuzhe
  • pingfanwuzhe
  • 2012-11-06 12:02
  • 225

django 1.8 官方文档翻译: 2-5-6 多数据库

多数据库这篇主题描述Django 对多个数据库的支持。大部分Django 文档假设你只和一个数据库打交道。如果你想与多个数据库打交道,你将需要一些额外的步骤。定义你的数据库在Django中使用多个数据库的第一步是告诉Django 你将要使用的数据库服务器。这通过使用DATABASES 设置完成。该设...
  • wizardforcel
  • wizardforcel
  • 2015-08-30 08:13
  • 626

你们要的多数据库功能终于来了

原创 2016-11-15 郭霖 郭霖 写在前面 翻了一下推送的历史记录,距离LitePal上一个版本发布已经过去整整五个月时间了。其实在上次发布LitePal 1.3.2版本的时候我就跟大家承诺过,1.4.0版本中一定会加入支持多数据库的功能,只是我没想到这个版本来得这么迟。...
  • u011277123
  • u011277123
  • 2016-11-16 09:31
  • 1166

springMVC多数据库配置

1.创建jdbc.properties文件 #oracle jdbc.driver=oracle.jdbc.driver.OracleDriver jdbc.url=jdbc:oracle:thin:@192.0.0.1:1521:orcl jdbc.username=ytj jdbc.p...
  • snowyz
  • snowyz
  • 2017-06-21 10:40
  • 398
    好玩的公众号
    个人资料
    • 访问:366997次
    • 积分:3746
    • 等级:
    • 排名:第10216名
    • 原创:133篇
    • 转载:0篇
    • 译文:0篇
    • 评论:10条
    最新评论