Spring提供了使用注释以特定间隔安排和执行任务的可能性,例如 @Scheduled
有没有方便的单元测试这种行为的方法?
当然我可以自己调用bean的方法,但是我想确保不会因为配置错误等问题而遇到多次执行等问题.
其他框架提供了自己快速转发时间的可能性.一个例子是Activiti,你可以打电话
org.activiti.engine.impl.util.ClockUtil.setCurrentTime(date)
Run Code Online (Sandbox Code Playgroud)
快进框架使用的时间.
春天有类似的东西吗?
基本上我想要做的是在单元测试中使用这样的东西(运行使用SpringJUnit4ClassRunner)
@Test public void testTaskScheduling() {
assertThat(someOtherBean.getSomeProperty(), is(equalTo(whatIinitiallyExpect)));
SpringClockUtil.setDate(dateInTwoHours)// This is what I am missing
SpringTaskExecutor.executeAllScheduledTasks() // Also missing
assertThat(someOtherBean.getSomeProperty(), is(equalTo(whatIexpectNow)));
}
Run Code Online (Sandbox Code Playgroud) 我们正在使用spring MVC + spring security + hibernate创建一个RESTful API.API可以生成JSON和HTML.为弹簧安全做一个好的错误处理让我很头疼:
身份验证可以通过各种方式进行:BasicAuth,通过POST请求中的不同参数以及Web登录.对于每个身份验证机制,<http>在spring security xml config 的namespace元素中声明了一个过滤器.
我们在自定义中处理所有弹簧异常HandlerExceptionResolver.这适用于我们的控制器中抛出的所有异常,但我不知道如何处理自定义spring安全过滤器中引发的自定义异常.由于Spring安全过滤器在我们调用任何控制器之前到来,因此我们没有看到我们在自定义spring安全过滤器中抛出的异常.
我在stackoverflow上找到了这个问题:
在Spring Security中使用自定义异常.但是我不明白他们在哪里处理那里抛出的异常.我们尝试了这种方法但我们的定制HandlerExceptionResolver没有被调用.而是向用户呈现由tomcat呈现的丑陋堆栈跟踪.
我们为什么需要这个?
可以激活和停用用户.如果它们被停用并尝试执行某些操作,我们希望返回带有自定义错误消息的JSON.这应该与弹簧安全性抛出时显示的不同AccessDeniedException.在AccessDeniedException某种程度上它使我们的HandlerExceptionResolver,但我不能跟着究竟如何.
可能的解决方案
我们考虑过使用a ExceptionTranslationFilter,但是当我们抛出自定义异常(在doFilter()方法的catch语句中设置断点)时,不会调用它.在我的理解中,应该调用这个catch块,并且应该使用认证入口点.
另一种可能性:我们可以做类似于ExceptionTranslationFilterspring安全过滤器链中的操作,并执行类似于它的AccessDeniedHandler操作:
RequestDispatcher dispatcher = request.getRequestDispatcher(errorPage);
dispatcher.forward(request, response);
Run Code Online (Sandbox Code Playgroud)
我们可以在请求中添加一些参数(错误代码,原因等),并让它指向一个控制器,它将处理JSON或HTML中的渲染.
以下是我们配置的简短摘录:
春季安全:
<http create-session="stateless" use-expressions="true" >
<!-- Try getting the authorization object from the request parameters. -->
<security:custom-filter ref="filter1" after="SECURITY_CONTEXT_FILTER"/>
<security:custom-filter ref="filter2" before="LOGOUT_FILTER"/>
<!-- Intercept certain URLS differently -->
<intercept-url pattern="/admin/**" access="hasRole('ROLE_ADMIN')" …Run Code Online (Sandbox Code Playgroud) 我想在我的tomcat 7服务器上使用springMVC和JPA(使用hibernate)(在我的Mac上本地运行).
我能够使用嵌入式H2数据库成功设置所有内容.
现在我切换到mysql并收到以下错误
java.lang.ClassNotFoundException: "com.mysql.jdbc.Driver"
org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1711)
org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1556)
Run Code Online (Sandbox Code Playgroud)
这表明tomcat无法找到java的mysql-connector.有很多关于如何将连接器添加到$ CATALINA_HOME/lib的教程.
在尝试对我的项目使用maven依赖项之后,我遵循了建议并将.jar文件复制到lib目录中:
$ ls $CATALINA_HOME/lib/mysql*.jar
/Users/david/Applications/tomcat/lib/mysql-connector-java-5.1.20-bin.jar
Run Code Online (Sandbox Code Playgroud)
我已经读取并执行了目录和文件的权限.
目前我无法弄清楚如何让tomcat知道jar.该文件夹包含在
$CATALINA_HOME/conf/catalina.properties
Run Code Online (Sandbox Code Playgroud)
我已多次重启服务器.
谢谢你的帮助.