当前位置:   article > 正文

Maven构建Spring+MyBatis+JTA(atomikos)框架

spring-mybatis com.mysql.cj.jdbc.mysqlxadatasource

maven构建项目,详见笔记“maven构建多模块工程”

开发工具:IntelliJ IDEA

JDK版本:1.8

Maven版本:3.3.9

项目结构:

87194969-f076-412c-ad35-ab85e2a61392

SpringMybatisJtaModel/src/main/resources/mapper存放mybatis生成的mapper.xml文件

 

jdbc.properties文件内容

  1. #jdbc_driverClassName=com.mysql.cj.jdbc.Driver
  2. #jdbc_driverClassName=com.mysql.jdbc.Driver
  3. #jdbc_url=jdbc:mysql://chaomeiman.peterren.net:3306/catering?serverTimezone=UTC&useUnicode=true&characterEncoding=utf8
  4. #jdbc_username=root
  5. #jdbc_password=P@ssw0rd
  6. #-------------user-----------------#
  7. userjdbc_driverClassName=com.mysql.cj.jdbc.MysqlXADataSource
  8. userjdbc_url=jdbc:mysql://192.168.1.10:3308/yxs_user_db?serverTimezone=UTC&useUnicode=true&characterEncoding=utf8&pinGlobalTxToPhysicalConnection=true&nullNamePatternMatchesAll=true
  9. userjdbc_username=root
  10. #userjdbc_password=P@ssw0rd
  11. userjdbc_password=walletroot
  12. #-------------主数据源-------------#
  13. jdbc_driverClassName=com.mysql.cj.jdbc.MysqlXADataSource
  14. jdbc_url=jdbc:mysql://192.168.1.10:3308/yxs_db?serverTimezone=UTC&useUnicode=true&characterEncoding=utf8&pinGlobalTxToPhysicalConnection=true&nullNamePatternMatchesAll=true
  15. jdbc_username=root
  16. #jdbc_password=P@ssw0rd
  17. jdbc_password=walletroot
  18. #-------------log-------------#
  19. logjdbc_driverClassName=com.mysql.jdbc.Driver
  20. logjdbc_url=jdbc:mysql://192.168.1.10:3308/yxs_log_db?serverTimezone=UTC&useUnicode=true&characterEncoding=utf8&pinGlobalTxToPhysicalConnection=true&nullNamePatternMatchesAll=true
  21. logjdbc_username=root
  22. #logjdbc_password=P@ssw0rd
  23. logjdbc_password=walletroot
  24. #-------------report-------------#
  25. reportjdbc_driverClassName=com.mysql.jdbc.Driver
  26. reportjdbc_url=jdbc:mysql://192.168.1.10:3308/yxs_report_db?serverTimezone=UTC&useUnicode=true&characterEncoding=utf8&pinGlobalTxToPhysicalConnection=true&nullNamePatternMatchesAll=true
  27. reportjdbc_username=root
  28. #reportjdbc_password=P@ssw0rd
  29. reportjdbc_password=walletroot
  30. # 菜单数据库
  31. meal_dataSourceClassName=com.mysql.cj.jdbc.MysqlXADataSource
  32. mealjdbc_driverClassName=com.mysql.cj.jdbc.Driver
  33. mealjdbc_url=jdbc:mysql://192.168.1.10:3308/yxs_meal_db?serverTimezone=UTC&useUnicode=true&characterEncoding=utf8&pinGlobalTxToPhysicalConnection=true&nullNamePatternMatchesAll=true
  34. mealjdbc_username=root
  35. mealjdbc_password=walletroot
  36. jdbc_properties=file:\\\\D:\\ideaWork\\Catering\\src\\main\resources\\conf\\jdbc.properties
  37. UseSSL=true
  38. RequireSSL=true
  39. VerifyServerCertificate=true
  40. Logger="com.mysql.jdbc.log.StandardLogger"
  41. ClientCertificateKeyStoreType="JKS"
  42. ClientCertificateKeyStoreUrl=KEYSTORE_PATH
  43. ClientCertificateKeyStorePassword=KEYSTORE_PASSWORD
  44. TrustCertificateKeyStoreType="JKS"
  45. TrustCertificateKeyStoreUrl=TRUSTORE_PATH
  46. TrustCertificateKeyStorePassword=TRUSTORE_PASSWORD

 

  1、pom文件添加springMVC、jta、mybatis等需要的jar

  1. <dependencies>
  2.     <!-- junit测试包 -->
  3.     <dependency>
  4.         <groupId>junit</groupId>
  5.         <artifactId>junit</artifactId>
  6.     </dependency>
  7.     <!-- spring核心包 -->
  8.     <!-- springframe start -->
  9.     <dependency>
  10.         <groupId>org.springframework</groupId>
  11.         <artifactId>spring-core</artifactId>
  12.     </dependency>
  13.     <dependency>
  14.         <groupId>org.springframework</groupId>
  15.         <artifactId>spring-web</artifactId>
  16.     </dependency>
  17.     <dependency>
  18.         <groupId>org.springframework</groupId>
  19.         <artifactId>spring-oxm</artifactId>
  20.     </dependency>
  21.     <dependency>
  22.         <groupId>org.springframework</groupId>
  23.         <artifactId>spring-tx</artifactId>
  24.     </dependency>
  25.     <dependency>
  26.         <groupId>org.springframework</groupId>
  27.         <artifactId>spring-jdbc</artifactId>
  28.     </dependency>
  29.     <dependency>
  30.         <groupId>org.springframework</groupId>
  31.         <artifactId>spring-webmvc</artifactId>
  32.     </dependency>
  33.     <dependency>
  34.         <groupId>org.springframework</groupId>
  35.         <artifactId>spring-aop</artifactId>
  36.     </dependency>
  37.     <dependency>
  38.         <groupId>org.aspectj</groupId>
  39.         <artifactId>aspectjweaver</artifactId>
  40.     </dependency>
  41.     <dependency>
  42.         <groupId>org.springframework</groupId>
  43.         <artifactId>spring-context-support</artifactId>
  44.     </dependency>
  45.     <dependency>
  46.         <groupId>org.springframework</groupId>
  47.         <artifactId>spring-test</artifactId>
  48.     </dependency>
  49.     <dependency>
  50.         <groupId>org.codehaus.jackson</groupId>
  51.         <artifactId>jackson-mapper-asl</artifactId>
  52.     </dependency>
  53.     <dependency>
  54.         <groupId>com.fasterxml.jackson.core</groupId>
  55.         <artifactId>jackson-core</artifactId>
  56.     </dependency>
  57.     <dependency>
  58.         <groupId>com.fasterxml.jackson.core</groupId>
  59.         <artifactId>jackson-databind</artifactId>
  60.     </dependency>
  61.     <dependency>
  62.         <groupId>com.fasterxml.jackson.core</groupId>
  63.         <artifactId>jackson-annotations</artifactId>
  64.     </dependency>
  65.     <!-- springframe end -->
  66.     <!--jta包-->
  67.     <dependency>
  68.         <groupId>javax.transaction</groupId>
  69.         <artifactId>jta</artifactId>
  70.         <version>1.1</version>
  71.     </dependency>
  72.     <!--atomikos包-->
  73.     <!--atomikos start-->
  74.     <dependency>
  75.         <groupId>com.atomikos</groupId>
  76.         <artifactId>atomikos-util</artifactId>
  77.         <version>${atomikos.version}</version>
  78.     </dependency>
  79.     <dependency>
  80.         <groupId>com.atomikos</groupId>
  81.         <artifactId>transactions</artifactId>
  82.         <version>${atomikos.version}</version>
  83.     </dependency>
  84.     <dependency>
  85.         <groupId>com.atomikos</groupId>
  86.         <artifactId>transactions-jta</artifactId>
  87.         <version>${atomikos.version}</version>
  88.     </dependency>
  89.     <dependency>
  90.         <groupId>com.atomikos</groupId>
  91.         <artifactId>transactions-jdbc</artifactId>
  92.         <version>${atomikos.version}</version>
  93.     </dependency>
  94.     <dependency>
  95.         <groupId>com.atomikos</groupId>
  96.         <artifactId>transactions-api</artifactId>
  97.         <version>${atomikos.version}</version>
  98.     </dependency>
  99.     <!--atomikos end-->
  100.     <!-- mybatis核心包 -->
  101.     <dependency>
  102.         <groupId>org.mybatis</groupId>
  103.         <artifactId>mybatis</artifactId>
  104.         <version>${mybatis.version}</version>
  105.     </dependency>
  106.     <!-- mybatis/spring包 -->
  107.     <dependency>
  108.         <groupId>org.mybatis</groupId>
  109.         <artifactId>mybatis-spring</artifactId>
  110.         <version>${mybatis-spring.version}</version>
  111.     </dependency>
  112.     <!-- mysql驱动包 -->
  113.     <dependency>
  114.         <groupId>mysql</groupId>
  115.         <artifactId>mysql-connector-java</artifactId>
  116.         <version>${mysql.connector.version}</version>
  117.     </dependency>
  118.     <!--http-->
  119.     <dependency>
  120.         <groupId>org.apache.httpcomponents</groupId>
  121.         <artifactId>httpclient</artifactId>
  122.     </dependency>
  123.     <dependency>
  124.         <groupId>commons-codec</groupId>
  125.         <artifactId>commons-codec</artifactId>
  126.         <version>1.10</version>
  127.     </dependency>
  128.     <dependency>
  129.         <groupId>javax.servlet</groupId>
  130.         <artifactId>javax.servlet-api</artifactId>
  131.         <scope>provided</scope>
  132.         <version>3.0.1</version>
  133.     </dependency>
  134.     <!-- 日志文件管理包 -->
  135.     <!-- log start -->
  136.     <dependency>
  137.         <groupId>log4j</groupId>
  138.         <artifactId>log4j</artifactId>
  139.     </dependency>
  140.     <dependency>
  141.         <groupId>org.slf4j</groupId>
  142.         <artifactId>slf4j-log4j12</artifactId>
  143.     </dependency>
  144.     <!-- log end -->
  145. </dependencies>

