此次通过 nghq项目,做出的技术学习与分享,使团队成员拓展技术知识点,快速有效提高团队的 凝聚力、战斗力。
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的图表
XStream使用文档
WebService发布过程及常见问题
webpack实战入门进阶调优分享
weblogic调优参数及监控指标
weblogic节点管理
weblogic管理控制台概述
weblogic-部署和启动
WebLogic-Server-性能及调优-调优-Java-虚拟机
Java 虚拟机(Java virtual machine,简称 JVM)是一种虚拟“执行引擎”实例,可在微处理器上执行 Java 类文件中的字节码。调整 JVM 的方式会影响 Weblogic Server 和应用程序的性能。
Velocity是一个基于java的模板引擎(template engine)。它允许任何人仅仅简单的使用模板语言(template language)来引用由java代码定义的对象。
Velocity 用户手册是帮助页面设计者和内容提供者认识 Velocity 和其简单而功能强大的脚本语言――Velocity 模板语言(VTL)。在手册上的许多例子,都是用 Velocity 插入动态的内容到网页上,但是所有的 VLT 例子都能应用到其他的页面和模板中。
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