spring多数据源配置

c#小王子 c#小王子 2022-04-11 664 Java

第一章 引言

1.编写目的

此次通过 nghq项目,做出的技术学习与分享,使团队成员拓展技术知识点,快速有效提高团队的 凝聚力、战斗力。

 


第二章 spring多数据源

  Spring多数据源的配置可以用于mysql数据库主从分离、项目多库的应用场景,并用事物切面动态切换当前数据库,下面简单介绍配置步骤

  1.数据库连接配置proxool-conf.xml


<?xml version="1.0" encoding="utf-8"?>
<something-else-entirely>
	<proxool>
		<alias>ng1</alias>
	<driver-url>jdbc:mysql://192.168.26.56/ng1?characterEncoding=UTF-8</driver-url> 
		<driver-class>com.mysql.jdbc.Driver</driver-class>
		<driver-properties>
			<property name="user" value="root" />
			<property name="password" value="123456" />
		</driver-properties>
		<house-keeping-sleep-time>30000</house-keeping-sleep-time>
	<maximum-connection-count>500</maximum-connection-count>
		<minimum-connection-count>10</minimum-connection-count>
		<maximum-new-connections>20</maximum-new-connections>
		<prototype-count>5</prototype-count>
		<test-before-use>true</test-before-use>
	<simultaneous-build-throttle>20</simultaneous-build-throttle>
		<house-keeping-test-sql>select 100 + 1000 from dual</house-keeping-test-sql>
	</proxool>
	
	<proxool>
		<alias>ng2</alias>	<driver-url>jdbc:mysql://192.168.26.56/ng2?characterEncoding=UTF-8</driver-url> 
		<driver-class>com.mysql.jdbc.Driver</driver-class>
		<driver-properties>
			<property name="user" value="root" />
			<property name="password" value="123456" />
		</driver-properties>
	<house-keeping-sleep-time>30000</house-keeping-sleep-time>
	<maximum-connection-count>500</maximum-connection-count>
		<minimum-connection-count>10</minimum-connection-count>
		<maximum-new-connections>20</maximum-new-connections>
		<prototype-count>5</prototype-count>
		<test-before-use>true</test-before-use>
	<simultaneous-build-throttle>20</simultaneous-build-throttle>
		<house-keeping-test-sql>select 100 + 1000 from dual</house-keeping-test-sql>
	</proxool>
</something-else-entirely> 

 

以上配置,说明项目将要对ng1,ng2两个数据库进行连接

 

2.spring数据源配置spirng-datasource.xml

<!--加载数据库ng1配置-->
    <bean id="ng1" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> 
	    <property name="driverClassName" value="org.logicalcobwebs.proxool.ProxoolDriver" /> 
         <!--ng1指proxool-conf.xml的数据库别名ng1-->
	    <property name="url" value="proxool.ng1" /> 
	</bean>

 

<!--加载数据库ng2配置-->
    <bean id="ng2" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> 
	    <property name="driverClassName" value="org.logicalcobwebs.proxool.ProxoolDriver" /> 
         <!--ng2指proxool-conf.xml的数据库别名ng2-->
	    <property name="url" value="proxool.ng2" /> 
	</bean>

 

 

3.动态数据源配置

	<bean id="dynamicDataSource" class="com.mopon.pay.util.dataSource.DynamicDataSource">   
      <property name="targetDataSources">  
            <map key-type="java.lang.String">  
                 <entry key="ng1" value-ref="ng1" /> 
                 <entry key="ng2" value-ref="ng2" />   
            </map>  
        </property>  
        <property name="defaultTargetDataSource" ref="ng1" />  
    </bean>

 

 

其中value-ref="ng1",指id为ng1的bean。

<property name="defaultTargetDataSource" ref="ng1" /> 指定项目默认连接到ng1

 

DynamicDataSource.java源码如下:

 

import org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource;
 
public class DynamicDataSource extends AbstractRoutingDataSource{
	private static final ThreadLocal<String> contextHolder = new ThreadLocal<String>(); 
	
	public static void setDataSourceName(String dataSourceName) {  
        contextHolder.set(dataSourceName);  
    } 
	public static String getDataSourceName() {  
        contextHolder.get();  
    } 
	@Override
	protected Object determineCurrentLookupKey() { 
		return getDataSourceName();
	}
	
}

 

4.手动切换数据源

 

进行数据库操作前,执行DynamicDatasource.setDataSourceName("ng1"), 则项目连接到ng1数据库;同理DynamicDatasource.setDataSourceName("ng2"),则项目连接到ng2数据库

 

5.自动切换数据源

自动切换数据源由spring切面织入,如下MultipleDataSourceAspectAdvice.java

 

import org.aspectj.lang.JoinPoint;

import org.aspectj.lang.ProceedingJoinPoint;

import org.aspectj.lang.annotation.Around;

import org.aspectj.lang.annotation.Aspect;

import org.aspectj.lang.annotation.Before;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.core.annotation.Order;

import org.springframework.stereotype.Component;

 