2、创建applicationContext.xml文件

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <beans xmlns="http://www.springframework.org/schema/beans"
  3.        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4.        xmlns:context="http://www.springframework.org/schema/context"
  5.        xmlns:mvc="http://www.springframework.org/schema/mvc"
  6.        xmlns:tx="http://www.springframework.org/schema/tx"
  7.        xsi:schemaLocation="http://www.springframework.org/schema/beans 
  8.        http://www.springframework.org/schema/beans/spring-beans-4.3.xsd
  9.        http://www.springframework.org/schema/context
  10.        http://www.springframework.org/schema/context/spring-context-4.3.xsd
  11.        http://www.springframework.org/schema/mvc
  12.        http://www.springframework.org/schema/mvc/spring-mvc-4.3.xsd
  13.        http://www.springframework.org/schema/tx
  14.        http://www.springframework.org/schema/tx/spring-tx-4.3.xsd" default-autowire="byName">
  15.     <!-- 1.扫描注解-->
  16.     <context:component-scan base-package="controller"></context:component-scan>
  17.     <context:component-scan base-package="mapper.*"></context:component-scan>
  18.     <context:component-scan base-package="model.*"></context:component-scan>
  19.     <context:component-scan base-package="service.impl"></context:component-scan>
  20.     <!--2.注解驱动-->
  21.     <mvc:annotation-driven></mvc:annotation-driven>
  22. </beans>

