Spring手动回滚事务

throw new RuntimeException();

或者  TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();

为什么不会滚呢??是对spring的事务机制就不明白。!!

默认spring 事务只在发生未被捕获的 RuntimeExcetpion时才回滚。
Spring Aop  异常捕获原理:被拦截的方法需显式抛出异常,并不能经任何处理,这样Aop代理才能捕获到方法的异常,才能进行回滚,默认情况下Aop只捕获RuntimeExcetpion的异常,但可以通过 配置来捕获特定的异常并回滚换句话说在service的方法中不使用try catch 或者在catch中最后加上throw new RuntimeExcetpion(),这样程序异常时才能被Aop捕获进而回滚

解决方案:
方案1.例如service层处理事务,那么service中的方法中不做异常捕获,或者在catch语句中最后增加throw new RuntimeExcetpion()语句,以便让Aop捕获异常再去回滚,并且在service上层(webservice客户端,view层action)要继续捕获这个异常并处理
方案2.在service层方法的catch语句中增加:TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();语句,手动回滚,这样上层就无需去处理异常(现在项目的做法)。

以上就介绍了spring-mybatis 转Spring手动回滚事务,包括了spring-mybatis方面的内容,希望对Java教程有兴趣的朋友有所帮助。

jsch channel exec Java命令失败

第二次碰到这个问题了,第一次是用jsch远程启动一个脚本,脚本中的java命令始终无法使用

这次是执行jps命令返回结果为空字符串,而secureCRT执行jps可以看见java进程。

  1. channel = session.openChannel(“exec”);
  2. ((ChannelExec) channel).setCommand(command);

最终改为

  1. final static public String importJavaProfile = “source /etc/profile;source ~/.bash_profile;source ~/.bashrc;”;
  1. sshHelperSend.execCmd(JmeterUtil.importJavaProfile + “jps”)

 

即引入环境变量文件,使java得以识别

部分页面f12导致ie浏览器崩溃

最近一个项目,客户要求是ie浏览器。所以开发就在ie上,免不了js等的调试,但是f12,ie就提示运行停止了,然后恢复了页面。

找了很久,没找到问题。想着将就着在chrome上调试吧,但是部分兼容性问题,必须在ie上调试啊。无赖,下定决心找一下ie究竟有什么问题。

几经折腾,我把项目的页面都精简了,就只有一个简单的页面,f12,没有问题了。嵌套个iframe,里面加载项目的页面,f12,崩溃。加载baidu,f12,没有问题。。。

google一下,找到个关键的,说是js重复引用,就会导致f12崩溃。

检查一下,我们项目没有重复引用。但是有个问题,我们项目是采用 sitemesh框架页面,每个被sitemesh的都会在head里面添加js的引用。

我感觉就是这的问题了,联想到ie的缓存。

赶紧在每个js和css后面加个动态参数。

f12,ok!!!

jenkinshudson email163邮箱和26邮箱成功配置总结

system admin e-mail address  这里设置要和发件人邮箱保持一致。

1.如果不保持一致报错如下图所示:

 

 

 

2.邮件保持一致的配置如下图所示:

 

 

 

 

 

3.如果smtp服务器开发配置不正确会报如下错误

比如163的邮箱配置成126的服务器开发smtp.126.com,那么将会报错。

如下图所示,将邮箱改为126也测试成功了。

 

 

 4.javax.mail.authenticationfailedexception: 535 error: authentication failed  

    535的错误是由于密码错误

jenkins docker镜像遇到的volume权限问题

image 在挂在数据卷的时候遇到了权限问题,如下, docker启动命令

docker run -d -v /root/jenkins:/var/jenkins_home -P --name jenkins-server jenkins

这个命令看似没有什么问题,但容器就是启动不起来,执行docker ps -a,查看container,如下,

[root@esslog-shqs-6 ~]# docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                     PORTS               NAMES
274d92964edb        jenkins             "/bin/tini -- /usr/lo"   2 minutes ago       Exited (1) 2 minutes ago                       jenkins-server

接着执行docker logs jenkins-server查看container日志,如下

Can not write to /var/jenkins_home/copy_reference_file.log. Wrong volume permissions?
touch: cannot touch ‘/var/jenkins_home/copy_reference_file.log’: Permission denied

日志中出现了一个Permission denied错误,,以我目前的功力还不清楚是什么问题造成的,但是在谈谈Docker Volume 之权限管理持续集成(Continuous integration)两篇博客中找到了答案,在执行docker run命令的时候增加一个-u参数,如下改进后的命令,

docker run -d -v /root/jenkins:/var/jenkins_home -u 0 -P --name jenkins-server jenkins

这命令的意思是覆盖容器中内置的帐号,该用外部传入,这里传入0代表的是root帐号Id。这样再启动的时候就应该没问题了。 如果按照上面做还是出现Permission denied错误,那么可以检查一下selinux状态,开启的情况下会导致一些服务安装、使用不成功。 查看selinux状态,

[root@localhost ~]# sestatus  
SELinux status:                 enabled  
SELinuxfs mount:                /sys/fs/selinux  
SELinux root directory:         /etc/selinux  
Loaded policy name:             targeted  
Current mode:                   enforcing  
Mode from config file:          enforcing  
Policy MLS status:              enabled  
Policy deny_unknown status:     allowed  
Max kernel policy version:      28

临时关闭,

[root@localhost ~]# setenforce 0

永久关闭,可以修改配置文件/etc/selinux/config,将其中SELINUX设置为disabled,如下,

[root@localhost ~]# cat /etc/selinux/config   

# This file controls the state of SELinux on the system.  
# SELINUX= can take one of these three values:  
#     enforcing - SELinux security policy is enforced.  
#     permissive - SELinux prints warnings instead of enforcing.  
#     disabled - No SELinux policy is loaded.  
#SELINUX=enforcing  
SELINUX=disabled  
# SELINUXTYPE= can take one of three two values:  
#     targeted - Targeted processes are protected,  
#     minimum - Modification of targeted policy. Only selected processes are protected.   
#     mls - Multi Level Security protection.  
SELINUXTYPE=targeted

[root@rdo ~]# sestatus  
SELinux status:                 disabled