java实现mysql的主从切换(第二部分)
Resources部分
--------------------------------
applicationContext-datasource.xml
<?xml version="1.0"encoding="UTF-8"?> <beansxmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:aop="http://www.springframework.org/schema/aop"xmlns:tx="http://www.springframework.org/schema/tx"xmlns:jdbc="http://www.springframework.org/schema/jdbc"xmlns:context="http://www.springframework.org/schema/context"xmlns:mvc="http://www.springframework.org/schema/mvc"xsi:schemaLocation="http://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context-4.0.xsdhttp://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans-4.0.xsdhttp://www.springframework.org/schema/jdbchttp://www.springframework.org/schema/jdbc/spring-jdbc-4.0.xsdhttp://www.springframework.org/schema/txhttp://www.springframework.org/schema/tx/spring-tx-4.0.xsdhttp://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.0.xsdhttp://www.springframework.org/schema/mvchttp://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd"><!-- 加载配置文件--><context:property-placeholderlocation="classpath:jdbc.properties"/><!-- 扫描控制包 --><context:component-scan base-package="com.vivebest.service"/><!-- ***************以下是dataSource和 Mybatis配置****************** --><!-- dataSource --><!-- 主库数据源 --><bean id="masterDataSource" class="com.alibaba.druid.pool.DruidDataSource"init-method="init"destroy-method="close"><!-- 基本属性 url、user、password --><property name="driverClassName"value="${dataSource.slave.driverClassName}"/><property name="url" value="${dataSource.slave.url}"/><property name="username"value="${dataSource.slave.username}"/><property name="password"value="${dataSource.slave.password}"/><!-- 配置初始化大小、最小、最大 --><property name="initialSize" value="1"/><property name="minIdle" value="1"/><property name="maxActive" value="20"/><!-- 配置获取连接等待超时的时间 --><property name="maxWait" value="60000"/><!-- 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 --><property name="timeBetweenEvictionRunsMillis"value="60000"/><!-- 配置一个连接在池中最小生存的时间,单位是毫秒 --><property name="minEvictableIdleTimeMillis"value="300000"/><!-- 校验语句 --><property name="validationQuery" value="SELECT1"/><propertyname="testWhileIdle" value="true"/><property name="testOnBorrow" value="false"/><property name="testOnReturn" value="false"/><!-- 配置监控统计拦截的filters --><property name="filters" value="stat"/></bean><!-- 从库数据源 --><bean id="slaveDataSource"class="com.alibaba.druid.pool.DruidDataSource"init-method="init" destroy-method="close"><!-- 基本属性 url、user、password --><property name="driverClassName"value="${dataSource.master.driverClassName}"/><property name="url"value="${dataSource.master.url}"/><property name="username"value="${dataSource.master.username}"/><property name="password"value="${dataSource.master.password}"/><!-- 配置初始化大小、最小、最大 --><property name="initialSize"value="1"/><property name="minIdle" value="1"/><property name="maxActive" value="20"/><!-- 配置获取连接等待超时的时间 --><property name="maxWait" value="60000"/><!-- 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 --><property name="timeBetweenEvictionRunsMillis"value="60000"/><!-- 配置一个连接在池中最小生存的时间,单位是毫秒 --><property name="minEvictableIdleTimeMillis"value="300000"/><!-- 校验语句 --><property name="validationQuery" value="SELECT1"/><property name="testWhileIdle" value="true"/><property name="testOnBorrow" value="false"/><property name="testOnReturn" value="false"/><!-- 配置监控统计拦截的filters --><property name="filters" value="stat"/></bean><!-- 动态数据源 --><bean id="dataSource"class="com.vivebest.util.DynamicDataSource"><property name="targetDataSources"><map key-type="java.lang.String"><!-- 可配置多个数据源--><entryvalue-ref="masterDataSource"key="masterDataSource"></entry><entryvalue-ref="slaveDataSource"key="slaveDataSource"></entry></map></property><property name="defaultTargetDataSource" ref="masterDataSource"></property></bean><!-- define the SqlSessionFactory --><bean id="sqlSessionFactory"class="org.mybatis.spring.SqlSessionFactoryBean"><property name="dataSource" ref="dataSource"/><property name="configLocation"value="classpath:mybatis-config.xml" /><!-- 要映射类的包路径 --><!-- <propertyname="typeAliasesPackage" value="com.vivebest.erp.entity"/> --><!-- 若无上条就需要有该配置 --><property name="mapperLocations" value="classpath*:*Mapper.xml"></property><!-- 当配置文件在其他目录时 --></bean><!-- scan for mappers and let them be autowired --><!-- DAO接口所在包名,Spring会自动查找其下的类 --><beanclass="org.mybatis.spring.mapper.MapperScannerConfigurer"><propertyname="basePackage" value="com.vivebest.dao"/><property name="sqlSessionFactoryBeanName"value="sqlSessionFactory"/></bean><!-- 事务管理器 --><bean id="transactionManager"class="org.springframework.jdbc.datasource.DataSourceTransactionManager"><property name="dataSource" ref="dataSource"/></bean><!-- 启动注解事务 --><tx:annotation-driventransaction-manager="transactionManager"/></beans>
--------------------------------
applicationContext-listener.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:context="http://www.springframework.org/schema/context"xsi:schemaLocation="http://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context-4.0.xsdhttp://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans-4.0.xsd"><!-- 装载自定义bean --><context:component-scan base-package="**.*"use-default-filters="false"><context:include-filter type="assignable"expression="com.vivebest.util.BaseInterface"></context:include-filter></context:component-scan><!--启动时初始化Spring上下文环境工具类 --><bean id="springContextUtil"class="com.vivebest.util.SpringContextUtil"></bean><!-- Spring容器初始化完成监听器 --><bean class="com.vivebest.util.ApplicationContextListener"lazy-init="false"></bean></beans>
--------------------------------
jdbc.properties
#DB dataSource.master.driverClassName=com.mysql.jdbc.Driver dataSource.master.url=jdbc\:mysql\://127.0.0.1\:3306/zheng?useUnicode\=true&characterEncoding\=utf-8&autoReconnect\=true dataSource.master.username = root dataSource.master.password = rootdataSource.slave.driverClassName=com.mysql.jdbc.Driver dataSource.slave.url=jdbc\:mysql\://127.0.0.1\:3306/zheng?useUnicode\=true&characterEncoding\=utf-8&autoReconnect\=true dataSource.slave.username = root dataSource.slave.password = rootdataSource.initialSize = 2 dataSource.maxActive = 30 dataSource.maxIdle = 2 dataSource.minIdle = 2 dataSource.maxOpenPreparedStatements = 150 dataSource.validationQuery = SELECT 1 FROMDUAL dataSource.testWhileIdle = true dataSource.testOnBorrow = false dataSource.testOnReturn = false #\u914d\u7f6e\u95f4\u9694\u591a\u4e45\u624d\u8fdb\u884c\u4e00\u6b21\u68c0\u6d4b\uff0c\u68c0\u6d4b\u9700\u8981\u5173\u95ed\u7684\u7a7a\u95f2\u8fde\u63a5\uff0c\u5355\u4f4d\u662f\u6beb\u79d2 dataSource.timeBetweenEvictionRunsMillis =60000 #\u914d\u7f6e\u4e00\u4e2a\u8fde\u63a5\u5728\u6c60\u4e2d\u6700\u5c0f\u751f\u5b58\u7684\u65f6\u95f4\uff0c\u5355\u4f4d\u662f\u6beb\u79d2 dataSource.minEvictableIdleTimeMillis =300000 # \u6253\u5f00PSCache\uff0c\u5e76\u4e14\u6307\u5b9a\u6bcf\u4e2a\u8fde\u63a5\u4e0aPSCache\u7684\u5927\u5c0f dataSource.poolPreparedStatements = true dataSource.maxPoolPreparedStatementPerConnectionSize= 20 #\u914d\u7f6e\u76d1\u63a7\u7edf\u8ba1\u62e6\u622a\u7684filter dataSource.filters = stat
--------------------------------
log4j.properties
#off/fatal/error/warn/info/debug/all log4j.debug=false log4j.rootLogger=info,stdout,log,errorlog# Console log4j.appender.stdout=org.apache.log4j.ConsoleAppender log4j.appender.stdout.Target = System.out log4j.appender.stdout.layout=org.apache.log4j.PatternLayout log4j.appender.stdout.layout.ConversionPattern=%d[%t] %-5p [%c] - %m%n### Log ### log4j.appender.log =org.apache.log4j.DailyRollingFileAppender log4j.appender.log.File =../logs/zheng-upms5-server.log log4j.appender.log.Append = true log4j.appender.log.Threshold = DEBUG log4j.appender.log.DatePattern='.'yyyy-MM-dd log4j.appender.log.layout =org.apache.log4j.PatternLayout log4j.appender.log.layout.ConversionPattern= %-d{yyyy-MM-dd HH:mm:ss} [ %p ] [ %C{1}.java :%L(%M)] %m%n### Error ### log4j.appender.errorlog =org.apache.log4j.DailyRollingFileAppender log4j.appender.errorlog.File =../logs/zheng-upms5-server.error.log log4j.appender.errorlog.Append = true log4j.appender.errorlog.Threshold = ERROR log4j.appender.errorlog.DatePattern='.'yyyy-MM-dd log4j.appender.errorlog.layout =org.apache.log4j.PatternLayout log4j.appender.errorlog.layout.ConversionPattern=%-d{yyyy-MM-dd HH:mm:ss} [ %p ] [ %C{1}.java :%L(%M)] %m%n#Spring logging configuration log4j.category.org.springframework = warn#Druid logging configuration log4j.logger.druid.sql=warn,stdout,log,errorlog log4j.logger.druid.sql.DataSource=warn,stdout,log,errorlog log4j.logger.druid.sql.Connection=warn,stdout,log,errorlog log4j.logger.druid.sql.Statement=warn,stdout,log,errorlog log4j.logger.druid.sql.ResultSet=warn,stdout,log,errorlog# MyBatis logging configuration log4j.logger.com.vivebest.dao=debug
--------------------------------
mybatis-config.xml
<?xml version="1.0"encoding="UTF-8" ?> <!DOCTYPE configurationPUBLIC"-//mybatis.org//DTD Config 3.0//EN""http://mybatis.org/dtd/mybatis-3-config.dtd"><configuration><!--全局配置 --><settings><settingname="cacheEnabled" value="true" /><settingname="lazyLoadingEnabled" value="true" /><settingname="aggressiveLazyLoading" value="true" /><settingname="multipleResultSetsEnabled" value="true" /><settingname="useColumnLabel" value="true" /><settingname="useGeneratedKeys" value="false" /><settingname="autoMappingBehavior" value="PARTIAL" /><settingname="defaultExecutorType" value="SIMPLE" /><settingname="defaultStatementTimeout" value="25000" /></settings><!--插件--><plugins><!--分页插件 --><plugininterceptor="com.github.pagehelper.PageInterceptor"><!--分页插件会自动检测当前的数据库链接,自动选择合适的分页方式。你可以配置helperDialect属性来指定分页插件使用哪种方言。配置时,可以使用下面的缩写值:oracle,mysql,mariadb,sqlite,hsqldb,postgresql,db2,sqlserver,informix,h2,sqlserver2012,derby特别注意:使用SqlServer2012 数据库时,需要手动指定为 sqlserver2012,否则会使用 SqlServer2005 的方式进行分页--><!--<propertyname="helperDialect" value="mysql"/>--><!--默认值为 false,该参数对使用RowBounds 作为分页参数时有效。当该参数设置为 true 时,会将 RowBounds中的 offset 参数当成 pageNum 使用,可以用页码和页面大小两个参数进行分页。--><propertyname="offsetAsPageNum" value="false"/><!--默认值为false,该参数对使用RowBounds 作为分页参数时有效。当该参数设置为true时,使用 RowBounds 分页会进行 count 查询。--><propertyname="rowBoundsWithCount" value="true"/><!--默认值为 false,当该参数设置为 true时,如果 pageSize=0 或者 RowBounds.limit = 0 就会查询出全部的结果(相当于没有执行分页查询,但是返回结果仍然是 Page 类型)。--><propertyname="pageSizeZero" value="false"/><!--分页合理化参数,默认值为false。当该参数设置为 true时,pageNum<=0 时会查询第一页, pageNum>pages(超过总数时),会查询最后一页。默认false 时,直接根据参数进行查询。--><propertyname="reasonable" value="false"/><!--为了支持startPage(Objectparams)方法,增加了该参数来配置参数映射,用于从对象中根据属性名取值,可以配置 pageNum,pageSize,count,pageSizeZero,reasonable,不配置映射的用默认值默认值为pageNum=pageNum;pageSize=pageSize;count=countSql;reasonable=reasonable;pageSizeZero=pageSizeZero。--><propertyname="params"value="pageNum=pageNum;pageSize=pageSize;count=countSql;reasonable=reasonable;pageSizeZero=pageSizeZero"/><!--支持通过 Mapper 接口参数来传递分页参数,默认值false,分页插件会从查询方法的参数值中,自动根据上面 params 配置的字段中取值,查找到合适的值时就会自动分页。使用方法可以参考测试代码中的 com.github.pagehelper.test.basic 包下的 ArgumentsMapTest 和ArgumentsObjTest。--><propertyname="supportMethodsArguments" value="false"/><!--默认值为 false。设置为 true 时,允许在运行时根据多数据源自动识别对应方言的分页 (不支持自动选择sqlserver2012,只能使用sqlserver)--><propertyname="autoRuntimeDialect" value="true"/><!--默认值为 true。当使用运行时动态数据源或没有设置 helperDialect 属性自动获取数据库类型时,会自动获取一个数据库连接,通过该属性来设置是否关闭获取的这个连接默认true关闭,设置为 false 后,不会关闭获取的连接,这个参数的设置要根据自己选择的数据源来决定。--><propertyname="closeConn" value="true"/></plugin></plugins></configuration>
--------------------------------
spring-mvc.xml
<?xml version="1.0"encoding="UTF-8"?> <beansxmlns="http://www.springframework.org/schema/beans"xmlns:mvc="http://www.springframework.org/schema/mvc"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:context="http://www.springframework.org/schema/context"xsi:schemaLocation="http://www.springframework.org/schema/mvchttp://www.springframework.org/schema/mvc/spring-mvc.xsdhttp://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context.xsd"><!-- DispatcherServlet Context: defines this servlet'srequest-processing infrastructure --><!-- 扫描控制器包 --><!-- @Service用于标注业务层组件、 @Controller用于标注控制层组件、@Repository用于标注数据访问组件,即DAO组件。而@Component泛指组件,当组件不好归类的时候,我们可以使用这个注解进行标注。--><context:component-scanbase-package="com.vivebest.controller" /><!-- Enables the Spring MVC @Controller programming model --><!-- 启动springmvc注解 --><mvc:annotation-driven /><!-- 启动Spring MVC的注解功能,完成请求和注解POJO的映射,解决@ResponseBody乱码问题 --><bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"><property name="messageConverters"><list><beanclass="org.springframework.http.converter.StringHttpMessageConverter"><propertyname="supportedMediaTypes"><list><value>text/html;charset=UTF-8</value><value>text/plain;charset=UTF-8</value><value>application/json;charset=UTF-8</value></list></property></bean></list></property></bean><!--视图解析的配置--><!-- Resolves views selected for rendering by @Controllers to .jspresources in the /WEB-INF/views directory --><!--<beanclass="org.springframework.web.servlet.view.InternalResourceViewResolver">--><!--<property name="prefix" value="/jsp/"/>--><!--<property name="suffix" value=".jsp"/><!–controller层中返回页面是可以不加.jsp后缀–>--><!--</bean>--> </beans>
--------------------------------
UpmsLogMapper.xml
<?xml version="1.0"encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC"-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mappernamespace="com.vivebest.dao.UpmsLogMapper"><sql id="Example_Where_Clause"><where><foreach collection="oredCriteria"item="criteria" separator="or"><iftest="criteria.valid"><trimprefix="(" prefixOverrides="and" suffix=")"><foreachcollection="criteria.criteria" item="criterion"><choose><whentest="criterion.noValue">and${criterion.condition}</when><whentest="criterion.singleValue">and${criterion.condition} #{criterion.value}</when><whentest="criterion.betweenValue">and${criterion.condition} #{criterion.value} and #{criterion.secondValue}</when><whentest="criterion.listValue">and${criterion.condition}<foreachclose=")" collection="criterion.value"item="listItem" open="(" separator=",">#{listItem}</foreach></when></choose></foreach></trim></if></foreach></where></sql><select id="countByExample"parameterType="com.vivebest.entity.UpmsLogExample"resultType="java.lang.Long">select count(*) from upms_log</select><delete id="deleteByExample"parameterType="com.vivebest.entity.UpmsLogExample">delete from upms_log<if test="_parameter != null"><include refid="Example_Where_Clause" /></if></delete><select id="countByExampleB"parameterType="com.vivebest.entity.UpmsLogExample"resultType="java.lang.Long">select count(*) from upms_log</select><delete id="deleteByExampleB"parameterType="com.vivebest.entity.UpmsLogExample">delete from upms_log<if test="_parameter != null"><include refid="Example_Where_Clause" /></if></delete><cache type="org.mybatis.caches.ehcache.LoggingEhcache"/> </mapper>
--------------------------------
WEB部分
Web.xml
<?xml version="1.0"encoding="UTF-8"?> <web-appxmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns="http://java.sun.com/xml/ns/javaee"xsi:schemaLocation="http://java.sun.com/xml/ns/javaeehttp://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"id="WebApp_ID" version="3.0"><display-name>zheng-upms5-server</display-name><!-- Spring 容器启动监听器 --><listener><listener-class>org.springframework.web.context.ContextLoaderListener</listener-class></listener><!-- Spring 服务层的配置文件 --><context-param><param-name>contextConfigLocation</param-name><param-value>classpath:applicationContext*.xml</param-value></context-param><!-- 日志配置文件 --><context-param><param-name>log4jConfigLocation</param-name><param-value>classpath:log4j.properties</param-value></context-param><!-- 配置spring核心servlet --><servlet><servlet-name>springMVC</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><init-param><param-name>contextConfigLocation</param-name><param-value>classpath:spring-mvc.xml</param-value></init-param><load-on-startup>1</load-on-startup></servlet><!-- url-pattern配置为/,不带文件后缀,会造成其它静态文件(js,css等)不能访问。如配为*.do,则不影响静态文件的访问 --><servlet-mapping><servlet-name>springMVC</servlet-name><url-pattern>/</url-pattern></servlet-mapping></web-app>
Index.jsp
<html>
<body>
<h2>Hello World!</h2>
</body>
</html>
POM.XML部分
<projectxmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0http://maven.apache.org/maven-v4_0_0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.zheng</groupId><artifactId>zheng-upms5-server</artifactId><packaging>war</packaging><name>zheng-upms5-server Maven Webapp</name><url>http://maven.apache.org</url><version>1.0.0</version><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><maven.compiler.source>1.7</maven.compiler.source><maven.compiler.target>1.7</maven.compiler.target><maven.compiler.compilerVersion>1.7</maven.compiler.compilerVersion><spring.version>4.3.7.RELEASE</spring.version><spring-security.version>4.1.3.RELEASE</spring-security.version><mybatis.version>3.4.2</mybatis.version><mybatis-spring.version>1.3.1</mybatis-spring.version><mybatis-pagehelper.version>5.0.1</mybatis-pagehelper.version><mybatis-generator.version>1.3.5</mybatis-generator.version><mybatis-ehcache.version>1.0.0</mybatis-ehcache.version><ehcache.version>2.10.0</ehcache.version></properties><dependencies><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version><scope>test</scope></dependency><!-- spring --><dependency><groupId>org.springframework</groupId><artifactId>spring-context-support</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-jdbc</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-test</artifactId><version>${spring.version}</version></dependency><!-- mybatis --><dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>${mybatis.version}</version></dependency><dependency><groupId>org.mybatis</groupId><artifactId>mybatis-spring</artifactId><version>${mybatis-spring.version}</version></dependency><dependency><groupId>com.github.pagehelper</groupId><artifactId>pagehelper</artifactId><version>${mybatis-pagehelper.version}</version></dependency><dependency><groupId>org.mybatis.generator</groupId><artifactId>mybatis-generator-core</artifactId><version>${mybatis-generator.version}</version></dependency><!-- 缓存 --><dependency><groupId>net.sf.ehcache</groupId><artifactId>ehcache</artifactId><version>${ehcache.version}</version></dependency><dependency><groupId>org.mybatis</groupId><artifactId>mybatis-ehcache</artifactId><version>${mybatis-ehcache.version}</version></dependency><!-- mysql --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.34</version><scope>runtime</scope></dependency><dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId><version>1.0.14</version></dependency><!-- 日志 --><dependency><groupId>org.slf4j</groupId><artifactId>slf4j-api</artifactId><version>1.7.12</version></dependency><dependency><groupId>org.slf4j</groupId><artifactId>slf4j-log4j12</artifactId><version>1.7.12</version></dependency><!-- 常用工具包 --><dependency><groupId>commons-beanutils</groupId><artifactId>commons-beanutils</artifactId><version>1.9.3</version></dependency><dependency><groupId>commons-lang</groupId><artifactId>commons-lang</artifactId><version>2.6</version></dependency><dependency><groupId>commons-codec</groupId><artifactId>commons-codec</artifactId><version>1.10</version></dependency><dependency><groupId>org.apache.commons</groupId><artifactId>commons-compress</artifactId><version>1.12</version></dependency><!-- json --><dependency><groupId>net.sf.json-lib</groupId><artifactId>json-lib</artifactId><version>2.4</version><classifier>jdk15</classifier></dependency><dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.28</version></dependency><dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-core</artifactId><version>2.6.5</version></dependency><dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId><version>2.6.5</version></dependency><dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-annotations</artifactId><version>2.6.5</version></dependency><!-- servlet --><dependency><groupId>javax.servlet</groupId><artifactId>servlet-api</artifactId><version>2.5</version><scope>provided</scope></dependency><dependency><groupId>javax.servlet</groupId><artifactId>jstl</artifactId><version>1.2</version></dependency></dependencies><build><finalName>zheng-upms5-server</finalName><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-surefire-plugin</artifactId><version>2.18.1</version><configuration><skipTests>true</skipTests><testFailureIgnore>true</testFailureIgnore></configuration></plugin></plugins></build></project>
3、测试方法
http://localhost:1111/customer/queryLog 通过从库处理http://localhost:1111/customer/queryLogB 通过主库处理http://localhost:1111/customer/deleteLog/1 通过主库处理http://localhost:1111/customer/deleteLogB/2 通过主库处理
转载于:https://blog.51cto.com/ylcodes01/1970028
java实现mysql的主从切换(第二部分)相关推荐
- MySQL之主从切换
在一主多从的环境中,如主库为M,从库为S1.S2,当主库M出现故障时,把S1设为新的主库,并且修改从库S2的配置,使其指向新的主库S1.此外还要通知应用修改主数据库的IP地址,如果出现故障的主库M修复 ...
- java客户端实现redis主从切换,redis主从配置及主从切换
环境描述: 主Redis:192.168.10.1 6379 从redis:192.168.10.2 6380 一.主从配置 1.将主从redis配置文件redis.conf中的daemonize n ...
- [转]微服务轮子项目(27) -MySQL 主从复制、主从切换、主主复制
文章目录 1. 主从复制 1.1 主库安装 1.1.1 创建配置文件 1.1.2 启动主库 1.1.3 主库创建用于同步的账号 1.2 从库安装 1.2.1 创建配置文件 1.2.2 启动从库 1.2 ...
- mysql主从模拟主服务器坏掉,主从切换,主服务器修复,主从恢复
准备两台CentOS 7服务器 192.168.26.128 主 192.168.26.129 从 一.主从服务 安装mysql数据库 yum -y install mariadb mariadb-s ...
- mysql stop salve_MySQL主从切换
MySQL主从切换手册 Master-Slave架构 正常切换 检查slave同步状态 在开始切换之前先对主库进行锁表: flush tables with read lock (在执行完成后生产环境 ...
- 迅猛快捷——基于Gtid搭建Mysql主从,gtid实现主从切换自动同步——@$23$人鱼的眼泪
mysql基于Gtid做主从 环境准备 1. 安装mysql5.7 如果没安装wget,先安装wget 首先获取5.7的包 2.修改配置文件 [主] [从] 主从都执行重启,使配置文件生效 3.查看初 ...
- Mysql 主从间延迟,主从切换策略
Mysql 主从间延迟 首先需要知道在网络情况良好的情况下,主从之间的延迟主要产生于从库根据消费 relay log 的时间. 主从间的延迟是 seconds_behind_master. 主从延迟的 ...
- Mysql主从复制之异步与半同步以及主从切换(实验)
什么是异步,半同步: 一.异步复制(Asynchronous replication) 1.逻辑上 MySQL默认的复制即是异步的,主库在执行完客户端提交的事务后会立即将结果返给给客户端,并不关心从库 ...
- MYSQL数据库的主从切换
一.MHA简介 MHA(Master High Availability)目前在MySQL高可用方面是一个相对成熟的解决方案,它由日本DeNA公司的youshimaton(现就职于 Facebook公 ...
最新文章
- Python 语言介绍
- 随机信号通过带通滤波器
- 如何快速截取某段时间内的日志
- 加减法叫做什么运算_小学四则运算基础知识,赶快给孩子存下吧!
- 解决SVN:E210007无法协商认证机制
- 深度学习之基于AlexNet实现猫狗大战
- 【Flink】checkpoint storage at checkckpoint coordinator No route host from xx to xx:9000
- 自定义关键字_Java中的自定义异常
- 摘抄:java查询数据导出excel并返回给浏览器下载
- 经验分享|测试工程师转型测试开发历程
- SQL查询-巧用记录数统计人数
- 个人博客系统需求文档
- ROMS四维变分测试
- 直流屏控母和合母有什么区别
- 实现java多线程的3种方式
- 我们都在过着「抽奖」的人生
- 信贷业务:常用风险指标
- 常见的两种python编译器的安装
- Web安全工具—nc(瑞士军刀)持续更新
- 超级计算机怎么收费,近距离看中国天河2号内部细节及收费标准
热门文章
- boost::fibers::future用法的测试程序
- 宏BOOST_TEST_TRAIT_TRUE的用法实例
- boost::container实现多态双端队列的测试程序
- VTK:可视化之AlphaFrequency
- VTK:Math之EigenSymmetric
- Qt Creator在3D编辑器中工作
- Qt Creator批注设计
- pbl和sbl_综合运用PBL和SBL教学法提高眼科带教质量的探索
- Apache Hive JdbcStorageHandler 编程入门指南
- 配置开发者本地hadoop-3.0.0环境