3、创建mybatis-config.xml文件

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!DOCTYPE configuration
  3.         PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
  4.         "http://mybatis.org/dtd/mybatis-3-config.dtd">
  5. <configuration>
  6.     <settings>
  7.         <!-- Globally enables or disables any caches configured in any mapper under this configuration -->
  8.         <setting name="cacheEnabled" value="true"/>
  9.         <!-- Sets the number of seconds the driver will wait for a response from the database -->
  10.         <setting name="defaultStatementTimeout" value="3000"/>
  11.         <!-- Enables automatic mapping from classic database column names A_COLUMN to camel case classic Java property names aColumn -->
  12.         <setting name="mapUnderscoreToCamelCase" value="true"/>
  13.         <!-- Allows JDBC support for generated keys. A compatible driver is required.
  14.         This setting forces generated keys to be used if set to true,
  15.          as some drivers deny compatibility but still work -->
  16.         <setting name="useGeneratedKeys" value="true"/>
  17.         <!--解决,查询返回结果含null,没有对应字段值问题-->
  18.         <setting name="callSettersOnNulls" value="true"/>
  19.     </settings>
  20.     <!-- Continue going here -->
  21.     <typeAliases>
  22.         <package name="model.user.*"/>
  23.     </typeAliases>
  24. </configuration>

