文档章节

Druid 配多个数据库

p
 piz__
发布于 2017/07/21 15:58
字数 1503
阅读 22
收藏 0
点赞 0
评论 0

hibernateConfig.xml文件

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop"
	xmlns:context="http://www.springframework.org/schema/context" xmlns:tx="http://www.springframework.org/schema/tx"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
		http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.2.xsd
		http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.2.xsd
		http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.2.xsd">
	<!-- 配置数据源 -->
	<bean name="dataSource" class="com.alibaba.druid.pool.DruidDataSource"
		init-method="init" destroy-method="close">
		<property name="url" value="${MessagePush.jdbc_url}" />
		<property name="username" value="${MessagePush.jdbc_username}" />
		<property name="password" value="${MessagePush.jdbc_password}" />
		<!-- 初始化连接大小 -->
		<property name="initialSize" value="0" />
		<!-- 连接池最大使用连接数量 -->
		<property name="maxActive" value="${MessagePush.jdbc_maxActive}" />
		<!-- 连接池最大空闲 -->
		<!--<property name="maxIdle" value="20" /> -->
		<!-- 连接池最小空闲 -->
		<property name="minIdle" value="0" />
		<!-- 获取连接最大等待时间 -->
		<property name="maxWait" value="60000" />
		<!-- <property name="poolPreparedStatements" value="true" /> <property 
			name="maxPoolPreparedStatementPerConnectionSize" value="33" /> -->

		<property name="validationQuery" value="${MessagePush.validationQuery}" />
		<property name="testOnBorrow" value="true" />
		<property name="testOnReturn" value="true" />
		<property name="testWhileIdle" value="true" />
		<!-- 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 -->
		<property name="timeBetweenEvictionRunsMillis" value="60000" />
		<!-- 配置一个连接在池中最小生存的时间,单位是毫秒 -->
		<property name="minEvictableIdleTimeMillis" value="25200000" />
		<!-- 打开removeAbandoned功能 -->
		<property name="removeAbandoned" value="true" />
		<!-- 1800秒,也就是30分钟 -->
		<property name="removeAbandonedTimeout" value="1800" />
		<!-- 关闭abanded连接时输出错误日志 -->
		<property name="logAbandoned" value="true" />
		<!-- 监控数据库 -->
		<!-- <property name="filters" value="stat" /> -->
		<property name="filters" value="mergeStat" />
	</bean>
	<bean name="dataSource1" class="com.alibaba.druid.pool.DruidDataSource"
		init-method="init" destroy-method="close">
		<property name="url" value="${MessagePush.jdbc_url1}" />
		<property name="username" value="${MessagePush.jdbc_username1}" />
		<property name="password" value="${MessagePush.jdbc_password1}" />
		<!-- 初始化连接大小 -->
		<property name="initialSize" value="0" />
		<!-- 连接池最大使用连接数量 -->
		<property name="maxActive" value="${MessagePush.jdbc_maxActive1}" />
		<!-- 连接池最大空闲 -->
		<!--<property name="maxIdle" value="20" /> -->
		<!-- 连接池最小空闲 -->
		<property name="minIdle" value="0" />
		<!-- 获取连接最大等待时间 -->
		<property name="maxWait" value="60000" />
		<!-- <property name="poolPreparedStatements" value="true" /> <property 
			name="maxPoolPreparedStatementPerConnectionSize" value="33" /> -->

		<property name="validationQuery" value="${MessagePush.validationQuery1}" />
		<property name="testOnBorrow" value="true" />
		<property name="testOnReturn" value="true" />
		<property name="testWhileIdle" value="true" />
		<!-- 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 -->
		<property name="timeBetweenEvictionRunsMillis" value="60000" />
		<!-- 配置一个连接在池中最小生存的时间,单位是毫秒 -->
		<property name="minEvictableIdleTimeMillis" value="25200000" />
		<!-- 打开removeAbandoned功能 -->
		<property name="removeAbandoned" value="true" />
		<!-- 1800秒,也就是30分钟 -->
		<property name="removeAbandonedTimeout" value="1800" />
		<!-- 关闭abanded连接时输出错误日志 -->
		<property name="logAbandoned" value="true" />
		<!-- 监控数据库 -->
		<!-- <property name="filters" value="stat" /> -->
		<property name="filters" value="mergeStat" />
	</bean>

	<bean id="dataSourceBu"
		class="com.roi.patrol.datasources.ThreadLocalRountingDataSource">
		<property name="defaultTargetDataSource" ref="dataSource" />
		<property name="targetDataSources">
			<map key-type="java.lang.String">
				<entry key="DATASOURCE1" value-ref="dataSource1" />
				<entry key="DATASOURCE" value-ref="dataSource" />
				<!-- 这里还可以加多个dataSource -->
			</map>
		</property>
	</bean>

	<!-- 配置hibernate session工厂 -->
	<bean id="sessionFactory"
		class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
		<property name="dataSource" ref="dataSourceBu" />
		<property name="hibernateProperties">
			<props>
				<prop key="javax.persistence.validation.mode">${MessagePush.javax.persistence.validation.mode}
				</prop>
				<!-- web项目启动时是否更新表结构 -->
				<prop key="hibernate.hbm2ddl.auto">${MessagePush.hibernate.hbm2ddl.auto}</prop>
				<!-- 系统使用的数据库方言,也就是使用的数据库类型 -->
				<prop key="hibernate.dialect">${MessagePush.hibernate.dialect}</prop>
				<!-- 是否打印Hibernate生成的SQL到控制台 -->
				<prop key="hibernate.show_sql">${MessagePush.hibernate.show_sql}</prop>
				<!-- 是否格式化打印出来的SQL -->
				<prop key="hibernate.format_sql">${MessagePush.hibernate.format_sql}</prop>
				<prop key="hibernate.current_session_context_class">${MessagePush.hibernate.current_session_context_class}
				</prop>
				<!-- <prop key="hibernate.default_schema">${MessagePush.hibernate.default_schema}</prop> -->
			</props>
		</property>
		<!-- 自动扫描注解方式配置的hibernate类文件 -->
		<!-- <property name="packagesToScan"> <list> <value>com.roi.patrol.entity</value> 
			</list> </property> -->
		<property name="mappingLocations">
			<value>classpath:/com/roi/patrol/entity/**/mappings/*.hbm.xml</value>
		</property>
	</bean>

	<!-- 配置事务管理器 -->
	<bean name="transactionManager"
		class="org.springframework.orm.hibernate4.HibernateTransactionManager">
		<property name="sessionFactory" ref="sessionFactory"></property>
	</bean>

	<!-- 注解方式配置事物 -->
	<!-- <tx:annotation-driven transaction-manager="transactionManager" /> -->
	<!-- 拦截器方式配置事物 -->
	<tx:advice id="transactionAdvice" transaction-manager="transactionManager">
		<tx:attributes>
			<tx:method name="save*" propagation="REQUIRED" />
			<!-- <tx:method name="add*" propagation="REQUIRED" /> <tx:method name="create*" 
				propagation="REQUIRED" /> <tx:method name="insert*" propagation="REQUIRED" 
				/> -->
			<tx:method name="update*" propagation="REQUIRED" />
			<tx:method name="merge*" propagation="REQUIRED" />
			<tx:method name="delete*" propagation="REQUIRED" />
			<tx:method name="enable*" propagation="REQUIRED" />
			<tx:method name="disable*" propagation="REQUIRED" />
			<!-- <tx:method name="remove*" propagation="REQUIRED" /> <tx:method name="put*" 
				propagation="REQUIRED" /> <tx:method name="use*" propagation="REQUIRED"/> -->
			<!--hibernate4必须配置为开启事务 否则 getCurrentSession()获取不到 -->
			<tx:method name="get*" propagation="REQUIRED" read-only="true" />
			<tx:method name="count*" propagation="REQUIRED" read-only="true" />
			<tx:method name="find*" propagation="REQUIRED" read-only="true" />
			<tx:method name="list*" propagation="REQUIRED" read-only="true" />
			<tx:method name="*" propagation="REQUIRED" read-only="true" />
		</tx:attributes>
	</tx:advice>
	<!-- 切面,将事物用在哪些对象上 -->
	<aop:config>
		<aop:pointcut id="transactionPointcut"
			expression="execution(* com.roi.patrol.service.*.impl.*.*(..))" />
		<aop:advisor pointcut-ref="transactionPointcut"
			advice-ref="transactionAdvice" />
	</aop:config>

</beans>

config.properties 连接数据库配置文件

#The Base DB Config For H—MessagePush
MessagePush.hibernate.dialect=org.hibernate.dialect.MySQL5Dialect
MessagePush.driverClassName=com.mysql.jdbc.Driver
MessagePush.validationQuery=SELECT 1
#MessagePush.jdbc_url=jdbc:mysql://192.168.2.200:3306/roiac?useUnicode=true&amp;characterEncoding=UTF-8
MessagePush.jdbc_url=jdbc:mysql://120.76.222.174:3306/roiac?useUnicode=true&amp;characterEncoding=UTF-8
MessagePush.jdbc_username=root
#MessagePush.jdbc_password=123456
MessagePush.jdbc_password=css4995
MessagePush.jdbc_maxActive=50
MessagePush.hibernate.hbm2ddl.auto=none
#MessagePush.hibernate.default_schema=roiac
MessagePush.hibernate.show_sql=true
MessagePush.hibernate.format_sql=true
MessagePush.javax.persistence.validation.mode=none
MessagePush.hibernate.current_session_context_class=org.springframework.orm.hibernate4.SpringSessionContext

####能源库
#The Base DB Config For H—MessagePush
MessagePush.driverClassName1=com.mysql.jdbc.Driver
MessagePush.validationQuery1=SELECT 1
#MessagePush.jdbc_url1=jdbc:mysql://192.168.2.200:3306/roiac?useUnicode=true&amp;characterEncoding=UTF-8
MessagePush.jdbc_url1=jdbc:mysql://120.76.222.174:3306/energy?useUnicode=true&amp;characterEncoding=UTF-8
MessagePush.jdbc_username1=root
#MessagePush.jdbc_password1=123456
MessagePush.jdbc_password1=css4995
MessagePush.jdbc_maxActive1=50

编写一个控制类

注意需要使用spring管理控制类的初始化操作 在spring的配置文件上加入,写控制类的地址

<?xml version="1.0" encoding="UTF-8"?>
 <beans xmlns="http://www.springframework.org/schema/beans" 
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
 xmlns:context="http://www.springframework.org/schema/context" 
 xsi:schemaLocation="http://www.springframework.org/schema/beans 
 http://www.springframework.org/schema/beans/spring-beans-3.0.xsd 
 http://www.springframework.org/schema/context 
 http://www.springframework.org/schema/context/spring-context-3.0.xsd
 ">
	<context:annotation-config />
 
    <!-- 引入属性文件,config.properties位于src/main/resources目录下 -->
    <context:property-placeholder location="config.properties" />
 
     <!-- 自动扫描dao和service包(自动注入) -->
    <context:component-scan base-package="com.roi.patrol.main.task,com.roi.patrol.service,com.roi.patrol.dao"  >
    </context:component-scan>
    
    <import resource="hibernateConfig.xml"/>

</beans>

控制类

package com.roi.patrol.datasources;

import org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource;

/**
 * @Copyright:Copyright (c) 2017 - 2066
 * @Company:湖南瑞翼能源股份有限公司
 * @Title:
 * @Description:
 * @Author:simon
 * @Since:2017年4月10日 下午4:09:14
 * @Version:1.1.0
 */