import com.mopon.pay.util.dataSource.DataSourceContextHolder;

 

@Component
@Aspect
@Order(1)
public class MultipleDataSourceAspectAdvice {	
 
	@Around("execution(*com.mopon.service.test.impl.*Impl.*(..))")
    public Object onAround(ProceedingJoinPoint join) throws Throwable {
		  if(join.toString().indexOf("SqlAdapterService")!=-1){
			  DataSourceContextHolder.setDataSourceType("c0001_card");
		  }else{
			  DataSourceContextHolder.setDataSourceType(null);
		  }
		 return join.proceed();
    }
}

 

@Aspect代表该类是spring切面类;

@Order(1)代表该类,要优于spring其他切面先运行,这里主要确保在事物切面transactionManager之前运行,因为一个方法在开启事务之后切换数据库连接是不会生效的,必须等事务结束,为了避免这种错误发生,索性在事务开始前先切换数据库

@Around("execution(*com.mopon.service.test.impl.*Impl.*(..))")代表在com.mopon.service.test.impl包下的所有已Impl结尾的java类的所有方法运行前需要执行的方法,该方法即用来对数据库进行切换。


【下载地址】

百度网盘链接:https://pan.baidu.com/s/1OBc1vlKiW0eNrO4MJjv5lA

提取码:6scm


相关文章


使用-JFreeChart来创建基于web的图表

使用-JFreeChart来创建基于web的图表

XStream使用文档

XStream使用文档

WebService发布过程及常见问题

WebService发布过程及常见问题

webpack实战入门进阶调优分享

webpack实战入门进阶调优分享

weblogic调优参数及监控指标

weblogic调优参数及监控指标

weblogic节点管理

weblogic节点管理

weblogic管理控制台概述

weblogic管理控制台概述

weblogic-部署和启动

weblogic-部署和启动

WebLogic-Server-性能及调优-调优-Java-虚拟机

Java 虚拟机(Java virtual machine,简称 JVM)是一种虚拟“执行引擎”实例,可在微处理器上执行 Java 类文件中的字节码。调整 JVM 的方式会影响 Weblogic Server 和应用程序的性能。

Velocity用户教程

Velocity是一个基于java的模板引擎(template engine)。它允许任何人仅仅简单的使用模板语言(template language)来引用由java代码定义的对象。

Velocity用户手册

Velocity 用户手册是帮助页面设计者和内容提供者认识 Velocity 和其简单而功能强大的脚本语言――Velocity 模板语言(VTL)。在手册上的许多例子,都是用 Velocity 插入动态的内容到网页上,但是所有的 VLT 例子都能应用到其他的页面和模板中。


文章热度: 166291
文章数量: 333
推荐阅读

FlashFXP绿色版网盘下载,附激活教程 1739

FlashFxp百度网盘下载链接:https://pan.baidu.com/s/1MBQ5gkZY1TCFY8A7fnZCfQ。FlashFxp是功能强大的FTP工具

Adobe Fireworks CS6 Ansifa绿色精简版网盘下载 1540

firework可以制作精美或是可以闪瞎眼的gif,这在广告领域是需要常用的,还有firework制作下logo,一些原创的图片还是很便捷的,而且fireworks用法简单,配合dw在做网站这一块往往会发挥出很强大的效果。百度网盘下载链接:https://pan.baidu.com/s/1fzIZszfy8VX6VzQBM_bdZQ

navicat for mysql中文绿色版网盘下载 1605

Navicat for Mysql是用于Mysql数据库管理的一款图形化管理软件,非常的便捷和好用,可以方便的增删改查数据库、数据表、字段、支持mysql命令,视图等等。百度网盘下载链接:https://pan.baidu.com/s/1T_tlgxzdQLtDr9TzptoWQw 提取码:y2yq

火车头采集器(旗舰版)绿色版网盘下载 1691

火车头采集器是站长常用的工具,相比于八爪鱼,简洁好用,易于配置。火车头能够轻松的抓取网页内容,并通过自带的工具对内容进行处理。站长圈想要做网站,火车头采集器是必不可少的。百度网盘链接:https://pan.baidu.com/s/1u8wUqS901HgOmucMBBOvEA

Photoshop(CS-2015-2023)绿色中文版软件下载 1805

安装文件清单(共46G)包含Window和Mac OS各个版本的安装包,从cs到cc,从绿色版到破解版,从安装文件激活工具,应有尽有,一次性打包。 Photoshop CC绿色精简版 Photoshop CS6 Mac版 Photoshop CC 2015 32位 Photoshop CC 2015 64位 Photoshop CC 2015 MAC版 Photoshop CC 2017 64位 Adobe Photoshop CC 2018 Adobe_Photoshop_CC_2018 Photoshop CC 2018 Win32 Photoshop CC 2018 Win64

知之

知之平台是全球领先的知识付费平台。提供各个领域的项目实战经验分享,提供优质的行业解决方案信息,来帮助您的工作和学习

使用指南 建议意见 用户协议 友情链接 隐私政策 Powered by NOOU ©2020 知之