4、创建spring-mvc.xml

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <beans xmlns:p="http://www.springframework.org/schema/p"
  3.        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4.        xmlns="http://www.springframework.org/schema/beans"
  5.        xsi:schemaLocation="http://www.springframework.org/schema/beans
  6.     http://www.springframework.org/schema/beans/spring-beans-4.3.xsd">
  7.     <!-- 对模型视图添加前后缀 -->
  8.     <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"
  9.           p:prefix="/WEB-INF/jsp/" p:suffix=".jsp"/>
  10.     <bean id="jacksonMessageChangerString"
  11.           class="org.springframework.http.converter.StringHttpMessageConverter">
  12.         <property name="supportedMediaTypes">
  13.             <list>
  14.                 <value>text/plain;charset=UTF-8</value>
  15.             </list>
  16.         </property>
  17.     </bean>
  18.     <bean id="jacksonMessageChanger"
  19.           class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
  20.         <property name="supportedMediaTypes">
  21.             <list>
  22.                 <value>text/html;charset=UTF-8</value>
  23.                 <value>text/plain;charset=UTF-8</value>
  24.                 <value>text/json;charset=UTF-8</value>
  25.                 <value>application/json;charset=UTF-8</value>
  26.             </list>
  27.         </property>
  28.     </bean>
  29.     <bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
  30.         <property name="messageConverters">
  31.             <list>
  32.                 <ref bean="jacksonMessageChanger"/>
  33.                 <ref bean="jacksonMessageChangerString"/>
  34.             </list>
  35.         </property>
  36.     </bean>
  37. </beans>
  38. 5、创建spring-mybatis.xml
  39. <?xml version="1.0" encoding="GBK"?>
  40. <beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  41.        xmlns:p="http://www.springframework.org/schema/p"
  42.        xmlns:util="http://www.springframework.org/schema/util"
  43.        xmlns:aop="http://www.springframework.org/schema/aop"
  44.        xmlns:tx="http://www.springframework.org/schema/tx"
  45.        xmlns="http://www.springframework.org/schema/beans"
  46.        xsi:schemaLocation="http://www.springframework.org/schema/beans
  47.     http://www.springframework.org/schema/beans/spring-beans-4.3.xsd
  48.     http://www.springframework.org/schema/util
  49.     http://www.springframework.org/schema/util/spring-util-4.3.xsd
  50.     http://www.springframework.org/schema/tx
  51.     http://www.springframework.org/schema/tx/spring-tx-4.3.xsd
  52.     http://www.springframework.org/schema/aop
  53.     http://www.springframework.org/schema/aop/spring-aop-4.3.xsd">
  54.     <!-- 引入jdbc配置文件 -->
  55.     <bean
  56.             class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
  57.         <property name="systemPropertiesModeName" value="SYSTEM_PROPERTIES_MODE_OVERRIDE"/>
  58.         <property name="ignoreResourceNotFound" value="true"/>
  59.         <property name="locations">
  60.             <list>
  61.                 <!-- standard config -->
  62.                 <value>classpath:conf/jdbc.properties</value>
  63.             </list>
  64.         </property>
  65.     </bean>
  66.     <!-- 配置数据源 -->
  67.     <!-- 主数据库 -->
  68.     <!--<bean id="dataSourceMain" class="com.atomikos.jdbc.AtomikosDataSourceBean" init-method="init"
  69.           destroy-method="close">
  70.         &lt;!&ndash;value只要两个数据源不同就行,随便取名&ndash;&gt;
  71.         <property name="uniqueResourceName" value="mysql/sitestMain"/>
  72.         <property name="xaDataSourceClassName" value="com.mysql.cj.jdbc.MysqlXADataSource"/>
  73.         <property name="xaProperties">
  74.             <props>
  75.                 &lt;!&ndash;<prop key="driverClassName">${jdbc.driverClassName1}</prop>&ndash;&gt;
  76.                 <prop key="url">${jdbc_url}</prop>
  77.                 <prop key="user">${jdbc_username}</prop>
  78.                 <prop key="password">${jdbc_password}</prop>
  79.             </props>
  80.         </property>
  81.         &lt;!&ndash;<property name="pinGlobalTxToPhysicalConnection"  value="true"/>&ndash;&gt;
  82.         <property name="maxLifetime" value="0"/>
  83.         <property name="minPoolSize" value="1"/>
  84.         <property name="maxPoolSize" value="10"/>
  85.         <property name="poolSize" value="1"/>
  86.     </bean>-->
  87.     <!-- 用户数据库 -->
  88.     <bean id="dataSourceUser" class="com.atomikos.jdbc.AtomikosDataSourceBean" init-method="init"
  89.           destroy-method="close">
  90.         <!-- value只要两个数据源不同就行,随便取名 -->
  91.         <property name="uniqueResourceName" value="mysql/sitestUser"/>
  92.         <property name="xaDataSourceClassName" value="com.mysql.cj.jdbc.MysqlXADataSource"/>
  93.         <property name="xaProperties">
  94.             <props>
  95.                 <!--<prop key="driverClassName">${userjdbc_driverClassName}</prop>-->
  96.                 <prop key="url">${userjdbc_url}</prop>
  97.                 <prop key="user">${userjdbc_username}</prop>
  98.                 <prop key="password">${userjdbc_password}</prop>
  99.             </props>
  100.         </property>
  101.         <!--<property name="pinGlobalTxToPhysicalConnection"  value="true"/>-->
  102.         <property name="maxLifetime" value="0"/>
  103.         <property name="minPoolSize" value="1"/>
  104.         <property name="maxPoolSize" value="10"/>
  105.         <property name="poolSize" value="1"/>
  106.     </bean>
  107.     <!-- log数据库 -->
  108.     <!--<bean id="dataSourceLog" class="com.atomikos.jdbc.AtomikosDataSourceBean" init-method="init"
  109.           destroy-method="close">
  110.         &lt;!&ndash; value只要两个数据源不同就行,随便取名 &ndash;&gt;
  111.         <property name="uniqueResourceName" value="mysql/sitestLog"/>
  112.         <property name="xaDataSourceClassName" value="com.mysql.cj.jdbc.MysqlXADataSource"/>
  113.         <property name="xaProperties">
  114.             <props>
  115.                 &lt;!&ndash;<prop key="driverClassName">${logjdbc_driverClassName}</prop>&ndash;&gt;
  116.                 <prop key="url">${logjdbc_url}</prop>
  117.                 <prop key="user">${logjdbc_username}</prop>
  118.                 <prop key="password">${logjdbc_password}</prop>
  119.             </props>
  120.         </property>
  121.         &lt;!&ndash;<property name="pinGlobalTxToPhysicalConnection"  value="true"/>&ndash;&gt;
  122.         <property name="maxLifetime" value="0"/>
  123.         <property name="minPoolSize" value="1"/>
  124.         <property name="maxPoolSize" value="10"/>
  125.         <property name="poolSize" value="1"/>
  126.     </bean>-->
  127.     <!-- report数据库 -->
  128.     <!--<bean id="dataSourceReport" class="com.atomikos.jdbc.AtomikosDataSourceBean" init-method="init"
  129.           destroy-method="close">
  130.         &lt;!&ndash; value只要两个数据源不同就行,随便取名 &ndash;&gt;
  131.         <property name="uniqueResourceName" value="mysql/sitestReport"/>
  132.         <property name="xaDataSourceClassName" value="com.mysql.cj.jdbc.MysqlXADataSource"/>
  133.         <property name="xaProperties">
  134.             <props>
  135.                 &lt;!&ndash;<prop key="driverClassName">${logjdbc_driverClassName}</prop>&ndash;&gt;
  136.                 <prop key="url">${reportjdbc_url}</prop>
  137.                 <prop key="user">${reportjdbc_username}</prop>
  138.                 <prop key="password">${reportjdbc_password}</prop>
  139.             </props>
  140.         </property>
  141.         &lt;!&ndash;<property name="pinGlobalTxToPhysicalConnection"  value="true"/>&ndash;&gt;
  142.         <property name="maxLifetime" value="0"/>
  143.         <property name="minPoolSize" value="1"/>
  144.         <property name="maxPoolSize" value="10"/>
  145.         <property name="poolSize" value="1"/>
  146.     </bean>-->
  147.     <!-- meal数据库 -->
  148.     <!--<bean id="dataSourceMeal" class="com.atomikos.jdbc.AtomikosDataSourceBean" init-method="init"
  149.           destroy-method="close">
  150.         &lt;!&ndash; value只要两个数据源不同就行,随便取名 &ndash;&gt;
  151.         <property name="uniqueResourceName" value="mysql/sitestMeal"/>
  152.         <property name="xaDataSourceClassName" value="com.mysql.cj.jdbc.MysqlXADataSource"/>
  153.         <property name="xaProperties">
  154.             <props>
  155.                 &lt;!&ndash;<prop key="driverClassName">${mealjdbc_driverClassName}</prop>&ndash;&gt;
  156.                 <prop key="url">${mealjdbc_url}</prop>
  157.                 <prop key="user">${mealjdbc_username}</prop>
  158.                 <prop key="password">${mealjdbc_password}</prop>
  159.             </props>
  160.         </property>
  161.         &lt;!&ndash;<property name="pinGlobalTxToPhysicalConnection"  value="true"/>&ndash;&gt;
  162.         <property name="maxLifetime" value="0"/>
  163.         <property name="minPoolSize" value="1"/>
  164.         <property name="maxPoolSize" value="10"/>
  165.         <property name="poolSize" value="1"/>
  166.     </bean>-->
  167.     <!-- 配置SqlSessionFactoryBean -->
  168. <!--    <bean id="sqlSessionFactoryMain"
  169.           class="org.mybatis.spring.SqlSessionFactoryBean">
  170.         <property name="transactionFactory">
  171.             <bean class="org.apache.ibatis.transaction.managed.ManagedTransactionFactory"/>
  172.         </property>
  173.         &lt;!&ndash; configLocation为mybatis属性 mapperLocations为所有mapper&ndash;&gt;
  174.         <property name="configLocation" value="classpath:conf/mybatis-config.xml"></property>
  175.         <property name="mapperLocations" value="classpath:mapper/main/*.xml"></property>
  176.         <property name="dataSource" ref="dataSourceMain"/>
  177.     </bean>-->
  178.     <bean id="sqlSessionFactoryUser"
  179.           class="org.mybatis.spring.SqlSessionFactoryBean">
  180.         <property name="transactionFactory">
  181.             <bean class="org.apache.ibatis.transaction.managed.ManagedTransactionFactory"/>
  182.         </property>
  183.         <!-- configLocation为mybatis属性 mapperLocations为所有mapper-->
  184.         <property name="configLocation" value="classpath:conf/mybatis-config.xml"></property>
  185.         <property name="mapperLocations" value="classpath:mapper/user/*.xml"></property>
  186.         <property name="dataSource" ref="dataSourceUser"/>
  187.     </bean>
  188.     <!--<bean id="sqlSessionFactoryLog"
  189.           class="org.mybatis.spring.SqlSessionFactoryBean">
  190.         <property name="transactionFactory">
  191.             <bean class="org.apache.ibatis.transaction.managed.ManagedTransactionFactory"/>
  192.         </property>
  193.         &lt;!&ndash; configLocation为mybatis属性 mapperLocations为所有mapper&ndash;&gt;
  194.         <property name="configLocation" value="classpath:conf/mybatis-config.xml"></property>
  195.         <property name="mapperLocations" value="classpath:mapper/*.xml"></property>
  196.         <property name="dataSource" ref="dataSourceLog"/>
  197.     </bean>
  198.     <bean id="sqlSessionFactoryReport"
  199.           class="org.mybatis.spring.SqlSessionFactoryBean">
  200.         <property name="transactionFactory">
  201.             <bean class="org.apache.ibatis.transaction.managed.ManagedTransactionFactory"/>
  202.         </property>
  203.         &lt;!&ndash; configLocation为mybatis属性 mapperLocations为所有mapper&ndash;&gt;
  204.         <property name="configLocation" value="classpath:conf/mybatis-config.xml"></property>
  205.         <property name="mapperLocations" value="classpath:mapper/*.xml"></property>
  206.         <property name="dataSource" ref="dataSourceReport"/>
  207.     </bean>
  208.     <bean id="sqlSessionFactoryMeal"
  209.           class="org.mybatis.spring.SqlSessionFactoryBean">
  210.         <property name="transactionFactory">
  211.             <bean class="org.apache.ibatis.transaction.managed.ManagedTransactionFactory"/>
  212.         </property>
  213.         &lt;!&ndash; configLocation为mybatis属性 mapperLocations为所有mapper&ndash;&gt;
  214.         <property name="configLocation" value="classpath:conf/mybatis-config.xml"></property>
  215.         <property name="mapperLocations" value="classpath:mapper/*.xml"></property>
  216.         <property name="dataSource" ref="dataSourceMeal"/>
  217.     </bean>-->
  218.     <!-- configLocation为mybatis属性 mapperLocations为所有mapper-->
  219.     <!-- spring与mybatis整合配置,扫描所有dao -->
  220.     <!--<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"
  221.           p:basePackage="mapper"
  222.           p:sqlSessionFactoryBeanName="sqlSessionFactoryMain"/>-->
  223.     <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"
  224.           p:basePackage="mapper"
  225.           p:sqlSessionFactoryBeanName="sqlSessionFactoryUser"/>
  226.     <!--<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"
  227.           p:basePackage="mapper"
  228.           p:sqlSessionFactoryBeanName="sqlSessionFactoryLog"/>
  229.     <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"
  230.           p:basePackage="mapper"
  231.           p:sqlSessionFactoryBeanName="sqlSessionFactoryReport"/>
  232.     <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"
  233.           p:basePackage="mapper"
  234.           p:sqlSessionFactoryBeanName="sqlSessionFactoryMeal"/>-->
  235.     <!-- JTA事务管理器 -->
  236.     <bean id="userTransactionService" class="com.atomikos.icatch.config.UserTransactionServiceImp"
  237.           init-method="init" destroy-method="shutdownForce" >
  238.         <constructor-arg>
  239.             <!-- IMPORTANT: specify all Atomikos properties here -->
  240.             <props>
  241.                 <prop key="com.atomikos.icatch.no_file">true</prop>
  242.                 <prop key="com.atomikos.icatch.service">com.atomikos.icatch.standalone.UserTransactionServiceFactory
  243.                 </prop>
  244.                 <prop key="com.atomikos.icatch.output_dir">target/</prop>
  245.                 <prop key="com.atomikos.icatch.log_base_dir">target/</prop>
  246.             </props>
  247.         </constructor-arg>
  248.     </bean>
  249.     <bean id="atomikosTransactionManager"
  250.           class="com.atomikos.icatch.jta.UserTransactionManager"
  251.           init-method="init" destroy-method="close"
  252.           depends-on="userTransactionService">
  253.         <!-- IMPORTANT: disable startup because the userTransactionService above does this -->
  254.         <property name="startupTransactionService" value="false"/>
  255.         <!-- 当调用close时, 我们应该强制交易终止还是不终止?    -->
  256.         <property name="forceShutdown" value="false"/>
  257.     </bean>
  258.     <bean id="atomikosUserTransaction"
  259.           class="com.atomikos.icatch.jta.UserTransactionImp"
  260.           depends-on="userTransactionService">
  261.         <property name="transactionTimeout" value="300"/>
  262.     </bean>
  263.     <!--设置Atomikos的系统参数并-->
  264.     <bean id="setMyAtomikosSystemProps"
  265.           class="org.springframework.beans.factory.config.MethodInvokingFactoryBean">
  266.         <property name="targetObject">
  267.             <!-- System.getProperties() -->
  268.             <bean class="org.springframework.beans.factory.config.MethodInvokingFactoryBean">
  269.                 <property name="targetClass" value="java.lang.System"/>
  270.                 <property name="targetMethod" value="getProperties"/>
  271.             </bean>
  272.         </property>
  273.         <property name="targetMethod" value="putAll"/>
  274.         <property name="arguments">
  275.             <!-- The new Properties -->
  276.             <util:properties>
  277.                 <prop key="com.atomikos.icatch.file">classpath:conf/transactions.properties
  278.                 </prop>
  279.                 <prop key="com.atomikos.icatch.hide_init_file_path">true</prop>
  280.             </util:properties>
  281.         </property>
  282.     </bean>
  283.     <!--声明JTA的事务管理机制-->
  284.     <bean id="jtaTransactionManager"
  285.           class="org.springframework.transaction.jta.JtaTransactionManager"
  286.           depends-on="userTransactionService">
  287.         <property name="transactionManager" ref="atomikosTransactionManager"/>
  288.         <property name="userTransaction" ref="atomikosUserTransaction"/>
  289.         <!-- 必须设置,否则程序出现异常 JtaTransactionManager does not support custom isolation levels by default -->
  290.         <property name="allowCustomIsolationLevels" value="true"/>
  291.     </bean>
  292.     <!--声明atomikos的事务代理-->
  293.     <bean id="atomikosTransactionProxy"
  294.           class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean"
  295.           abstract="true">
  296.         <property name="transactionManager">
  297.             <ref bean="jtaTransactionManager"/>
  298.         </property>
  299.         <property name="transactionAttributes">
  300.             <props>
  301.                 <prop key="*">PROPAGATION_REQUIRED,-Exception</prop>
  302.             </props>
  303.         </property>
  304.     </bean>
  305.      <!--支持 @AspectJ 标记-->
  306.     <!--<aop:aspectj-autoproxy />-->
  307.     <!-- 以AspectJ方式 定义 AOP -->
  308.     <!--<aop:config proxy-target-class="true">-->
  309.         <!--<aop:advisor pointcut="execution(* service.impl.*.*(..))" advice-ref="txAdvice" order="5"/>-->
  310.     <!--</aop:config>-->
  311.     <!-- 配置事务传播特性:如果存在一个事务,则支持当前事务。如果没有事务则开启:REQUIRED -->
  312.     <!--<tx:advice id="txAdvice" transaction-manager="jtaTransactionManager">-->
  313.         <!--<tx:attributes>-->
  314.             <!--&lt;!&ndash;<tx:method name="add*" propagation="REQUIRED" rollback-for="Exception"/>-->
  315.             <!--<tx:method name="save*" propagation="REQUIRED" rollback-for="Exception"/>-->
  316.             <!--<tx:method name="insert*" propagation="REQUIRED" rollback-for="Exception"/>-->
  317.             <!--<tx:method name="create*" propagation="REQUIRED" rollback-for="Exception"/>-->
  318.             <!--<tx:method name="del*" propagation="REQUIRED" rollback-for="Exception"/>-->
  319.             <!--<tx:method name="update*" propagation="REQUIRED" rollback-for="Exception"/>-->
  320.             <!--<tx:method name="modify*" propagation="REQUIRED" rollback-for="Exception"/>&ndash;&gt;-->
  321.             <!--<tx:method name="*" propagation="REQUIRED" rollback-for="Exception"/>-->
  322.         <!--</tx:attributes>-->
  323.     <!--</tx:advice>-->
  324.     <!--将atomikosTransactionProxy作用于service上-->
  325.     <bean id="userService" parent="atomikosTransactionProxy">
  326.         <property name="target">
  327.             <bean class="service.impl.UserServiceImpl">
  328.             </bean>
  329.         </property>
  330.     </bean>
  331. </beans>