public class ThreadLocalRountingDataSource extends AbstractRoutingDataSource {

	@Override
	protected Object determineCurrentLookupKey() {
		return DataSourceTypeManager.get();
	}
	
}

DataSourceTypeManager 类的信息

package com.roi.patrol.datasources;

/**
 * @Copyright:Copyright (c) 2017 - 2066
 * @Company:湖南瑞翼能源股份有限公司
 * @Title:数据源管理类
 * @Description:通过 TheadLocal 来保存每个线程选择哪个数据源的标志(key)
 * @Author:simon
 * @Since:2017年4月10日 下午4:08:58
 * @Version:1.1.0
 */
public class DataSourceTypeManager {
	private static final ThreadLocal<String> dataSourceTypes = new ThreadLocal<String>();

	public static String get() {
		return dataSourceTypes.get();
	}

	public static void set(String dataSourceType) {
		dataSourceTypes.set(dataSourceType);
	}

	public static void clearDataSourceType() {
		dataSourceTypes.remove();
	}
}

设置手动操作

我们需要把之前连接数据库的连接方式设置成默认方式,那么之前的代码就可以不需要改变了。

//DataSourceInstances.SOURCE 配置的连接名称
DataSourceTypeManager.set(DataSourceInstances.SOURCE);

//如果操作完毕,最好切换到默认的。

