首页 > 其他分享 >spring+hibernate配置多个数据源以及使用

spring+hibernate配置多个数据源以及使用

时间:2024-12-25 11:45:41浏览次数:3  
标签:jdbc spring 数据源 connection hibernate ------------- 使用

spring+hibernate配置多个数据源以及使用| Id | Title | DateAdded | SourceUrl | PostType | Body | BlogId | Description | DateUpdated | IsMarkdown | EntryName | CreatedTime | IsActive | AutoDesc | AccessPermission |

| -------------| -------------| -------------| -------------| -------------| -------------| -------------| -------------| -------------| -------------| -------------| -------------| -------------| -------------| -------------|
| 14568707| spring+hibernate配置多个数据源以及使用| 2021-03-23T10:05:00| | BlogPost|

   有时项目较大或者数据库设计的问题,一个项目可能需要连接多个数据源,现在用我的成功的demo写一下步骤,以连个数据源为例,更多个也是一样的。

1、多个数据库参数
       在jdbc.Properties中,配置两个数据库的连接。在此处的例子如下(我这里都是使用的MySql,如果要使用其他的请更换驱动),有些数据一样可以使用一个:

jdbc.driverClassName=com.mysql.jdbc.Driver
 
#数据库一
jdbc.url=jdbc:mysql://localhost:3306/zhangl1
jdbc.username=root
jdbc.password=root
 
#数据库二
jdbc.url.cm=jdbc:mysql://localhost:3306/zhangl2
jdbc.username.cm=root
jdbc.password.cm=root
2、配置数据源
       跟一个数据源配置是一样的,只是配置了两个而已,注意名字不要相同。这里使用的hikari连接池,其他的是类似的。

数据源1:

<!--数据源1-->
    <bean id="dataSource" class="com.zaxxer.hikari.HikariDataSource" >
        <property name="driverClassName" value="${jdbc.driverClassName}" />
        <property name="jdbcUrl" value="${jdbc.url}" />
        <property name="username" value="${jdbc.username}" />
        <property name="password" value="${jdbc.password}" />
        <property name="connectionTimeout" value="30000"/>
        <property name="connectionTestQuery" value="select 1"/>
        <!--最大空闲超时时间 default:10分钟   -->
        <property name="idleTimeout" value="600000"/>
        <!--连接池中一个连接的最大生命周期 default:30分钟-->
        <property name="maxLifetime" value="1800000"/>
        <property name="maximumPoolSize" value="100"/>
        <property name="minimumIdle" value="5"/>
    </bean>
 
    <!--session工厂-->
    <bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean" >
        <property name="dataSource" ref="dataSource" />
        <!--包扫描,数据库对应的实体类所在的包-->
        <property name="packagesToScan" value="com.vue.entity" />
        <property name="hibernateProperties">
            <value>
                <!-- hibernate使用的数据库方言(即连接哪种数据库) -->
                hibernate.dialect = org.hibernate.dialect.MySQLDialect
                <!-- hibernate批量插入,删除和更新时每次操作的记录数 -->
                hibernate.jdbc.batch_size = 50
                <!-- 允许被缓存的JDBC连接开启自动提交 -->
                hibernate.connection.autocommit = true
                <!-- 自动更新数据库表结构 -->
                hibernate.hbm2ddl.auto = update
                <!-- 后台显示sql语句,开发时使用
                hibernate.show_sql = true-->
                <!-- 连接数据库时是否使用数据库编码 -->
                hibernate.connection.useUnicode = true
                <!-- 连接数据库时数据的传输字符集编码方式 -->
                hibernate.connection.characterEncoding = UTF-8
                <!-- 启用查询缓存,程序中须手动操作 -->
                hibernate.cache.use_query_cache = false
            </value>
        </property>
    </bean>
 
    <!--事务管理器-->
    <bean id="transactionManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager">
        <property name="sessionFactory" ref="sessionFactory"/>
    </bean>
 
    <!-- 配置事务通知属性 -->
    <tx:advice id="transactionAdvice" transaction-manager="transactionManager">
        <!-- 定义事务传播属性 -->
        <tx:attributes>
            <tx:method name="insert*" propagation="REQUIRED"/>
            <tx:method name="save*" propagation="REQUIRED"/>
            <tx:method name="update*" propagation="REQUIRED"/>
            <tx:method name="set*" propagation="REQUIRED"/>
            <tx:method name="execute*" propagation="REQUIRED"/>
            <tx:method name="delete*" propagation="REQUIRED"/>
            <tx:method name="search*" propagation="REQUIRED"/>
            <tx:method name="*" propagation="REQUIRED" read-only="true"/>
        </tx:attributes>
    </tx:advice>
 
    <!-- 配置事务切面 -->
    <aop:config>
        <aop:advisor pointcut="execution(* com.vue.service.*.*(..))" advice-ref="transactionAdvice"/>
    </aop:config>
    <!-- 数据源1配置 end -->