6、配置jta事物日志文件transactions.properties

  1. # SAMPLE PROPERTIES FILE FOR THE TRANSACTION SERVICE
  2. # THIS FILE ILLUSTRATES THE DIFFERENT SETTINGS FOR THE TRANSACTION MANAGER
  3. # UNCOMMENT THE ASSIGNMENTS TO OVERRIDE DEFAULT VALUES;
  4. # Required: factory implementation class of the transaction core.
  5. # NOTE: there is no default for this, so it MUST be specified!
  6. #
  7. com.atomikos.icatch.service=com.atomikos.icatch.standalone.UserTransactionServiceFactory
  8. # Set base name of file where messages are output
  9. # (also known as the 'console file').
  10. #
  11. com.atomikos.icatch.console_file_name=tm.out
  12. # Size limit (in bytes) for the console file;
  13. # negative means unlimited.
  14. #
  15. # com.atomikos.icatch.console_file_limit=-1
  16. # For size-limited console files, this option
  17. # specifies a number of rotating files to
  18. # maintain.
  19. #
  20. # com.atomikos.icatch.console_file_count=1
  21. # Set the number of log writes between checkpoints
  22. #
  23. # com.atomikos.icatch.checkpoint_interval=500
  24. # Set output directory where console file and other files are to be put
  25. # make sure this directory exists!
  26. #
  27. # com.atomikos.icatch.output_dir = ./
  28. # Set directory of log files; make sure this directory exists!
  29. #
  30. # com.atomikos.icatch.log_base_dir = ./
  31. # Set base name of log file
  32. # this name will be  used as the first part of
  33. # the system-generated log file name
  34. #
  35. com.atomikos.icatch.log_base_name=tmlog
  36. # Set the max number of active local transactions
  37. # or -1 for unlimited.
  38. #
  39. # com.atomikos.icatch.max_actives = 50
  40. # Set the default timeout (in milliseconds) for local transactions
  41. #
  42. # com.atomikos.icatch.default_jta_timeout = 10000
  43. # Set the max timeout (in milliseconds) for local transactions
  44. #
  45. # com.atomikos.icatch.max_timeout = 300000
  46. # The globally unique name of this transaction manager process
  47. # override this value with a globally unique name
  48. #
  49. com.atomikos.icatch.tm_unique_name=tm
  50. # Do we want to use parallel subtransactions? JTA's default
  51. # is NO for J2EE compatibility
  52. #
  53. # com.atomikos.icatch.serial_jta_transactions=true
  54. # If you want to do explicit resource registration then
  55. # you need to set this value to false.
  56. #
  57. # com.atomikos.icatch.automatic_resource_registration=true
  58. # Set this to WARN, INFO or DEBUG to control the granularity
  59. # of output to the console file.
  60. #
  61. com.atomikos.icatch.console_log_level=INFO
  62. # Do you want transaction logging to be enabled or not?
  63. # If set to false, then no logging overhead will be done
  64. # at the risk of losing data after restart or crash.
  65. #
  66. # com.atomikos.icatch.enable_logging=true
  67. # Should two-phase commit be done in (multi-)threaded mode or not?
  68. # Set this to false if you want commits to be ordered according
  69. # to the order in which resources are added to the transaction.
  70. #
  71. # NOTE: threads are reused on JDK 1.5 or higher.
  72. # For JDK 1.4, thread reuse is enabled as soon as the
  73. # concurrent backport is in the classpath - see
  74. # http://mirrors.ibiblio.org/pub/mirrors/maven2/backport-util-concurrent/backport-util-concurrent/
  75. #
  76. # com.atomikos.icatch.threaded_2pc=false
  77. # Should shutdown of the VM trigger shutdown of the transaction core too?
  78. #
  79. # com.atomikos.icatch.force_shutdown_on_vm_exit=false
  80. com.atomikos.icatch.serial_jta_transactions=false.