© 著作权归作者所有

共有 人打赏支持
p
粉丝 4
博文 28
码字总数 15580
作品 0
上海
DRUID数据库连接池配置详解

1、配置参数 和其它连接池一样DRUID的DataSource类为:com.alibaba.druid.pool.DruidDataSource,基本配置参数如下: 配置 缺省值 说明 name 配置这个属性的意义在于,如果存在多个数据源,监...

xixingzhe
01/11
0
0
DruidDataSource配置属性列表

DruidDataSource配置兼容DBCP,但个别配置的语意有所区别。 配置 缺省值 说明 name 配置这个属性的意义在于,如果存在多个数据源,监控的时候可以通过名字来区分开来。 如果没有配置,将会生...

Orehs
2014/08/08
0
0
Druid 0.2.9 发布,阿里数据库连接池

阿里巴巴开源数据库连接池druid 0.2.9已经发布。这个版本主要是bug fixed,提升parser性能,parser支持更多语法,移除不成熟的mapping和ha模块。 完整内容: Release Notes - Druid - Versio...

小编辑
2012/11/29
2.8K
9
【开源访谈】Druid 作者温绍锦访谈实录

关于开源访谈 开源访谈是开源中国推出的一系列针对国内优秀开源软件作者的访谈,以文字的方式记录并传播。我们希望开源访谈能全面的展现国内开源软件、开源软件作者的现状,着实推动国内开源...

