tcc-transaction 分布式事务-完整代码实现-程序员宅基地

技术标签: tcc-transaction  补偿性事务  系统架构  分布式事务  

1、说明

        这里给出完整实现代码,关于使用方法具体介绍请参考上一篇博文:

       分布式事务之-tcc-transaction(Dubbo版):https://blog.csdn.net/u013278314/article/details/85112314

2、系统介绍

        实现一个订单、红包的分布式系统,在生成订单的时候,调用红包服务,同时保持数据到红包数据库

3、实现

3、1 parent工程

系统接口图:

pom.xml

<project xmlns="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.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<groupId>dubbo-tcc</groupId>
	<artifactId>tcc-parent</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<packaging>pom</packaging>

	<properties>
		<junit.version>4.12</junit.version>
		<spring.version>4.2.4.RELEASE</spring.version>
		<mybatis.version>3.4.6</mybatis.version>
		<mybatis.spring.version>1.3.1</mybatis.spring.version>
		<mybatis.paginator.version>1.2.15</mybatis.paginator.version>
		<mysql.version>8.0.11</mysql.version>
		<slf4j.version>1.6.4</slf4j.version>
		<jackson.version>2.4.2</jackson.version>
		<druid.version>1.1.10</druid.version>
		<httpclient.version>4.3.5</httpclient.version>
		<jstl.version>1.2</jstl.version>
		<servlet-api.version>2.5</servlet-api.version>
		<jsp-api.version>2.0</jsp-api.version>
		<commons-lang3.version>3.3.2</commons-lang3.version>
		<commons-io.version>1.3.2</commons-io.version>
		<commons-net.version>3.3</commons-net.version>
		<version>5.1.6</version>
		<jsqlparser.version>0.9.1</jsqlparser.version>
		<commons-fileupload.version>1.3.1</commons-fileupload.version>
		<dubbo.version>2.5.3</dubbo.version>
		<zookeeper.version>3.4.7</zookeeper.version>
		<zkclient.version>0.1</zkclient.version>
		<quartz.version>2.2.2</quartz.version>
		<c3p0.version>0.9.1.2</c3p0.version>
	</properties>


	<dependencyManagement>
		<dependencies>
			<!-- Apache工具组件 -->
			<dependency>
				<groupId>org.apache.commons</groupId>
				<artifactId>commons-lang3</artifactId>
				<version>${commons-lang3.version}</version>
			</dependency>
			<dependency>
				<groupId>org.apache.commons</groupId>
				<artifactId>commons-io</artifactId>
				<version>${commons-io.version}</version>
			</dependency>
			<dependency>
				<groupId>commons-net</groupId>
				<artifactId>commons-net</artifactId>
				<version>${commons-net.version}</version>
			</dependency>
			<!-- Jackson Json处理工具包 -->
			<dependency>
				<groupId>com.fasterxml.jackson.core</groupId>
				<artifactId>jackson-databind</artifactId>
				<version>${jackson.version}</version>
			</dependency>
			<!-- httpclient -->
			<dependency>
				<groupId>org.apache.httpcomponents</groupId>
				<artifactId>httpclient</artifactId>
				<version>${httpclient.version}</version>
			</dependency>
			<!-- quartz任务调度框架 -->
			<dependency>
				<groupId>org.quartz-scheduler</groupId>
				<artifactId>quartz</artifactId>
				<version>${quartz.version}</version>
			</dependency>
			<!-- 单元测试 -->
			<dependency>
				<groupId>junit</groupId>
				<artifactId>junit</artifactId>
				<version>${junit.version}</version>
				<scope>test</scope>
			</dependency>
			<!-- 日志处理 -->
			<dependency>
				<groupId>org.slf4j</groupId>
				<artifactId>slf4j-log4j12</artifactId>
				<version>${slf4j.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>
			<!-- MySql -->
			<dependency>
				<groupId>mysql</groupId>
				<artifactId>mysql-connector-java</artifactId>
				<version>${mysql.version}</version>
			</dependency>
			<!-- 连接池 -->
			<dependency>
				<groupId>com.alibaba</groupId>
				<artifactId>druid</artifactId>
				<version>${druid.version}</version>
			</dependency>
			<!-- Spring -->
			<dependency>
				<groupId>org.springframework</groupId>
				<artifactId>spring-context</artifactId>
				<version>${spring.version}</version>
			</dependency>
			<dependency>
				<groupId>org.springframework</groupId>
				<artifactId>spring-beans</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-aspects</artifactId>
				<version>${spring.version}</version>
			</dependency>
			<dependency>
				<groupId>org.springframework</groupId>
				<artifactId>spring-context-support</artifactId>
				<version>${spring.version}</version>
			</dependency>
			<dependency>
				<groupId>org.springframework</groupId>
				<artifactId>spring-tx</artifactId>
				<version>${spring.version}</version>
			</dependency>
			<dependency>
				<groupId>org.springframework</groupId>
				<artifactId>spring-aop</artifactId>
				<version>${spring.version}</version>
			</dependency>



			<!-- JSP相关 -->
			<dependency>
				<groupId>jstl</groupId>
				<artifactId>jstl</artifactId>
				<version>${jstl.version}</version>
			</dependency>
			<dependency>
				<groupId>javax.servlet</groupId>
				<artifactId>servlet-api</artifactId>
				<version>${servlet-api.version}</version>
				<scope>provided</scope>
			</dependency>
			<dependency>
				<groupId>javax.servlet</groupId>
				<artifactId>jsp-api</artifactId>
				<version>${jsp-api.version}</version>
				<scope>provided</scope>
			</dependency>
			<!-- dubbo相关 -->
			<dependency>
				<groupId>com.alibaba</groupId>
				<artifactId>dubbo</artifactId>
				<version>${dubbo.version}</version>
			</dependency>
			<dependency>
				<groupId>org.apache.zookeeper</groupId>
				<artifactId>zookeeper</artifactId>
				<version>${zookeeper.version}</version>
			</dependency>
			<dependency>
				<groupId>com.github.sgroschupf</groupId>
				<artifactId>zkclient</artifactId>
				<version>${zkclient.version}</version>
			</dependency>

			<dependency>
				<groupId>c3p0</groupId>
				<artifactId>c3p0</artifactId>
				<version>${c3p0.version}</version>
			</dependency>


		</dependencies>
	</dependencyManagement>

	<build>
		<finalName>${project.artifactId}</finalName>
		<plugins>
			<!-- 资源文件拷贝插件 -->
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-resources-plugin</artifactId>
				<version>2.7</version>
				<configuration>
					<encoding>UTF-8</encoding>
				</configuration>
			</plugin>
			<!-- java编译插件 -->
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-compiler-plugin</artifactId>
				<version>3.2</version>
				<configuration>
					<source>1.8</source>
					<target>1.8</target>
					<encoding>UTF-8</encoding>
				</configuration>
			</plugin>
		</plugins>
		<pluginManagement>
			<plugins>
				<!-- 配置Tomcat插件 -->
				<plugin>
					<groupId>org.apache.tomcat.maven</groupId>
					<artifactId>tomcat7-maven-plugin</artifactId>
					<version>2.2</version>
				</plugin>
			</plugins>
		</pluginManagement>
	</build>
</project>

3.2、service-api:

pom:

<project xmlns="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.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<groupId>dubbo-tcc</groupId>
	<artifactId>tcc-service-api</artifactId>
	<version>0.0.1-SNAPSHOT</version>


	<dependencies>
		<dependency>
			<groupId>org.mengyun</groupId>
			<artifactId>tcc-transaction-spring</artifactId>
			<version>1.2.4.23</version>
		</dependency>

		<dependency>
			<groupId>org.mengyun</groupId>
			<artifactId>tcc-transaction-dubbo</artifactId>
			<version>1.2.4.23</version>
		</dependency>
	</dependencies>
</project>

order.java:

package com.th.entity;

import java.io.Serializable;

public class Order implements Serializable{

	private static final long serialVersionUID = 4474290190954017721L;

	private Integer orderId;
	private String name;
	private Integer status;

	public Integer getOrderId() {
		return orderId;
	}

	public void setOrderId(Integer orderId) {
		this.orderId = orderId;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public Integer getStatus() {
		return status;
	}

	public void setStatus(Integer status) {
		this.status = status;
	}

}

RedPacket.java:

package com.th.entity;

import java.io.Serializable;

public class RedPacket implements Serializable {

	private static final long serialVersionUID = 2853121445210943100L;

	private Integer id;
	private Integer orderId;
	private Integer num;
	private Integer status;

	public Integer getId() {
		return id;
	}

	public void setId(Integer id) {
		this.id = id;
	}

	public Integer getOrderId() {
		return orderId;
	}

	public void setOrderId(Integer orderId) {
		this.orderId = orderId;
	}

	public Integer getNum() {
		return num;
	}

	public void setNum(Integer num) {
		this.num = num;
	}

	public Integer getStatus() {
		return status;
	}

	public void setStatus(Integer status) {
		this.status = status;
	}

}

orderService.java:

package com.th.service;

import org.mengyun.tcctransaction.api.Compensable;

import com.th.entity.Order;

public interface OrderService {

	@Compensable
	Integer insert(Order order);
}

RedPacketService.java:

package com.th.service;

import org.mengyun.tcctransaction.api.Compensable;

import com.th.entity.Order;

public interface RedPacketService {

	/**
	 * 新增红包接口
	 */
	@Compensable
	Integer insertRedPacket(Order order);

}

 

3.3、redpacket

pom:

<project xmlns="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.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<groupId>dubbo-tcc</groupId>
	<artifactId>tcc-redpacket</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<packaging>war</packaging>

	<parent>
		<groupId>dubbo-tcc</groupId>
		<artifactId>tcc-parent</artifactId>
		<version>0.0.1-SNAPSHOT</version>
	</parent>

	<dependencies>

		<dependency>
			<groupId>dubbo-tcc</groupId>
			<artifactId>tcc-service-api</artifactId>
			<version>0.0.1-SNAPSHOT</version>
		</dependency>

		<dependency>
			<groupId>org.mengyun</groupId>
			<artifactId>tcc-transaction-spring</artifactId>
			<version>1.2.4.23</version>
		</dependency>

		<dependency>
			<groupId>org.mengyun</groupId>
			<artifactId>tcc-transaction-dubbo</artifactId>
			<version>1.2.4.23</version>
		</dependency>

		<!-- Spring -->
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-context</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-beans</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-webmvc</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-jdbc</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-aspects</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-context-support</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-tx</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-aop</artifactId>
		</dependency>

		<!-- dubbo相关 -->
		<dependency>
			<groupId>com.alibaba</groupId>
			<artifactId>dubbo</artifactId>
			<exclusions>
				<exclusion>
					<artifactId>spring</artifactId>
					<groupId>org.springframework</groupId>
				</exclusion>
				<exclusion>
					<artifactId>netty</artifactId>
					<groupId>org.jboss.netty</groupId>
				</exclusion>
			</exclusions>
		</dependency>
		<dependency>
			<groupId>org.apache.zookeeper</groupId>
			<artifactId>zookeeper</artifactId>
		</dependency>
		<dependency>
			<groupId>com.github.sgroschupf</groupId>
			<artifactId>zkclient</artifactId>
		</dependency>

		<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>
		<!-- MySql -->
		<dependency>
			<groupId>mysql</groupId>
			<artifactId>mysql-connector-java</artifactId>
			<version>${mysql.version}</version>
		</dependency>
		<!-- 连接池 -->
		<dependency>
			<groupId>com.alibaba</groupId>
			<artifactId>druid</artifactId>
			<version>${druid.version}</version>
		</dependency>

		<dependency>
			<groupId>c3p0</groupId>
			<artifactId>c3p0</artifactId>
			<version>${c3p0.version}</version>
		</dependency>

		<!-- JSP相关 -->
		<dependency>
			<groupId>jstl</groupId>
			<artifactId>jstl</artifactId>
			<version>${jstl.version}</version>
		</dependency>
		<dependency>
			<groupId>javax.servlet</groupId>
			<artifactId>servlet-api</artifactId>
			<version>${servlet-api.version}</version>
			<scope>provided</scope>
		</dependency>
		<dependency>
			<groupId>javax.servlet</groupId>
			<artifactId>jsp-api</artifactId>
			<version>${jsp-api.version}</version>
			<scope>provided</scope>
		</dependency>

		<dependency>
			<groupId>junit</groupId>
			<artifactId>junit</artifactId>
			<scope>test</scope>
		</dependency>


	</dependencies>

	<build>
		<plugins>
			<plugin>
				<groupId>org.apache.tomcat.maven</groupId>
				<artifactId>tomcat7-maven-plugin</artifactId>
				<configuration>
					<path>/tcc-redpacket</path>
					<port>8082</port>
				</configuration>
			</plugin>
		</plugins>
	</build>

</project>

dao.xml:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:context="http://www.springframework.org/schema/context" xmlns:p="http://www.springframework.org/schema/p" xmlns:aop="http://www.springframework.org/schema/aop"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:mybatis-spring="http://mybatis.org/schema/mybatis-spring"
	xsi:schemaLocation="http://mybatis.org/schema/mybatis-spring http://mybatis.org/schema/mybatis-spring-1.2.xsd
		http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.2.xsd
		http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.2.xsd
		http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.2.xsd
		http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-4.2.xsd">

	<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
		<property name="dataSource" ref="dataSource" />
		<property name="mapperLocations" value="classpath*:mapper/*.xml" />
	</bean>

	<mybatis-spring:scan base-package="com.th.dao" />

</beans>

provider-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:dubbo="http://code.alibabatech.com/schema/dubbo" xmlns:context="http://www.springframework.org/schema/context"
	xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
	xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.2.xsd
		http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
		http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
		http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.2.xsd
		http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.2.xsd
		http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd">

	<dubbo:application name="tcc-redpacket" />

	<!-- <context:property-placeholder location="classpath:sample-dubbo-capital.properties" ignore-unresolvable="true" /> -->

	<!--<dubbo:registry id="capitalRpcZk" address="multicast://224.5.6.7:1234?unicast=false"/> -->
	<dubbo:registry id="redPacket" protocol="zookeeper" register="true" subscribe="false" address="192.168.1.198:2181" session="180000" timeout="30000"
		file="./.dubbo/rpc-cache" />

	<dubbo:protocol name="dubbo" port="20880" payload="52428800" />

	<dubbo:service interface="com.th.service.RedPacketService" registry="redPacket" ref="redPacketServiceImpl" timeout="60000" retries="0" />

</beans>

servlet.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:mvc="http://www.springframework.org/schema/mvc" xmlns:context="http://www.springframework.org/schema/context"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">

	<mvc:annotation-driven />

	<!-- 配置包扫描器,扫描@Controller注解的类 -->
	<context:component-scan base-package="com.th.controller" />

</beans>

tcc-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"
	xmlns:util="http://www.springframework.org/schema/util" xmlns:aop="http://www.springframework.org/schema/aop"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
		http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
		http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.2.xsd
		http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd">

	<!-- TCC Transaction -->
	<import resource="classpath:tcc-transaction.xml" />
	<import resource="classpath:tcc-transaction-dubbo.xml" />

	<context:component-scan base-package="com.th.service" />

	<!-- <util:properties id="tccJdbc" location="classpath:tccjdbc.properties" /> -->

	<bean class="org.mengyun.tcctransaction.spring.recover.DefaultRecoverConfig">
		<property name="maxRetryCount" value="30" />
		<property name="recoverDuration" value="60" />
		<property name="cronExpression" value="0/1 * * * * ?" />
	</bean>

	<bean id="transactionRepository" class="org.mengyun.tcctransaction.spring.repository.SpringJdbcTransactionRepository">
		<property name="dataSource" ref="tccDataSource" />
		<property name="domain" value="REDPACKET" />
		<property name="tbSuffix" value="_ASSET" />
	</bean>

	<bean id="tccDataSource" class="com.alibaba.druid.pool.DruidDataSource" destroy-method="close">
		<property name="url" value="${tccjdbc.url}" />
		<property name="username" value="${jdbc.username}" />
		<property name="password" value="${jdbc.password}" />
		<property name="driverClassName" value="${jdbc.driver}" />
		<property name="maxActive" value="10" />
		<property name="minIdle" value="5" />
	</bean>


</beans>

trans.xml:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:context="http://www.springframework.org/schema/context" xmlns:p="http://www.springframework.org/schema/p" xmlns:aop="http://www.springframework.org/schema/aop"
	xmlns:tx="http://www.springframework.org/schema/tx" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.2.xsd
	http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.2.xsd
	http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.2.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.2.xsd
	http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-4.2.xsd">

	<context:property-placeholder location="classpath:properties/db.properties" />

	<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" destroy-method="close">
		<property name="url" value="${jdbc.url}" />
		<property name="username" value="${jdbc.username}" />
		<property name="password" value="${jdbc.password}" />
		<property name="driverClassName" value="${jdbc.driver}" />
		<property name="maxActive" value="10" />
		<property name="minIdle" value="5" />
	</bean>

	<!-- 事务管理器 -->
	<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
		<!-- 数据源 -->
		<property name="dataSource" ref="dataSource" />
	</bean>
	
	<tx:annotation-driven transaction-manager="transactionManager" />
	
	<!-- 通知 
	<tx:advice id="txAdvice" transaction-manager="transactionManager">
		<tx:attributes>
			<tx:method name="save*" propagation="REQUIRED" />
			<tx:method name="insert*" propagation="REQUIRED" />
			<tx:method name="add*" propagation="REQUIRED" />
			<tx:method name="create*" propagation="REQUIRED" />
			<tx:method name="delete*" propagation="REQUIRED" />
			<tx:method name="update*" propagation="REQUIRED" />
			<tx:method name="find*" propagation="SUPPORTS" read-only="true" />
			<tx:method name="select*" propagation="SUPPORTS" read-only="true" />
			<tx:method name="get*" propagation="SUPPORTS" read-only="true" />
		</tx:attributes>
	</tx:advice>
	<aop:config>
		<aop:advisor advice-ref="txAdvice" pointcut="execution(* com.th.service.*.*(..))" />
	</aop:config>
	-->
</beans>

tccjdbc.properties:

#jdbc.driver=com.mysql.jdbc.Driver
jdbc.driver=com.mysql.cj.jdbc.Driver
jdbc.url2=jdbc:mysql://localhost:3306/cloudDB03?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT
jdbc.username=root
jdbc.password=123456

db.properties:

#jdbc.driver=com.mysql.jdbc.Driver
jdbc.driver=com.mysql.cj.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/cloudDB02?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT
tccjdbc.url=jdbc:mysql://localhost:3306/cloudDB03?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT
jdbc.username=root
jdbc.password=123456

SqlMapConfig.xml:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
		PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
		"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
	<!-- 配置分页插件 <plugins> <plugin interceptor="com.github.pagehelper.PageInterceptor"> </plugin> </plugins> -->
	
</configuration>

redPakcetMapper.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" >
<!--namespace 路径 指向dao层接口 -->
<mapper namespace="com.th.dao.RedPacketDao">

	<insert id="insert" parameterType="com.th.entity.RedPacket">
		INSERT INTO red_packet(id,orderId,num,status) values(#{id},#{orderId},#{num},#{status})
	</insert>

	<update id="update" parameterType="com.th.entity.RedPacket">
		UPDATE red_packet SET STATUS = #{status} WHERE id = #{id}
	</update>

	<delete id="delete" parameterType="com.th.entity.RedPacket">
		DELETE FROM red_packet WHERE id = #{id}
	</delete>

</mapper>

RedPacketDao.java:

package com.th.dao;

import org.apache.ibatis.annotations.Mapper;

import com.th.entity.RedPacket;

@Mapper
public interface RedPacketDao {
	Integer insert(RedPacket packet);

	int update(RedPacket packet);

	int delete(RedPacket packet);
}

RedPacketServiceImpl:

package com.th.service.impl;

import org.mengyun.tcctransaction.api.Compensable;
import org.mengyun.tcctransaction.dubbo.context.DubboTransactionContextEditor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import com.th.dao.RedPacketDao;
import com.th.entity.Order;
import com.th.entity.RedPacket;
import com.th.service.RedPacketService;

@Service("redPacketServiceImpl")
public class RedPacketServiceImpl implements RedPacketService {

	@Autowired
	private RedPacketDao redPacketDao;

	@Override
	@Compensable(confirmMethod = "confirmInsertRedPacket", cancelMethod = "cancelInsertRedPacket", transactionContextEditor = DubboTransactionContextEditor.class)
	public Integer insertRedPacket(Order order) {
		RedPacket redPacket = new RedPacket();
		redPacket.setOrderId(1);
		redPacket.setNum(1);
		redPacket.setId(1);
		redPacket.setStatus(-1);

		System.out.println("redPacketInsert");

		redPacketDao.insert(redPacket);

		return redPacket.getOrderId();
	}

	@Transactional
	public void confirmInsertRedPacket(Order order) {
		System.out.println("confirmRedPacketInsert");

		RedPacket redPacket = new RedPacket();
		redPacket.setOrderId(1);
		redPacket.setNum(1);
		redPacket.setId(1);
		redPacket.setStatus(0);

		redPacketDao.update(redPacket);

	}

	@Transactional
	public void cancelInsertRedPacket(Order order) {
		System.out.println("cancelRedPacketInsert");

		RedPacket redPacket = new RedPacket();
		redPacket.setOrderId(1);
		redPacket.setNum(1);
		redPacket.setId(1);
		redPacket.setStatus(1);

		redPacketDao.delete(redPacket);
	}

}

3.4、Order系统

pom.xml:

<project xmlns="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.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<parent>
		<groupId>dubbo-tcc</groupId>
		<artifactId>tcc-parent</artifactId>
		<version>0.0.1-SNAPSHOT</version>
	</parent>

	<artifactId>tcc-order</artifactId>
	<packaging>war</packaging>

	<dependencies>

		<dependency>
			<groupId>dubbo-tcc</groupId>
			<artifactId>tcc-service-api</artifactId>
			<version>0.0.1-SNAPSHOT</version>
		</dependency>

		<dependency>
			<groupId>org.mengyun</groupId>
			<artifactId>tcc-transaction-spring</artifactId>
			<version>1.2.4.23</version>
		</dependency>

		<dependency>
			<groupId>org.mengyun</groupId>
			<artifactId>tcc-transaction-dubbo</artifactId>
			<version>1.2.4.23</version>
		</dependency>

		<!-- Spring -->
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-context</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-beans</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-webmvc</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-jdbc</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-aspects</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-context-support</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-tx</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-aop</artifactId>
		</dependency>

		<!-- dubbo相关 -->
		<dependency>
			<groupId>com.alibaba</groupId>
			<artifactId>dubbo</artifactId>
			<exclusions>
				<exclusion>
					<artifactId>spring</artifactId>
					<groupId>org.springframework</groupId>
				</exclusion>
				<exclusion>
					<artifactId>netty</artifactId>
					<groupId>org.jboss.netty</groupId>
				</exclusion>
			</exclusions>
		</dependency>
		<dependency>
			<groupId>org.apache.zookeeper</groupId>
			<artifactId>zookeeper</artifactId>
		</dependency>
		<dependency>
			<groupId>com.github.sgroschupf</groupId>
			<artifactId>zkclient</artifactId>
		</dependency>

		<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>
		<!-- MySql -->
		<dependency>
			<groupId>mysql</groupId>
			<artifactId>mysql-connector-java</artifactId>
			<version>${mysql.version}</version>
		</dependency>
		<!-- 连接池 -->
		<dependency>
			<groupId>com.alibaba</groupId>
			<artifactId>druid</artifactId>
			<version>${druid.version}</version>
		</dependency>

		<!-- JSP相关 -->
		<dependency>
			<groupId>jstl</groupId>
			<artifactId>jstl</artifactId>
			<version>${jstl.version}</version>
		</dependency>
		<dependency>
			<groupId>javax.servlet</groupId>
			<artifactId>servlet-api</artifactId>
			<version>${servlet-api.version}</version>
			<scope>provided</scope>
		</dependency>
		<dependency>
			<groupId>javax.servlet</groupId>
			<artifactId>jsp-api</artifactId>
			<version>${jsp-api.version}</version>
			<scope>provided</scope>
		</dependency>

		<dependency>
			<groupId>junit</groupId>
			<artifactId>junit</artifactId>
			<scope>test</scope>
		</dependency>

	</dependencies>

</project>

dao.xml:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:context="http://www.springframework.org/schema/context" xmlns:p="http://www.springframework.org/schema/p"
	xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns:mybatis-spring="http://mybatis.org/schema/mybatis-spring"
	xsi:schemaLocation="http://mybatis.org/schema/mybatis-spring http://mybatis.org/schema/mybatis-spring-1.2.xsd
		http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.2.xsd
		http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.2.xsd
		http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.2.xsd
		http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.2.xsd
		http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-4.2.xsd">
	
	<!-- 配置数据库连接池 -->
	<!-- 加载配置文件 -->
	<context:property-placeholder location="classpath:properties/db.properties" />
	<!-- 数据库连接池 -->
	<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource"
		destroy-method="close">
		<property name="url" value="${jdbc.url}" />
		<property name="username" value="${jdbc.username}" />
		<property name="password" value="${jdbc.password}" />
		<property name="driverClassName" value="${jdbc.driver}" />
		<property name="maxActive" value="10" />
		<property name="minIdle" value="5" />
	</bean>
	<!-- SqlSessionFactory -->
	<!-- 让spring管理sqlsessionfactory 使用mybatis和spring整合包中的 -->
	<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
		<!-- 数据库连接池 -->
		<property name="dataSource" ref="dataSource" />
		<!-- 加载mybatis的全局配置文件 -->
		<!-- <property name="configLocation" value="classpath:mybatis/SqlMapConfig.xml" /> -->
		<property name="mapperLocations" value="classpath*:mapper/*.xml" />
	</bean>
	<!-- Mapper映射文件的包扫描器  mapper和dao接口在同一包下面使用
	<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
		<property name="basePackage" value="com.taotao.mapper" />
	</bean>
	-->
	
	<mybatis-spring:scan base-package="com.th.dao"/> 
	
</beans>

mvc.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:p="http://www.springframework.org/schema/p" xmlns:context="http://www.springframework.org/schema/context"
	xmlns:dubbo="http://code.alibabatech.com/schema/dubbo" xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
	xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.2.xsd
		http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.2.xsd
		http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.2.xsd
		http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.2.xsd
		http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.2.xsd
		http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd">

	<!-- 配置注解驱动 -->
	<mvc:annotation-driven />
	
	<!-- 视图解析器 -->
	<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
		<property name="prefix" value="/WEB-INF/jsp/" />
		<property name="suffix" value=".jsp" />
	</bean>
	
	<!-- 配置包扫描器,扫描@Controller注解的类 -->
	<context:component-scan base-package="com.th.controller"/>

	<!-- 配置资源映射 -->
	<mvc:resources location="/css/" mapping="/css/**" />
	<mvc:resources location="/js/" mapping="/js/**" />



	<!-- 引用dubbo服务 <dubbo:application name="taotao-manager-web" /> <dubbo:registry protocol="zookeeper" address="192.168.1.117:2181" /> <dubbo:reference interface="com.taotao.service.ItemService" id="itemService" 
		/> -->
</beans>

service.xml:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:util="http://www.springframework.org/schema/util" xmlns:context="http://www.springframework.org/schema/context" xmlns:p="http://www.springframework.org/schema/p"
	xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx" xmlns:dubbo="http://code.alibabatech.com/schema/dubbo" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.2.xsd
	http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.2.xsd
	http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.2.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.2.xsd
	http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd
	http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-4.2.xsd">

	<!-- TCC Transaction -->
	<import resource="classpath:tcc-transaction.xml" />
	<import resource="classpath:tcc-transaction-dubbo.xml" />


	<!-- 配置包扫描器,扫描所有带@Service注解的类 -->
	<context:component-scan base-package="com.th.service" />


	<!-- 引用dubbo服务 <dubbo:application name="taotao-manager-web" /> <dubbo:registry protocol="zookeeper" address="192.168.1.117:2181" /> <dubbo:reference interface="com.taotao.service.ItemService" id="itemService" 
		/> -->

	<!-- 引用dubbo服务/> -->
	<dubbo:application name="tcc-order" />
	<dubbo:registry protocol="zookeeper" address="192.168.1.198:2181" />
	<dubbo:reference interface="com.th.service.RedPacketService" id="redPacketService" />


	<!--tcc -->
	<bean id="tccDataSource" class="com.alibaba.druid.pool.DruidDataSource" destroy-method="close">
		<property name="url" value="${tccjdbc.url}" />
		<property name="username" value="${jdbc.username}" />
		<property name="password" value="${jdbc.password}" />
		<property name="driverClassName" value="${jdbc.driver}" />
		<property name="maxActive" value="10" />
		<property name="minIdle" value="5" />
	</bean>

	<bean id="transactionRepository" class="org.mengyun.tcctransaction.spring.repository.SpringJdbcTransactionRepository">
		<property name="dataSource" ref="tccDataSource" />
		<property name="domain" value="Order" />
		<property name="tbSuffix" value="_ASSET" />
	</bean>

	<bean class="org.mengyun.tcctransaction.spring.recover.DefaultRecoverConfig">
		<property name="maxRetryCount" value="30" />
		<property name="recoverDuration" value="120" />
		<property name="cronExpression" value="0 */1 * * * ?" />
		<property name="delayCancelExceptions">
			<util:set>
				<value>com.alibaba.dubbo.remoting.TimeoutException</value>
			</util:set>
		</property>
	</bean>



</beans>

trans.xml:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:context="http://www.springframework.org/schema/context" xmlns:p="http://www.springframework.org/schema/p" xmlns:aop="http://www.springframework.org/schema/aop"
	xmlns:tx="http://www.springframework.org/schema/tx" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.2.xsd
	http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.2.xsd
	http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.2.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.2.xsd
	http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-4.2.xsd">

	<tx:annotation-driven transaction-manager="transactionManager" />

	<!-- 事务管理器 -->
	<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
		<!-- 数据源 -->
		<property name="dataSource" ref="dataSource" />
	</bean>
	<!-- 通知 -->
	<tx:advice id="txAdvice" transaction-manager="transactionManager">
		<tx:attributes>
			<!-- 传播行为 -->
			<tx:method name="save*" propagation="REQUIRED" />
			<tx:method name="insert*" propagation="REQUIRED" />
			<tx:method name="add*" propagation="REQUIRED" />
			<tx:method name="create*" propagation="REQUIRED" />
			<tx:method name="delete*" propagation="REQUIRED" />
			<tx:method name="update*" propagation="REQUIRED" />
			<tx:method name="find*" propagation="SUPPORTS" read-only="true" />
			<tx:method name="select*" propagation="SUPPORTS" read-only="true" />
			<tx:method name="get*" propagation="SUPPORTS" read-only="true" />
		</tx:attributes>
	</tx:advice>
	<!-- 切面 -->
	<aop:config>
		<aop:advisor advice-ref="txAdvice" pointcut="execution(* com.th.service.*.*(..))" />
	</aop:config>

</beans>

db.properties.xml:

#jdbc.driver=com.mysql.jdbc.Driver
jdbc.driver=com.mysql.cj.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/cloudDB02?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT
tccjdbc.url=jdbc:mysql://localhost:3306/cloudDB03?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT
jdbc.username=root
jdbc.password=123456

SqlMapConfig.xml:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
		PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
		"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
	<!-- 配置分页插件 <plugins> <plugin interceptor="com.github.pagehelper.PageInterceptor"> </plugin> </plugins> -->
	
</configuration>

orderMapper.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" >
<!--namespace 路径 指向dao层接口 -->
<mapper namespace="com.th.dao.OrderDao">

	<insert id="insert" parameterType="com.th.entity.Order">
		INSERT INTO t_order(orderId,name,status) values(#{orderId},#{name},#{status})
	</insert>

	<update id="update" parameterType="com.th.entity.Order">
		UPDATE t_order SET status = #{status} WHERE orderId = #{orderId}
	</update>


	<delete id="delete" parameterType="com.th.entity.Order">
		DELETE FROM t_order WHERE orderId = #{orderId}
	</delete>

</mapper>

OrderController.java:

package com.th.controller;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import com.th.entity.Order;
import com.th.service.OrderService;

@Controller
public class OrderController {

	@Autowired
	private OrderService orderService;

	// @Autowired
	// private RedPacketService redPacketService;

	@RequestMapping(value = "/createOrder", produces = { "application/json;charset=UTF-8" })
	@ResponseBody
	//@Transactional
	public String createOrder() {
		Order order = new Order();
		Integer id = orderService.insert(order);

		return "订单创建成功,订单ID: " + id;
	}

}

OrderDao.java:

package com.th.dao;

import org.apache.ibatis.annotations.Mapper;

import com.th.entity.Order;

@Mapper
public interface OrderDao {

	Integer insert(Order order);

	int update(Order order);

	int delete(Order order);
}

OrderServiceImpl.java:

package com.th.service.impl;

import org.mengyun.tcctransaction.api.Compensable;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import com.th.dao.OrderDao;
import com.th.entity.Order;
import com.th.service.OrderService;
import com.th.service.RedPacketService;

@Service
@Component
public class OrderServiceImpl implements OrderService {

	@Autowired
	private OrderDao orderDao;

	@Autowired
	private RedPacketService redPacketService;

	@Override
	@Compensable(confirmMethod = "confirmInsert", cancelMethod = "cancelInsert", asyncConfirm = true)
	@Transactional
	public Integer insert(Order order) {
		Order orde = new Order();
		orde.setName("电脑");
		orde.setOrderId(1);
		orde.setStatus(-1);

		orderDao.insert(orde);

		redPacketService.insertRedPacket(orde);

		//int i = 1 / 0;

		return order.getOrderId();
	}

	public void confirmInsert(Order order) {
		System.out.println("confirmOrderInsert");

		Order orde = new Order();
		orde.setName("电脑");
		orde.setOrderId(1);
		orde.setStatus(0);

		orderDao.update(orde);

	}

	public void cancelInsert(Order order) {
		System.out.println("cancelOrderInsert");

		Order orde = new Order();
		orde.setName("电脑");
		orde.setOrderId(1);
		orde.setStatus(1);

		orderDao.delete(orde);

	}

}

4、测试

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/u013278314/article/details/85112891

智能推荐

.net资源站点汇总-程序员宅基地

文章浏览阅读1.1k次。.net资源站点汇总名称:快速入门地址:http://chs.gotdotnet.com/quickstart/描述:本站点是微软.NET技术的快速入门网站,我们不必再安装.NET Framework中的快速入门示例程序,直接在网上查看此示例即看。****************************************************名称:微软官方.NET指导站点地址:ht

Efficient Zero-Knowledge Arguments for Arithmetic Circuits in the Discrete Log Setting学习笔记-程序员宅基地

文章浏览阅读1.2k次。1. 引言Bootle和Groth等人2016年论文《Efficient Zero-Knowledge Arguments for Arithmetic Circuits in the Discrete Log Setting》。_efficient zero-knowledge arguments for arithmetic circuits in the discrete l

【计算机毕业设计】070校园代购服务订单管理系统_校园代购用户分析-程序员宅基地

文章浏览阅读155次。在新发展的时代,众多的软件被开发出来,给用户带来了很大的选择余地,而且学生越来越追求更个性的需求。在这种时代背景下,学生对校园代购服务订单管理越来越重视,更好的实现校园代购服务的有效发挥,本文将通过校园代购服务订单管理系统的信息,分析在日常生活中对代购服务存在哪些问题探讨出进一步提升工作效率,管理能力的对策。系统采用了java技术,将所有模块采用以浏览器交互的模式,选择MySQL作为系统的数据库,开发工具选择eclipse来进行系统的设计。基本实现了校园代购服务订单管理系统应有的主要功能模块,本系统有管_校园代购用户分析

分支限界法—任务分配问题_分支限界法解决作业分配问题 oj-程序员宅基地

文章浏览阅读4.5k次,点赞6次,收藏54次。题目描述分配问题要求将n个任务分配给n给人,每个人完成任务的代价不同,要求分配的结果最优,此题可以使用回溯求解。简要分析和设计假设存在四个人a,b,c,d,任务1,任务2,任务3,任务4,和对应的代价矩阵如下:采用分支界限法,需要计算最优边界Lb,Lb=已分配任务的代价+剩余未分配任务中最小的代价,然后构造状态空间树,上面例子的状态空间树如下:开始节点表示还未给任何人分配任务,然后在开始节点的基础上寻找可扩展节点。最开始的start中的lb=每行最小之和(2+3+1+4=10)由于此时a有四种选_分支限界法解决作业分配问题 oj

android studio开发计算器_android开发计算-程序员宅基地

文章浏览阅读1.5k次。一个简易的计算器,边学边写,还有很多不足希望多多指教先看布局,整体线性布局,上面两个TextView,一个存放计算过程,一个给出结果,然后一个table布局,button没有声明在xml里,用Java写的,好处是比较方便,坏处是我不会怎么让button适应屏幕,看起来有点丑。<?xml version="1.0" encoding="utf-8"?><android.sup..._android开发计算

基于matlab的2PSK的系统仿真_倒π现象-程序员宅基地

文章浏览阅读7.3k次,点赞12次,收藏59次。由于2PSK的幅度是恒定的,必须进行相干解调。经过带通滤波的信号在相乘器中与本地载波相乘,然后用低通滤波器滤除高频分量,在进行抽样判决。判决器是按极性来判决的。即正抽样值判为1,负抽样值判为0。2PSK信号的相干解调原理图如图2-4所示,各点的波形如图2-5所示。由于2PSK信号的载波回复过程中存在着180°的相位模糊,即恢复的本地载波与所需相干载波可能相同,也可能相反,这种相位关系的不确定性将会造成解调出的数字基带信号与发送的基带信号正好相反,即“1”变成“0”吗“0”变成“1”,判决器输出数字信号全_倒π现象

随便推点

C#WFM关于光标设置问题_wfm开发-程序员宅基地

文章浏览阅读524次。由于项目需要,要开发一款打地鼠的小游戏。在设置光标大小和位置的时候卡住了。下面我和大家分享一下我解决问题的过程。一、设置光标位置。C#里面的cursor控件没有给到直接设置location的函数。但这个网上有很多解决方案。我采纳之后觉得挺实用的。首先,需要再命名空间里添加using System.Runtime.InteropServices;然后在Class里面添加一下函数即可: [DllImport("user32.dll")] public static exte_wfm开发

ai人工智能_11条人工智能原则-程序员宅基地

文章浏览阅读874次。ai人工智能If not, how do we teach values to an autonomous intelligence? Can we codify them or simply enter it somewhere in the system? Is it more of an iterative process where we will correct parameters o..._人工智能遵循原则

深入了解与全面解析华为认证(HCIA/HCIP/HCIE)-程序员宅基地

文章浏览阅读395次,点赞14次,收藏5次。华为认证是华为技术实力的体现,也是个人职业竞争力的重要体现。通过华为认证,可以帮助我们更好地规划自己的职业发展道路,提升自己的专业技能和综合素质,为未来的职业发展打下坚实的基础。

java线程的中断(interrupt)_java interrupted-程序员宅基地

文章浏览阅读4.1k次,点赞5次,收藏15次。一个线程在未正常结束之前, 被强制终止是很危险的事情. 因为它可能带来完全预料不到的严重后果比如会带着自己所持有的锁而永远的休眠,迟迟不归还锁等。 所以你看到Thread.suspend, Thread.stop等方法都被Deprecated了那么不能直接把一个线程搞挂掉, 但有时候又有必要让一个线程死掉, 或者让它结束某种等待的状态 该怎么办呢?一个比较优雅而安全的做法是:使用等待/通知机制或者给那个线程一个中断信号, 让它自己决定该怎么办。这里我们理解线程中断的使用场景和使用时的注意事项,最后使_java interrupted

easyui中 form combobox datagrid 等有回显功能的对象方法 onBeforeLoad 获取当前对象_easyui onbeforeload-程序员宅基地

文章浏览阅读4.8k次。&lt;!DOCTYPE html&gt;&lt;html&gt; &lt;head&gt; &lt;meta charset="UTF-8"&gt; &lt;title&gt;Validate Form on Submit - jQuery EasyUI Demo&lt;/title&gt; &lt;link rel=&qu_easyui onbeforeload

arcgis学习系列-6查询FeatureLayer_arcgis 4.x featurelayer query-程序员宅基地

文章浏览阅读435次。概述本文你将学习:如何对feature图层进行查询并添加图层到地图中。使用arcgis for javascript 你可以查询feature layer为你的应用程序检索一个子数据集。在这个方案中图层被引用但是没有加载到地图中。查询可以包含一个sql的where子句,几何特征和空间关系。创建Query之后,将其传递给Query Task,以便从feature层检索数据。当features返..._arcgis 4.x featurelayer query

推荐文章

热门文章

相关标签