7、配置log4j日志文件

  1. # Set root logger level to WARN and append to stdout
  2. log4j.rootLogger=WARN, stdout, error
  3. #WARN\u4E3Alog\u8F93\u51FA\u7EA7\u522B\uFF0Cstdout\uFF0Cerror\u4E3A\u8BE5log\u7684\u522B\u540D\uFF0C\u4E0B\u9762\u5C06\u7528\u5230
  4. log4j.appender.stdout=org.apache.log4j.ConsoleAppender
  5. log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
  6. # Pattern to output the caller's file name and line number.
  7. log4j.appender.stdout.layout.ConversionPattern=%d %5p (%c:%L) - %m%n
  8. # Print only messages of level ERROR or above in the package noModule.
  9. log4j.logger.noModule=FATAL
  10. # OpenSymphony Stuff
  11. log4j.logger.com.opensymphony=INFO
  12. log4j.logger.com.opensymphony.webwork=DEBUG
  13. # Spring Stuff
  14. log4j.logger.org.springframework=INFO
  15. #log4j.logger.com.ibatis=DEBUG
  16. #log4j.logger.com.ibatis.common.jdbc.SimpleDataSource=DEBUG
  17. #log4j.logger.com.ibatis.common.jdbc.ScriptRunner=DEBUG
  18. #log4j.logger.com.ibatis.sqlmap.engine.impl.SqlMapClientDelegate=DEBUG
  19. #log4j.logger.java.sql.Connection=DEBUG
  20. #log4j.logger.java.sql.Statement=DEBUG
  21. #log4j.logger.java.sql.PreparedStatement=DEBUG
  22. #################################
  23. #                       \u9519\u8BEF\u4FE1\u606F #
  24. #################################
  25. log4j.appender.error=org.apache.log4j.DailyRollingFileAppender
  26. log4j.appender.error.File=D:/WorkSpace/LovingCar/logs/errors.log
  27. log4j.appender.error.layout=org.apache.log4j.PatternLayout
  28. log4j.appender.error.layout.ConversionPattern=[%d]-%-5p (%F:%L)|%m%n
  29. log4j.appender.error.DatePattern='.'yyyy-MM-dd
  30. log4j.appender.error.Threshold=ERROR
  31. ###################################
  32. #                       CONSOLE #
  33. #################################
  34. log4j.appender.console=org.apache.log4j.ConsoleAppender
  35. log4j.appender.console.layout=org.apache.log4j.PatternLayout
  36. log4j.appender.console.layout.ConversionPattern=(%F:%L)|%m%n
  37. log4j.appender.errorcsle=org.apache.log4j.ConsoleAppender
  38. log4j.appender.errorcsle.layout=org.apache.log4j.PatternLayout
  39. log4j.appender.errorcsle.layout.ConversionPattern=%-5p (%F:%L)|%m%n
  40. log4j.appender.errorcsle.Threshold=ERROR
  41. ##################################
  42. #                       \u4E1A\u52A1\u7CFB\u7EDF #
  43. #################################
  44. log4j.logger.cn.vesung=DEBUG, logic
  45. log4j.appender.logic=org.apache.log4j.DailyRollingFileAppender
  46. log4j.appender.logic.File=D:/WorkSpace/LovingCar/logs/logic.log
  47. log4j.appender.logic.layout=org.apache.log4j.PatternLayout
  48. log4j.appender.logic.layout.ConversionPattern=[%d]-%-5p (%F:%L)|%m%n
  49. log4j.appender.logic.DatePattern='.'yyyy-MM-dd