虫虫
2012/08/22
14.5K
29
Durid开启filter:wall报错&配置spring监控无记录未生效

用的版本是最新的druid-1.0.24 配置:

Struggle马里奥
2016/08/23
244
0
多个项目使用同一个数据库

@JFinal 你好,想跟你请教个问题: 我有2个项目访问的是同一个数据库,都是用的druid连接池。 启动第一个项目时都正常,启动第二个项目报druid异常,当也可以使用。 2016-01-14 16:52:44[] ...

romeo2015
2016/01/14
1K
1
druid 的spring监控无效?

照官方给出的,配了下spring监控 druid-stat-interceptor 在druid监控页面看了木有spring的信息,哪位试过

ddatsh
2013/12/26
6K
2
SpringBoot入门之基于Druid配置Mybatis多数据源

上一篇了解了Druid进行配置连接池的监控和慢sql处理,这篇了解下使用基于基于Druid配置Mybatis多数据源。SpringBoot默认配置数据库连接信息时只需设置url等属性信息就可以了,SpringBoot就会...

社会主义接班人
今天
0
0
Druid基本配置及内置监控使用

Druid基本配置及内置监控使用 1. 使用方法 首先从http://repo1.maven.org/maven2/com/alibaba/druid/ 下载最新的jar包。如果想使用最新的源码编译,可以从https://github.com/alibaba/druid ...

闽味川菜
2015/05/02
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

IntelliJ IDEA 详细图解最常用的配置,适合刚刚用的新人。

刚刚使用IntelliJ IDEA 编辑器的时候,会有很多设置,会方便以后的开发,磨刀不误砍柴工。 比如:设置文件字体大小,代码自动完成提示,版本管理,本地代码历史,自动导入包,修改注释,修改...

kim_o
11分钟前
0
0
Google Java编程风格指南

目录 前言 源文件基础 源文件结构 格式 命名约定 编程实践 Javadoc 后记 前言 这份文档是Google Java编程风格规范的完整定义。当且仅当一个Java源文件符合此文档中的规则, 我们才认为它符合...

niithub
13分钟前
0
0
java.net.MalformedURLException异常说明

1.异常片段 Java代码中,在进行URL url = new URL(urllink)操作时,提示以下异常信息,该类异常主要问题出在参数urllink上面。 异常片段1 java.net.MalformedURLException at java.ne...

lqlm
13分钟前
0
0
CentOS7修改mysql5.6字符集

解决办法:CentOS7下修改MySQL数据库字符编码为UTF-8,UTF-8包含全世界所有国家所需要的字符集,是国际编码。 具体操作如下: 1.进入MySQL [root@tianqi-01 ~]# mysql -uroot -p Enter passw...

河图再现
15分钟前
0
0
DevExpress v18.1新版亮点——WPF篇(一)

用户界面套包DevExpress v18.1日前终于正式发布,本站将以连载的形式为大家介绍各版本新增内容。本文将介绍了DevExpress WPF v18.1 的新功能,快来下载试用新版本!点击下载>> Accordion Co...

Miss_Hello_World
18分钟前
0
0
Rancher 2.0集群与工作负载告警

Rancher 2.0操作指南。本文将step by step演示如何使用Rancher 2.0中集成的告警功能,包括设置通知程序、设置集群级别以及工作负载级别的告警。 在Rancher 1.x时期,告警功能是很多Rancher用...

RancherLabs
22分钟前
1
0
Python中字符串拼接的N中方法

python拼接字符串一般有以下几种方法: ①直接通过(+)操作符拼接 s = 'Hello'+' '+'World'+'!'print(s) 输出结果:Hello World! 使用这种方式进行字符串连接的操作效率低下,因为python中...

木头释然
24分钟前
9
0
JAVA排序之归并排序

归并排序思路就是不停拆分数组,直到拆成一个一个元素,之后将拆出来的元素按照拆分顺序反过来的顺序合并,出现前边值大于后边值,则换位置,放入临时数组,最后将临时数组覆盖原数组. public stat...

勤奋的蚂蚁
35分钟前
1
0
想要年薪20万,先看会不会这28个企业运维岗经典面试题

1、Linux如何挂载windows下的共享目录? mount.cifs //IP地址/server /mnt/server -o user=administrator,password=123456 linux 下的server需要自己手动建一个 后面的user与pass 是windows...

Py爱好
41分钟前
0
0
python的url分配

from django.conf.urls import url,include urlpatterns=[ url('xinwen/',include('xinwen.urls')) ] from django.urls import path from xinwen import views urlpatterns = [ path('login/......

南桥北木
43分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部