zoukankan      html  css  js  c++  java
  • web 应用中访问 Spring 具体实现

    user=LF
    password=LF
    jdbcUrl=jdbc:oracle:thin:@localhost:1521:orcl
    driverClass=oracle.jdbc.driver.OracleDriver
    
    initialPoolSize=15
    maxPoolSize=30
    minPoolSize=5
    <?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:tx="http://www.springframework.org/schema/tx"
        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/tx 
        http://www.springframework.org/schema/tx/spring-tx.xsd
        http://www.springframework.org/schema/aop 
        http://www.springframework.org/schema/aop/spring-aop.xsd"> 
        
        <!-- 配置自动扫描的包 -->
        <context:component-scan base-package="com.zr.trasaction"></context:component-scan>
        
        <!-- 引用外部文件 -->
        <context:property-placeholder location="classpath:db.properties"/>
        
        <!-- 配置dataSource -->
        <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
            <property name="user" value="${user}"></property>
            <property name="password" value="${password}"></property>
            <property name="jdbcUrl" value="${jdbcUrl}"></property>
            <property name="driverClass" value="${driverClass}"></property>
            
            <property name="initialPoolSize" value="${initialPoolSize}"></property>
            <property name="maxPoolSize" value="${maxPoolSize}"></property>
            <property name="minPoolSize" value="${minPoolSize}"></property>
        </bean>
        <!-- 配置jdbcTemplate -->
        <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
            <property name="dataSource" ref="dataSource"></property>
        </bean>
        
        <!-- 配置事务管理器 -->
        <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
            <property name="dataSource" ref="dataSource"></property>
        </bean>
        <!-- 配置事务声明方式 -->
        <tx:annotation-driven transaction-manager="transactionManager"/>
        
    </beans>
    <?xml version="1.0" encoding="UTF-8"?>
    <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
      
      <context-param>
          <param-name>contextConfiguration</param-name>
          <param-value>/WEB-INF/applicationContext.xml</param-value>
      </context-param>
      
      <listener>
          <listener-class>org.springframework.web.context.ContextLoaderListener
          </listener-class>
      </listener>
      
      <servlet>
        <servlet-name>AServlet</servlet-name>
        <servlet-class>com.zr.trasaction.servlet.AServlet</servlet-class>
      </servlet>
    
      <servlet-mapping>
        <servlet-name>AServlet</servlet-name>
        <url-pattern>/AServlet</url-pattern>
      </servlet-mapping>
    
    </web-app>
    <?xml version="1.0" encoding="UTF-8"?>
    <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
      
      <context-param>
          <param-name>contextConfiguration</param-name>
          <param-value>/WEB-INF/applicationContext.xml</param-value>
      </context-param>
      
      <listener>
          <listener-class>org.springframework.web.context.ContextLoaderListener
          </listener-class>
      </listener>
      
      <servlet>
        <servlet-name>AServlet</servlet-name>
        <servlet-class>com.zr.trasaction.servlet.AServlet</servlet-class>
      </servlet>
    
      <servlet-mapping>
        <servlet-name>AServlet</servlet-name>
        <url-pattern>/AServlet</url-pattern>
      </servlet-mapping>
    
    </web-app>
    package com.zr.trasaction.entity;
    
    
    
    public class Amount {
        
        private String user;//用户名
        private double money;//金额
        public String getUser() {
            return user;
        }
        public void setUser(String user) {
            this.user = user;
        }
        public double getMoney() {
            return money;
        }
        public void setMoney(double money) {
            this.money = money;
        }
        public Amount() {
            super();
        }
        public Amount(String user, double money) {
            super();
            this.user = user;
            this.money = money;
        }
        @Override
        public String toString() {
            return "Amount [user=" + user + ", money=" + money + "]";
        }
        
        
        
    
    }
    package com.zr.trasaction.entity;
    
    public class BalanceException extends RuntimeException {
    
        private static final long serialVersionUID = 1L;
    
    
        public BalanceException() {
            super();
        }
    
        public BalanceException(String message) {
            super(message);
        }
    
        public BalanceException(String message, Throwable cause) {
            super(message, cause);
        }
    
        
        public BalanceException(Throwable cause) {
            super(cause);
        }
    
       
        protected BalanceException(String message, Throwable cause,
                                   boolean enableSuppression,
                                   boolean writableStackTrace) {
            super(message, cause, enableSuppression, writableStackTrace);
        }
    }
    package com.zr.trasaction.dao;
    
    public interface AmountDao {
    
        /**
         * 转出钱
         * @return
         */
        public boolean decreaseMoney(String username,double money) ;
        
        /**
         * 转入钱
         * @return
         */
        public boolean increaseMoney(String username,double money);
        
    }
    package com.zr.trasaction.daoImpl;
    
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.jdbc.core.JdbcTemplate;
    import org.springframework.stereotype.Repository;
    
    import com.zr.trasaction.dao.AmountDao;
    
    @Repository
    public class AmountDaoImpl implements AmountDao {
        @Autowired(required=true)
        private JdbcTemplate jdbcTemplate;
        
        public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {
            this.jdbcTemplate = jdbcTemplate;
        }
    
        @Override
        public boolean decreaseMoney(String username, double money) {
            
            String sql = "UPDATE TEST SET MONEY=MONEY-? WHERE USERNAME=?";
            int i = -1;
            i = jdbcTemplate.update(sql,money, username);
            if(i>0){
                return true;
            }
            return false;
        }
    
        @Override
        public boolean increaseMoney(String username, double money) {
            String sql = "UPDATE TEST SET MONEY=MONEY+? WHERE USERNAME=?";
            int i = -1;
            i = jdbcTemplate.update(sql,money, username);
            if(i>0){
                return true;
            }
            return false;
        }
    
    }
    package com.zr.trasaction.Service;
    
    import com.zr.trasaction.entity.Amount;
    
    public interface AmountService {
    
        /**
         * 转账业务
         * @param desAmount 扣钱的账户
         * @param incAmount    增加的账户
         * @param money 转账的金额
         * @return
         */
        public boolean transferMoneyService(Amount desAmount,Amount incAmount,double money);
        
    }
    package com.zr.trasaction.ServiceImpl;
    
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.jdbc.core.JdbcTemplate;
    import org.springframework.stereotype.Service;
    import org.springframework.transaction.annotation.Isolation;
    import org.springframework.transaction.annotation.Propagation;
    import org.springframework.transaction.annotation.Transactional;
    
    import com.zr.trasaction.Service.AmountService;
    import com.zr.trasaction.daoImpl.AmountDaoImpl;
    import com.zr.trasaction.entity.Amount;
    import com.zr.trasaction.entity.BalanceException;
    
    @Service("amountServiceImpl")
    public class AmountServiceImpl implements AmountService {
        @Autowired(required=true)
        private AmountDaoImpl amountDaoImpl;
        @Autowired(required=true)
        private JdbcTemplate jdbcTemplate;
    
        public void setAmountDaoImpl(AmountDaoImpl amountDaoImpl) {
            this.amountDaoImpl = amountDaoImpl;
        }
    
        public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {
            this.jdbcTemplate = jdbcTemplate;
        }
        /**
         *    REQUIRED(默认值):在有transaction状态下执行;如当前没有transaction,则创建新的transaction
         * 只读事务属性readOnly=true: 表示这个事务只读取数据但不更新数据, 这样可以帮助数据库引擎优化事务
         * 超时事务属性timeout=3: 事务在强制回滚之前可以保持多久. 这样可以防止长期运行的事务占用资源.单位为秒,一般不设置,使用默认的
         * noRollbackForClassName={"BalanceException"} 发生BalanceException异常不回滚
         */
        @Transactional(propagation=Propagation.REQUIRED,isolation=Isolation.READ_COMMITTED,readOnly=true,timeout=3/*,noRollbackForClassName={"BalanceException"}*/)
        @Override
        public boolean transferMoneyService(Amount desAmount, Amount incAmount,
                double money) {
            String sql = "SELECT MONEY FROM TEST WHERE USERNAME=?";
            double balance = jdbcTemplate.queryForObject(sql, Double.class, desAmount.getUser());
    
            boolean success1 = amountDaoImpl.decreaseMoney(desAmount.getUser(), money);
            boolean success2 = amountDaoImpl.increaseMoney(incAmount.getUser(), money);
            
            if(balance < money){
                throw new BalanceException("余额不足");
            }
            return success1 && success2;
        }
    
    }
    package com.zr.trasaction.servlet;
    
    import java.io.IOException;
    
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    import org.springframework.web.context.WebApplicationContext;
    import org.springframework.web.context.support.WebApplicationContextUtils;
    
    import com.zr.trasaction.Service.AmountService;
    import com.zr.trasaction.entity.Amount;
    
    public class AServlet extends HttpServlet {
    
        private static final long serialVersionUID = 1L;
    
        public void doGet(HttpServletRequest request, HttpServletResponse response)
                throws ServletException, IOException {
            
            WebApplicationContext wac = WebApplicationContextUtils.getRequiredWebApplicationContext(this.getServletContext());
            System.out.println(wac);
            Amount desAmount = new Amount("lf", 0);
            Amount incAmount = new Amount("tl", 0);
            AmountService impl = (AmountService) wac.getBean("amountServiceImpl");
            boolean isSuccess = impl.transferMoneyService(desAmount, incAmount, 10);
            System.out.println(isSuccess);
        }
    
        
        public void doPost(HttpServletRequest request, HttpServletResponse response)
                throws ServletException, IOException {
            
        }
    
    }
  • 相关阅读:
    PAT 甲级 1126 Eulerian Path (25 分)
    PAT 甲级 1126 Eulerian Path (25 分)
    PAT 甲级 1125 Chain the Ropes (25 分)
    PAT 甲级 1125 Chain the Ropes (25 分)
    PAT 甲级 1124 Raffle for Weibo Followers (20 分)
    PAT 甲级 1124 Raffle for Weibo Followers (20 分)
    PAT 甲级 1131 Subway Map (30 分)
    PAT 甲级 1131 Subway Map (30 分)
    AcWing 906. 区间分组 区间贪心
    AcWing 907. 区间覆盖 区间贪心
  • 原文地址:https://www.cnblogs.com/lantu1989/p/6369422.html
Copyright © 2011-2022 走看看