8、配置web.xml文件

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!--
  3.   Licensed to the Apache Software Foundation (ASF) under one or more
  4.   contributor license agreements.  See the NOTICE file distributed with
  5.   this work for additional information regarding copyright ownership.
  6.   The ASF licenses this file to You under the Apache License, Version 2.0
  7.   (the "License"); you may not use this file except in compliance with
  8.   the License.  You may obtain a copy of the License at
  9.       http://www.apache.org/licenses/LICENSE-2.0
  10.   Unless required by applicable law or agreed to in writing, software
  11.   distributed under the License is distributed on an "AS IS" BASIS,
  12.   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  13.   See the License for the specific language governing permissions and
  14.   limitations under the License.
  15. -->
  16. <!--
  17.   - This is the Cocoon web-app configurations file
  18.   -
  19.   - $Id$
  20.   -->
  21. <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  22.          version="2.4"
  23.          xmlns="http://java.sun.com/xml/ns/j2ee"
  24.          xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
  25.     <display-name>Catering</display-name>
  26.     <context-param>
  27.         <param-name>log4jConfigLocation</param-name>
  28.         <param-value>classpath:conf/log4j.properties</param-value>
  29.     </context-param>
  30.     <context-param>
  31.         <param-name>log4jRefreshInterval</param-name>
  32.         <param-value>60000</param-value>
  33.     </context-param>
  34.     <!-- Servlet Context Listener ======================================= -->
  35.     <listener>
  36.         <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
  37.     </listener>
  38.     <listener>
  39.         <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  40.     </listener>
  41.     <!-- 读取spring配置文件 -->
  42.     <context-param>
  43.         <param-name>contextConfigLocation</param-name>
  44.         <param-value>classpath:conf/applicationContext.xml
  45.             classpath:conf/spring-mybatis.xml
  46.         </param-value>
  47.     </context-param>
  48.     <!-- Servlet Filters ================================================ -->
  49.     <!-- Spring字符集过滤器 -->
  50.     <filter>
  51.         <filter-name>SpringEncodingFilter</filter-name>
  52.         <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
  53.         <init-param>
  54.             <param-name>encoding</param-name>
  55.             <param-value>UTF-8</param-value>
  56.         </init-param>
  57.         <init-param>
  58.             <param-name>forceEncoding</param-name>
  59.             <param-value>true</param-value>
  60.         </init-param>
  61.     </filter>
  62.     <filter-mapping>
  63.         <filter-name>SpringEncodingFilter</filter-name>
  64.         <url-pattern>/*</url-pattern>
  65.     </filter-mapping>
  66.     <!-- Servlet Configuration ========================================== -->
  67.     <!-- springMVC核心配置 -->
  68.     <servlet>
  69.         <servlet-name>spring</servlet-name>
  70.         <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
  71.         <init-param>
  72.             <param-name>contextConfigLocation</param-name>
  73.             <param-value>classpath:conf/spring-mvc.xml,classpath:conf/applicationContext.xml</param-value>
  74.         </init-param>
  75.         <load-on-startup>2</load-on-startup>
  76.     </servlet>
  77.     <servlet-mapping>
  78.         <servlet-name>spring</servlet-name>
  79.         <url-pattern>/</url-pattern>
  80.     </servlet-mapping>
  81. </web-app>

9、controller

  1. package controller;
  2. import model.user.UserVerificationCode;
  3. import org.springframework.beans.factory.annotation.Autowired;
  4. import org.springframework.stereotype.Controller;
  5. import org.springframework.web.bind.annotation.RequestMapping;
  6. import org.springframework.web.bind.annotation.RequestMethod;
  7. import org.springframework.web.bind.annotation.ResponseBody;
  8. import service.UserService;
  9. /**
  10.  * Author:LiHongMei
  11.  * Date:2017/1/9 15:00
  12.  */
  13. @Controller
  14. @RequestMapping("/user")
  15. public class UserController {
  16.    @Autowired
  17.    private UserService userService;
  18.    @RequestMapping(value = "/getCodes", method = RequestMethod.GET, headers = "Accept=application/json",
  19.          produces = "application/json;charset=UTF-8;")
  20.    @ResponseBody
  21.    public UserVerificationCode getCodes(){
  22.       UserVerificationCode userVerificationCode = userService.getCode();
  23.       return userVerificationCode;
  24.    }
  25. }