数据源2:

<!--数据源2-->
    <bean id="dataSourcecm" class="com.zaxxer.hikari.HikariDataSource" >
        <property name="driverClassName" value="${jdbc.driverClassName}" />
        <property name="jdbcUrl" value="${jdbc.url.cm}" />
        <property name="username" value="${jdbc.username.cm}" />
        <property name="password" value="${jdbc.password.cm}" />
        <property name="connectionTimeout" value="30000"/>
        <property name="connectionTestQuery" value="select 1"/>
        <!--最大空闲超时时间 default:10分钟   -->
        <property name="idleTimeout" value="600000"/>
        <!--连接池中一个连接的最大生命周期 default:30分钟-->
        <property name="maxLifetime" value="1800000"/>
        <property name="maximumPoolSize" value="100"/>
        <property name="minimumIdle" value="5"/>
    </bean>
 
    <!--session工厂-->
    <bean id="sessionFactorycm" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean" >
        <property name="dataSource" ref="dataSourcecm" />
        <!--包扫描,数据库对应的实体类所在的包-->
        <property name="packagesToScan" value="com.vue.entitycm" />
        <property name="hibernateProperties">
            <value>
                <!-- hibernate使用的数据库方言(即连接哪种数据库) -->
                hibernate.dialect = org.hibernate.dialect.MySQLDialect
                <!-- hibernate批量插入,删除和更新时每次操作的记录数 -->
                hibernate.jdbc.batch_size = 50
                <!-- 允许被缓存的JDBC连接开启自动提交 -->
                hibernate.connection.autocommit = true
                <!-- 自动更新数据库表结构 -->
                hibernate.hbm2ddl.auto = update
                <!-- 后台显示sql语句,开发时使用
                hibernate.show_sql = true-->
                <!-- 连接数据库时是否使用数据库编码 -->
                hibernate.connection.useUnicode = true
                <!-- 连接数据库时数据的传输字符集编码方式 -->
                hibernate.connection.characterEncoding = UTF-8
                <!-- 启用查询缓存,程序中须手动操作 -->
                hibernate.cache.use_query_cache = false
            </value>
        </property>
    </bean>
 
    <!--事务管理器-->
    <bean id="transactionManagercm" class="org.springframework.orm.hibernate4.HibernateTransactionManager">
        <property name="sessionFactory" ref="sessionFactorycm"/>
    </bean>
 
    <!-- 配置事务通知属性 -->
    <tx:advice id="transactionAdvicecm" transaction-manager="transactionManagercm">
        <!-- 定义事务传播属性 -->
        <tx:attributes>
            <tx:method name="insert*" propagation="REQUIRED"/>
            <tx:method name="save*" propagation="REQUIRED"/>
            <tx:method name="update*" propagation="REQUIRED"/>
            <tx:method name="set*" propagation="REQUIRED"/>
            <tx:method name="execute*" propagation="REQUIRED"/>
            <tx:method name="delete*" propagation="REQUIRED"/>
            <tx:method name="search*" propagation="REQUIRED"/>
            <tx:method name="*" propagation="REQUIRED" read-only="true"/>
        </tx:attributes>
    </tx:advice>
 
    <!-- 配置事务切面 -->
    <aop:config>
        <aop:advisor pointcut="execution(* com.vue.service.*.*(..))" advice-ref="transactionAdvicecm"/>
    </aop:config>
    <!-- 数据源2配置 end -->
3、使用多数据源
       Dao中使用多数据源,获取到的sessionfactory是根据配置文件中配置的名字获取的,不同的名字代表不同的数据源。同理更多的数据源也是这样使用。

    @Resource
    private SessionFactory sessionFactory;
    @Resource
    private SessionFactory sessionFactorycm;
 
    private Session getCurrentSession() {
        return this.sessionFactory.getCurrentSession();
    }
 
    private Session getCurrentSessioncm() {
        return this.sessionFactorycm.getCurrentSession();
    }
 
    //使用示例
    //使用的是第一个数据源
    public List<T> find(String hql) {
        return this.getCurrentSession().createQuery(hql).list();
        
    }
 
    //使用的是第二个数据源
    public List<T> find(String hql) {
        return this.getCurrentSession2().createQuery(hql).list();
  
    }


 

