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