`

导入导出时回滚(注解说明)

阅读更多

J2SE 提供的最后一个批注是 @SuppressWarnings。该批注的作用是给编译器一条指令,告诉它对被批注的代码元素内部的某些警告保持静默。 
一点背景:J2SE 5.0 为 Java 语言增加了几个新的特性,并且和它们一起增加了许多新的警告并承诺在将来增加更多的警告。您可以为 "javac" 增加 -Xlint 参数来控制是否报告这些警告(如上面的 @Deprecated 部分所示)。 
默认情况下,Sun 编译器以简单的两行的形式输出警告。通过添加 -Xlint:keyword 标记(例如 -Xlint:finally),您可以获得关键字类型错误的完整说明。通过在关键字前面添加一个破折号,写为 -Xlint:-keyword,您可以取消警告。(-Xlint 支持的关键字的完整列表可以在 javac 文档页面上找到。)

 

关键字  用途 
deprecation 使用了不赞成使用的类或方法时的警告 
unchecked 执行了未检查的转换时的警告,例如当使用集合时没有用泛型 (Generics) 来指定集合保存的类型。 
fallthrough 当 Switch 程序块直接通往下一种情况而没有 Break 时的警告。 
path 在类路径、源文件路径等中有不存在的路径时的警告。  
serial 当在可序列化的类上缺少 serialVersionUID 定义时的警告。  
finally 任何 finally 子句不能正常完成时的警告。 
all 关于以上所有情况的警告。

 

@SuppressWarnings 批注允许您选择性地取消特定代码段(即,类或方法)中的警告。其中的想法是当您看到警告时,您将调查它,如果您确定它不是问题,您就可以添加一个 @SuppressWarnings 批注,以使您不会再看到警告。虽然它听起来似乎会屏蔽潜在的错误,但实际上它将提高代码安全性,因为它将防止您对警告无动于衷 — 您看到的每一个警告都将值得注意。 

 

@SuppressWarnings 批注接收一个 "value" 变量,该变量是一个字符串数组,它指示将取消的警告。合法字符串的集合随编译器而变化,但在 JDK 上,可以传递给 -Xlint 的是相同的关键字集合(非常方便)。并且要求编译器忽略任何它们不能识别的关键字,这在您使用一些不同的编译器时非常方便。 
因为 @SuppressWarnings 批注仅接收一个参数,并为该参数使用了特殊的名称 "value",所以您可以选择省略 value=,作为一种方便的缩写: 
public class DeprecatedUser2 {
  @SuppressWarnings({"deprecation"})
   public static void main(String[] args) {
    DeprecatedExample2.foo();
  }
}

 

您可以将单个数组参数中的任意数量的字符串值传递给批注,并在任何级别上放置批注。例如,以下示例代码指示将取消整个类的 deprecation 警告,而仅在 main() 方法代码内取消 unchecked 和 fallthrough 警告: 

import java.util.*;

@SuppressWarnings({"deprecation"})
public class NonGenerics {

  @SuppressWarnings({"unchecked","fallthrough"})
public static void main(String[] args) {
    Runtime.runFinalizersOnExit();

    List list = new ArrayList();
    list.add("foo");
  }

  public static void foo() {
    List list = new ArrayList();
    list.add("foo");
  }
}

@SuppressWarnings 是否比前两个批注更有用?绝对是这样。不过,在 JDK 1.5.0 版本中还没有完全支持该批注,如果您用 1.5.0 来尝试它,那么它将类似无操作指令。调用 -Xlint:-deprecation 也没有任何效果。Sun 没有声明什么时候将增加支持,但它暗示这将在即将推出的一个 dot 版本中实现。 

更进一步 
如果您试图在 Javadocs 页面中查看这些属性,那么您可能很难找到它们。它们位于核心的 java.lang 包中,但有点隐蔽,它们出现在 Javadoc 类的最底端,列在 Exceptions 和 Errors 后面。 
注意到了附加在 SuppressWarnings 批注后面的陌生的批注 @Target 和 @Retention 了吗?这些称为元数据批注,它们描述了该批注在哪里适用。我将在本系列的第二篇文章中介绍它们,以及介绍如何将元数据批注应用到您自己的批注中。

 ----------------------------------------------------------------

spring 事务注解

默认遇到throw new RuntimeException("...");会回滚
需要捕获的throw new Exception("...");不会回滚

// 指定回滚
@Transactional(rollbackFor=Exception.class) 
    public void methodName() {
       // 不会回滚
       throw new Exception("...");
    } 
//指定不回滚
@Transactional(noRollbackFor=Exception.class)
    public ItimDaoImpl getItemDaoImpl() {
        // 会回滚
        throw new RuntimeException("注释");
    } 

    // 如果有事务,那么加入事务,没有的话新建一个(不写的情况下)
    @Transactional(propagation=Propagation.REQUIRED) 
    // 容器不为这个方法开启事务
    @Transactional(propagation=Propagation.NOT_SUPPORTED)
    // 不管是否存在事务,都创建一个新的事务,原来的挂起,新的执行完毕,继续执行老的事务
    @Transactional(propagation=Propagation.REQUIRES_NEW) 
    // 必须在一个已有的事务中执行,否则抛出异常
    @Transactional(propagation=Propagation.MANDATORY)
    // 必须在一个没有的事务中执行,否则抛出异常(与Propagation.MANDATORY相反)
    @Transactional(propagation=Propagation.NEVER) 
    // 如果其他bean调用这个方法,在其他bean中声明事务,那就用事务.如果其他bean没有声明事务,那就不用事务.
    @Transactional(propagation=Propagation.SUPPORTS) 
    
    /*
    public void methodName(){
       // 本类的修改方法 1
       update();
       // 调用其他类的修改方法
       otherBean.update();
       // 本类的修改方法 2
       update();
    }
    other失败了不会影响 本类的修改提交成功
    本类update的失败,other也失败
    */
@Transactional(propagation=Propagation.NESTED) 
// readOnly=true只读,不能更新,删除 
@Transactional (propagation = Propagation.REQUIRED,readOnly=true) 
// 设置超时时间
@Transactional (propagation = Propagation.REQUIRED,timeout=30)
// 设置数据库隔离级别
@Transactional (propagation = Propagation.REQUIRED,isolation=Isolation.DEFAULT)

 

例子:

  /***
  * 上传笔试成绩
  * @gbf

  * import org.springframework.transaction.annotation.Transactional;

  * 引入工具类
  */
 @SuppressWarnings("deprecation")
 @Transactional(rollbackFor = Exception.class)
 public void upload(){
  try {
   HttpServletResponse resp = ServletActionContext.getResponse();
   resp.setCharacterEncoding("UTF-8");
   resp.setContentType("text/html;charest=UTF-8");
   sysSetVO = (SysSetVO) ActionContext.getContext().getSession().getConstant.SESSION_ACTOR_KEY);
   String filepath="";
   if(file!=null){
         filepath=new UploadAction().upLoadFile(file,"signupBS",fileFileName);
   }
   System.out.println("校验开始");
   String path = ServletActionContext.getRequest().getContextPath();
   String addr = ServletActionContext.getRequest().getRemoteAddr();
   String port = ServletActionContext.getRequest().getServerPort()+"";
   URL url = new URL("http://"+addr+":"+port+path+"/"+filepath);
   URLConnection conn = url.openConnection(); 
   HSSFWorkbook workbook = new HSSFWorkbook(conn.getInputStream());
   HSSFSheet sheet = workbook.getSheetAt(0);
   int r = sheet.getLastRowNum();
   //下面开始验证数据格式
   for (int i = 2; i <= r; i++) {
    HSSFRow row = sheet.getRow(i);
    //准考证号
    HSSFCell cell0 = row.getCell((short) 1);
    String zkzcode = cell0.getStringCellValue();
    //判断该准考证号是否存在
    int cnt=0;
    cnt=this.signUpService.checkZkzCodeExist(zkzcode);
    if(cnt==0){
     throw new Exception();
    }
    //笔试成绩
    HSSFCell cell1 = row.getCell((short) 6);
    //String bscj = cell1.getStringCellValue();
    Double db = cell1.getNumericCellValue();
    BigDecimal bd = new BigDecimal(db);
    bd = bd.setScale(2,BigDecimal.ROUND_HALF_UP);
    //修改数据
    SignUpVO signUpVO1 = new SignUpVO();
    signUpVO1.setBscj(bd+"");
    signUpVO1.setZkzcode(zkzcode);
    this.signUpService.updateBscj(signUpVO1);
   }
   resp.getWriter().print("true");
  } catch (Exception e) {
   e.printStackTrace();
   
  }
 }

分享到:
评论

相关推荐

    Springboot+Poi实现Excel的导入导出

    - Spring Boot支持声明式事务管理,可以在方法上添加@Transactional注解,确保在出现异常时能回滚事务,保持数据的一致性。 4. **性能优化**: - 对于大量数据,可以采用流式处理方式,避免一次性加载所有数据到...

    oracle OCP认证题库 007,047,042,043 带个人注解翻译

    7. **数据迁移与升级**:了解数据泵(Data Pump)工具用于数据导入导出,以及数据库升级和迁移的步骤和策略。 8. **集群技术**:如果涉及047(可能与RAC相关),则需理解Oracle Real Application Clusters(RAC)的...

    (PTC内部中文资料)windchill jca创建树 windchill9系统,业务,功能详细介绍9-产品

    - **注解文本**:提供额外的信息或说明。 #### 产品配置管理概念 产品配置管理涉及对产品及其各个版本进行管理的过程,确保可以准确追踪和控制产品的不同配置。 - **成品配置**:指产品的一个特定版本,即一组...

    在简单的Web界面或桌面应用程序中协作和标记任何类型的数据、图像、文本或文档。___下载.zip

    9. **API集成**:可能提供API接口,允许与其他系统或服务(如CRM、数据分析平台等)集成,实现数据的导入导出。 这个“通用数据工具”可能对数据分析师、研究人员、教育工作者、项目经理或任何需要处理和协作多种...

    speing batch demo

    它支持读取、处理和写入大量数据,适合于离线、大数据量的场景,如数据库的导入导出、数据清洗和转换等。 2. **项目结构** 在这个"spring batch demo"中,项目通常会包含以下关键部分: - `src/main/resources`: ...

    SSM项目中学教务管理系统.zip

    4. 成绩管理:记录和查询学生的考试成绩,支持批量导入和导出。 5. 教学计划:制定学期的教学计划,包括课程安排、考试时间表等。 6. 考勤管理:记录学生的出勤情况,支持统计分析。 7. 用户权限管理:根据角色分配...

    主题:在Spring中结合Dbunit对Dao进行集成单元测试

    Dbunit是一款强大的Java库,它扩展了JUnit,为数据库提供了结构化数据的导入和导出,使得测试更加方便和可靠。下面将详细介绍如何在Spring中使用Dbunit进行Dao的集成单元测试。 首先,我们需要理解集成测试的概念。...

    MyEclipse5.1下建立Hibernate

    3. **导入Hibernate库**:在项目导航器中,右键点击“WEB-INF” &gt; “Libraries”,选择“Add External JARs”,找到你的Hibernate库文件(如hibernate-core.jar,hibernate-entitymanager.jar等),将其导入到项目中...

    objectbox-examples,新的移动数据库objectbox的示例.zip

    - **数据备份**:如何导出数据库文件进行备份,以及如何在需要时导入恢复数据。 12. **安全性**: - **数据加密**:ObjectBox允许对数据库进行加密,保护用户数据的安全。 通过研究这个"objectbox-examples...

    osgi-tutorial(7).zip

    Bundle包含了一组相关的类和资源,它们通过声明导出和导入包来互相通信。这种模块化的结构使得开发者能够独立地开发、测试和部署每个模块,提高了代码的重用性和可维护性。 Blueprint XML配置文件在OSGi环境中定义...

    SQL Server 考试试卷

    8. DTS(Data Transformation Services)是SQL Server中用于数据导入导出、转换和分发的服务。 9. 事务是数据库操作的基本单元,具有原子性,要么全部执行,要么全部回滚。 10. SQL Server中的约束类型包括非空...

    MyBatis使用与实现.pdf

    在进行数据迁移或数据导出导入时,MyBatis 的灵活性能够很好地支持这些需求。 3. **报表系统** 报表系统通常需要复杂的 SQL 查询,MyBatis 的动态 SQL 特性非常适合这种场景。 4. **微服务架构** 在微服务...

    jeesuite-libs-其他

    无需修改XML读写分离,事务内操作强制读主库基于注解自动缓存管理(所有查询方法结果自动缓存、自动更新,事务回滚缓存同步回滚机制)自动缓存实现基于jeesuite-cache和spring-data-redis分页组件敏感操作拦截...

    弹簧测试数据库

    继承Spring的`@RunWith(SpringRunner.class)`注解,声明`@SpringBootTest`或`@DataJpaTest`注解来启动Spring容器,并利用`@Transactional`注解确保每次测试都在独立的事务中运行,测试结束后自动回滚,避免影响其他...

    dbunit-spring-demo:DBUnit Utility演示(使用Spring)

    DBUnit提供了数据导入/导出功能,以及一系列的数据操作方法,如INSERT、UPDATE、DELETE等。它支持多种数据库格式,包括CSV、XML和Excel,使得数据的准备和验证变得简单易行。在Spring框架中整合DBUnit,可以利用...

    spring-non-web-datafix

    在非Web环境中,Spring Batch常用于数据修复,如更新错误数据、批量导入导出等。 2. **JDBC模板**: Spring JDBC模块提供了一个抽象层,简化了对Java数据库连接(JDBC)的使用。在数据修复场景下,可以使用...

    springDBUnitSample

    它提供了一种方法来导入和导出数据库数据,通常是在测试前后加载和清理数据。DBUnit支持多种数据格式,如XML、CSV、YAML等,可以方便地定义测试数据集。 3. **集成Spring与DBUnit**:在Spring项目中使用DBUnit,...

Global site tag (gtag.js) - Google Analytics