| 648658| | 2021-03-23T10:05:00| false| | 2021-03-23T10:05:01.823| true| 有时项目较大或者数据库设计的问题,一个项目可能需要连接多个数据源,现在用我的成功的demo写一下步骤,以连个数据源为例,更多个也是一样的。 1、多个数据库参数 在jdbc.Properties中,配置两个数据库的连接。在此处的例子如下(我这里都是使用的MySql,如果要使用其他的请更换驱动),有些数| OwnerByUser|

标签:jdbc,spring,数据源,connection,hibernate,-------------,使用
From: https://www.cnblogs.com/ralphlauren/p/18621296

相关文章

  • Spring 中的 LocalSessionFactoryBean和LocalContainerEntityManagerFactoryBean
    Spring中的LocalSessionFactoryBean和LocalContainerEntityManagerFactoryBean|Id|Title|DateAdded|SourceUrl|PostType|Body|BlogId|Description|DateUpdated|IsMarkdown|EntryName|CreatedTime|IsActive|AutoDesc|AccessPermission||-------......
  • Spring MVC Thymeleaf Shiro Dialect 整合
    SpringMVCThymeleafShiroDialect整合|Id|Title|DateAdded|SourceUrl|PostType|Body|BlogId|Description|DateUpdated|IsMarkdown|EntryName|CreatedTime|IsActive|AutoDesc|AccessPermission||-------------|-------------|------------......
  • Springboot Cache @Cacheable 类内部调用时不生效,解决办法
    SpringbootCache@Cacheable类内部调用时不生效,解决办法|Id|Title|DateAdded|SourceUrl|PostType|Body|BlogId|Description|DateUpdated|IsMarkdown|EntryName|CreatedTime|IsActive|AutoDesc|AccessPermission||-------------|-------------|......
  • SpringBoot读取
    SpringBoot读取.yml配置文件最常见的两种方式-源码及其在nacos的应用|Id|Title|DateAdded|SourceUrl|PostType|Body|BlogId|Description|DateUpdated|IsMarkdown|EntryName|CreatedTime|IsActive|AutoDesc|AccessPermission||-------------|----......
  • Springboot使用RestTemplate发送Post请求postForEntity (application-json)的坑
    Springboot使用RestTemplate发送Post请求postForEntity(application-json)的坑|Id|Title|DateAdded|SourceUrl|PostType|Body|BlogId|Description|DateUpdated|IsMarkdown|EntryName|CreatedTime|IsActive|AutoDesc|AccessPermission||---------......
  • springboot项目启动成功后执行一段代码的两种方式
    springboot项目启动成功后执行一段代码的两种方式|Id|Title|DateAdded|SourceUrl|PostType|Body|BlogId|Description|DateUpdated|IsMarkdown|EntryName|CreatedTime|IsActive|AutoDesc|AccessPermission||-------------|-------------|-------......
  • SpringCloud微服务项目实战 - 限流、熔断、降级处理
    SpringCloud微服务项目实战-限流、熔断、降级处理|Id|Title|DateAdded|SourceUrl|PostType|Body|BlogId|Description|DateUpdated|IsMarkdown|EntryName|CreatedTime|IsActive|AutoDesc|AccessPermission||-------------|-------------|-----......
  • SpringCloud与SpringBoot区别
    SpringCloud与SpringBoot区别|Id|Title|DateAdded|SourceUrl|PostType|Body|BlogId|Description|DateUpdated|IsMarkdown|EntryName|CreatedTime|IsActive|AutoDesc|AccessPermission||-------------|-------------|-------------|----------......
  • springboot2
    springboot2.4以后的配置|Id|Title|DateAdded|SourceUrl|PostType|Body|BlogId|Description|DateUpdated|IsMarkdown|EntryName|CreatedTime|IsActive|AutoDesc|AccessPermission||-------------|-------------|-------------|-------------|......
  • springboot高校勤工俭学平台-计算机设计毕业源码66824
    摘 要本研究基于SpringBoot企业框架,设计并实现了一款高校勤工俭学平台,包括首页、通知公告、新闻通知和岗位信息等功能模块。该平台旨在为高校学生提供便捷的勤工俭学信息发布与查询服务,促进校园内部劳动力资源的充分利用和高效管理。在研究背景中,探讨了高校勤工俭学项目的......