10、mapper

  1. package mapper.user;
  2. import model.user.UserVerificationCode;
  3. public interface UserVerificationCodeMapper {
  4.     int deleteByPrimaryKey(String uuid);
  5.     int insert(UserVerificationCode record);
  6.     int insertSelective(UserVerificationCode record);
  7.     UserVerificationCode selectByPrimaryKey(String uuid);
  8.     int updateByPrimaryKeySelective(UserVerificationCode record);
  9.     int updateByPrimaryKey(UserVerificationCode record);
  10. }

11、service

  1. package service.impl;
  2. import mapper.user.UserVerificationCodeMapper;
  3. import model.user.UserVerificationCode;
  4. import org.springframework.beans.factory.annotation.Autowired;
  5. import org.springframework.stereotype.Service;
  6. import service.UserService;
  7. /**
  8.  * Author:LiHongMei
  9.  * Date:2017/1/9 15:05
  10.  */
  11. @Service("userService")
  12. public class UserServiceImpl implements UserService {
  13.    @Autowired
  14.    private UserVerificationCodeMapper userVerificationCodeMapper;
  15.    @Override
  16.    public UserVerificationCode getCode() {
  17.       return userVerificationCodeMapper.selectByPrimaryKey("1");
  18.    }
  19. }

12、test

  1. package controller.test;
  2. import controller.UserController;
  3. import model.user.UserVerificationCode;
  4. import org.junit.Before;
  5. import org.junit.Test;
  6. import org.junit.runner.RunWith;
  7. import org.springframework.beans.factory.annotation.Autowired;
  8. import org.springframework.mock.web.MockHttpServletRequest;
  9. import org.springframework.mock.web.MockHttpServletResponse;
  10. import org.springframework.test.context.ContextConfiguration;
  11. import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
  12. /**
  13.  * Author:LiHongMei
  14.  * Date:2017/1/9 15:14
  15.  */
  16. @RunWith(SpringJUnit4ClassRunner.class)
  17. @ContextConfiguration(locations = {"classpath:conf/applicationContext.xml", "classpath:conf/spring-mvc.xml",
  18.       "classpath:conf/mybatis-config.xml", "classpath:conf/spring-mybatis.xml"})
  19. public class UserControllerTest {
  20.    // 模拟request,response
  21.    private MockHttpServletRequest request;
  22.    private MockHttpServletResponse response;
  23.    // 执行测试方法之前初始化模拟request,response
  24.    @Before
  25.    public void setUp() {
  26.       request = new MockHttpServletRequest();
  27.       request.setCharacterEncoding("UTF-8");
  28.       response = new MockHttpServletResponse();
  29.    }
  30.    @Autowired
  31.    private UserController userController;
  32.    @Test
  33.    public void getCodes() throws Exception {
  34.       UserVerificationCode userVerificationCode = userController.getCodes();
  35.       System.out.println(userVerificationCode.toString());
  36.    }
  37. }

 

转载于:https://my.oschina.net/u/2289161/blog/1162490

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家自动化/article/detail/643283
推荐阅读
相关标签
  

闽ICP备14008679号