我之前有一个关于这个问题的帖子已经解决了.但是,自从使用自动连线bean和较少的XML配置重建项目后,我发现我正在重新审视此问题.我已按照我之前的项目实施此方式的方式,但它不起作用.有人可以帮助我解决为什么或我应该改变什么来使它工作?
我故意在插入用户详细信息方法中使用不存在的表名来故意抛出异常.但是,不会回滚插入用户和插入用户角色的语句.请帮忙.
我目前的注册设计是这样的.
部分servlet.xml中:
<context:component-scan base-package="com.doyleisgod.golfer.controllers"/>
<context:component-scan base-package="com.doyleisgod.golfer.dao"/>
<context:component-scan base-package="com.doyleisgod.golfer.services"/>
<context:component-scan base-package="com.doyleisgod.golfer.validators"/>
Run Code Online (Sandbox Code Playgroud)
部分应用程序上下文:
<context:annotation-config />
<tx:annotation-driven />
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName" value="${jdbc.driverClassName}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
</bean>
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"/>
</bean>
Run Code Online (Sandbox Code Playgroud)
注册控制器:
package com.doyleisgod.golfer.controllers;
import javax.validation.Valid;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.WebDataBinder;
import org.springframework.web.bind.annotation.InitBinder;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import com.doyleisgod.golfer.formdata.RegistrationForm;
import com.doyleisgod.golfer.services.IRegistrationService;
import com.doyleisgod.golfer.validators.RegistrationFormValidator;
/**
* …Run Code Online (Sandbox Code Playgroud) 我一直在看这个关于使用生成服务存根的soap lite教程WSDL URL.但是我的数据结构更复杂并且具有嵌套元素.本教程介绍了如何使用创建复杂结构 SOAP::Data.这看起来非常手动.
在像Java这样的其他语言中,很容易存根请求对象并使用方法调用来设置参数.有没有办法获得一个请求对象,然后我可以简单地对对象进行方法调用来设置参数,而不是"手动"使用SOAP::Data教程和SOAP::Data文档中的文件写出复杂的数据结构?
注: SOAP::Lite是不是 SOAP::WSDL.该SOAP::WSDL文件规定:
该模块具有大量已知错误,并未积极开发.此3.0版本旨在更新模块以通过新的Perls测试.这是对已依赖此模块的现有应用程序的服务.
所以当前支持的模块是SOAP::Lite或者XML::Compile::SOAP.
我希望创建一个能够识别数字中某些模式的程序.我不确定这是否需要算法或只是仔细考虑编程.我不是在找人提供源代码,只是一些发人深思的想法让我开始朝着正确的方向前进.
数字将固定长度为6位数字,从000000到999999.我猜每个数字都将作为数组的一部分存储.然后我想根据模式测试数字.
例如,假设我正在使用的3种模式
A A A A A A - would match such examples as 111111 , 222222, 333333 etc where
A B A B A B - would match such examples as 121212 , 454545, 919191 etc
A (A+1) (A+2) B (B+1) (B+2) - would match such examples as 123345, 789123, 456234
Run Code Online (Sandbox Code Playgroud)
我想我所坚持的部分是如何将整数数组的每个部分分配给一个值,如A或B.
我的初衷是将每个部分分配为一个单独的字母.因此,如果数组由1 3 5 4 6 8组成,那么我会创建一个类似的地图
A=1
B=3
C=5
D=4
E=6
F=8
Run Code Online (Sandbox Code Playgroud)
然后一些如何采取第一个模式,
AAAAAA
Run Code Online (Sandbox Code Playgroud)
并使用if(AAAAAA = ABCDEF)等测试,然后我们匹配AAAAAAA
如果没有,那么通过我的所有模式尝试(ABABAB = ABCDEF)等
在这种情况下,没有理由为什么分配给C的值不能与数字234874中的赋值相同.
我不确定这对任何人是否有意义,但我想我可以根据反馈改进我的问题.
总而言之,我正在寻找有关如何让程序接受一个6位数字的想法,并返回给我们匹配的模式.
解
在给出的评论之后,让我在下面的良好轨道上是我创建的最终解决方案.
package …Run Code Online (Sandbox Code Playgroud) 我相信我之前已经运行了这个,但是对于我的生活,我无法在perlrun或Google中找到任何参考.希望这里的一些perl boffins能够回答它.使用-ne开关运行perl one衬管时.是否有选项可以将perl编译的代码输出到控制台?
所以如果我跑:
crontab -l | perl -ne 'print if /^00/'
Run Code Online (Sandbox Code Playgroud)
然后Perl会将其编译为:
while(<>){
print if /^00/;
}
Run Code Online (Sandbox Code Playgroud)
我确信有一种方法可以让perl吐出它将要使用的代码,包括任何开始或结束块.希望有人知道如何.
在下面的代码中,当睡眠时,如果QUIT信号到来,睡眠将立即结束,最后一行代码将被执行.
#!/opt/tertio/localperl/bin/perl
use strict;
use warnings;
my $quit = 0;
$SIG{'QUIT'} = sub {
print "Please dont try to take thread dump as i am not java\n";
$quit++;
};
my $sleep = shift || 30;
print "I am going to sleep\n";
sleep($sleep);
print "I woke up so will exit, but someone tried to quit me $quit times\n";
Run Code Online (Sandbox Code Playgroud)
无论我设定多sleep长时间,一旦发出QUIT信号sleep结束并且程序继续.
有没有一种方法可以处理QUIT而不影响程序的当前运行,sleep只要它的意图持续下去?
作为网络应用程序的一部分,我正在尝试构建一个注册过程。验证流程后,需要执行三个 sql 语句。如果任何失败,那么它们都应该回滚。但是,如果我故意编写第三条sql失败(使用不存在的表名)。我看到抛出异常,但第一个和第二个 swl 语句没有回滚。
有人可以告诉我应该如何做吗?
来自我的 application-context.xml
<bean id="transactionManager"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"/>
</bean>
<bean id="userDAO" class="com.doyleisgod.golf.database.JdbcUserDao">
<property name="dataSource" ref="dataSource"></property>
</bean>
<bean id="registration" class="com.doyleisgod.golf.services.Registration"/>
<tx:annotation-driven />
Run Code Online (Sandbox Code Playgroud)
我的注册服务班
public class Registration implements IRegistration {
@Autowired JdbcUserDao userDAO;
@Override
@Transactional (rollbackFor = Exception.class)
public boolean registerUser(Object command) {
return userDAO.registerUser(command);
}
}
Run Code Online (Sandbox Code Playgroud)
我的userDAO注册方法
public boolean registerUser(Object command) {
try {
setUserCommand(command);
sql = "INSERT INTO users (USERNAME,PASSWORD, ENABLED)VALUES ('"+username+"', '"+EncryptedPassword+"', TRUE);";
getSimpleJdbcTemplate().update(sql);
sql = "INSERT INTO user_roles (USERNAME,AUTHORITY)VALUES ('"+username+"', 'ROLE_USER');";
getSimpleJdbcTemplate().update(sql); …Run Code Online (Sandbox Code Playgroud) 最近,我对正则表达式变得友好,并使用它们非常有效地完成了许多任务.与大多数perl一样,TIMTOWTDI使我的判断蒙上阴影.有时我可以使用相等运算符或绑定运算符.但有时候使用一个比另一个更合适吗?
首先是简化案例
my $name = 'Chris';
if ($name eq 'Chris') { print 'What a great name!'; }
if ($name =~/^Chris$/) { print 'Yip sure is a great name; }
Run Code Online (Sandbox Code Playgroud)
所以在这种情况下,这是最简化的,其中使用相等是较少的输入,但是在这个简化的示例中,对于一个或另一个有任何益处.
在一个稍微复杂的例子中
my $name = 'Christopher';
if ($name eq 'Chris' || $name eq 'Christopher') { print 'What a great name!'; }
if ($name =~ /^Chris(?:topher)?$/) { print 'Yip sure is a great name; }
Run Code Online (Sandbox Code Playgroud)
这里绑定操作符的输入较少.但是我不确定这个好处是否可能会占据另一个好处.
如果您使用固定值匹配整个字符串以使用相等运算符,并且如果匹配带有模式的字符串(例如任何5位数字符串)/\d{5}/然后使用绑定运算符,则通用规则也是如此.
在上面的例子中使用绑定运算符是不合适的.我很欣赏这些例子只是弥补,可能无法反映现实生活中的问题.然而,他们是我想要试图解释我的问题.
只要我使用Perl,我就已经知道了三种使用方法if.
if(condition){
"do this";
"do that";
}
Run Code Online (Sandbox Code Playgroud)
"do this" if condition;
Run Code Online (Sandbox Code Playgroud)
condition ? "do this" : "or this";
Run Code Online (Sandbox Code Playgroud)
但是我认为只有在你只执行一个命令时才能使用最后两个.但是最近我了解到,在使用第二个选项时,您可以通过用逗号分隔它们来执行多个命令.
perl -e '$count++, $var="Hello" if 4 < 5; print "COUNT: $count, VAR: $var\n"'
COUNT: 1, VAR: Hello
Run Code Online (Sandbox Code Playgroud)
我意识到用例仅限于此,但它引起了我的兴趣.我试图通过perldoc来查找记录此行为的语法,但是如果用逗号分隔,则无法看到解释可以使用多个命令的任何内容.
这种行为是否特定于以这种方式使用if语句,还是由于Perl的某些其他功能而起作用?如果有人能指出我关于行为的任何文件会很棒.
perl ×5
java ×2
spring ×2
algorithm ×1
equality ×1
object ×1
perl-module ×1
regex ×1
soap ×1
spring-mvc ×1
web-services ×1
wsdl ×1